freebsd-ports/editors/openoffice.org-2-devel/files/patch-wrtrtf
Maho Nakata 9a7eb5c2f3 a) add several patches made by Takashi Ono (JCA signed person)
1) To enable handling of MS Word for Windows 95/6.0 CJK Version
      patch-word6+95-cjkhandling
      http://www.openoffice.org/issues/show_bug.cgi?id=17498
      (target milestone 1.1.1, resolved and fixed)

   2) Patch to enable rtf filter handle local language files
      patch-rtfcjk
      http://www.openoffice.org/issues/show_bug.cgi?id=17503
      (target milestone 2.0, verified and fixed)

   3) rtf writing enhancement for CJK
      patch-wrtrtf
      http://www.openoffice.org/issues/show_bug.cgi?id=20264
      (not confirmed yet)

   4) read first section attribute correctly for
      MS Word for Windows 95/6.0
      patch-topsection
      http://ja.openoffice.org/servlets/ProjectDownloadList?action=download&dlID=312
      (IZ is not raized)

b) bump portrevision
2003-10-02 06:45:23 +00:00

312 lines
9.1 KiB
Text

--- ../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 <charfmt.hxx>
#endif
+#ifndef _POOLFMT_HXX
+#include <poolfmt.hxx>
+#endif
+#ifndef _SWSTYLENAMEMAPPER_HXX
+#include <SwStyleNameMapper.hxx>
+#endif
#ifndef _SECTION_HXX //autogen
#include <section.hxx>
#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;
}