diff options
Diffstat (limited to 'writerfilter/source/dmapper/ConversionHelper.cxx')
-rw-r--r-- | writerfilter/source/dmapper/ConversionHelper.cxx | 691 |
1 files changed, 691 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx new file mode 100644 index 000000000000..b8988110c59e --- /dev/null +++ b/writerfilter/source/dmapper/ConversionHelper.cxx @@ -0,0 +1,691 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include <ConversionHelper.hxx> +#include <com/sun/star/table/BorderLine.hpp> +#include <com/sun/star/lang/Locale.hpp> +#include <com/sun/star/text/HoriOrientation.hpp> +#include <com/sun/star/style/NumberingType.hpp> +#include <ooxml/resourceids.hxx> +#include <tools/color.hxx> +#include <rtl/ustrbuf.hxx> +#include <algorithm> +#include <functional> + +using namespace com::sun::star; + +namespace writerfilter { +namespace dmapper{ +namespace ConversionHelper{ + +#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L)) + +//line definitions in 1/100 mm +#define LINE_WIDTH_0 2 +#define LINE_WIDTH_1 36 +#define LINE_WIDTH_2 89 +#define LINE_WIDTH_3 142 +#define LINE_WIDTH_4 177 +#define LINE_WIDTH_5 18 + +#define DOUBLE_LINE0_OUT LINE_WIDTH_0 +#define DOUBLE_LINE0_IN LINE_WIDTH_0 +#define DOUBLE_LINE0_DIST LINE_WIDTH_1 + +#define DOUBLE_LINE1_OUT LINE_WIDTH_1 +#define DOUBLE_LINE1_IN LINE_WIDTH_1 +#define DOUBLE_LINE1_DIST LINE_WIDTH_1 + +#define DOUBLE_LINE2_OUT LINE_WIDTH_2 +#define DOUBLE_LINE2_IN LINE_WIDTH_2 +#define DOUBLE_LINE2_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE3_OUT LINE_WIDTH_2 +#define DOUBLE_LINE3_IN LINE_WIDTH_1 +#define DOUBLE_LINE3_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE4_OUT LINE_WIDTH_1 +#define DOUBLE_LINE4_IN LINE_WIDTH_2 +#define DOUBLE_LINE4_DIST LINE_WIDTH_1 + +#define DOUBLE_LINE5_OUT LINE_WIDTH_3 +#define DOUBLE_LINE5_IN LINE_WIDTH_2 +#define DOUBLE_LINE5_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE6_OUT LINE_WIDTH_2 +#define DOUBLE_LINE6_IN LINE_WIDTH_3 +#define DOUBLE_LINE6_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE7_OUT LINE_WIDTH_0 +#define DOUBLE_LINE7_IN LINE_WIDTH_0 +#define DOUBLE_LINE7_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE8_OUT LINE_WIDTH_1 +#define DOUBLE_LINE8_IN LINE_WIDTH_0 +#define DOUBLE_LINE8_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE9_OUT LINE_WIDTH_2 +#define DOUBLE_LINE9_IN LINE_WIDTH_0 +#define DOUBLE_LINE9_DIST LINE_WIDTH_2 + +#define DOUBLE_LINE10_OUT LINE_WIDTH_3 +#define DOUBLE_LINE10_IN LINE_WIDTH_0 +#define DOUBLE_LINE10_DIST LINE_WIDTH_2 + +sal_Int32 MakeBorderLine( sal_Int32 nSprmValue, table::BorderLine& rToFill ) +{ + //TODO: Lines are always solid + //Border + //borders are defined as: + // 0x XX XX XX XX + // || || || || + // || || || ---- Line width in 1/8 pt + // || || || + // || || ------- Line type: 0 - none 1 - single ... 25 - engrave 3D and 64 - 230 page borders + // || || + // || ---------- Line color + // || + // ------------- seven bits line space + // -------------- first bit: with shading + sal_Int16 nLineThicknessTwip = (sal_Int16)((nSprmValue & 0xff) * 20)/8L ; + sal_Int32 nLineType = ((nSprmValue & 0xff00) >> 8); + sal_Int32 nLineColor = (nSprmValue & 0xff0000)>>16; + sal_Int32 nLineDistance = (((nSprmValue & 0x3f000000)>>24) * 2540 + 36)/72L; + sal_Int32 nLineThickness = TWIP_TO_MM100(nLineThicknessTwip); + MakeBorderLine( nLineThickness, nLineType, nLineColor, rToFill, false); + return nLineDistance; +} +void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineType, + sal_Int32 nLineColor, + table::BorderLine& rToFill, bool bIsOOXML ) +{ + static const sal_Int32 aBorderDefColor[] = + { + COL_AUTO, COL_BLACK, COL_LIGHTBLUE, COL_LIGHTCYAN, COL_LIGHTGREEN, + COL_LIGHTMAGENTA, COL_LIGHTRED, COL_YELLOW, COL_WHITE, COL_BLUE, + COL_CYAN, COL_GREEN, COL_MAGENTA, COL_RED, COL_BROWN, COL_GRAY, + COL_LIGHTGRAY + }; + //no auto color for borders + if(!nLineColor) + ++nLineColor; + if(!bIsOOXML && sal::static_int_cast<sal_uInt32>(nLineColor) < + sizeof(aBorderDefColor) / sizeof(nLineColor)) + nLineColor = aBorderDefColor[nLineColor]; + + enum eBorderCode + { + single0, single1, single2, single3, single4, single5, + double0, double1, double2, double3, double4, double5, double6, + double7, double8, double9, double10, + none + } eCodeIdx = none; + + // Map to our border types, we should use of one equal line + // thickness, or one of smaller thickness. If too small we + // can make the defecit up in additional white space or + // object size + switch(nLineType) + { + // First the single lines + case 1: break; + case 2: + case 5: + // and the unsupported special cases which we map to a single line + case 6: + case 7: + case 8: + case 9: + case 22: + // or if in necessary by a double line + case 24: + case 25: + if( nLineThickness < 10) + eCodeIdx = single0;// 1 Twip for us + else if( nLineThickness < 20) + eCodeIdx = single5;// 10 Twips for us + else if (nLineThickness < 50) + eCodeIdx = single1;// 20 Twips + else if (nLineThickness < 80) + eCodeIdx = single2;// 50 + else if (nLineThickness < 100) + eCodeIdx = single3;// 80 + else if (nLineThickness < 150) + eCodeIdx = single4;// 100 + // Hack: for the quite thick lines we must paint double lines, + // because our singles lines don't come thicker than 5 points. + else if (nLineThickness < 180) + eCodeIdx = double2;// 150 + else + eCodeIdx = double5;// 180 + break; + // then the shading beams which we represent by a double line + case 23: + eCodeIdx = double1; + break; + // then the double lines, for which we have good matches + case 3: + case 10: //Don't have tripple so use double + if (nLineThickness < 60) + eCodeIdx = double0;// 22 Twips for us + else if (nLineThickness < 135) + eCodeIdx = double7;// some more space + else if (nLineThickness < 180) + eCodeIdx = double1;// 60 + else + eCodeIdx = double2;// 150 + break; + case 11: + eCodeIdx = double4;// 90 Twips for us + break; + case 12: + case 13: //Don't have thin thick thin, so use thick thin + if (nLineThickness < 87) + eCodeIdx = double8;// 71 Twips for us + else if (nLineThickness < 117) + eCodeIdx = double9;// 101 + else if (nLineThickness < 166) + eCodeIdx = double10;// 131 + else + eCodeIdx = double5;// 180 + break; + case 14: + if (nLineThickness < 46) + eCodeIdx = double0;// 22 Twips for us + else if (nLineThickness < 76) + eCodeIdx = double1;// 60 + else if (nLineThickness < 121) + eCodeIdx = double4;// 90 + else if (nLineThickness < 166) + eCodeIdx = double2;// 150 + else + eCodeIdx = double6;// 180 + break; + case 15: + case 16: //Don't have thin thick thin, so use thick thin + if (nLineThickness < 46) + eCodeIdx = double0;// 22 Twips for us + else if (nLineThickness < 76) + eCodeIdx = double1;// 60 + else if (nLineThickness < 121) + eCodeIdx = double3;// 90 + else if (nLineThickness < 166) + eCodeIdx = double2;// 150 + else + eCodeIdx = double5;// 180 + break; + case 17: + if (nLineThickness < 46) + eCodeIdx = double0;// 22 Twips for us + else if (nLineThickness < 72) + eCodeIdx = double7;// 52 + else if (nLineThickness < 137) + eCodeIdx = double4;// 90 + else + eCodeIdx = double6;// 180 + break; + case 18: + case 19: //Don't have thin thick thin, so use thick thin + if (nLineThickness < 46) + eCodeIdx = double0;// 22 Twips for us + else if (nLineThickness < 62) + eCodeIdx = double7;// 52 + else if (nLineThickness < 87) + eCodeIdx = double8;// 71 + else if (nLineThickness < 117) + eCodeIdx = double9;// 101 + else if (nLineThickness < 156) + eCodeIdx = double10;// 131 + else + eCodeIdx = double5;// 180 + break; + case 20: + if (nLineThickness < 46) + eCodeIdx = single1; // 20 Twips for us + else + eCodeIdx = double1;// 60 + break; + case 21: + eCodeIdx = double1;// 60 Twips for us + break; + case 0: + case 255: + eCodeIdx = none; + break; + default: + eCodeIdx = single0; + break; + } + struct BorderDefinition + { + sal_Int16 nOut; + sal_Int16 nIn; + sal_Int16 nDist; + }; + + + static const BorderDefinition aLineTab[] = + { + /* 0*/ { LINE_WIDTH_0, 0, 0 }, + /* 1*/ { LINE_WIDTH_1, 0, 0 }, + /* 2*/ { LINE_WIDTH_2, 0, 0 }, + /* 3*/ { LINE_WIDTH_3, 0, 0 }, + /* 4*/ { LINE_WIDTH_4, 0, 0 }, + /* 5*/ { LINE_WIDTH_5, 0, 0 }, + /* 6*/ { DOUBLE_LINE0_OUT, DOUBLE_LINE0_IN, DOUBLE_LINE0_DIST }, + /* 7*/ { DOUBLE_LINE1_OUT, DOUBLE_LINE1_IN, DOUBLE_LINE1_DIST }, + /* 8*/ { DOUBLE_LINE2_OUT, DOUBLE_LINE2_IN, DOUBLE_LINE2_DIST }, + /* 9*/ { DOUBLE_LINE3_OUT, DOUBLE_LINE3_IN, DOUBLE_LINE3_DIST }, + /*10*/ { DOUBLE_LINE4_OUT, DOUBLE_LINE4_IN, DOUBLE_LINE4_DIST }, + /*11*/ { DOUBLE_LINE5_OUT, DOUBLE_LINE5_IN, DOUBLE_LINE5_DIST }, + /*12*/ { DOUBLE_LINE6_OUT, DOUBLE_LINE6_IN, DOUBLE_LINE6_DIST }, + /*13*/ { DOUBLE_LINE7_OUT, DOUBLE_LINE7_IN, DOUBLE_LINE7_DIST }, + /*14*/ { DOUBLE_LINE8_OUT, DOUBLE_LINE8_IN, DOUBLE_LINE8_DIST }, + /*15*/ { DOUBLE_LINE9_OUT, DOUBLE_LINE9_IN, DOUBLE_LINE9_DIST }, + /*16*/ { DOUBLE_LINE10_OUT,DOUBLE_LINE10_IN,DOUBLE_LINE10_DIST}, + /*17*/ { 0, 0, 0 } + }; + + rToFill.Color = nLineColor; + if( nLineType == 1) + { + rToFill.InnerLineWidth = 0; + rToFill.OuterLineWidth = sal_Int16(nLineThickness); + rToFill.LineDistance = 0; + + } + else + { + rToFill.InnerLineWidth = aLineTab[eCodeIdx].nIn; + rToFill.OuterLineWidth = aLineTab[eCodeIdx].nOut; + rToFill.LineDistance = aLineTab[eCodeIdx].nDist; + } +} + +void lcl_SwapQuotesInField(::rtl::OUString &rFmt) +{ + //Swap unescaped " and ' with ' and " + sal_Int32 nLen = rFmt.getLength(); + ::rtl::OUStringBuffer aBuffer( rFmt.getStr() ); + const sal_Unicode* pFmt = rFmt.getStr(); + for (sal_Int32 nI = 0; nI < nLen; ++nI) + { + if ((pFmt[nI] == '\"') && (!nI || pFmt[nI-1] != '\\')) + aBuffer.setCharAt(nI, '\''); + else if ((pFmt[nI] == '\'') && (!nI || pFmt[nI-1] != '\\')) + aBuffer.setCharAt(nI, '\"'); + } + rFmt = aBuffer.makeStringAndClear(); +} +bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos) +{ + return ( + (nPos == rFmt.getLength() - 1) || + ( + (rFmt.getStr()[nPos+1] != 'M') && + (rFmt.getStr()[nPos+1] != 'm') + ) + ); +} + +::rtl::OUString ConvertMSFormatStringToSO( + const ::rtl::OUString& rFormat, lang::Locale& rLocale, bool bHijri) +{ + ::rtl::OUString sFormat(rFormat); + lcl_SwapQuotesInField(sFormat); + + //#102782#, #102815#, #108341# & #111944# have to work at the same time :-) + bool bForceJapanese(false); + bool bForceNatNum(false); + sal_Int32 nLen = sFormat.getLength(); + sal_Int32 nI = 0; +// const sal_Unicode* pFormat = sFormat.getStr(); + ::rtl::OUStringBuffer aNewFormat( sFormat.getStr() ); + while (nI < nLen) + { + if (aNewFormat.charAt(nI) == '\\') + nI++; + else if (aNewFormat.charAt(nI) == '\"') + { + ++nI; + //While not at the end and not at an unescaped end quote + while ((nI < nLen) && (!(aNewFormat.charAt(nI) == '\"') && (aNewFormat.charAt(nI-1) != '\\'))) + ++nI; + } + else //normal unquoted section + { + sal_Unicode nChar = aNewFormat.charAt(nI); + if (nChar == 'O') + { + aNewFormat.setCharAt(nI, 'M'); + bForceNatNum = true; + } + else if (nChar == 'o') + { + aNewFormat.setCharAt(nI, 'm'); + bForceNatNum = true; + } + else if ((nChar == 'A') && lcl_IsNotAM(sFormat, nI)) + { + aNewFormat.setCharAt(nI, 'D'); + bForceNatNum = true; + } + else if ((nChar == 'g') || (nChar == 'G')) + bForceJapanese = true; + else if ((nChar == 'a') && lcl_IsNotAM(sFormat, nI)) + bForceJapanese = true; + else if (nChar == 'E') + { + if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'E')) + { + //todo: this cannot be the right way to replace a part of the string! + aNewFormat.setCharAt( nI, 'Y' ); + aNewFormat.setCharAt( nI + 1, 'Y' ); + aNewFormat.insert(nI + 2, ::rtl::OUString::createFromAscii("YY")); + nLen+=2; + nI+=3; + } + bForceJapanese = true; + } + else if (nChar == 'e') + { + if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'e')) + { + //todo: this cannot be the right way to replace a part of the string! + aNewFormat.setCharAt( nI, 'y' ); + aNewFormat.setCharAt( nI + 1, 'y' ); + aNewFormat.insert(nI + 2, ::rtl::OUString::createFromAscii("yy")); + nLen+=2; + nI+=3; + } + bForceJapanese = true; + } + else if (nChar == '/') + { + // MM We have to escape '/' in case it's used as a char + //todo: this cannot be the right way to replace a part of the string! + aNewFormat.setCharAt( nI, '\\' ); + aNewFormat.insert(nI + 1, ::rtl::OUString::createFromAscii("/")); + nI++; + nLen++; + } + } + ++nI; + } + + if (bForceNatNum) + bForceJapanese = true; + + if (bForceJapanese) + { + rLocale.Language = ::rtl::OUString::createFromAscii("ja"); + rLocale.Country = ::rtl::OUString::createFromAscii("JP"); + } + + if (bForceNatNum) + { + aNewFormat.insert( 0, ::rtl::OUString::createFromAscii("[NatNum1][$-411]")); + } + + if (bHijri) + { + aNewFormat.insert( 0, ::rtl::OUString::createFromAscii("[~hijri]")); + } + return aNewFormat.makeStringAndClear(); + +} +/*------------------------------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int32 convertTwipToMM100(sal_Int32 _t) +{ + return TWIP_TO_MM100( _t ); +} +/*-- 09.08.2007 09:34:44--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int32 convertEMUToMM100(sal_Int32 _t) +{ + return _t / 360; +} + +/*-- 21.11.2006 08:47:12--------------------------------------------------- + contains a color from 0xTTRRGGBB to 0xTTRRGGBB + -----------------------------------------------------------------------*/ +sal_Int32 ConvertColor(sal_Int32 nWordColor) +{ + sal_uInt8 + r(static_cast<sal_uInt8>(nWordColor&0xFF)), + g(static_cast<sal_uInt8>(((nWordColor)>>8)&0xFF)), + b(static_cast<sal_uInt8>((nWordColor>>16)&0xFF)), + t(static_cast<sal_uInt8>((nWordColor>>24)&0xFF)); + sal_Int32 nRet = (t<<24) + (r<<16) + (g<<8) + b; + return nRet; +} +/*-- 27.06.2007 13:42:32--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int16 convertTableJustification( sal_Int32 nIntValue ) +{ + sal_Int16 nOrient = text::HoriOrientation::LEFT_AND_WIDTH; + switch( nIntValue ) + { + case 1 : nOrient = text::HoriOrientation::CENTER; break; + case 2 : nOrient = text::HoriOrientation::RIGHT; break; + case 0 : + //no break + default:; + + } + return nOrient; +} +/*-- 06.08.2007 15:27:30--------------------------------------------------- + conversion form xsd::DateTime + [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] + -----------------------------------------------------------------------*/ +com::sun::star::util::DateTime convertDateTime( const ::rtl::OUString& rDateTimeString ) +{ + util::DateTime aRet( 0, 0, 0, 0, 1, 1, 1901 ); + // + sal_Int32 nIndex = 0; + ::rtl::OUString sDate( rDateTimeString.getToken( 0, 'T', nIndex )); + sal_Int32 nDateIndex = 0; + aRet.Year = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32(); + if( nDateIndex > 0) + aRet.Month = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32(); + if( nDateIndex > 0) + aRet.Day = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32(); + ::rtl::OUString sTime; + if(nIndex > 0) + { + sTime = ( rDateTimeString.getToken( 0, 'Z', nIndex )); + sal_Int32 nTimeIndex = 0; + aRet.Hours = (sal_uInt16)sTime.getToken( 0, ':', nTimeIndex ).toInt32(); + if( nTimeIndex > 0) + aRet.Minutes = (sal_uInt16)sTime.getToken( 0, ':', nTimeIndex ).toInt32(); + if( nTimeIndex > 0) + { + ::rtl::OUString sSeconds = sTime.getToken( 0, ':', nTimeIndex ); + nTimeIndex = 0; + aRet.Seconds = (sal_uInt16)sSeconds.getToken( 0, '.', nTimeIndex ).toInt32(); + aRet.HundredthSeconds = (sal_uInt16)sSeconds.getToken( 0, '.', nTimeIndex ).toInt32(); + } + +// todo: ignore time offset for a while - there's no time zone available +// nIndex = 0; +// ::rtl::OUString sOffset( rDateTimeString.getToken( 1, 'Z', nIndex )); +// if( sOffset.getLength() ) +// { +// add hour and minute offset and increase/decrease date if necessary +// } + } + return aRet; +} +/*-- 05.03.2008 09:10:13--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int16 ConvertNumberingType(sal_Int32 nNFC) +{ + sal_Int16 nRet; + switch(nNFC) + { + case NS_ooxml::LN_Value_ST_NumberFormat_decimal: + case 0: + nRet = style::NumberingType::ARABIC; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman: + case 1: + nRet = style::NumberingType::ROMAN_UPPER; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman: + case 2: + nRet = style::NumberingType::ROMAN_LOWER; + break; + case 3: + nRet = style::NumberingType::CHARS_UPPER_LETTER_N; + break; + case 4: + nRet = style::NumberingType::CHARS_LOWER_LETTER_N; + break; + case 5: + nRet = style::NumberingType::ARABIC; + break;//ORDINAL + case NS_ooxml::LN_Value_ST_NumberFormat_bullet: + case 23: + case 25: + nRet = style::NumberingType::CHAR_SPECIAL; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_none: + case 255: + nRet = style::NumberingType::NUMBER_NONE; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter: + nRet = style::NumberingType::CHARS_UPPER_LETTER; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter: + nRet = style::NumberingType::CHARS_LOWER_LETTER; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_iroha: + nRet = style::NumberingType::IROHA_HALFWIDTH_JA; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth: + nRet = style::NumberingType::IROHA_FULLWIDTH_JA; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_aiueo: + nRet = style::NumberingType::AIU_HALFWIDTH_JA; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth: + nRet = style::NumberingType::AIU_FULLWIDTH_JA; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_hebrew2: + nRet = style::NumberingType::CHARS_HEBREW; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_thaiLetters: + nRet = style::NumberingType::CHARS_THAI; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_russianLower: + nRet = style::NumberingType::CHARS_CYRILLIC_LOWER_LETTER_RU; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_russianUpper: + nRet = style::NumberingType::CHARS_CYRILLIC_UPPER_LETTER_RU; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese: + case NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle: + nRet = style::NumberingType::CIRCLE_NUMBER; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional: + nRet = style::NumberingType::TIAN_GAN_ZH; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac: + nRet = style::NumberingType::DI_ZI_ZH; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_ganada: + nRet = style::NumberingType::HANGUL_SYLLABLE_KO; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_chosung: + nRet = style::NumberingType::HANGUL_JAMO_KO; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital: + case NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting: + case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2: + nRet = style::NumberingType::NUMBER_HANGUL_KO; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional: + nRet = style::NumberingType::NUMBER_UPPER_ZH_TW; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha: + nRet = style::NumberingType::CHARS_ARABIC; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_hindiVowels: + nRet = style::NumberingType::CHARS_NEPALI; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal: + nRet = style::NumberingType::NUMBER_TRADITIONAL_JA; + break; + case NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting: + case NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting: + case NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting: + case NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital: + nRet = style::NumberingType::NUMBER_LOWER_ZH; + break; + default: nRet = style::NumberingType::ARABIC; + } +/* TODO: Lots of additional values are available - some are supported in the I18 framework + NS_ooxml::LN_Value_ST_NumberFormat_ordinal = 91682; + NS_ooxml::LN_Value_ST_NumberFormat_cardinalText = 91683; + NS_ooxml::LN_Value_ST_NumberFormat_ordinalText = 91684; + NS_ooxml::LN_Value_ST_NumberFormat_hex = 91685; + NS_ooxml::LN_Value_ST_NumberFormat_chicago = 91686; + NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth = 91691; + NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth = 91692; + NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand = 91694; + NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircle = 91695; + NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth2 = 91696; + NS_ooxml::LN_Value_ST_NumberFormat_decimalZero = 91699; + NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop = 91703; + NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen = 91704; + NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional = 91709; + NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCountingThousand = 91712; + NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseDigital = 91713; + NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified = 91715; + NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand = 91716; + NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal = 91719; + NS_ooxml::LN_Value_ST_NumberFormat_vietnameseCounting = 91721; + NS_ooxml::LN_Value_ST_NumberFormat_numberInDash = 91725; + NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad: + NS_ooxml::LN_Value_ST_NumberFormat_hebrew1 = 91726; + NS_ooxml::LN_Value_ST_NumberFormat_hindiConsonants = 91731; + NS_ooxml::LN_Value_ST_NumberFormat_hindiNumbers = 91732; + NS_ooxml::LN_Value_ST_NumberFormat_hindiCounting = 91733; + NS_ooxml::LN_Value_ST_NumberFormat_thaiNumbers = 91735; + NS_ooxml::LN_Value_ST_NumberFormat_thaiCounting = 91736;*/ + return nRet; +} + + +} // namespace ConversionHelper +} //namespace dmapper +} //namespace writerfilter |