xref: /AOO41X/main/sw/inc/shellio.hxx (revision 1d2dbeb0b7301723c6d13094e87a8714ef81a328)
1*1d2dbeb0SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*1d2dbeb0SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*1d2dbeb0SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*1d2dbeb0SAndrew Rist  * distributed with this work for additional information
6*1d2dbeb0SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*1d2dbeb0SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*1d2dbeb0SAndrew Rist  * "License"); you may not use this file except in compliance
9*1d2dbeb0SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*1d2dbeb0SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*1d2dbeb0SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*1d2dbeb0SAndrew Rist  * software distributed under the License is distributed on an
15*1d2dbeb0SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*1d2dbeb0SAndrew Rist  * KIND, either express or implied.  See the License for the
17*1d2dbeb0SAndrew Rist  * specific language governing permissions and limitations
18*1d2dbeb0SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*1d2dbeb0SAndrew Rist  *************************************************************/
21*1d2dbeb0SAndrew Rist 
22*1d2dbeb0SAndrew Rist 
23cdf0e10cSrcweir #ifndef SW_SHELLIO_HXX
24cdf0e10cSrcweir #define SW_SHELLIO_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <memory>
27cdf0e10cSrcweir #include <boost/utility.hpp>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <com/sun/star/uno/Reference.h>
30cdf0e10cSrcweir #include <com/sun/star/embed/XStorage.hpp>
31cdf0e10cSrcweir #include <sfx2/docfile.hxx>
32cdf0e10cSrcweir #include <sfx2/fcontnr.hxx>
33cdf0e10cSrcweir #include <sot/formats.hxx>
34cdf0e10cSrcweir #include <sot/storage.hxx>
35cdf0e10cSrcweir #include <svtools/parhtml.hxx>
36cdf0e10cSrcweir #include <tools/string.hxx>
37cdf0e10cSrcweir #include <tools/date.hxx>
38cdf0e10cSrcweir #include <tools/time.hxx>
39cdf0e10cSrcweir #include <tools/datetime.hxx>
40cdf0e10cSrcweir #include <tools/ref.hxx>
41cdf0e10cSrcweir #include <tools/urlobj.hxx>
42cdf0e10cSrcweir #include <swdllapi.h>
43cdf0e10cSrcweir #include <swtypes.hxx>
44cdf0e10cSrcweir #include <docfac.hxx>   // SwDocFac
45cdf0e10cSrcweir #include <errhdl.hxx>
46cdf0e10cSrcweir #include <iodetect.hxx>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir // einige Forward - Deklarationen
49cdf0e10cSrcweir class SfxFilterContainer;
50cdf0e10cSrcweir class SfxFilter;
51cdf0e10cSrcweir class SfxItemPool;
52cdf0e10cSrcweir class SfxItemSet;
53cdf0e10cSrcweir class SfxMedium;
54cdf0e10cSrcweir class SvPtrarr;
55cdf0e10cSrcweir class SvStream;
56cdf0e10cSrcweir class SvStrings;
57cdf0e10cSrcweir class SvxFontItem;
58cdf0e10cSrcweir class SvxMacroTableDtor;
59cdf0e10cSrcweir //class Sw3Io;
60cdf0e10cSrcweir class SwCntntNode;
61cdf0e10cSrcweir class SwCrsrShell;
62cdf0e10cSrcweir class SwDoc;
63cdf0e10cSrcweir class SwPaM;
64cdf0e10cSrcweir class SwTextBlocks;
65cdf0e10cSrcweir struct SwPosition;
66cdf0e10cSrcweir struct Writer_Impl;
67cdf0e10cSrcweir 
68cdf0e10cSrcweir // ab so vielen chars wird ein mit einem ASCII/W4W-Reader eingelesener
69cdf0e10cSrcweir // Absatz zwangsweise umgebrochen. Muss immer groesser als 200 sein !!!
70cdf0e10cSrcweir #define MAX_ASCII_PARA 10000
71cdf0e10cSrcweir 
72cdf0e10cSrcweir 
73cdf0e10cSrcweir class SW_DLLPUBLIC SwAsciiOptions
74cdf0e10cSrcweir {
75cdf0e10cSrcweir     String sFont;
76cdf0e10cSrcweir     rtl_TextEncoding eCharSet;
77cdf0e10cSrcweir     sal_uInt16 nLanguage;
78cdf0e10cSrcweir     LineEnd eCRLF_Flag;
79cdf0e10cSrcweir 
80cdf0e10cSrcweir public:
81cdf0e10cSrcweir 
GetFontName() const82cdf0e10cSrcweir     const String& GetFontName() const { return sFont; }
SetFontName(const String & rFont)83cdf0e10cSrcweir     void SetFontName( const String& rFont ) { sFont = rFont; }
84cdf0e10cSrcweir 
GetCharSet() const85cdf0e10cSrcweir     rtl_TextEncoding GetCharSet() const { return eCharSet; }
SetCharSet(rtl_TextEncoding nVal)86cdf0e10cSrcweir     void SetCharSet( rtl_TextEncoding nVal ) { eCharSet = nVal; }
87cdf0e10cSrcweir 
GetLanguage() const88cdf0e10cSrcweir     sal_uInt16 GetLanguage() const { return nLanguage; }
SetLanguage(sal_uInt16 nVal)89cdf0e10cSrcweir     void SetLanguage( sal_uInt16 nVal ) { nLanguage = nVal; }
90cdf0e10cSrcweir 
GetParaFlags() const91cdf0e10cSrcweir     LineEnd GetParaFlags() const { return eCRLF_Flag; }
SetParaFlags(LineEnd eVal)92cdf0e10cSrcweir     void SetParaFlags( LineEnd eVal ) { eCRLF_Flag = eVal; }
93cdf0e10cSrcweir 
Reset()94cdf0e10cSrcweir     void Reset()
95cdf0e10cSrcweir     {
96cdf0e10cSrcweir         sFont.Erase();
97cdf0e10cSrcweir         eCRLF_Flag = GetSystemLineEnd();
98cdf0e10cSrcweir         eCharSet = ::gsl_getSystemTextEncoding();
99cdf0e10cSrcweir         nLanguage = 0;
100cdf0e10cSrcweir     }
101cdf0e10cSrcweir     // for the automatic conversion (mail/news/...)
102cdf0e10cSrcweir     void ReadUserData( const String& );
103cdf0e10cSrcweir     void WriteUserData( String& );
104cdf0e10cSrcweir 
SwAsciiOptions()105cdf0e10cSrcweir     SwAsciiOptions() { Reset(); }
106cdf0e10cSrcweir };
107cdf0e10cSrcweir 
108cdf0e10cSrcweir /**************** SwReader/Reader ************************/
109cdf0e10cSrcweir // Basisklasse der moeglichen Optionen fuer einen speziellen Reader
110cdf0e10cSrcweir class Reader;
111cdf0e10cSrcweir // Ruft den Reader mit seinen Optionen, Dokument, Cursor etc.
112cdf0e10cSrcweir class SwReader;
113cdf0e10cSrcweir // SwRead ist der Pointer auf die Read-Optionen-Basisklasse
114cdf0e10cSrcweir typedef Reader *SwRead;
115cdf0e10cSrcweir 
116cdf0e10cSrcweir class SwgReaderOption
117cdf0e10cSrcweir {
118cdf0e10cSrcweir     SwAsciiOptions aASCIIOpts;
119cdf0e10cSrcweir     union
120cdf0e10cSrcweir     {
121cdf0e10cSrcweir         sal_Bool bFmtsOnly;
122cdf0e10cSrcweir         struct
123cdf0e10cSrcweir         {
124cdf0e10cSrcweir             sal_Bool bFrmFmts: 1;
125cdf0e10cSrcweir             sal_Bool bPageDescs: 1;
126cdf0e10cSrcweir             sal_Bool bTxtFmts: 1;
127cdf0e10cSrcweir             sal_Bool bNumRules: 1;
128cdf0e10cSrcweir             sal_Bool bMerge:1;
129cdf0e10cSrcweir         }  Fmts;
130cdf0e10cSrcweir     } What;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir public:
ResetAllFmtsOnly()133cdf0e10cSrcweir     void ResetAllFmtsOnly() { What.bFmtsOnly = 0; }
IsFmtsOnly() const134cdf0e10cSrcweir     sal_Bool IsFmtsOnly() const { return What.bFmtsOnly; }
135cdf0e10cSrcweir 
IsFrmFmts() const136cdf0e10cSrcweir     sal_Bool IsFrmFmts() const { return What.Fmts.bFrmFmts; }
SetFrmFmts(const sal_Bool bNew)137cdf0e10cSrcweir     void SetFrmFmts( const sal_Bool bNew) { What.Fmts.bFrmFmts = bNew; }
138cdf0e10cSrcweir 
IsPageDescs() const139cdf0e10cSrcweir     sal_Bool IsPageDescs() const { return What.Fmts.bPageDescs; }
SetPageDescs(const sal_Bool bNew)140cdf0e10cSrcweir     void SetPageDescs( const sal_Bool bNew) { What.Fmts.bPageDescs = bNew; }
141cdf0e10cSrcweir 
IsTxtFmts() const142cdf0e10cSrcweir     sal_Bool IsTxtFmts() const { return What.Fmts.bTxtFmts; }
SetTxtFmts(const sal_Bool bNew)143cdf0e10cSrcweir     void SetTxtFmts( const sal_Bool bNew) { What.Fmts.bTxtFmts = bNew; }
144cdf0e10cSrcweir 
IsNumRules() const145cdf0e10cSrcweir     sal_Bool IsNumRules() const { return What.Fmts.bNumRules; }
SetNumRules(const sal_Bool bNew)146cdf0e10cSrcweir     void SetNumRules( const sal_Bool bNew) { What.Fmts.bNumRules = bNew; }
147cdf0e10cSrcweir 
IsMerge() const148cdf0e10cSrcweir     sal_Bool IsMerge() const { return What.Fmts.bMerge; }
SetMerge(const sal_Bool bNew)149cdf0e10cSrcweir     void SetMerge( const sal_Bool bNew ) { What.Fmts.bMerge = bNew; }
150cdf0e10cSrcweir 
GetASCIIOpts() const151cdf0e10cSrcweir     const SwAsciiOptions& GetASCIIOpts() const { return aASCIIOpts; }
SetASCIIOpts(const SwAsciiOptions & rOpts)152cdf0e10cSrcweir     void SetASCIIOpts( const SwAsciiOptions& rOpts ) { aASCIIOpts = rOpts; }
ResetASCIIOpts()153cdf0e10cSrcweir     void ResetASCIIOpts() { aASCIIOpts.Reset(); }
154cdf0e10cSrcweir 
SwgReaderOption()155cdf0e10cSrcweir     SwgReaderOption()
156cdf0e10cSrcweir     {   ResetAllFmtsOnly(); aASCIIOpts.Reset(); }
157cdf0e10cSrcweir };
158cdf0e10cSrcweir 
159cdf0e10cSrcweir class SwReader: public SwDocFac
160cdf0e10cSrcweir {
161cdf0e10cSrcweir     SvStream* pStrm;
162cdf0e10cSrcweir     SotStorageRef pStg;
163cdf0e10cSrcweir     com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg;
164cdf0e10cSrcweir     SfxMedium* pMedium;     // wer ein Medium haben will (W4W)
165cdf0e10cSrcweir 
166cdf0e10cSrcweir     SwPaM* pCrsr;
167cdf0e10cSrcweir     String aFileName;
168cdf0e10cSrcweir     String sBaseURL;
169cdf0e10cSrcweir 
170cdf0e10cSrcweir public:
171cdf0e10cSrcweir     /*
172cdf0e10cSrcweir      * Initiales Einlesen. Dokument wird erst beim Read(..) angelegt.
173cdf0e10cSrcweir      * JP 25.04.95: oder falls es mitgegeben wird, in dieses.
174cdf0e10cSrcweir      *              Sonderfall fuer Load mit Sw3Reader
175cdf0e10cSrcweir      */
176cdf0e10cSrcweir     //SwReader( SotStorage&, const String& rFilename, SwDoc *pDoc = 0 );
177cdf0e10cSrcweir     //SwReader( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String& rFilename, SwDoc *pDoc = 0 );
178cdf0e10cSrcweir     SwReader( SfxMedium&, const String& rFilename, SwDoc *pDoc = 0 );
179cdf0e10cSrcweir     /*
180cdf0e10cSrcweir      * In ein existierendes Dokument einlesen, Dokument und
181cdf0e10cSrcweir      * Position im Dokument werden aus dem SwPaM uebernommen.
182cdf0e10cSrcweir      */
183cdf0e10cSrcweir     SwReader( SvStream&, const String& rFilename, const String& rBaseURL, SwPaM& );
184cdf0e10cSrcweir     //SwReader( SotStorage&, const String& rFilename, SwPaM& );
185cdf0e10cSrcweir     SwReader( SfxMedium&, const String& rFilename, SwPaM& );
186cdf0e10cSrcweir     SwReader( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String& rFilename, SwPaM& );
187cdf0e10cSrcweir 
188cdf0e10cSrcweir     /*
189cdf0e10cSrcweir     * Nur SwReader::Read(...) ist die Export-Schnittstelle!!!
190cdf0e10cSrcweir     */
191cdf0e10cSrcweir     sal_Bool NeedsPasswd( const Reader& );
192cdf0e10cSrcweir     sal_Bool CheckPasswd( const String&, const Reader& );
193cdf0e10cSrcweir     sal_uLong Read( const Reader& );
194cdf0e10cSrcweir 
195cdf0e10cSrcweir     // ask for glossaries
196cdf0e10cSrcweir     sal_Bool HasGlossaries( const Reader& );
197cdf0e10cSrcweir     sal_Bool ReadGlossaries( const Reader&, SwTextBlocks&, sal_Bool bSaveRelFiles );
198cdf0e10cSrcweir 
GetBaseURL() const199cdf0e10cSrcweir     const String&       GetBaseURL() const { return sBaseURL;}
200cdf0e10cSrcweir 
201cdf0e10cSrcweir protected:
SetBaseURL(const String & rURL)202cdf0e10cSrcweir     void                SetBaseURL( const String& rURL ) { sBaseURL = rURL; }
203cdf0e10cSrcweir };
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 
207cdf0e10cSrcweir /*  */
208cdf0e10cSrcweir /****************  SPEZIELLE Reader ************************/
209cdf0e10cSrcweir 
210cdf0e10cSrcweir // spezielle - Reader koennen beides sein !! (Excel, W4W, .. )
211cdf0e10cSrcweir #define SW_STREAM_READER    1
212cdf0e10cSrcweir #define SW_STORAGE_READER   2
213cdf0e10cSrcweir 
214cdf0e10cSrcweir class SW_DLLPUBLIC Reader
215cdf0e10cSrcweir {
216cdf0e10cSrcweir     friend class SwReader;
217cdf0e10cSrcweir     SwDoc* pTemplate;
218cdf0e10cSrcweir     String aTemplateNm;
219cdf0e10cSrcweir     //String sBaseURL;
220cdf0e10cSrcweir 
221cdf0e10cSrcweir     Date aDStamp;
222cdf0e10cSrcweir     Time aTStamp;
223cdf0e10cSrcweir     DateTime aChkDateTime;
224cdf0e10cSrcweir 
225cdf0e10cSrcweir protected:
226cdf0e10cSrcweir     SvStream* pStrm;
227cdf0e10cSrcweir     SotStorageRef pStg;
228cdf0e10cSrcweir     com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg;
229cdf0e10cSrcweir     SfxMedium* pMedium;     // wer ein Medium haben will (W4W)
230cdf0e10cSrcweir 
231cdf0e10cSrcweir     SwgReaderOption aOpt;
232cdf0e10cSrcweir     sal_Bool bInsertMode : 1;
233cdf0e10cSrcweir     sal_Bool bTmplBrowseMode : 1;
234cdf0e10cSrcweir     sal_Bool bReadUTF8: 1;      // Stream als UTF-8 interpretieren
235cdf0e10cSrcweir     sal_Bool bBlockMode: 1;
236cdf0e10cSrcweir     sal_Bool bOrganizerMode : 1;
237cdf0e10cSrcweir     sal_Bool bHasAskTemplateName : 1;
238cdf0e10cSrcweir     sal_Bool bIgnoreHTMLComments : 1;
239cdf0e10cSrcweir 
240cdf0e10cSrcweir     virtual String GetTemplateName() const;
241cdf0e10cSrcweir 
242cdf0e10cSrcweir public:
243cdf0e10cSrcweir     Reader();
244cdf0e10cSrcweir     virtual ~Reader();
245cdf0e10cSrcweir 
246cdf0e10cSrcweir     virtual int GetReaderType();
GetReaderOpt()247cdf0e10cSrcweir     SwgReaderOption& GetReaderOpt() { return aOpt; }
248cdf0e10cSrcweir 
249cdf0e10cSrcweir     virtual void SetFltName( const String& rFltNm );
250cdf0e10cSrcweir     static void SetNoOutlineNum( SwDoc& rDoc );
251cdf0e10cSrcweir 
252cdf0e10cSrcweir     // den Item-Set eines Frm-Formats an das alte Format anpassen
253cdf0e10cSrcweir     static void ResetFrmFmtAttrs( SfxItemSet &rFrmSet );
254cdf0e10cSrcweir 
255cdf0e10cSrcweir     // die Rahmen-/Grafik-/OLE-Vorlagen an das alte Format (ohne
256cdf0e10cSrcweir     // Umrandung etc.) anpassen
257cdf0e10cSrcweir     static void ResetFrmFmts( SwDoc& rDoc );
258cdf0e10cSrcweir 
259cdf0e10cSrcweir     // Die Filter-Vorlage laden, setzen und wieder freigeben
260cdf0e10cSrcweir     SwDoc* GetTemplateDoc();
261cdf0e10cSrcweir     sal_Bool SetTemplate( SwDoc& rDoc );
262cdf0e10cSrcweir     void ClearTemplate();
263cdf0e10cSrcweir     void SetTemplateName( const String& rDir );
264cdf0e10cSrcweir     void MakeHTMLDummyTemplateDoc();
265cdf0e10cSrcweir 
IsReadUTF8() const266cdf0e10cSrcweir     sal_Bool IsReadUTF8() const { return bReadUTF8; }
SetReadUTF8(sal_Bool bSet)267cdf0e10cSrcweir     void SetReadUTF8( sal_Bool bSet ) { bReadUTF8 = bSet; }
268cdf0e10cSrcweir 
IsBlockMode() const269cdf0e10cSrcweir     sal_Bool IsBlockMode() const { return bBlockMode; }
SetBlockMode(sal_Bool bSet)270cdf0e10cSrcweir     void SetBlockMode( sal_Bool bSet ) { bBlockMode = bSet; }
271cdf0e10cSrcweir 
IsOrganizerMode() const272cdf0e10cSrcweir     sal_Bool IsOrganizerMode() const { return bOrganizerMode; }
SetOrganizerMode(sal_Bool bSet)273cdf0e10cSrcweir     void SetOrganizerMode( sal_Bool bSet ) { bOrganizerMode = bSet; }
274cdf0e10cSrcweir 
SetIgnoreHTMLComments(sal_Bool bSet)275cdf0e10cSrcweir     void SetIgnoreHTMLComments( sal_Bool bSet ) { bIgnoreHTMLComments = bSet; }
276cdf0e10cSrcweir 
277cdf0e10cSrcweir     virtual sal_Bool HasGlossaries() const;
278cdf0e10cSrcweir     virtual sal_Bool ReadGlossaries( SwTextBlocks&, sal_Bool bSaveRelFiles ) const;
279cdf0e10cSrcweir 
280cdf0e10cSrcweir     // read the sections of the document, which is equal to the medium.
281cdf0e10cSrcweir     // returns the count of it
282cdf0e10cSrcweir     virtual sal_uInt16 GetSectionList( SfxMedium& rMedium,
283cdf0e10cSrcweir                                     SvStrings& rStrings ) const;
284cdf0e10cSrcweir 
getSotStorageRef()285cdf0e10cSrcweir     SotStorageRef getSotStorageRef() { return pStg; };
setSotStorageRef(SotStorageRef pStgRef)286cdf0e10cSrcweir     void setSotStorageRef(SotStorageRef pStgRef) { pStg = pStgRef; };
287cdf0e10cSrcweir 
288cdf0e10cSrcweir private:
289cdf0e10cSrcweir     virtual sal_uLong Read(SwDoc &, const String& rBaseURL, SwPaM &,const String &)=0;
290cdf0e10cSrcweir 
291cdf0e10cSrcweir     // alle die die Streams / Storages nicht geoeffnet brauchen,
292cdf0e10cSrcweir     // muessen die Methode ueberladen (W4W!!)
293cdf0e10cSrcweir     virtual int SetStrmStgPtr();
294cdf0e10cSrcweir };
295cdf0e10cSrcweir 
296cdf0e10cSrcweir class AsciiReader: public Reader
297cdf0e10cSrcweir {
298cdf0e10cSrcweir     friend class SwReader;
299cdf0e10cSrcweir     virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &);
300cdf0e10cSrcweir public:
AsciiReader()301cdf0e10cSrcweir     AsciiReader(): Reader() {}
302cdf0e10cSrcweir };
303cdf0e10cSrcweir 
304cdf0e10cSrcweir /*class SwgReader: public Reader
305cdf0e10cSrcweir {
306cdf0e10cSrcweir     virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &);
307cdf0e10cSrcweir };
308cdf0e10cSrcweir */
309cdf0e10cSrcweir class SW_DLLPUBLIC StgReader : public Reader
310cdf0e10cSrcweir {
311cdf0e10cSrcweir     String aFltName;
312cdf0e10cSrcweir 
313cdf0e10cSrcweir protected:
314cdf0e10cSrcweir     sal_uLong OpenMainStream( SotStorageStreamRef& rRef, sal_uInt16& rBuffSize );
315cdf0e10cSrcweir 
316cdf0e10cSrcweir public:
317cdf0e10cSrcweir     virtual int GetReaderType();
GetFltName()318cdf0e10cSrcweir     const String& GetFltName() { return aFltName; }
319cdf0e10cSrcweir     virtual void SetFltName( const String& r );
320cdf0e10cSrcweir };
321cdf0e10cSrcweir 
322cdf0e10cSrcweir 
323cdf0e10cSrcweir /*class Sw3Reader : public StgReader
324cdf0e10cSrcweir {
325cdf0e10cSrcweir     Sw3Io* pIO;
326cdf0e10cSrcweir     virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &);
327cdf0e10cSrcweir public:
328cdf0e10cSrcweir     Sw3Reader() : pIO( 0 ) {}
329cdf0e10cSrcweir 
330cdf0e10cSrcweir     void   SetSw3Io( Sw3Io* pIo )     { pIO = pIo; }
331cdf0e10cSrcweir 
332cdf0e10cSrcweir     // read the sections of the document, which is equal to the medium.
333cdf0e10cSrcweir     // returns the count of it
334cdf0e10cSrcweir     virtual sal_uInt16 GetSectionList( SfxMedium& rMedium,
335cdf0e10cSrcweir                                 SvStrings& rStrings ) const;
336cdf0e10cSrcweir };*/
337cdf0e10cSrcweir 
338cdf0e10cSrcweir /*  */
339cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////
340cdf0e10cSrcweir 
341cdf0e10cSrcweir // Der uebergebene Stream muss dynamisch angelegt werden und
342cdf0e10cSrcweir // vor dem Loeschen der Instanz per Stream() angefordert
343cdf0e10cSrcweir // und geloescht werden!
344cdf0e10cSrcweir 
345cdf0e10cSrcweir class SwImpBlocks;
346cdf0e10cSrcweir 
347cdf0e10cSrcweir class SW_DLLPUBLIC SwTextBlocks
348cdf0e10cSrcweir {
349cdf0e10cSrcweir //  friend class Sw2TextBlocks;
350cdf0e10cSrcweir //  friend class Sw3IoImp;
351cdf0e10cSrcweir     SwImpBlocks* pImp;
352cdf0e10cSrcweir     sal_uLong        nErr;
353cdf0e10cSrcweir 
354cdf0e10cSrcweir public:
355cdf0e10cSrcweir     SwTextBlocks( const String& );
356cdf0e10cSrcweir     ~SwTextBlocks();
357cdf0e10cSrcweir 
Flush()358cdf0e10cSrcweir     void Flush(){}
359cdf0e10cSrcweir 
360cdf0e10cSrcweir     SwDoc* GetDoc();
361cdf0e10cSrcweir     void   ClearDoc();                  // Doc-Inhalt loeschen
362cdf0e10cSrcweir     const  String& GetName();
363cdf0e10cSrcweir     void   SetName( const String& );
GetError() const364cdf0e10cSrcweir     sal_uLong GetError() const { return nErr; }
365cdf0e10cSrcweir 
366cdf0e10cSrcweir     String GetBaseURL() const;
367cdf0e10cSrcweir     void   SetBaseURL( const String& rURL );
368cdf0e10cSrcweir 
369cdf0e10cSrcweir     sal_Bool   IsOld() const;
370cdf0e10cSrcweir     sal_uLong  ConvertToNew();              // Textbausteine konvertieren
371cdf0e10cSrcweir 
372cdf0e10cSrcweir     sal_uInt16 GetCount() const;                        // Anzahl Textbausteine ermitteln
373cdf0e10cSrcweir     sal_uInt16 GetIndex( const String& ) const;         // Index fuer Kurznamen ermitteln
374cdf0e10cSrcweir     sal_uInt16 GetLongIndex( const String& ) const;     //Index fuer Langnamen ermitteln
375cdf0e10cSrcweir     const  String& GetShortName( sal_uInt16 ) const;    // Kurzname fuer Index zurueck
376cdf0e10cSrcweir     const  String& GetLongName( sal_uInt16 ) const;     // Langname fuer Index zurueck
377cdf0e10cSrcweir 
378cdf0e10cSrcweir     sal_Bool   Delete( sal_uInt16 );            // Loeschen
379cdf0e10cSrcweir     sal_uInt16 Rename( sal_uInt16, const String*, const String* ); // Umbenennen
380cdf0e10cSrcweir     sal_uLong  CopyBlock( SwTextBlocks& rSource, String& rSrcShort,
381cdf0e10cSrcweir                                     const String& rLong ); // Block kopieren
382cdf0e10cSrcweir 
383cdf0e10cSrcweir     sal_Bool   BeginGetDoc( sal_uInt16 );           // Textbaustein einlesen
384cdf0e10cSrcweir     void   EndGetDoc();                     // Textbaustein wieder loslassen
385cdf0e10cSrcweir 
386cdf0e10cSrcweir     sal_Bool   BeginPutDoc( const String&, const String& ); // Speichern Beginn
387cdf0e10cSrcweir     sal_uInt16 PutDoc();                                // Speichern Ende
388cdf0e10cSrcweir 
389cdf0e10cSrcweir     sal_uInt16 PutText( const String&, const String&, const String& ); // Speichern( Kurzn., Text)
390cdf0e10cSrcweir 
391cdf0e10cSrcweir     sal_Bool IsOnlyTextBlock( sal_uInt16 ) const;
392cdf0e10cSrcweir     sal_Bool IsOnlyTextBlock( const String& rShort ) const;
393cdf0e10cSrcweir 
394cdf0e10cSrcweir     const String& GetFileName() const;      // Dateiname von pImp
395cdf0e10cSrcweir     sal_Bool IsReadOnly() const;                // ReadOnly-Flag von pImp
396cdf0e10cSrcweir 
397cdf0e10cSrcweir     sal_Bool GetMacroTable( sal_uInt16 nIdx, SvxMacroTableDtor& rMacroTbl );
398cdf0e10cSrcweir     sal_Bool SetMacroTable( sal_uInt16 nIdx, const SvxMacroTableDtor& rMacroTbl );
399cdf0e10cSrcweir 
400cdf0e10cSrcweir     sal_Bool StartPutMuchBlockEntries();
401cdf0e10cSrcweir     void EndPutMuchBlockEntries();
402cdf0e10cSrcweir };
403cdf0e10cSrcweir 
404cdf0e10cSrcweir // BEGIN source/filter/basflt/fltini.cxx
405cdf0e10cSrcweir 
406cdf0e10cSrcweir extern void _InitFilter();
407cdf0e10cSrcweir extern void _FinitFilter();
408cdf0e10cSrcweir 
409cdf0e10cSrcweir extern SwRead ReadAscii, /*ReadSwg, ReadSw3, */ReadHTML, ReadXML;
410cdf0e10cSrcweir 
411cdf0e10cSrcweir //SW_DLLPUBLIC SwRead SwGetReaderSw3();
412cdf0e10cSrcweir SW_DLLPUBLIC SwRead SwGetReaderXML();
413cdf0e10cSrcweir 
414cdf0e10cSrcweir // END source/filter/basflt/fltini.cxx
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 
417cdf0e10cSrcweir extern sal_Bool SetHTMLTemplate( SwDoc &rDoc ); //Fuer Vorlagen aus HTML.vor laden shellio.cxx
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 
420cdf0e10cSrcweir /*  */
421cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////////
422cdf0e10cSrcweir 
423cdf0e10cSrcweir /*
424cdf0e10cSrcweir  * Schreiben, Writer
425cdf0e10cSrcweir  */
426cdf0e10cSrcweir 
427cdf0e10cSrcweir 
428cdf0e10cSrcweir /* Basis-Klasse aller Writer */
429cdf0e10cSrcweir 
430cdf0e10cSrcweir class IDocumentSettingAccess;
431cdf0e10cSrcweir class IDocumentStylePoolAccess;
432cdf0e10cSrcweir 
433cdf0e10cSrcweir class SW_DLLPUBLIC Writer
434cdf0e10cSrcweir     : public SvRefBase
435cdf0e10cSrcweir     , private ::boost::noncopyable
436cdf0e10cSrcweir {
437cdf0e10cSrcweir     SwAsciiOptions aAscOpts;
438cdf0e10cSrcweir     String          sBaseURL;
439cdf0e10cSrcweir 
440cdf0e10cSrcweir     void _AddFontItem( SfxItemPool& rPool, const SvxFontItem& rFont );
441cdf0e10cSrcweir     void _AddFontItems( SfxItemPool& rPool, sal_uInt16 nWhichId );
442cdf0e10cSrcweir 
443cdf0e10cSrcweir     ::std::auto_ptr<Writer_Impl> m_pImpl;
444cdf0e10cSrcweir 
445cdf0e10cSrcweir protected:
446cdf0e10cSrcweir 
447cdf0e10cSrcweir     SwPaM* pOrigPam;            // der letze zu bearbeitende Pam
448cdf0e10cSrcweir     const String* pOrigFileName;
449cdf0e10cSrcweir 
450cdf0e10cSrcweir     void ResetWriter();
451cdf0e10cSrcweir     sal_Bool CopyNextPam( SwPaM ** );
452cdf0e10cSrcweir 
453cdf0e10cSrcweir     void PutNumFmtFontsInAttrPool();
454cdf0e10cSrcweir     void PutEditEngFontsInAttrPool( sal_Bool bIncl_CJK_CTL = sal_True );
455cdf0e10cSrcweir     void PutCJKandCTLFontsInAttrPool();
456cdf0e10cSrcweir 
457cdf0e10cSrcweir     virtual sal_uLong WriteStream() = 0;
SetBaseURL(const String & rURL)458cdf0e10cSrcweir     void                SetBaseURL( const String& rURL ) { sBaseURL = rURL; }
459cdf0e10cSrcweir 
460cdf0e10cSrcweir     IDocumentSettingAccess* getIDocumentSettingAccess();
461cdf0e10cSrcweir     const IDocumentSettingAccess* getIDocumentSettingAccess() const;
462cdf0e10cSrcweir 
463cdf0e10cSrcweir     IDocumentStylePoolAccess* getIDocumentStylePoolAccess();
464cdf0e10cSrcweir     const IDocumentStylePoolAccess* getIDocumentStylePoolAccess() const;
465cdf0e10cSrcweir 
466cdf0e10cSrcweir public:
467cdf0e10cSrcweir     SwDoc* pDoc;
468cdf0e10cSrcweir     SwPaM* pCurPam;
469cdf0e10cSrcweir     sal_Bool bWriteAll : 1;
470cdf0e10cSrcweir     sal_Bool bShowProgress : 1;
471cdf0e10cSrcweir     sal_Bool bWriteClipboardDoc : 1;
472cdf0e10cSrcweir     sal_Bool bWriteOnlyFirstTable : 1;
473cdf0e10cSrcweir     sal_Bool bASCII_ParaAsCR : 1;
474cdf0e10cSrcweir     sal_Bool bASCII_ParaAsBlanc : 1;
475cdf0e10cSrcweir     sal_Bool bASCII_NoLastLineEnd : 1;
476cdf0e10cSrcweir     sal_Bool bUCS2_WithStartChar : 1;
477cdf0e10cSrcweir     sal_Bool bExportPargraphNumbering : 1;
478cdf0e10cSrcweir 
479cdf0e10cSrcweir     sal_Bool bBlock : 1;
480cdf0e10cSrcweir     sal_Bool bOrganizerMode : 1;
481cdf0e10cSrcweir 
482cdf0e10cSrcweir     Writer();
483cdf0e10cSrcweir     virtual ~Writer();
484cdf0e10cSrcweir 
485cdf0e10cSrcweir     virtual sal_uLong Write( SwPaM&, SfxMedium&, const String* = 0 );
486cdf0e10cSrcweir             sal_uLong Write( SwPaM&, SvStream&,  const String* = 0 );
487cdf0e10cSrcweir     virtual sal_uLong Write( SwPaM&, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String* = 0, SfxMedium* = 0 );
488cdf0e10cSrcweir     virtual sal_uLong Write( SwPaM&, SotStorage&, const String* = 0 );
489cdf0e10cSrcweir 
490cdf0e10cSrcweir     virtual void SetPasswd( const String& );
491cdf0e10cSrcweir     virtual void SetVersion( const String&, long );
492cdf0e10cSrcweir     virtual sal_Bool IsStgWriter() const;
493cdf0e10cSrcweir //  virtual sal_Bool IsSw3Writer() const;
494cdf0e10cSrcweir 
SetShowProgress(sal_Bool bFlag=sal_False)495cdf0e10cSrcweir     void SetShowProgress( sal_Bool bFlag = sal_False )  { bShowProgress = bFlag; }
496cdf0e10cSrcweir 
GetOrigFileName() const497cdf0e10cSrcweir     const String* GetOrigFileName() const       { return pOrigFileName; }
498cdf0e10cSrcweir 
GetAsciiOptions() const499cdf0e10cSrcweir     const SwAsciiOptions& GetAsciiOptions() const { return aAscOpts; }
SetAsciiOptions(const SwAsciiOptions & rOpt)500cdf0e10cSrcweir     void SetAsciiOptions( const SwAsciiOptions& rOpt ) { aAscOpts = rOpt; }
501cdf0e10cSrcweir 
GetBaseURL() const502cdf0e10cSrcweir     const String&       GetBaseURL() const { return sBaseURL;}
503cdf0e10cSrcweir 
504cdf0e10cSrcweir     // suche die naechste Bookmark-Position aus der Bookmark-Tabelle
505cdf0e10cSrcweir     sal_Int32 FindPos_Bkmk( const SwPosition& rPos ) const;
506cdf0e10cSrcweir     // build a bookmark table, which is sort by the node position. The
507cdf0e10cSrcweir     // OtherPos of the bookmarks also inserted.
508cdf0e10cSrcweir     void CreateBookmarkTbl();
509cdf0e10cSrcweir     // search alle Bookmarks in the range and return it in the Array
510cdf0e10cSrcweir     sal_uInt16 GetBookmarks( const SwCntntNode& rNd,
511cdf0e10cSrcweir                         xub_StrLen nStt, xub_StrLen nEnd,
512cdf0e10cSrcweir                         SvPtrarr& rArr );
513cdf0e10cSrcweir 
514cdf0e10cSrcweir     // lege einen neuen PaM an der Position an
515cdf0e10cSrcweir     static SwPaM * NewSwPaM(SwDoc & rDoc,
516cdf0e10cSrcweir                             sal_uLong const nStartIdx, sal_uLong const nEndIdx);
517cdf0e10cSrcweir 
518cdf0e10cSrcweir     // kopiere ggfs. eine lokale Datei ins Internet
519cdf0e10cSrcweir     sal_Bool CopyLocalFileToINet( String& rFileNm );
520cdf0e10cSrcweir 
521cdf0e10cSrcweir     // Stream-spezifische Routinen, im Storage-Writer NICHT VERWENDEN!
522cdf0e10cSrcweir 
523cdf0e10cSrcweir     // Optimierung der Ausgabe auf den Stream.
524cdf0e10cSrcweir     SvStream& OutLong( SvStream& rStrm, long nVal );
525cdf0e10cSrcweir     SvStream& OutULong( SvStream& rStrm, sal_uLong nVal );
526cdf0e10cSrcweir 
527cdf0e10cSrcweir     // Hex-Zahl ausgeben, default ist 2.stellige Zahl
528cdf0e10cSrcweir     SvStream& OutHex( SvStream& rStrm, sal_uLong nHex, sal_uInt8 nLen = 2 );
529cdf0e10cSrcweir     // 4-st. Hex-Zahl ausgeben
OutHex4(SvStream & rStrm,sal_uInt16 nHex)530cdf0e10cSrcweir     inline SvStream& OutHex4( SvStream& rStrm, sal_uInt16 nHex )
531cdf0e10cSrcweir         {   return OutHex( rStrm, nHex, 4 ); }
532cdf0e10cSrcweir 
OutHex(sal_uInt16 nHex,sal_uInt8 nLen=2)533cdf0e10cSrcweir     inline SvStream& OutHex( sal_uInt16 nHex, sal_uInt8 nLen = 2 )      { return OutHex( Strm(), nHex, nLen ); }
OutHex4(sal_uInt16 nHex)534cdf0e10cSrcweir     inline SvStream& OutHex4( sal_uInt16 nHex )     { return OutHex( Strm(), nHex, 4 ); }
OutLong(long nVal)535cdf0e10cSrcweir     inline SvStream& OutLong( long nVal )       { return OutLong( Strm(), nVal ); }
OutULong(sal_uLong nVal)536cdf0e10cSrcweir     inline SvStream& OutULong( sal_uLong nVal )     { return OutULong( Strm(), nVal ); }
537cdf0e10cSrcweir 
538cdf0e10cSrcweir     void SetStream(SvStream *const pStream);
539cdf0e10cSrcweir     SvStream& Strm();
540cdf0e10cSrcweir 
SetOrganizerMode(sal_Bool bSet)541cdf0e10cSrcweir     void SetOrganizerMode( sal_Bool bSet ) { bOrganizerMode = bSet; }
542cdf0e10cSrcweir };
543cdf0e10cSrcweir 
544cdf0e10cSrcweir #ifndef SW_DECL_WRITER_DEFINED
545cdf0e10cSrcweir #define SW_DECL_WRITER_DEFINED
546cdf0e10cSrcweir SV_DECL_REF(Writer)
547cdf0e10cSrcweir #endif
548cdf0e10cSrcweir SV_IMPL_REF(Writer)
549cdf0e10cSrcweir 
550cdf0e10cSrcweir // Basisklasse fuer alle Storage-Writer
551cdf0e10cSrcweir class SW_DLLPUBLIC StgWriter : public Writer
552cdf0e10cSrcweir {
553cdf0e10cSrcweir protected:
554cdf0e10cSrcweir     String aFltName;
555cdf0e10cSrcweir     SotStorageRef pStg;
556cdf0e10cSrcweir     com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg;
557cdf0e10cSrcweir 
558cdf0e10cSrcweir     // Fehler beim Aufruf erzeugen
559cdf0e10cSrcweir     virtual sal_uLong WriteStream();
560cdf0e10cSrcweir     virtual sal_uLong WriteStorage() = 0;
561cdf0e10cSrcweir     virtual sal_uLong WriteMedium( SfxMedium& ) = 0;
562cdf0e10cSrcweir 
563cdf0e10cSrcweir     using Writer::Write;
564cdf0e10cSrcweir 
565cdf0e10cSrcweir public:
StgWriter()566cdf0e10cSrcweir     StgWriter() : Writer() {}
567cdf0e10cSrcweir 
568cdf0e10cSrcweir     virtual sal_Bool IsStgWriter() const;
569cdf0e10cSrcweir 
570cdf0e10cSrcweir     virtual sal_uLong Write( SwPaM&, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String* = 0, SfxMedium* = 0 );
571cdf0e10cSrcweir     virtual sal_uLong Write( SwPaM&, SotStorage&, const String* = 0 );
572cdf0e10cSrcweir 
GetStorage() const573cdf0e10cSrcweir     SotStorage& GetStorage() const       { return *pStg; }
574cdf0e10cSrcweir };
575cdf0e10cSrcweir 
576cdf0e10cSrcweir /*class Sw3Writer : public StgWriter
577cdf0e10cSrcweir {
578cdf0e10cSrcweir     Sw3Io* pIO;
579cdf0e10cSrcweir     sal_Bool bSaveAs : 1;
580cdf0e10cSrcweir 
581cdf0e10cSrcweir     virtual sal_uLong WriteStorage();
582cdf0e10cSrcweir     virtual sal_uLong WriteMedium( SfxMedium& );
583cdf0e10cSrcweir 
584cdf0e10cSrcweir public:
585cdf0e10cSrcweir     Sw3Writer() : pIO( 0 ), bSaveAs( sal_False ) {}
586cdf0e10cSrcweir 
587cdf0e10cSrcweir     virtual sal_Bool IsSw3Writer() const;
588cdf0e10cSrcweir };
589cdf0e10cSrcweir 
590cdf0e10cSrcweir */
591cdf0e10cSrcweir 
592cdf0e10cSrcweir // Schnittstellenklasse fuer den allgemeinen Zugriff auf die
593cdf0e10cSrcweir // speziellen Writer
594cdf0e10cSrcweir 
595cdf0e10cSrcweir class SwWriter
596cdf0e10cSrcweir {
597cdf0e10cSrcweir     SvStream* pStrm;
598cdf0e10cSrcweir     SotStorageRef pStg;
599cdf0e10cSrcweir     com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg;
600cdf0e10cSrcweir     SfxMedium* pMedium;
601cdf0e10cSrcweir 
602cdf0e10cSrcweir     SwPaM* pOutPam;
603cdf0e10cSrcweir     SwCrsrShell *pShell;
604cdf0e10cSrcweir     SwDoc &rDoc;
605cdf0e10cSrcweir 
606cdf0e10cSrcweir     //String sBaseURL;
607cdf0e10cSrcweir 
608cdf0e10cSrcweir     sal_Bool bWriteAll;
609cdf0e10cSrcweir 
610cdf0e10cSrcweir public:
611cdf0e10cSrcweir     sal_uLong Write( WriterRef& rxWriter, const String* = 0);
612cdf0e10cSrcweir 
613cdf0e10cSrcweir     SwWriter( SvStream&, SwCrsrShell &,sal_Bool bWriteAll = sal_False );
614cdf0e10cSrcweir     SwWriter( SvStream&, SwDoc & );
615cdf0e10cSrcweir     SwWriter( SvStream&, SwPaM &, sal_Bool bWriteAll = sal_False );
616cdf0e10cSrcweir 
617cdf0e10cSrcweir //  SwWriter( SotStorage&, SwCrsrShell &,sal_Bool bWriteAll = sal_False );
618cdf0e10cSrcweir     SwWriter( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, SwDoc& );
619cdf0e10cSrcweir //  SwWriter( SotStorage&, SwPaM&, sal_Bool bWriteAll = sal_False );
620cdf0e10cSrcweir 
621cdf0e10cSrcweir     SwWriter( SfxMedium&, SwCrsrShell &,sal_Bool bWriteAll = sal_False );
622cdf0e10cSrcweir     SwWriter( SfxMedium&, SwDoc & );
623cdf0e10cSrcweir //  SwWriter( SfxMedium&, SwPaM&, sal_Bool bWriteAll = sal_False );
624cdf0e10cSrcweir 
625cdf0e10cSrcweir     //const String&       GetBaseURL() const { return sBaseURL;}
626cdf0e10cSrcweir };
627cdf0e10cSrcweir 
628cdf0e10cSrcweir 
629cdf0e10cSrcweir /*  */
630cdf0e10cSrcweir /////////////////////////////////////////////////////////////////////////////
631cdf0e10cSrcweir 
632cdf0e10cSrcweir typedef Reader* (*FnGetReader)();
633cdf0e10cSrcweir typedef void (*FnGetWriter)(const String&, const String& rBaseURL, WriterRef&);
634cdf0e10cSrcweir sal_uLong SaveOrDelMSVBAStorage( SfxObjectShell&, SotStorage&, sal_Bool, const String& );
635cdf0e10cSrcweir sal_uLong GetSaveWarningOfMSVBAStorage( SfxObjectShell &rDocS );
636cdf0e10cSrcweir 
637cdf0e10cSrcweir struct SwReaderWriterEntry
638cdf0e10cSrcweir {
639cdf0e10cSrcweir     Reader* pReader;
640cdf0e10cSrcweir     FnGetReader fnGetReader;
641cdf0e10cSrcweir     FnGetWriter fnGetWriter;
642cdf0e10cSrcweir     sal_Bool bDelReader;
643cdf0e10cSrcweir 
SwReaderWriterEntrySwReaderWriterEntry644cdf0e10cSrcweir     SwReaderWriterEntry( const FnGetReader fnReader, const FnGetWriter fnWriter, sal_Bool bDel )
645cdf0e10cSrcweir         : pReader( NULL ), fnGetReader( fnReader ), fnGetWriter( fnWriter ), bDelReader( bDel )
646cdf0e10cSrcweir     {}
647cdf0e10cSrcweir 
648cdf0e10cSrcweir     /// Get access to the reader
649cdf0e10cSrcweir     Reader* GetReader();
650cdf0e10cSrcweir 
651cdf0e10cSrcweir     /// Get access to the writer
652cdf0e10cSrcweir     void GetWriter( const String& rNm, const String& rBaseURL, WriterRef& xWrt ) const;
653cdf0e10cSrcweir };
654cdf0e10cSrcweir 
655cdf0e10cSrcweir namespace SwReaderWriter
656cdf0e10cSrcweir {
657cdf0e10cSrcweir     /// Return reader based on ReaderWriterEnum
658cdf0e10cSrcweir     Reader* GetReader( ReaderWriterEnum eReader );
659cdf0e10cSrcweir 
660cdf0e10cSrcweir     /// Return reader based on the name
661cdf0e10cSrcweir     Reader* GetReader( const String& rFltName );
662cdf0e10cSrcweir 
663cdf0e10cSrcweir     /// Return writer based on the name
664cdf0e10cSrcweir     void GetWriter( const String& rFltName, const String& rBaseURL, WriterRef& xWrt );
665cdf0e10cSrcweir }
666cdf0e10cSrcweir 
667cdf0e10cSrcweir void GetRTFWriter( const String&, const String&, WriterRef& );
668cdf0e10cSrcweir void GetASCWriter( const String&, const String&, WriterRef& );
669cdf0e10cSrcweir //void GetSw3Writer( const String&, const String&, WriterRef& );
670cdf0e10cSrcweir void GetHTMLWriter( const String&, const String&, WriterRef& );
671cdf0e10cSrcweir void GetXMLWriter( const String&, const String&, WriterRef& );
672cdf0e10cSrcweir void GetWW8Writer( const String&, const String&, WriterRef& );
673cdf0e10cSrcweir 
674cdf0e10cSrcweir #endif
675