summaryrefslogtreecommitdiff
path: root/unotools
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2021-07-06 14:05:58 +0200
committerEike Rathke <erack@redhat.com>2021-07-06 17:54:07 +0200
commit5e3bfdeb5ea4878a2546a7e1e16d0f3b6482024e (patch)
tree3271241e0a9fbe3566a0c9d2484e57e3a40fe68d /unotools
parent544e279f981afee23e3c02d62adb2c377ef6700f (diff)
Related: tdf#125035 Introduce LongDateOrder and handle YDM in DateFormatter
This fixes also unotools/source/i18n/localedatawrapper.cxx:1473: LocaleDataWrapper::scanDateOrder: no magic applicable lv-LV requested lv-LV loaded that is the only locale with a YDM long date order. Change-Id: I776b8706bf5bd3ec11cc46d38fd3613c8df7519f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118482 Tested-by: Jenkins Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'unotools')
-rw-r--r--unotools/source/i18n/localedatawrapper.cxx48
1 files changed, 37 insertions, 11 deletions
diff --git a/unotools/source/i18n/localedatawrapper.cxx b/unotools/source/i18n/localedatawrapper.cxx
index 9765cec1062a..fb70c0657a73 100644
--- a/unotools/source/i18n/localedatawrapper.cxx
+++ b/unotools/source/i18n/localedatawrapper.cxx
@@ -691,12 +691,12 @@ DateOrder LocaleDataWrapper::getDateOrder() const
return nDateOrder;
}
-DateOrder LocaleDataWrapper::getLongDateOrder() const
+LongDateOrder LocaleDataWrapper::getLongDateOrder() const
{
return nLongDateOrder;
}
-DateOrder LocaleDataWrapper::scanDateOrderImpl( const OUString& rCode ) const
+LongDateOrder LocaleDataWrapper::scanDateOrderImpl( const OUString& rCode ) const
{
// Only some european versions were translated, the ones with different
// keyword combinations are:
@@ -760,18 +760,40 @@ DateOrder LocaleDataWrapper::scanDateOrderImpl( const OUString& rCode ) const
}
// compare with <= because each position may equal rCode.getLength()
if ( nDay <= nMonth && nMonth <= nYear )
- return DateOrder::DMY; // also if every position equals rCode.getLength()
+ return LongDateOrder::DMY; // also if every position equals rCode.getLength()
else if ( nMonth <= nDay && nDay <= nYear )
- return DateOrder::MDY;
+ return LongDateOrder::MDY;
else if ( nYear <= nMonth && nMonth <= nDay )
- return DateOrder::YMD;
+ return LongDateOrder::YMD;
+ else if ( nYear <= nDay && nDay <= nMonth )
+ return LongDateOrder::YDM;
else
{
if (areChecksEnabled())
{
outputCheckMessage( appendLocaleInfo( "LocaleDataWrapper::scanDateOrder: no magic applicable" ) );
}
- return DateOrder::DMY;
+ return LongDateOrder::DMY;
+ }
+}
+
+static DateOrder getDateOrderFromLongDateOrder( LongDateOrder eLong )
+{
+ switch (eLong)
+ {
+ case LongDateOrder::YMD:
+ return DateOrder::YMD;
+ break;
+ case LongDateOrder::DMY:
+ return DateOrder::DMY;
+ break;
+ case LongDateOrder::MDY:
+ return DateOrder::MDY;
+ break;
+ case LongDateOrder::YDM:
+ default:
+ assert(!"unhandled LongDateOrder to DateOrder");
+ return DateOrder::DMY;
}
}
@@ -786,7 +808,8 @@ void LocaleDataWrapper::loadDateOrders()
{
outputCheckMessage( appendLocaleInfo( "LocaleDataWrapper::getDateOrdersImpl: no date formats" ) );
}
- nDateOrder = nLongDateOrder = DateOrder::DMY;
+ nDateOrder = DateOrder::DMY;
+ nLongDateOrder = LongDateOrder::DMY;
return;
}
// find the edit (21), a default (medium preferred),
@@ -844,16 +867,19 @@ void LocaleDataWrapper::loadDateOrders()
}
nEdit = nDef;
}
- DateOrder nDF = scanDateOrderImpl( pFormatArr[nEdit].Code );
+ LongDateOrder nDO = scanDateOrderImpl( pFormatArr[nEdit].Code );
if ( pFormatArr[nEdit].Type == KNumberFormatType::LONG )
{ // normally this is not the case
- nLongDateOrder = nDateOrder = nDF;
+ nLongDateOrder = nDO;
+ nDateOrder = getDateOrderFromLongDateOrder(nDO);
}
else
{
- nDateOrder = nDF;
+ // YDM should not occur in a short/medium date (i.e. no locale has
+ // that) and is nowhere handled.
+ nDateOrder = getDateOrderFromLongDateOrder(nDO);
if ( nLong == -1 )
- nLongDateOrder = nDF;
+ nLongDateOrder = nDO;
else
nLongDateOrder = scanDateOrderImpl( pFormatArr[nLong].Code );
}