1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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 ************************************************************************/
33 #include <shellio.hxx>
35 #include "../inc/msfilter.hxx"
37 #include <com/sun/star/util/DateTime.hpp>
39 // einige Forward Deklarationen
56 extern SwAttrFnTab aRTFAttrFnTab
;
57 extern SwNodeFnTab aRTFNodeFnTab
;
59 // the default text encoding for the export, if it doesn't fit unicode will
61 #define DEF_ENCODING RTL_TEXTENCODING_ASCII_US
64 class RTF_WrtRedlineAuthor
: public sw::util::WrtRedlineAuthor
67 virtual void Write(Writer
&rWrt
);
72 class SwRTFWriter
: public Writer
74 friend class RTFEndPosLst
;
76 SvPtrarr
* pFontRemoveLst
;
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();
89 const rtl::OUString
XlateFmtName( const rtl::OUString
&rName
, SwGetPoolIdFromName eFlags
);
90 void OutRTFStyleTab();
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();
107 // --- public Member --------------------------------------------------
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
;
121 static const sal_Char sNewLine
; // nur \012 oder \015
123 static const sal_Char __FAR_DATA sNewLine
[]; // \015\012
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
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.
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;
181 BOOL
OutListNum( const SwTxtNode
& rNd
);
182 USHORT
GetNumRuleId( const SwNumRule
& rRule
);
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.
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
);
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;
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