diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 4c14323..4be957e 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -715,6 +715,7 @@ SvNumberformat::SvNumberformat(String& rString, } else if ( lcl_SvNumberformat_IsBracketedPrefix( eSymbolType ) ) { + LanguageType eLang = LANGUAGE_DONTKNOW; switch ( eSymbolType ) { case BRACKET_SYMBOLTYPE_COLOR : @@ -807,13 +808,13 @@ SvNumberformat::SvNumberformat(String& rString, else { xub_StrLen nTmp = 2; - LanguageType eLang = ImpGetLanguageType( sStr, nTmp ); + eLang = ImpGetLanguageType( sStr, nTmp ); if ( eLang == LANGUAGE_DONTKNOW ) { bCancel = TRUE; // break for nCheckPos = nPosOld; } - else + else if ( eLang != 0 ) { sStr.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "$-" ) ); sStr += String::CreateFromInt32( sal_Int32( eLang ), 16 ).ToUpperAscii(); @@ -826,12 +827,19 @@ SvNumberformat::SvNumberformat(String& rString, if ( !bCancel ) { rString.Erase(nPosOld,nPos-nPosOld); - rString.Insert(sStr,nPosOld); - nPos = nPosOld + sStr.Len(); - rString.Insert(']', nPos); - rString.Insert('[', nPosOld); - nPos += 2; - nPosOld = nPos; // position before string + if ( eLang != 0 ) + { + rString.Insert(sStr,nPosOld); + nPos = nPosOld + sStr.Len(); + rString.Insert(']', nPos); + rString.Insert('[', nPosOld); + nPos += 2; + nPosOld = nPos; // position before string + } + else + { + nPos = nPosOld; // Excel LCID removed + } } } } while ( !bCancel && lcl_SvNumberformat_IsBracketedPrefix( eSymbolType ) ); @@ -1220,6 +1228,16 @@ short SvNumberformat::ImpNextSymbol(String& rString, { if ( rString.GetChar(nPos) == '-' ) { // [$-xxx] locale + if ( rString.GetChar(nPos+2) == '0' && rString.GetChar(nPos+3) == '7' ) // calendar type code "07" = Thai + { + rString.InsertAscii( "[~buddhist]", nPos+9 ); + nLen += 11; + } + if ( rString.GetChar(nPos+1) == 'D' ) // numeral shape code "D" = Thai digits + { + rString.InsertAscii( "[NatNum1]", nPos+9 ); + nLen += 9; + } sSymbol.EraseAllChars('['); eSymbolType = BRACKET_SYMBOLTYPE_LOCALE; eState = SsGetPrefix; @@ -4211,6 +4229,7 @@ String SvNumberformat::GetMappedFormatstring( nSem++; String aPrefix; + bool LCIDInserted = FALSE; if ( !bDefaults ) { @@ -4244,14 +4263,6 @@ String SvNumberformat::GetMappedFormatstring( } const SvNumberNatNum& rNum = NumFor[n].GetNatNum(); - // The Thai T NatNum modifier during Xcl export. - if (rNum.IsSet() && rNum.GetNatNum() == 1 && - rKeywords[NF_KEY_THAI_T].EqualsAscii( "T") && - MsLangId::getRealLanguage( rNum.GetLang()) == - LANGUAGE_THAI) - { - aPrefix += 't'; // must be lowercase, otherwise taken as literal - } USHORT nAnz = NumFor[n].GetnAnz(); if ( nSem && (nAnz || aPrefix.Len()) ) @@ -4311,6 +4322,25 @@ String SvNumberformat::GetMappedFormatstring( aStr += '"'; } break; + case NF_SYMBOLTYPE_CALDEL : + if ( pStr[j+1].EqualsAscii("buddhist") ) + { + //aStr.InsertAscii( "[$-", aStr.Len() ); + aStr.InsertAscii( "[$-", 0 ); + if ( rNum.IsSet() && rNum.GetNatNum() == 1 && + MsLangId::getRealLanguage( rNum.GetLang() ) == + LANGUAGE_THAI ) + { + aStr.InsertAscii( "D07041E]", 3 ); // date in Thai digit, Buddhist era + } + else + { + aStr.InsertAscii( "107041E]", 3 ); // date in Arabic digit, Buddhist era + } + j = j+2; + } + LCIDInserted = TRUE; + break; default: aStr += pStr[j]; } @@ -4318,6 +4348,15 @@ String SvNumberformat::GetMappedFormatstring( } } } + // The Thai T NatNum modifier during Xcl export. + if (rNum.IsSet() && rNum.GetNatNum() == 1 && + rKeywords[NF_KEY_THAI_T].EqualsAscii( "T") && + MsLangId::getRealLanguage( rNum.GetLang()) == + LANGUAGE_THAI && !LCIDInserted ) + { + + aStr.InsertAscii( "[$-D00041E]", 0 ); // number in Thai digit + } } for ( ; nSub<4 && bDefault[nSub]; ++nSub ) { // append empty subformats