--- ../svtools/source/svrtf/rtfout.cxx.orig 2000-10-16 18:13:46.000000000 +0900 +++ ../svtools/source/svrtf/rtfout.cxx 2003-09-23 12:41:00.000000000 +0900 @@ -124,8 +124,9 @@ default: { sal_Unicode cCh = c; - c = (BYTE)ByteString::ConvertFromUnicode( c, eDestEnc, FALSE ); - if( !c ) + rtl::OString buff( &c, 1, eDestEnc, RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE|RTL_UNICODETOTEXT_FLAGS_INVALID_IGNORE ); +// c = (BYTE)ByteString::ConvertFromUnicode( c, eDestEnc, FALSE ); + if( !buff.getLength() ) { // then write as unicode - character if( 0xFF < cCh ) @@ -141,8 +142,8 @@ break; } - if( !bWriteHelpFile ) - switch( c ) + if( !bWriteHelpFile && buff.getLength() == 1 ) + switch( BYTE(buff[0]) ) { #ifdef MAC case 0xa5: pStr = sRTF_BULLET; break; @@ -164,6 +165,9 @@ // MAC } if( !pStr ) + for (int i = 0; i < buff.getLength(); ++i) + { + c = BYTE(buff[i]); switch ( c ) { case '\\': @@ -186,6 +190,7 @@ } break; } + } } break; } --- ../sw/source/filter/rtf/wrtrtf.cxx.orig 2003-04-18 00:00:28.000000000 +0900 +++ ../sw/source/filter/rtf/wrtrtf.cxx 2003-09-23 23:33:08.000000000 +0900 @@ -184,6 +184,12 @@ #ifndef _CHARFMT_HXX #include #endif +#ifndef _POOLFMT_HXX +#include +#endif +#ifndef _SWSTYLENAMEMAPPER_HXX +#include +#endif #ifndef _SECTION_HXX //autogen #include #endif @@ -215,7 +221,7 @@ SV_IMPL_VARARR( RTFColorTbl, Color ) -SwRTFWriter::SwRTFWriter( const String& rFltName ) +SwRTFWriter::SwRTFWriter( const String& rFltName ) : eCurrentCharSet(DEF_ENCODING) { // schreibe Win-RTF-HelpFileFmt bWriteHelpFmt = 'W' == rFltName.GetChar( 0 ); @@ -893,14 +899,14 @@ // as alternative name. Because WinWord can't match each // font to a UniCode font. So the CJK texts are shown as // empty rectangles ;-(. - RTFOutFuncs::Out_String( rWrt.Strm(), sFntNm, DEF_ENCODING, + RTFOutFuncs::Out_String( rWrt.Strm(), sFntNm, eChrSet, rWrt.bWriteHelpFmt ); OutComment( rWrt, sRTF_FALT) << ' '; - RTFOutFuncs::Out_String( rWrt.Strm(), sAltNm, DEF_ENCODING, + RTFOutFuncs::Out_String( rWrt.Strm(), sAltNm, eChrSet, rWrt.bWriteHelpFmt ) << '}'; } else - RTFOutFuncs::Out_String( rWrt.Strm(), sFntNm, DEF_ENCODING, + RTFOutFuncs::Out_String( rWrt.Strm(), sFntNm, eChrSet, rWrt.bWriteHelpFmt ); rWrt.Strm() << ";}"; } @@ -932,6 +938,139 @@ +//Takashi Ono for CJK +const rtl::OUString SwRTFWriter::XlateFmtName( const rtl::OUString &rName, SwGetPoolIdFromName eFlags ) +{ +#define RES_NONE RES_POOLCOLL_DOC_END + + static const RES_POOL_COLLFMT_TYPE aArr[]={ + RES_POOLCOLL_STANDARD, RES_POOLCOLL_HEADLINE1, RES_POOLCOLL_HEADLINE2, + RES_POOLCOLL_HEADLINE3, RES_POOLCOLL_HEADLINE4, RES_POOLCOLL_HEADLINE5, + RES_POOLCOLL_HEADLINE6, RES_POOLCOLL_HEADLINE7, RES_POOLCOLL_HEADLINE8, + RES_POOLCOLL_HEADLINE9, + + RES_POOLCOLL_TOX_IDX1, RES_POOLCOLL_TOX_IDX2, RES_POOLCOLL_TOX_IDX3, + RES_NONE, RES_NONE, RES_NONE, RES_NONE, RES_NONE, RES_NONE, + RES_POOLCOLL_TOX_CNTNT1, + + RES_POOLCOLL_TOX_CNTNT2, RES_POOLCOLL_TOX_CNTNT3, RES_POOLCOLL_TOX_CNTNT4, + RES_POOLCOLL_TOX_CNTNT5, RES_POOLCOLL_TOX_CNTNT6, RES_POOLCOLL_TOX_CNTNT7, + RES_POOLCOLL_TOX_CNTNT8, RES_POOLCOLL_TOX_CNTNT9, + RES_POOLCOLL_TEXT_IDENT, RES_POOLCOLL_FOOTNOTE, + + RES_NONE, RES_POOLCOLL_HEADER, RES_POOLCOLL_FOOTER, RES_POOLCOLL_TOX_IDXH, + RES_POOLCOLL_LABEL, RES_POOLCOLL_TOX_ILLUSH, RES_POOLCOLL_JAKETADRESS, RES_POOLCOLL_SENDADRESS, + RES_NONE, RES_NONE, + + RES_NONE, RES_NONE, RES_NONE, RES_POOLCOLL_ENDNOTE, RES_POOLCOLL_TOX_AUTHORITIESH, RES_NONE, RES_NONE, + RES_POOLCOLL_BUL_LEVEL1, RES_POOLCOLL_BUL_LEVEL1, RES_POOLCOLL_NUM_LEVEL1, + + RES_POOLCOLL_BUL_LEVEL2, RES_POOLCOLL_BUL_LEVEL3, RES_POOLCOLL_BUL_LEVEL4, RES_POOLCOLL_BUL_LEVEL5, + RES_POOLCOLL_BUL_LEVEL2, RES_POOLCOLL_BUL_LEVEL3, RES_POOLCOLL_BUL_LEVEL4, RES_POOLCOLL_BUL_LEVEL5, + RES_POOLCOLL_NUM_LEVEL2, RES_POOLCOLL_NUM_LEVEL3, RES_POOLCOLL_NUM_LEVEL4, RES_POOLCOLL_NUM_LEVEL5, + + RES_POOLCOLL_DOC_TITEL, RES_NONE, RES_POOLCOLL_SIGNATURE, RES_NONE, + RES_POOLCOLL_TEXT, RES_POOLCOLL_TEXT_MOVE, RES_NONE, RES_NONE, + + RES_NONE, RES_NONE, RES_NONE, RES_NONE, RES_POOLCOLL_DOC_SUBTITEL }; + static const sal_Char *stiName[] = { + "Normal", + "heading 1", + "heading 2", + "heading 3", + "heading 4", + "heading 5", + "heading 6", + "heading 7", + "heading 8", + "heading 9", + "index 1", + "index 2", + "index 3", + "index 4", + "index 5", + "index 6", + "index 7", + "index 8", + "index 9", + "toc 1", + "toc 2", + "toc 3", + "toc 4", + "toc 5", + "toc 6", + "toc 7", + "toc 8", + "toc 9", + "Normal Indent", + "footnote text", + "annotation text", + "header", + "footer", + "index heading", + "caption", + "table of figures", + "envelope address", + "envelope return", + "footnote reference", + "annotation reference", + "line number", + "page number", + "endnote reference", + "endnote text", + "table of authorities", + "macro", + "toa heading", + "List", + "List Bullet", + "List Number", + "List 2", + "List 3", + "List 4", + "List 5", + "List Bullet 2", + "List Bullet 3", + "List Bullet 4", + "List Bullet 5", + "List Number 2", + "List Number 3", + "List Number 4", + "List Number 5", + "Title", + "Closing", + "Signature", + "Default Paragraph Font", + "Body Text", + "Body Text Indent", + "List Continue", + "List Continue 2", + "List Continue 3", + "List Continue 4", + "List Continue 5", + "Message Header", + "Subtitle", + }; + + + ASSERT( ( sizeof( aArr ) / sizeof( RES_POOL_COLLFMT_TYPE ) == 75 ), + "Style-UEbersetzungstabelle hat falsche Groesse" ); + ASSERT( ( sizeof( stiName ) / sizeof( *stiName ) == 75 ), + "Style-UEbersetzungstabelle hat falsche Groesse" ); + + sal_uInt16 idcol = ::SwStyleNameMapper::GetPoolIdFromUIName( rName, eFlags ); + + for (int i = 0; i < sizeof( aArr ) / sizeof( *aArr ); i++) + { + if ( idcol == aArr[i] ) + { + return rtl::OUString::createFromAscii(stiName[i]); + } + } + return ::SwStyleNameMapper::GetProgName( idcol, String() ); +} + + + void SwRTFWriter::OutRTFStyleTab() { // das 0-Style ist das Default, wird nie ausgegeben !! @@ -988,7 +1127,7 @@ } Strm() << ' '; - RTFOutFuncs::Out_String( Strm(), pColl->GetName(), DEF_ENCODING, + RTFOutFuncs::Out_String( Strm(), XlateFmtName( pColl->GetName(), GET_POOLID_TXTCOLL ), DEF_ENCODING, bWriteHelpFmt ) << ";}" << SwRTFWriter::sNewLine; } @@ -1015,8 +1154,8 @@ } Strm() << ' '; - RTFOutFuncs::Out_String( Strm(), pFmt->GetName(), DEF_ENCODING, - bWriteHelpFmt ) << ";}" << SwRTFWriter::sNewLine; + RTFOutFuncs::Out_String( Strm(), XlateFmtName( pFmt->GetName(), GET_POOLID_CHRFMT ), DEF_ENCODING, + bWriteHelpFmt ) << ";}" << SwRTFWriter::sNewLine; } Strm() << '}'; @@ -1217,8 +1356,8 @@ break; Strm() << sRTF_PGDSCNXT; OutULong( i ) << ' '; - RTFOutFuncs::Out_String( Strm(), rPageDesc.GetName(), - DEF_ENCODING, bWriteHelpFmt ) << ";}"; + RTFOutFuncs::Out_String( Strm(), XlateFmtName( rPageDesc.GetName(), GET_POOLID_PAGEDESC ), DEF_ENCODING, + bWriteHelpFmt ) << ";}"; } Strm() << '}' << SwRTFWriter::sNewLine; bOutPageDesc = bOutPageDescTbl = FALSE; --- ../sw/source/filter/rtf/wrtrtf.hxx.orig 2002-07-31 19:18:50.000000000 +0900 +++ ../sw/source/filter/rtf/wrtrtf.hxx 2003-09-23 23:37:50.000000000 +0900 @@ -117,6 +117,7 @@ USHORT nAktFlyPos; // Index auf das naechste "FlyFrmFmt" void OutRTFColorTab(); void OutRTFFontTab(); + const rtl::OUString XlateFmtName( const rtl::OUString &rName, SwGetPoolIdFromName eFlags ); void OutRTFStyleTab(); void OutRTFListTab(); @@ -136,6 +137,8 @@ USHORT nBkmkTabPos; // akt. Position in der Bookmark-Tabelle USHORT nCurScript; // actual scripttype + rtl_TextEncoding eCurrentCharSet; + #if defined(MAC) || defined(UNX) static const sal_Char sNewLine; // nur \012 oder \015 #else --- ../sw/source/filter/rtf/rtfatr.cxx.orig 2003-05-19 21:24:46.000000000 +0900 +++ ../sw/source/filter/rtf/rtfatr.cxx 2003-09-23 23:45:52.000000000 +0900 @@ -1319,7 +1319,7 @@ sURL = aTmp.GetFull(); } */ rWrt.Strm() << '\"'; - RTFOutFuncs::Out_String( rWrt.Strm(), sURL, DEF_ENCODING, + RTFOutFuncs::Out_String( rWrt.Strm(), sURL, rRTFWrt.eCurrentCharSet, rRTFWrt.bWriteHelpFmt ) << "\" "; sURL = aTmp.GetMark(); } @@ -1328,7 +1328,7 @@ { rWrt.Strm() << "\\\\l \""; sURL.Erase( 0, 1 ); - RTFOutFuncs::Out_String( rWrt.Strm(), sURL, DEF_ENCODING, + RTFOutFuncs::Out_String( rWrt.Strm(), sURL, rRTFWrt.eCurrentCharSet, rRTFWrt.bWriteHelpFmt ) << "\" "; } @@ -1609,7 +1609,7 @@ if( nStrPos != nEnde ) RTFOutFuncs::Out_Char( rWrt.Strm(), rStr.GetChar( nStrPos ), - DEF_ENCODING, rRTFWrt.bWriteHelpFmt ); + rRTFWrt.eCurrentCharSet, rRTFWrt.bWriteHelpFmt ); } // noch eine schliesende Klammer da ?? @@ -2188,6 +2188,7 @@ const sal_Char* pCmd = bAssoc ? sRTF_AF : sRTF_F; rWrt.Strm() << pCmd; rWrt.OutULong(rRTFWrt.GetId(rFont)); + rRTFWrt.eCurrentCharSet = rFont.GetCharSet(); } return rWrt; }