diff options
author | Eike Rathke <erack@redhat.com> | 2021-07-06 14:05:58 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2021-07-06 17:54:07 +0200 |
commit | 5e3bfdeb5ea4878a2546a7e1e16d0f3b6482024e (patch) | |
tree | 3271241e0a9fbe3566a0c9d2484e57e3a40fe68d /unotools | |
parent | 544e279f981afee23e3c02d62adb2c377ef6700f (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.cxx | 48 |
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 ); } |