diff options
Diffstat (limited to 'svl')
-rw-r--r-- | svl/qa/unit/svl.cxx | 21 | ||||
-rw-r--r-- | svl/source/numbers/zforlist.cxx | 23 |
2 files changed, 34 insertions, 10 deletions
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx index 8eb3cf4b6dfa..707754ac920f 100644 --- a/svl/qa/unit/svl.cxx +++ b/svl/qa/unit/svl.cxx @@ -220,6 +220,19 @@ void Test::testNumberFormat() nullptr }; +// Following aren't in range of NF_DATETIME_START and NF_DATETIME_END +// see enum NfIndexTableOffset in svl/inc/svl/zforlist.hxx + const char* pDateTimeExt1[] = { + "MM/DD/YYYY HH:MM AM/PM", + nullptr + }; + + const char* pDateTimeExt2[] = { + "YYYY-MM-DD HH:MM:SS", + "YYYY-MM-DD\"T\"HH:MM:SS", + nullptr + }; + const char* pBoolean[] = { "BOOLEAN", nullptr @@ -240,13 +253,15 @@ void Test::testNumberFormat() { NF_SCIENTIFIC_START, NF_SCIENTIFIC_END, 2, pScientific }, { NF_PERCENT_START, NF_PERCENT_END, 2, pPercent }, { NF_FRACTION_START, NF_FRACTION_END, 2, pFraction }, - { NF_FRACTION_3D, NF_FRACTION_100, 7, pFractionExt }, { NF_CURRENCY_START, NF_CURRENCY_END, 6, pCurrency }, { NF_DATE_START, NF_DATE_END, 21, pDate }, { NF_TIME_START, NF_TIME_END, 7, pTime }, { NF_DATETIME_START, NF_DATETIME_END, 2, pDateTime }, { NF_BOOLEAN, NF_BOOLEAN, 1, pBoolean }, - { NF_TEXT, NF_TEXT, 1, pText } + { NF_TEXT, NF_TEXT, 1, pText }, + { NF_DATETIME_SYS_DDMMYYYY_HHMM, NF_DATETIME_SYS_DDMMYYYY_HHMM, 1, pDateTimeExt1 }, + { NF_FRACTION_3D, NF_FRACTION_100, 7, pFractionExt }, + { NF_DATETIME_ISO_YYYYMMDD_HHMMSS, NF_DATETIME_ISO_YYYYMMDDTHHMMSS, 2, pDateTimeExt2 } }; SvNumberFormatter aFormatter(m_xContext, eLang); @@ -267,7 +282,7 @@ void Test::testNumberFormat() CPPUNIT_ASSERT_MESSAGE("Number format entry is expected, but doesn't exist.", p); OUString aCode = p->GetFormatstring(); - CPPUNIT_ASSERT_EQUAL( aCode.toUtf8() , OString( aTests[i].pCodes[j-nStart] ) ); + CPPUNIT_ASSERT_EQUAL( OString( aTests[i].pCodes[j-nStart] ), aCode.toUtf8()); } } diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx index 7243d0f7105c..1e7738caaf20 100644 --- a/svl/source/numbers/zforlist.cxx +++ b/svl/source/numbers/zforlist.cxx @@ -93,11 +93,14 @@ using namespace ::std; static_assert( ZF_STANDARD_TEXT == NF_STANDARD_FORMAT_TEXT, "definition mismatch" ); +static_assert( NF_INDEX_TABLE_RESERVED_START == i18npool::nStopPredefinedFormatIndex, + "NfIndexTableOffset does not match i18npool's locale data predefined format code index bounds."); + static_assert( NF_INDEX_TABLE_ENTRIES <= i18npool::nFirstFreeFormatIndex, "NfIndexTableOffset crosses i18npool's locale data reserved format code index bounds.\n" "You will need to adapt all locale data files defining index values " "(formatIndex=\"...\") in that range and increment those and when done " - "adjust nFirstFreeFormatIndex in i18npool/reservedconstants.hxx"); + "adjust nFirstFreeFormatIndex in include/i18npool/reservedconstants.hxx"); /* Locale that is set if an unknown locale (from another system) is loaded of * legacy documents. Can not be SYSTEM because else, for example, a German "DM" @@ -156,6 +159,7 @@ static sal_uInt32 const indexTable[NF_INDEX_TABLE_ENTRIES] = { ZF_STANDARD_DATETIME + 1, // NF_DATETIME_SYS_DDMMYYYY_HHMMSS ZF_STANDARD_LOGICAL, // NF_BOOLEAN ZF_STANDARD_TEXT, // NF_TEXT + ZF_STANDARD_DATETIME + 4, // NF_DATETIME_SYS_DDMMYYYY_HHMM ZF_STANDARD_FRACTION + 2, // NF_FRACTION_3D ZF_STANDARD_FRACTION + 3, // NF_FRACTION_2 ZF_STANDARD_FRACTION + 4, // NF_FRACTION_4 @@ -1954,15 +1958,15 @@ SvNumberformat* SvNumberFormatter::ImpInsertFormat( const css::i18n::NumberForma sal_uInt32 nPos, bool bAfterChangingSystemCL, sal_Int16 nOrgIndex ) { - SAL_WARN_IF( NF_INDEX_TABLE_LOCALE_DATA_DEFAULTS <= rCode.Index && rCode.Index < NF_INDEX_TABLE_ENTRIES, + SAL_WARN_IF( NF_INDEX_TABLE_RESERVED_START <= rCode.Index && rCode.Index < NF_INDEX_TABLE_ENTRIES, "svl.numbers", "i18npool locale '" << maLanguageTag.getBcp47() << "' uses reserved formatIndex value " << rCode.Index << ", next free: " << NF_INDEX_TABLE_ENTRIES << " Please see description in include/svl/zforlist.hxx at end of enum NfIndexTableOffset"); - assert( (rCode.Index < NF_INDEX_TABLE_LOCALE_DATA_DEFAULTS || NF_INDEX_TABLE_ENTRIES <= rCode.Index) && + assert( (rCode.Index < NF_INDEX_TABLE_RESERVED_START || NF_INDEX_TABLE_ENTRIES <= rCode.Index) && "reserved formatIndex, see warning above"); OUString aCodeStr( rCode.Code ); - if ( rCode.Index < NF_INDEX_TABLE_LOCALE_DATA_DEFAULTS && + if ( rCode.Index < NF_INDEX_TABLE_RESERVED_START && rCode.Usage == css::i18n::KNumberFormatUsage::CURRENCY && rCode.Index != NF_CURRENCY_1000DEC2_CCC ) { // strip surrounding [$...] on automatic currency @@ -1999,7 +2003,7 @@ SvNumberformat* SvNumberFormatter::ImpInsertFormat( const css::i18n::NumberForma } return nullptr; } - if ( rCode.Index >= NF_INDEX_TABLE_LOCALE_DATA_DEFAULTS ) + if ( rCode.Index >= NF_INDEX_TABLE_RESERVED_START ) { sal_uInt32 nCLOffset = nPos - (nPos % SV_COUNTRY_LANGUAGE_OFFSET); sal_uInt32 nKey = ImpIsEntry( aCodeStr, nCLOffset, ActLnge ); @@ -2717,6 +2721,11 @@ void SvNumberFormatter::ImpGenerateFormats( sal_uInt32 CLOffset, bool bNoAdditio ImpInsertFormat( aFormatSeq[nIdx], CLOffset + ZF_STANDARD_DATETIME+1 /* NF_DATETIME_SYS_DDMMYYYY_HHMMSS */ ); + // DD.MM.YYYY HH:MM System + nIdx = ImpGetFormatCodeIndex( aFormatSeq, NF_DATETIME_SYS_DDMMYYYY_HHMM ); + ImpInsertFormat( aFormatSeq[nIdx], + CLOffset + ZF_STANDARD_DATETIME+4 /* NF_DATETIME_SYS_DDMMYYYY_HHMM */ ); + const NfKeywordTable & rKeyword = pFormatScanner->GetKeywords(); i18n::NumberFormatCode aSingleFormatCode; aSingleFormatCode.Usage = i18n::KNumberFormatUsage::DATE_TIME; @@ -2855,7 +2864,7 @@ void SvNumberFormatter::ImpGenerateAdditionalFormats( sal_uInt32 CLOffset, SAL_WARN( "svl.numbers", "ImpGenerateAdditionalFormats: too many formats" ); break; // for } - if ( rFormat.Index < NF_INDEX_TABLE_LOCALE_DATA_DEFAULTS && + if ( rFormat.Index < NF_INDEX_TABLE_RESERVED_START && rFormat.Index != NF_CURRENCY_1000DEC2_CCC ) { // Insert only if not already inserted, but internal index must be // above so ImpInsertFormat can distinguish it. @@ -2890,7 +2899,7 @@ void SvNumberFormatter::ImpGenerateAdditionalFormats( sal_uInt32 CLOffset, SAL_WARN( "svl.numbers", "ImpGenerateAdditionalFormats: too many formats" ); break; // for } - if ( rFormat.Index >= NF_INDEX_TABLE_LOCALE_DATA_DEFAULTS ) + if ( rFormat.Index >= NF_INDEX_TABLE_RESERVED_START ) { if ( SvNumberformat* pNewFormat = ImpInsertFormat( rFormat, nPos+1, bAfterChangingSystemCL ) ) |