diff options
author | Zhe Wang <wangzcdl@apache.org> | 2012-09-07 04:46:35 +0000 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2013-03-12 23:21:41 +0100 |
commit | ef23b47e887908161d980f3e6f6d321f18acca77 (patch) | |
tree | 1255bbf912ed6038ffb4539c45cce3301799912e | |
parent | 5908e9012491d53bba8670d37088e78153915e8d (diff) |
Resolves: #i120773 Numbering lost when saving or opening a ppt file
* subversion/main/editeng/inc/editeng/svxenum.hxx
Define some numbering types supported by MS ppt
* subversion/main/filter/source/msfilter/svdfppt.cxx
Mapping added MS numbering types to Symphony numbering types
* subversion/main/sd/source/filter/eppt/epptso.cxx
Export added MS numbering types
Patch by: Yin Bing <steve.yin.aoo@gmail.com>
Suggested by: Wang Zhe <kingwisemmx@gmail.com>
Found by: Yin Bing <steve.yin.aoo@gmail.com>
Review by: Wang Zhe <kingwisemmx@gmail.com>(cherry picked from commit 39e9cae1ac9b7944c9df0642a193b042a1b68266)
Signed-off-by: Fridrich Štrba <fridrich.strba@bluewin.ch>
Conflicts:
editeng/inc/editeng/svxenum.hxx
sd/source/filter/eppt/epptso.cxx
Change-Id: Ic8a9406fd1b58e5cec5c5adc28bf0190ccb87315
-rw-r--r-- | editeng/inc/editeng/svxenum.hxx | 14 | ||||
-rw-r--r-- | filter/source/msfilter/svdfppt.cxx | 57 | ||||
-rw-r--r-- | sd/source/filter/eppt/epptso.cxx | 5 | ||||
-rw-r--r-- | sd/source/filter/eppt/pptx-text.cxx | 44 |
4 files changed, 120 insertions, 0 deletions
diff --git a/editeng/inc/editeng/svxenum.hxx b/editeng/inc/editeng/svxenum.hxx index ff751b0a82f9..f8e2cd53413e 100644 --- a/editeng/inc/editeng/svxenum.hxx +++ b/editeng/inc/editeng/svxenum.hxx @@ -211,6 +211,20 @@ enum SvxExtNumType SVX_NUM_BITMAP, SVX_NUM_CHARS_UPPER_LETTER_N, // Counts from a-z, aa-zz, aaa-zzz SVX_NUM_CHARS_LOWER_LETTER_N + SVX_NUM_TRANSLITERATION, + SVX_NUM_NATIVE_NUMBERING, + SVX_NUM_FULL_WIDTH_ARABIC, + SVX_NUM_CIRCLE_NUMBER, + SVX_NUM_NUMBER_LOWER_ZH, + SVX_NUM_NUMBER_UPPER_ZH, + SVX_NUM_NUMBER_UPPER_ZH_TW, + SVX_NUM_TIAN_GAN_ZH, + SVX_NUM_DI_ZI_ZH, + SVX_NUM_NUMBER_TRADITIONAL_JA, + SVX_NUM_AIU_FULLWIDTH_JA, + SVX_NUM_AIU_HALFWIDTH_JA, + SVX_NUM_IROHA_FULLWIDTH_JA, + SVX_NUM_IROHA_HALFWIDTH_JA }; enum SvxCompareMode diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index ba1063786ed7..94bf34b89937 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -3531,6 +3531,63 @@ sal_Bool PPTNumberFormatCreator::ImplGetExtNumberFormat( SdrPowerPointImport& rM rNumberFormat.SetSuffix( String( RTL_CONSTASCII_USTRINGPARAM( ")" ) ) ); } break; + case 16: // Simplified Chinese. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_UPPER_ZH ); + } + break; + case 17: // Simplified Chinese with single-byte period. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_UPPER_ZH ); + rNumberFormat.SetSuffix( String( RTL_CONSTASCII_USTRINGPARAM( "." ) ) ); + } + break; + case 18: // Double byte circle numbers. + case 19: // Wingdings white circle numbers. + case 20: // Wingdings black circle numbers. + { + rNumberFormat.SetNumberingType( SVX_NUM_CIRCLE_NUMBER ); + } + break; + case 21: // Traditional Chinese. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_UPPER_ZH_TW ); + } + break; + case 22: // Traditional Chinese with single-byte period. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_UPPER_ZH_TW ); + rNumberFormat.SetSuffix( String( RTL_CONSTASCII_USTRINGPARAM( "." ) ) ); + } + break; + case 26: // Japanese/Korean. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_LOWER_ZH ); + } + break; + case 27: // Japanese/Korean with single-byte period. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_LOWER_ZH ); + rNumberFormat.SetSuffix( String( RTL_CONSTASCII_USTRINGPARAM( "." ) ) ); + } + break; + case 28: // Double-byte Arabic numbers. + { + rNumberFormat.SetNumberingType( SVX_NUM_FULL_WIDTH_ARABIC ); + } + break; + case 29: // Double-byte Arabic numbers with double-byte period. + { + rNumberFormat.SetNumberingType( SVX_NUM_FULL_WIDTH_ARABIC ); + rNumberFormat.SetSuffix( OUString( sal_Unicode(0xff0e) ) ); + } + break; + case 38: // Japanese with double-byte period. + { + rNumberFormat.SetNumberingType( SVX_NUM_NUMBER_LOWER_ZH ); // No such type. Instead with Lower Chinese Number + rNumberFormat.SetSuffix( OUString( sal_Unicode(0xff0e) ) ); + } + break; } rStartNumbering = boost::optional< sal_Int16 >( nAnmScheme >> 16 ); } diff --git a/sd/source/filter/eppt/epptso.cxx b/sd/source/filter/eppt/epptso.cxx index cd20021f4b3a..49ebdfeb4c9c 100644 --- a/sd/source/filter/eppt/epptso.cxx +++ b/sd/source/filter/eppt/epptso.cxx @@ -1422,6 +1422,11 @@ void PPTWriter::ImplWriteTextStyleAtom( SvStream& rOut, int nTextInstance, sal_u case SVX_NUM_ROMAN_UPPER : case SVX_NUM_ROMAN_LOWER : case SVX_NUM_ARABIC : + case SVX_NUM_NUMBER_UPPER_ZH: + case SVX_NUM_CIRCLE_NUMBER: + case SVX_NUM_NUMBER_UPPER_ZH_TW: + case SVX_NUM_NUMBER_LOWER_ZH: + case SVX_NUM_FULL_WIDTH_ARABIC: nNumberingType = pBulletPara->nMappedNumType; break; diff --git a/sd/source/filter/eppt/pptx-text.cxx b/sd/source/filter/eppt/pptx-text.cxx index 6e5d19613e87..4e6ca95546cf 100644 --- a/sd/source/filter/eppt/pptx-text.cxx +++ b/sd/source/filter/eppt/pptx-text.cxx @@ -905,6 +905,11 @@ void ParagraphObj::ImplGetNumberingLevel( PPTExBulletProvider& rBuProv, sal_Int1 case SVX_NUM_BITMAP : case SVX_NUM_CHARS_UPPER_LETTER_N : // count from a-z, aa-zz, aaa-zzz case SVX_NUM_CHARS_LOWER_LETTER_N : + case SVX_NUM_NUMBER_UPPER_ZH: + case SVX_NUM_CIRCLE_NUMBER: + case SVX_NUM_NUMBER_UPPER_ZH_TW: + case SVX_NUM_NUMBER_LOWER_ZH: + case SVX_NUM_FULL_WIDTH_ARABIC: { if ( nNumberingType != SVX_NUM_CHAR_SPECIAL ) { @@ -990,6 +995,45 @@ void ParagraphObj::ImplGetNumberingLevel( PPTExBulletProvider& rBuProv, sal_Int1 } } break; + case SVX_NUM_NUMBER_UPPER_ZH : + { + if ( sSuffix.Len() ) + nMappedNumType = 0x110001; // Simplified Chinese with single-byte period. + else + nMappedNumType = 0x100001; // Simplified Chinese. + } + break; + case SVX_NUM_CIRCLE_NUMBER : + { + nMappedNumType = 0x120001; // Double byte circle numbers. + } + break; + case SVX_NUM_NUMBER_UPPER_ZH_TW : + { + if ( sSuffix.Len() ) + nMappedNumType = 0x160001; // Traditional Chinese with single-byte period. + else + nMappedNumType = 0x150001; // Traditional Chinese. + } + break; + case SVX_NUM_NUMBER_LOWER_ZH : + { + if ( sSuffix == OUString( sal_Unicode(0xff0e)) ) + nMappedNumType = 0x260001; // Japanese with double-byte period. + else if ( sSuffix.Len() ) + nMappedNumType = 0x1B0001; // Japanese/Korean with single-byte period. + else + nMappedNumType = 0x1A0001; // Japanese/Korean. + } + break; + case SVX_NUM_FULL_WIDTH_ARABIC : + { + if ( sSuffix.Len() ) + nMappedNumType = 0x1D0001; // Double-byte Arabic numbers with double-byte period. + else + nMappedNumType = 0x1C0001; // Double-byte Arabic numbers. + } + break; default: break; } |