1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef SW_SHELLIO_HXX 24 #define SW_SHELLIO_HXX 25 26 #include <memory> 27 #include <boost/utility.hpp> 28 29 #include <com/sun/star/uno/Reference.h> 30 #include <com/sun/star/embed/XStorage.hpp> 31 #include <sfx2/docfile.hxx> 32 #include <sfx2/fcontnr.hxx> 33 #include <sot/formats.hxx> 34 #include <sot/storage.hxx> 35 #include <svtools/parhtml.hxx> 36 #include <tools/string.hxx> 37 #include <tools/date.hxx> 38 #include <tools/time.hxx> 39 #include <tools/datetime.hxx> 40 #include <tools/ref.hxx> 41 #include <tools/urlobj.hxx> 42 #include <swdllapi.h> 43 #include <swtypes.hxx> 44 #include <docfac.hxx> // SwDocFac 45 #include <errhdl.hxx> 46 #include <iodetect.hxx> 47 48 // some forward declarations 49 class SfxFilterContainer; 50 class SfxFilter; 51 class SfxItemPool; 52 class SfxItemSet; 53 class SfxMedium; 54 class SvPtrarr; 55 class SvStream; 56 class SvStrings; 57 class SvxFontItem; 58 class SvxMacroTableDtor; 59 //class Sw3Io; 60 class SwCntntNode; 61 class SwCrsrShell; 62 class SwDoc; 63 class SwPaM; 64 class SwTextBlocks; 65 struct SwPosition; 66 struct Writer_Impl; 67 68 //defines the amount of maximal characters in a paragraph. 69 //The force wrap is done by ASCII/W4W-reader. Must be greater than 200 70 #define MAX_ASCII_PARA 10000 71 72 73 class SW_DLLPUBLIC SwAsciiOptions 74 { 75 String sFont; 76 rtl_TextEncoding eCharSet; 77 sal_uInt16 nLanguage; 78 LineEnd eCRLF_Flag; 79 80 public: 81 GetFontName() const82 const String& GetFontName() const { return sFont; } SetFontName(const String & rFont)83 void SetFontName( const String& rFont ) { sFont = rFont; } 84 GetCharSet() const85 rtl_TextEncoding GetCharSet() const { return eCharSet; } SetCharSet(rtl_TextEncoding nVal)86 void SetCharSet( rtl_TextEncoding nVal ) { eCharSet = nVal; } 87 GetLanguage() const88 sal_uInt16 GetLanguage() const { return nLanguage; } SetLanguage(sal_uInt16 nVal)89 void SetLanguage( sal_uInt16 nVal ) { nLanguage = nVal; } 90 GetParaFlags() const91 LineEnd GetParaFlags() const { return eCRLF_Flag; } SetParaFlags(LineEnd eVal)92 void SetParaFlags( LineEnd eVal ) { eCRLF_Flag = eVal; } 93 Reset()94 void Reset() 95 { 96 sFont.Erase(); 97 eCRLF_Flag = GetSystemLineEnd(); 98 eCharSet = ::gsl_getSystemTextEncoding(); 99 nLanguage = 0; 100 } 101 // for the automatic conversion (mail/news/...) 102 void ReadUserData( const String& ); 103 void WriteUserData( String& ); 104 SwAsciiOptions()105 SwAsciiOptions() { Reset(); } 106 }; 107 108 /**************** SwReader/Reader ************************/ 109 // base class for different specialized readers 110 class Reader; 111 // calls the reader with its options, document, cursor etc. 112 class SwReader; 113 // SwRead is a pointer on the read options of the base class 114 typedef Reader *SwRead; 115 116 class SwgReaderOption 117 { 118 SwAsciiOptions aASCIIOpts; 119 union 120 { 121 sal_Bool bFmtsOnly; 122 struct 123 { 124 sal_Bool bFrmFmts: 1; 125 sal_Bool bPageDescs: 1; 126 sal_Bool bTxtFmts: 1; 127 sal_Bool bNumRules: 1; 128 sal_Bool bMerge:1; 129 } Fmts; 130 } What; 131 132 public: ResetAllFmtsOnly()133 void ResetAllFmtsOnly() { What.bFmtsOnly = 0; } IsFmtsOnly() const134 sal_Bool IsFmtsOnly() const { return What.bFmtsOnly; } 135 IsFrmFmts() const136 sal_Bool IsFrmFmts() const { return What.Fmts.bFrmFmts; } SetFrmFmts(const sal_Bool bNew)137 void SetFrmFmts( const sal_Bool bNew) { What.Fmts.bFrmFmts = bNew; } 138 IsPageDescs() const139 sal_Bool IsPageDescs() const { return What.Fmts.bPageDescs; } SetPageDescs(const sal_Bool bNew)140 void SetPageDescs( const sal_Bool bNew) { What.Fmts.bPageDescs = bNew; } 141 IsTxtFmts() const142 sal_Bool IsTxtFmts() const { return What.Fmts.bTxtFmts; } SetTxtFmts(const sal_Bool bNew)143 void SetTxtFmts( const sal_Bool bNew) { What.Fmts.bTxtFmts = bNew; } 144 IsNumRules() const145 sal_Bool IsNumRules() const { return What.Fmts.bNumRules; } SetNumRules(const sal_Bool bNew)146 void SetNumRules( const sal_Bool bNew) { What.Fmts.bNumRules = bNew; } 147 IsMerge() const148 sal_Bool IsMerge() const { return What.Fmts.bMerge; } SetMerge(const sal_Bool bNew)149 void SetMerge( const sal_Bool bNew ) { What.Fmts.bMerge = bNew; } 150 GetASCIIOpts() const151 const SwAsciiOptions& GetASCIIOpts() const { return aASCIIOpts; } SetASCIIOpts(const SwAsciiOptions & rOpts)152 void SetASCIIOpts( const SwAsciiOptions& rOpts ) { aASCIIOpts = rOpts; } ResetASCIIOpts()153 void ResetASCIIOpts() { aASCIIOpts.Reset(); } 154 SwgReaderOption()155 SwgReaderOption() 156 { ResetAllFmtsOnly(); aASCIIOpts.Reset(); } 157 }; 158 159 class SwReader: public SwDocFac 160 { 161 SvStream* pStrm; 162 SotStorageRef pStg; 163 com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg; 164 SfxMedium* pMedium; // describes file or storage (W4W) 165 166 SwPaM* pCrsr; 167 String aFileName; 168 String sBaseURL; 169 170 public: 171 /* 172 * Initial read. Document is created when function Read(...) is called 173 * JP 25.04.95: or if it has been passed in that one. 174 * special case if loaded with Sw3Reader 175 */ 176 //SwReader( SotStorage&, const String& rFilename, SwDoc *pDoc = 0 ); 177 //SwReader( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String& rFilename, SwDoc *pDoc = 0 ); 178 SwReader( SfxMedium&, const String& rFilename, SwDoc *pDoc = 0 ); 179 /* 180 * read into an existing document. Document and 181 * position within the document are taken from SwPaM. 182 */ 183 SwReader( SvStream&, const String& rFilename, const String& rBaseURL, SwPaM& ); 184 //SwReader( SotStorage&, const String& rFilename, SwPaM& ); 185 SwReader( SfxMedium&, const String& rFilename, SwPaM& ); 186 SwReader( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String& rFilename, SwPaM& ); 187 188 /* 189 * only SwReader::Read(...) is the Export-Interface!!! 190 */ 191 sal_Bool NeedsPasswd( const Reader& ); 192 sal_Bool CheckPasswd( const String&, const Reader& ); 193 sal_uLong Read( const Reader& ); 194 195 // ask for glossaries 196 sal_Bool HasGlossaries( const Reader& ); 197 sal_Bool ReadGlossaries( const Reader&, SwTextBlocks&, sal_Bool bSaveRelFiles ); 198 GetBaseURL() const199 const String& GetBaseURL() const { return sBaseURL;} 200 201 protected: SetBaseURL(const String & rURL)202 void SetBaseURL( const String& rURL ) { sBaseURL = rURL; } 203 }; 204 205 206 207 /* */ 208 /**************** SPECIAL Readers ************************/ 209 210 // special - Reader can be both!! (Excel, W4W, .. ) 211 #define SW_STREAM_READER 1 212 #define SW_STORAGE_READER 2 213 214 class SW_DLLPUBLIC Reader 215 { 216 friend class SwReader; 217 SwDoc* pTemplate; 218 String aTemplateNm; 219 //String sBaseURL; 220 221 Date aDStamp; 222 Time aTStamp; 223 DateTime aChkDateTime; 224 225 protected: 226 SvStream* pStrm; 227 SotStorageRef pStg; 228 com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg; 229 SfxMedium* pMedium; // describes file or storage (W4W) 230 231 SwgReaderOption aOpt; 232 sal_Bool bInsertMode : 1; 233 sal_Bool bTmplBrowseMode : 1; 234 sal_Bool bReadUTF8: 1; // interpreted stream as UTF-8 235 sal_Bool bBlockMode: 1; 236 sal_Bool bOrganizerMode : 1; 237 sal_Bool bHasAskTemplateName : 1; 238 sal_Bool bIgnoreHTMLComments : 1; 239 240 virtual String GetTemplateName() const; 241 242 public: 243 Reader(); 244 virtual ~Reader(); 245 246 virtual int GetReaderType(); GetReaderOpt()247 SwgReaderOption& GetReaderOpt() { return aOpt; } 248 249 virtual void SetFltName( const String& rFltNm ); 250 static void SetNoOutlineNum( SwDoc& rDoc ); 251 252 // fit the item-set of a Frm-Formats to the old Format 253 static void ResetFrmFmtAttrs( SfxItemSet &rFrmSet ); 254 255 // convert frame /graphic-/OLE-Templates to old Format (without border etc.) 256 static void ResetFrmFmts( SwDoc& rDoc ); 257 258 // load filter-template, position it and then set it free again 259 SwDoc* GetTemplateDoc(); 260 sal_Bool SetTemplate( SwDoc& rDoc ); 261 void ClearTemplate(); 262 void SetTemplateName( const String& rDir ); 263 void MakeHTMLDummyTemplateDoc(); 264 IsReadUTF8() const265 sal_Bool IsReadUTF8() const { return bReadUTF8; } SetReadUTF8(sal_Bool bSet)266 void SetReadUTF8( sal_Bool bSet ) { bReadUTF8 = bSet; } 267 IsBlockMode() const268 sal_Bool IsBlockMode() const { return bBlockMode; } SetBlockMode(sal_Bool bSet)269 void SetBlockMode( sal_Bool bSet ) { bBlockMode = bSet; } 270 IsOrganizerMode() const271 sal_Bool IsOrganizerMode() const { return bOrganizerMode; } SetOrganizerMode(sal_Bool bSet)272 void SetOrganizerMode( sal_Bool bSet ) { bOrganizerMode = bSet; } 273 SetIgnoreHTMLComments(sal_Bool bSet)274 void SetIgnoreHTMLComments( sal_Bool bSet ) { bIgnoreHTMLComments = bSet; } 275 276 virtual sal_Bool HasGlossaries() const; 277 virtual sal_Bool ReadGlossaries( SwTextBlocks&, sal_Bool bSaveRelFiles ) const; 278 279 // read the sections of the document, which is equal to the medium. 280 // returns the count of it 281 virtual sal_uInt16 GetSectionList( SfxMedium& rMedium, 282 SvStrings& rStrings ) const; 283 getSotStorageRef()284 SotStorageRef getSotStorageRef() { return pStg; }; setSotStorageRef(SotStorageRef pStgRef)285 void setSotStorageRef(SotStorageRef pStgRef) { pStg = pStgRef; }; 286 287 private: 288 virtual sal_uLong Read(SwDoc &, const String& rBaseURL, SwPaM &,const String &)=0; 289 290 // all streams / storages that do need to open it must overload the method 291 // (W4W!!) 292 virtual int SetStrmStgPtr(); 293 }; 294 295 class AsciiReader: public Reader 296 { 297 friend class SwReader; 298 virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &); 299 public: AsciiReader()300 AsciiReader(): Reader() {} 301 }; 302 303 /*class SwgReader: public Reader 304 { 305 virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &); 306 }; 307 */ 308 class SW_DLLPUBLIC StgReader : public Reader 309 { 310 String aFltName; 311 312 protected: 313 sal_uLong OpenMainStream( SotStorageStreamRef& rRef, sal_uInt16& rBuffSize ); 314 315 public: 316 virtual int GetReaderType(); GetFltName()317 const String& GetFltName() { return aFltName; } 318 virtual void SetFltName( const String& r ); 319 }; 320 321 322 /*class Sw3Reader : public StgReader 323 { 324 Sw3Io* pIO; 325 virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &); 326 public: 327 Sw3Reader() : pIO( 0 ) {} 328 329 void SetSw3Io( Sw3Io* pIo ) { pIO = pIo; } 330 331 // read the sections of the document, which is equal to the medium. 332 // returns the count of it 333 virtual sal_uInt16 GetSectionList( SfxMedium& rMedium, 334 SvStrings& rStrings ) const; 335 };*/ 336 337 /* */ 338 //////////////////////////////////////////////////////////////////////////// 339 // The passed stream has to be dynamic created and before deletion of the 340 // instance per Stream() requested and deleted! 341 342 class SwImpBlocks; 343 344 class SW_DLLPUBLIC SwTextBlocks 345 { 346 // friend class Sw2TextBlocks; 347 // friend class Sw3IoImp; 348 SwImpBlocks* pImp; 349 sal_uLong nErr; 350 351 public: 352 SwTextBlocks( const String& ); 353 ~SwTextBlocks(); 354 Flush()355 void Flush(){} 356 357 SwDoc* GetDoc(); 358 void ClearDoc(); // delete doc content 359 const String& GetName(); 360 void SetName( const String& ); GetError() const361 sal_uLong GetError() const { return nErr; } 362 363 String GetBaseURL() const; 364 void SetBaseURL( const String& rURL ); 365 366 sal_Bool IsOld() const; 367 sal_uLong ConvertToNew(); // convert AutoText entries (ger: Textbausteine) 368 369 sal_uInt16 GetCount() const; // return amount of AutoText entries 370 sal_uInt16 GetIndex( const String& ) const; // return Index-Number of short names 371 sal_uInt16 GetLongIndex( const String& ) const; //return Index-Number of long names 372 const String& GetShortName( sal_uInt16 ) const; // return a short name of an index 373 const String& GetLongName( sal_uInt16 ) const; // return long name of an index 374 375 sal_Bool Delete( sal_uInt16 ); // delete 376 sal_uInt16 Rename( sal_uInt16, const String*, const String* ); // rename 377 sal_uLong CopyBlock( SwTextBlocks& rSource, String& rSrcShort, 378 const String& rLong ); // copy block 379 380 sal_Bool BeginGetDoc( sal_uInt16 ); // read AutoText entry 381 void EndGetDoc(); // release AutoText entry 382 383 sal_Bool BeginPutDoc( const String&, const String& ); // start save 384 sal_uInt16 PutDoc(); // End save 385 386 sal_uInt16 PutText( const String&, const String&, const String& ); // save (shortname, Text) 387 388 sal_Bool IsOnlyTextBlock( sal_uInt16 ) const; 389 sal_Bool IsOnlyTextBlock( const String& rShort ) const; 390 391 const String& GetFileName() const; // filename of pImp 392 sal_Bool IsReadOnly() const; // ReadOnly-Flag of pImp 393 394 sal_Bool GetMacroTable( sal_uInt16 nIdx, SvxMacroTableDtor& rMacroTbl ); 395 sal_Bool SetMacroTable( sal_uInt16 nIdx, const SvxMacroTableDtor& rMacroTbl ); 396 397 sal_Bool StartPutMuchBlockEntries(); 398 void EndPutMuchBlockEntries(); 399 }; 400 401 // BEGIN source/filter/basflt/fltini.cxx 402 403 extern void _InitFilter(); 404 extern void _FinitFilter(); 405 406 extern SwRead ReadAscii, /*ReadSwg, ReadSw3, */ReadHTML, ReadXML; 407 408 //SW_DLLPUBLIC SwRead SwGetReaderSw3(); 409 SW_DLLPUBLIC SwRead SwGetReaderXML(); 410 411 // END source/filter/basflt/fltini.cxx 412 413 414 extern sal_Bool SetHTMLTemplate( SwDoc &rDoc ); // load templates from HTML.vor (see shellio.cxx) 415 416 417 /* */ 418 ///////////////////////////////////////////////////////////////////////////// 419 420 /* 421 * write, Writer 422 */ 423 424 425 /* base class of all Writer */ 426 427 class IDocumentSettingAccess; 428 class IDocumentStylePoolAccess; 429 430 class SW_DLLPUBLIC Writer 431 : public SvRefBase 432 , private ::boost::noncopyable 433 { 434 SwAsciiOptions aAscOpts; 435 String sBaseURL; 436 437 void _AddFontItem( SfxItemPool& rPool, const SvxFontItem& rFont ); 438 void _AddFontItems( SfxItemPool& rPool, sal_uInt16 nWhichId ); 439 440 ::std::auto_ptr<Writer_Impl> m_pImpl; 441 442 protected: 443 444 SwPaM* pOrigPam; // last Pam to work on 445 const String* pOrigFileName; 446 447 void ResetWriter(); 448 sal_Bool CopyNextPam( SwPaM ** ); 449 450 void PutNumFmtFontsInAttrPool(); 451 void PutEditEngFontsInAttrPool( sal_Bool bIncl_CJK_CTL = sal_True ); 452 void PutCJKandCTLFontsInAttrPool(); 453 454 virtual sal_uLong WriteStream() = 0; SetBaseURL(const String & rURL)455 void SetBaseURL( const String& rURL ) { sBaseURL = rURL; } 456 457 IDocumentSettingAccess* getIDocumentSettingAccess(); 458 const IDocumentSettingAccess* getIDocumentSettingAccess() const; 459 460 IDocumentStylePoolAccess* getIDocumentStylePoolAccess(); 461 const IDocumentStylePoolAccess* getIDocumentStylePoolAccess() const; 462 463 public: 464 SwDoc* pDoc; 465 SwPaM* pCurPam; 466 sal_Bool bWriteAll : 1; 467 sal_Bool bShowProgress : 1; 468 sal_Bool bWriteClipboardDoc : 1; 469 sal_Bool bWriteOnlyFirstTable : 1; 470 sal_Bool bASCII_ParaAsCR : 1; 471 sal_Bool bASCII_ParaAsBlanc : 1; 472 sal_Bool bASCII_NoLastLineEnd : 1; 473 sal_Bool bUCS2_WithStartChar : 1; 474 sal_Bool bExportPargraphNumbering : 1; 475 476 sal_Bool bBlock : 1; 477 sal_Bool bOrganizerMode : 1; 478 479 Writer(); 480 virtual ~Writer(); 481 482 virtual sal_uLong Write( SwPaM&, SfxMedium&, const String* = 0 ); 483 sal_uLong Write( SwPaM&, SvStream&, const String* = 0 ); 484 virtual sal_uLong Write( SwPaM&, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String* = 0, SfxMedium* = 0 ); 485 virtual sal_uLong Write( SwPaM&, SotStorage&, const String* = 0 ); 486 487 virtual void SetPasswd( const String& ); 488 virtual void SetVersion( const String&, long ); 489 virtual sal_Bool IsStgWriter() const; 490 // virtual sal_Bool IsSw3Writer() const; 491 SetShowProgress(sal_Bool bFlag=sal_False)492 void SetShowProgress( sal_Bool bFlag = sal_False ) { bShowProgress = bFlag; } 493 GetOrigFileName() const494 const String* GetOrigFileName() const { return pOrigFileName; } 495 GetAsciiOptions() const496 const SwAsciiOptions& GetAsciiOptions() const { return aAscOpts; } SetAsciiOptions(const SwAsciiOptions & rOpt)497 void SetAsciiOptions( const SwAsciiOptions& rOpt ) { aAscOpts = rOpt; } 498 GetBaseURL() const499 const String& GetBaseURL() const { return sBaseURL;} 500 501 // search next bookmark position from the bookmark table 502 sal_Int32 FindPos_Bkmk( const SwPosition& rPos ) const; 503 // build a bookmark table, which is sorted by the node position. The 504 // OtherPos of the bookmarks also inserted. 505 void CreateBookmarkTbl(); 506 // search all bookmarks in the range and return it in the Array 507 sal_uInt16 GetBookmarks( const SwCntntNode& rNd, 508 xub_StrLen nStt, xub_StrLen nEnd, 509 SvPtrarr& rArr ); 510 511 // create a new PaM at the position 512 static SwPaM * NewSwPaM(SwDoc & rDoc, 513 sal_uLong const nStartIdx, sal_uLong const nEndIdx); 514 515 // if applicable, copy a local file into internet / cloud 516 sal_Bool CopyLocalFileToINet( String& rFileNm ); 517 518 // Stream-specific routines, DO NOT USE in Storage-Writer! 519 520 // Optimizing output on stream 521 SvStream& OutLong( SvStream& rStrm, long nVal ); 522 SvStream& OutULong( SvStream& rStrm, sal_uLong nVal ); 523 524 // print hexadecimal number, default is 2-digit number 525 SvStream& OutHex( SvStream& rStrm, sal_uLong nHex, sal_uInt8 nLen = 2 ); 526 // print 4-digit hexadecimal number OutHex4(SvStream & rStrm,sal_uInt16 nHex)527 inline SvStream& OutHex4( SvStream& rStrm, sal_uInt16 nHex ) 528 { return OutHex( rStrm, nHex, 4 ); } 529 OutHex(sal_uInt16 nHex,sal_uInt8 nLen=2)530 inline SvStream& OutHex( sal_uInt16 nHex, sal_uInt8 nLen = 2 ) { return OutHex( Strm(), nHex, nLen ); } OutHex4(sal_uInt16 nHex)531 inline SvStream& OutHex4( sal_uInt16 nHex ) { return OutHex( Strm(), nHex, 4 ); } OutLong(long nVal)532 inline SvStream& OutLong( long nVal ) { return OutLong( Strm(), nVal ); } OutULong(sal_uLong nVal)533 inline SvStream& OutULong( sal_uLong nVal ) { return OutULong( Strm(), nVal ); } 534 535 void SetStream(SvStream *const pStream); 536 SvStream& Strm(); 537 SetOrganizerMode(sal_Bool bSet)538 void SetOrganizerMode( sal_Bool bSet ) { bOrganizerMode = bSet; } 539 }; 540 541 #ifndef SW_DECL_WRITER_DEFINED 542 #define SW_DECL_WRITER_DEFINED 543 SV_DECL_REF(Writer) 544 #endif 545 SV_IMPL_REF(Writer) 546 547 // baseclass of all Storage-Writer 548 class SW_DLLPUBLIC StgWriter : public Writer 549 { 550 protected: 551 String aFltName; 552 SotStorageRef pStg; 553 com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg; 554 555 // create error at call 556 virtual sal_uLong WriteStream(); 557 virtual sal_uLong WriteStorage() = 0; 558 virtual sal_uLong WriteMedium( SfxMedium& ) = 0; 559 560 using Writer::Write; 561 562 public: StgWriter()563 StgWriter() : Writer() {} 564 565 virtual sal_Bool IsStgWriter() const; 566 567 virtual sal_uLong Write( SwPaM&, const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, const String* = 0, SfxMedium* = 0 ); 568 virtual sal_uLong Write( SwPaM&, SotStorage&, const String* = 0 ); 569 GetStorage() const570 SotStorage& GetStorage() const { return *pStg; } 571 }; 572 573 /*class Sw3Writer : public StgWriter 574 { 575 Sw3Io* pIO; 576 sal_Bool bSaveAs : 1; 577 578 virtual sal_uLong WriteStorage(); 579 virtual sal_uLong WriteMedium( SfxMedium& ); 580 581 public: 582 Sw3Writer() : pIO( 0 ), bSaveAs( sal_False ) {} 583 584 virtual sal_Bool IsSw3Writer() const; 585 }; 586 587 */ 588 589 // Interface class for a generic access on special writer 590 591 class SwWriter 592 { 593 SvStream* pStrm; 594 SotStorageRef pStg; 595 com::sun::star::uno::Reference < com::sun::star::embed::XStorage > xStg; 596 SfxMedium* pMedium; 597 598 SwPaM* pOutPam; 599 SwCrsrShell *pShell; 600 SwDoc &rDoc; 601 602 //String sBaseURL; 603 604 sal_Bool bWriteAll; 605 606 public: 607 sal_uLong Write( WriterRef& rxWriter, const String* = 0); 608 609 SwWriter( SvStream&, SwCrsrShell &,sal_Bool bWriteAll = sal_False ); 610 SwWriter( SvStream&, SwDoc & ); 611 SwWriter( SvStream&, SwPaM &, sal_Bool bWriteAll = sal_False ); 612 613 // SwWriter( SotStorage&, SwCrsrShell &,sal_Bool bWriteAll = sal_False ); 614 SwWriter( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, SwDoc& ); 615 // SwWriter( SotStorage&, SwPaM&, sal_Bool bWriteAll = sal_False ); 616 617 SwWriter( SfxMedium&, SwCrsrShell &,sal_Bool bWriteAll = sal_False ); 618 SwWriter( SfxMedium&, SwDoc & ); 619 // SwWriter( SfxMedium&, SwPaM&, sal_Bool bWriteAll = sal_False ); 620 621 //const String& GetBaseURL() const { return sBaseURL;} 622 }; 623 624 625 /* */ 626 ///////////////////////////////////////////////////////////////////////////// 627 628 typedef Reader* (*FnGetReader)(); 629 typedef void (*FnGetWriter)(const String&, const String& rBaseURL, WriterRef&); 630 sal_uLong SaveOrDelMSVBAStorage( SfxObjectShell&, SotStorage&, sal_Bool, const String& ); 631 sal_uLong GetSaveWarningOfMSVBAStorage( SfxObjectShell &rDocS ); 632 633 struct SwReaderWriterEntry 634 { 635 Reader* pReader; 636 FnGetReader fnGetReader; 637 FnGetWriter fnGetWriter; 638 sal_Bool bDelReader; 639 SwReaderWriterEntrySwReaderWriterEntry640 SwReaderWriterEntry( const FnGetReader fnReader, const FnGetWriter fnWriter, sal_Bool bDel ) 641 : pReader( NULL ), fnGetReader( fnReader ), fnGetWriter( fnWriter ), bDelReader( bDel ) 642 {} 643 644 /// Get access to the reader 645 Reader* GetReader(); 646 647 /// Get access to the writer 648 void GetWriter( const String& rNm, const String& rBaseURL, WriterRef& xWrt ) const; 649 }; 650 651 namespace SwReaderWriter 652 { 653 /// Return reader based on ReaderWriterEnum 654 Reader* GetReader( ReaderWriterEnum eReader ); 655 656 /// Return reader based on the name 657 Reader* GetReader( const String& rFltName ); 658 659 /// Return writer based on the name 660 void GetWriter( const String& rFltName, const String& rBaseURL, WriterRef& xWrt ); 661 } 662 663 void GetRTFWriter( const String&, const String&, WriterRef& ); 664 void GetASCWriter( const String&, const String&, WriterRef& ); 665 //void GetSw3Writer( const String&, const String&, WriterRef& ); 666 void GetHTMLWriter( const String&, const String&, WriterRef& ); 667 void GetXMLWriter( const String&, const String&, WriterRef& ); 668 void GetWW8Writer( const String&, const String&, WriterRef& ); 669 670 #endif 671