diff options
Diffstat (limited to 'xmloff/source/style/xmlnumfi.cxx')
-rw-r--r-- | xmloff/source/style/xmlnumfi.cxx | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx index 902e42171420..e611c144f290 100644 --- a/xmloff/source/style/xmlnumfi.cxx +++ b/xmloff/source/style/xmlnumfi.cxx @@ -244,7 +244,8 @@ enum SvXMLStyleAttrTokens XML_TOK_STYLE_ATTR_TRANSL_FORMAT, XML_TOK_STYLE_ATTR_TRANSL_LANGUAGE, XML_TOK_STYLE_ATTR_TRANSL_COUNTRY, - XML_TOK_STYLE_ATTR_TRANSL_STYLE + XML_TOK_STYLE_ATTR_TRANSL_STYLE, + XML_TOK_STYLE_ATTR_TRANSL_SPELLOUT }; enum SvXMLStyleElemAttrTokens @@ -522,6 +523,8 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleAttrTokenMap() // not defined in ODF { XML_NAMESPACE_NUMBER, XML_TRANSLITERATION_SCRIPT, XML_TOK_STYLE_ATTR_TRANSL_SCRIPT }, { XML_NAMESPACE_NUMBER, XML_TRANSLITERATION_COUNTRY, XML_TOK_STYLE_ATTR_TRANSL_COUNTRY }, { XML_NAMESPACE_NUMBER, XML_TRANSLITERATION_STYLE, XML_TOK_STYLE_ATTR_TRANSL_STYLE }, + { XML_NAMESPACE_LO_EXT, XML_TRANSLITERATION_SPELLOUT, XML_TOK_STYLE_ATTR_TRANSL_SPELLOUT }, + { XML_NAMESPACE_NUMBER, XML_TRANSLITERATION_SPELLOUT, XML_TOK_STYLE_ATTR_TRANSL_SPELLOUT }, XML_TOKEN_MAP_END }; @@ -1393,6 +1396,7 @@ SvXMLNumFormatContext::SvXMLNumFormatContext( SvXMLImport& rImport, { LanguageTagODF aLanguageTagODF; css::i18n::NativeNumberXmlAttributes aNatNumAttr; + OUString aSpellout; bool bAttrBool(false); sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; @@ -1444,6 +1448,9 @@ SvXMLNumFormatContext::SvXMLNumFormatContext( SvXMLImport& rImport, case XML_TOK_STYLE_ATTR_TRANSL_FORMAT: aNatNumAttr.Format = sValue; break; + case XML_TOK_STYLE_ATTR_TRANSL_SPELLOUT: + aSpellout = sValue; + break; case XML_TOK_STYLE_ATTR_TRANSL_LANGUAGE: aNatNumAttr.Locale.Language = sValue; break; @@ -1463,30 +1470,36 @@ SvXMLNumFormatContext::SvXMLNumFormatContext( SvXMLImport& rImport, nFormatLang = LANGUAGE_SYSTEM; //! error handling for unknown locales? } - if ( !aNatNumAttr.Format.isEmpty() ) + if ( !aNatNumAttr.Format.isEmpty() || !aSpellout.isEmpty() ) { - SvNumberFormatter* pFormatter = pData->GetNumberFormatter(); - if ( pFormatter ) - { - LanguageTag aLanguageTag( OUString(), aNatNumAttr.Locale.Language, + LanguageTag aLanguageTag( OUString(), aNatNumAttr.Locale.Language, OUString(), aNatNumAttr.Locale.Country); - aNatNumAttr.Locale = aLanguageTag.getLocale( false); + aNatNumAttr.Locale = aLanguageTag.getLocale( false); + + // NatNum12 spell out formula (cardinal, ordinal, ordinal-feminine etc.) + if ( !aSpellout.isEmpty() ) + { + aFormatCode.append( "[NatNum12 " ); + aFormatCode.append( aSpellout ); + } else { + SvNumberFormatter* pFormatter = pData->GetNumberFormatter(); + if ( !pFormatter ) return; sal_Int32 nNatNum = pFormatter->GetNatNum()->convertFromXmlAttributes( aNatNumAttr ); aFormatCode.append( "[NatNum" ); aFormatCode.append( nNatNum ); + } - LanguageType eLang = aLanguageTag.getLanguageType( false); - if ( eLang == LANGUAGE_DONTKNOW ) - eLang = LANGUAGE_SYSTEM; //! error handling for unknown locales? - if ( eLang != nFormatLang && eLang != LANGUAGE_SYSTEM ) - { - aFormatCode.append( "][$-" ); - // language code in upper hex: - aFormatCode.append(OUString::number(static_cast<sal_uInt16>(eLang), 16).toAsciiUpperCase()); - } - aFormatCode.append( ']' ); + LanguageType eLang = aLanguageTag.getLanguageType( false ); + if ( eLang == LANGUAGE_DONTKNOW ) + eLang = LANGUAGE_SYSTEM; //! error handling for unknown locales? + if ( eLang != nFormatLang && eLang != LANGUAGE_SYSTEM ) + { + aFormatCode.append( "][$-" ); + // language code in upper hex: + aFormatCode.append(OUString::number(static_cast<sal_uInt16>(eLang), 16).toAsciiUpperCase()); } + aFormatCode.append( ']' ); } } |