merge the formfield patch from ooo-build
[ooovba.git] / sw / source / filter / rtf / wrtrtf.hxx
blobb71a57704990f5cbb57e5a6d1d5653dba630f588
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: wrtrtf.hxx,v $
10 * $Revision: 1.18.210.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
30 #ifndef _WRTRTF_HXX
31 #define _WRTRTF_HXX
33 #include <shellio.hxx>
34 #include <wrt_fn.hxx>
35 #include "../inc/msfilter.hxx"
37 #include <com/sun/star/util/DateTime.hpp>
39 // einige Forward Deklarationen
40 class Color;
41 class Font;
42 class SvPtrarr;
43 class RTFColorTbl;
44 class SwFmt;
45 class SwFlyFrmFmt;
46 class SwPosFlyFrms;
47 class SwPageDesc;
48 class SwTableNode;
49 class SwTxtFmtColl;
50 class SwNumRule;
51 class SwNumRuleTbl;
52 class DateTime;
53 class RTFEndPosLst;
54 class SvxBorderLine;
56 extern SwAttrFnTab aRTFAttrFnTab;
57 extern SwNodeFnTab aRTFNodeFnTab;
59 // the default text encoding for the export, if it doesn't fit unicode will
60 // be used
61 #define DEF_ENCODING RTL_TEXTENCODING_ASCII_US
64 class RTF_WrtRedlineAuthor : public sw::util::WrtRedlineAuthor
66 public:
67 virtual void Write(Writer &rWrt);
70 // der RTF-Writer
72 class SwRTFWriter : public Writer
74 friend class RTFEndPosLst;
76 SvPtrarr* pFontRemoveLst;
77 RTFColorTbl* pColTbl;
78 SwPosFlyFrms* pFlyPos; // Pointer auf die aktuelle "FlyFrmTabelle"
79 RTFEndPosLst* pCurEndPosLst;
80 const SfxItemSet* pAttrSet; // akt. Format/Collection vom Node
81 // fuer den Zugriff auf einige Attribute
82 // z.B. Font-Size, LR-Space,..
83 SwNumRuleTbl* pNumRuleTbl; // list of all exported numrules
84 RTF_WrtRedlineAuthor *pRedlAuthors;
86 USHORT nAktFlyPos; // Index auf das naechste "FlyFrmFmt"
87 void OutRTFColorTab();
88 void OutRTFFontTab();
89 const rtl::OUString XlateFmtName( const rtl::OUString &rName, SwGetPoolIdFromName eFlags );
90 void OutRTFStyleTab();
91 void OutRTFListTab();
92 bool OutRTFRevTab();
94 void MakeHeader();
95 void OutUnicodeSafeRecord(const sal_Char *pToken,
96 const String &rContent);
97 void OutDocInfoStat();
98 void OutInfoDateTime( const sal_Char*,
99 const ::com::sun::star::util::DateTime& );
100 void CheckEndNodeForSection( const SwNode& rNd );
102 void BuildNumRuleTbl();
106 public:
107 // --- public Member --------------------------------------------------
109 USHORT nCurRedline;
112 const SwFlyFrmFmt* pFlyFmt; // liegt der Node in einem FlyFrame,
113 // ist das Format gesetzt, sonst 0
114 const SwPageDesc* pAktPageDesc; // aktuell gesetzter PageDesc.
115 sal_Int32 nBkmkTabPos; // akt. Position in der Bookmark-Tabelle
116 USHORT nCurScript; // actual scripttype
117 rtl_TextEncoding eDefaultEncoding;
118 rtl_TextEncoding eCurrentEncoding;
120 #if defined(UNX)
121 static const sal_Char sNewLine; // nur \012 oder \015
122 #else
123 static const sal_Char __FAR_DATA sNewLine[]; // \015\012
124 #endif
127 BOOL bFirstLine : 1; // wird die 1. Zeile ausgegeben ?
128 BOOL bOutFmtAttr : 1; // TRUE: beim Schreiben eines Formates
129 // existierte mindestens ein Attribut
130 BOOL bRTFFlySyntax : 1; // gebe nur original RTFSyntax aus
131 // (nur fuer die fliegenden Rahmen)
132 BOOL bOutPageDesc: 1; // gebe einen PageDescriptor aus
133 BOOL bOutPageDescTbl: 1; // gebe die PageDescriptor-Tabelle aus
134 BOOL bOutTable : 1; // gebe eine Tabelle aus
135 BOOL bTxtAttr : 1; // werden TextAttribute ausgegeben ?
136 BOOL bWriteHelpFmt : 1; // schreibe Win-RTF-HelpFileFmt
137 BOOL bOutStyleTab : 1; // gebe die StyleSheet-Tabelle aus
138 BOOL bOutPageAttr : 1; // PageDescAttribut ausgeben?
139 BOOL bAutoAttrSet : 1; // TRUE: pAttrSet ist harte Attributierung
140 // FALSE: pAttrSet ist vom Format/Collection
141 BOOL bOutOutlineOnly : 1; // TRUE: nur Gliederungs-Absaetze schreiben
142 BOOL bOutListNumTxt : 1; // TRUE: der ListNumText wird ausgegeben
143 BOOL bOutLeftHeadFoot : 1; // gebe vom PageDesc. den linkten
144 // Header/Footer aus
145 BOOL bOutSection : 1; // TRUE: Section PageDesc ausgeben
146 BOOL bIgnoreNextPgBreak : 1; // TRUE: naechsten PageDesc/Break ignorieren
147 BOOL bAssociated : 1; // use associated tokens
149 BOOL bNonStandard : 1; // use non-standard tags (for cut and paste)
151 // --- public Methoden ------------------------------------------------
153 SwRTFWriter( const String& rFilterName, const String& rBaseURL );
154 virtual ~SwRTFWriter();
155 virtual ULONG WriteStream();
157 void Out_SwDoc( SwPaM* ); // schreibe den makierten Bereich
159 // gebe die evt. an der akt. Position stehenden FlyFrame aus.
160 void OutFlyFrm();
161 void OutRTFFlyFrms( const SwFlyFrmFmt& );
162 // gebe alle an der Position stehenden Bookmarks aus
163 void OutBookmarks( xub_StrLen nCntntPos );
164 // gebe die PageDesc-Daten im normalen RTF-Format aus
165 void OutRTFPageDescription( const SwPageDesc&, BOOL , BOOL );
166 void OutRTFBorders( SvxBoxItem aBox );
167 void OutRTFBorder( const SvxBorderLine* aLine, const USHORT nSpace );
168 BOOL OutBreaks( const SfxItemSet& rSet );
169 void OutRedline( xub_StrLen nCntntPos );
171 // gebe die PageDescriptoren aus
172 USHORT GetId( const Color& ) const;
173 USHORT GetId( const SvxFontItem& ) const;
174 USHORT GetId( const Font& ) const;
175 USHORT GetId( const SwTxtFmtColl& ) const;
176 USHORT GetId( const SwCharFmt& ) const;
177 USHORT GetId( const SwNumRuleItem& rItem ) const;
179 void OutPageDesc();
181 BOOL OutListNum( const SwTxtNode& rNd );
182 USHORT GetNumRuleId( const SwNumRule& rRule );
184 // fuer RTFSaveData
185 SwPaM* GetEndPaM() { return pOrigPam; }
186 void SetEndPaM( SwPaM* pPam ) { pOrigPam = pPam; }
188 const SfxPoolItem& GetItem( USHORT nWhich ) const;
190 const SfxItemSet* GetAttrSet() const { return pAttrSet; }
191 void SetAttrSet( const SfxItemSet* p ) { pAttrSet = p; }
193 const RTFEndPosLst* GetEndPosLst() const { return pCurEndPosLst; }
195 void SetAssociatedFlag( BOOL b ) { bAssociated = b; }
196 BOOL IsAssociatedFlag() const { return bAssociated; }
198 void SetCurrScriptType( USHORT n ) { nCurScript = n; }
199 USHORT GetCurrScriptType() const { return nCurScript; }
201 short TrueFrameDirection(const SwFrmFmt &rFlyFmt) const;
202 short GetCurrentPageDirection() const;
206 // Struktur speichert die aktuellen Daten des Writers zwischen, um
207 // einen anderen Dokument-Teil auszugeben, wie z.B. Header/Footer
208 // Mit den beiden USHORTs im CTOR wird ein neuer PaM erzeugt und auf
209 // die Position im Dokument gesetzt.
210 // Im Destructor werden alle Daten wieder restauriert und der angelegte
211 // Pam wieder geloescht.
213 struct RTFSaveData
215 SwRTFWriter& rWrt;
216 SwPaM* pOldPam, *pOldEnd;
217 const SwFlyFrmFmt* pOldFlyFmt;
218 const SwPageDesc* pOldPageDesc;
219 const SfxItemSet* pOldAttrSet; // akt. Attribute vom Node
221 BOOL bOldWriteAll : 1;
222 BOOL bOldOutTable : 1;
223 BOOL bOldOutPageAttr : 1;
224 BOOL bOldAutoAttrSet : 1;
225 BOOL bOldOutSection : 1;
227 RTFSaveData( SwRTFWriter&, ULONG nStt, ULONG nEnd );
228 ~RTFSaveData();
232 // einige Funktions-Deklarationen
233 Writer& OutRTF_AsByteString( Writer& rWrt, const String& rStr, rtl_TextEncoding eEncoding);
234 Writer& OutRTF_SwFmt( Writer& rWrt, const SwFmt& );
235 Writer& OutRTF_SwTblNode(Writer& , const SwTableNode&);
236 Writer& OutRTF_SwSectionNode( Writer& , SwSectionNode & );
239 // Augabe von RTF-Bitmaps (steht im File "wrtpict.cxx")
240 //struct SvxRTFPictureType;
241 //class Bitmap;
242 //USHORT WriteRTFPict( const SwPictureType&, Bitmap&, SvStream& );
244 // Ausagbe von Footer-/Headers
245 Writer& OutRTF_SwFmtHeader( Writer& , const SfxPoolItem& );
246 Writer& OutRTF_SwFmtFooter( Writer& , const SfxPoolItem& );
248 // Kommentar und zusaetzlichen String ausgeben
249 SvStream& OutComment( Writer& rWrt, const sal_Char* pStr );
250 // zusaetzlich das bOutFmtAttr-Flag manipulieren
251 SvStream& OutComment( Writer& rWrt, const sal_Char* pStr, BOOL bSetFlag );
252 bool ExportAsInline(const SwFlyFrmFmt& rFlyFrmFmt);
254 #endif // _WRTRTF_HXX