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: w1par.cxx,v $
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 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sw.hxx"
35 #include <pam.hxx> // fuer SwPam
37 #include <ndtxt.hxx> // class SwTxtNode
38 #include <fltini.hxx> // Ww1Reader
41 #include <swfltopt.hxx>
43 #include <mdiexp.hxx> // StatLine...()
44 #include <swerror.h> // ERR_WW1_...
46 #include <statstr.hrc> // ResId fuer Statusleiste
49 //----------------------------------------
50 // Initialisieren der Feld-FilterFlags
51 //----------------------------------------
53 static ULONG
WW1_Read_FieldIniFlags()
56 static const sal_Char
* aNames
[ 1 ] = { "WinWord/WW1F" };
58 SwFilterOptions
aOpt( 1, aNames
, aVal
);
59 ULONG nFieldFlags
= aVal
[ 0 ];
61 if ( SwFltGetFlag( nFieldFlags
, SwFltControlStack::HYPO
) )
63 SwFltSetFlag( nFieldFlags
, SwFltControlStack::BOOK_TO_VAR_REF
);
64 SwFltSetFlag( nFieldFlags
, SwFltControlStack::TAGS_DO_ID
);
65 SwFltSetFlag( nFieldFlags
, SwFltControlStack::TAGS_IN_TEXT
);
66 SwFltSetFlag( nFieldFlags
, SwFltControlStack::ALLOW_FLD_CR
);
71 ////////////////////////////////////////////////// StarWriter-Interface
73 // Eine Methode liefern die call-Schnittstelle fuer den Writer.
74 // Read() liest eine Datei. hierzu werden zwei Objekte erzeugt, die Shell,
75 // die die Informationen aufnimmt und der Manager der sie aus der Datei liest.
76 // Diese werden dann einfach per Pipe 'uebertragen'.
79 ULONG
WW1Reader::Read(SwDoc
& rDoc
, const String
& rBaseURL
, SwPaM
& rPam
, const String
& /*cName*/)
81 ULONG nRet
= ERR_SWG_READ_ERROR
;
82 ASSERT(pStrm
!=NULL
, "W1-Read ohne Stream");
85 BOOL bNew
= !bInsertMode
; // Neues Doc ( kein Einfuegen )
87 // erstmal eine shell konstruieren: die ist schnittstelle
88 // zum writer-dokument
89 ULONG nFieldFlags
= WW1_Read_FieldIniFlags();
90 Ww1Shell
* pRdr
= new Ww1Shell( rDoc
, rPam
, rBaseURL
, bNew
, nFieldFlags
);
93 // dann den manager, der liest die struktur des word-streams
94 Ww1Manager
* pMan
= new Ww1Manager( *pStrm
, nFieldFlags
);
97 if( !pMan
->GetError() )
99 ::StartProgress( STR_STATSTR_W4WREAD
, 0, 100,
100 rDoc
.GetDocShell() );
101 ::SetProgressState( 0, rDoc
.GetDocShell() );
102 // jetzt nur noch alles rueberschieben
104 if( !pMan
->GetError() )
105 // und nur hier, wenn kein fehler auftrat
106 // fehlerfreiheit melden
107 nRet
= 0; // besser waere: WARN_SWG_FEATURES_LOST;
108 ::EndProgress( rDoc
.GetDocShell() );
112 if( pMan
->GetFib().GetFIB().fComplexGet() )
113 //!!! ACHTUNG: hier muss eigentlich ein Error
114 // wegen Fastsave kommen, das der PMW-Filter
115 // das nicht unterstuetzt. Stattdessen temporaer
116 // nur eine Warnung, bis die entsprechende
117 // Meldung und Behandlung weiter oben eingebaut ist.
118 // nRet = WARN_WW6_FASTSAVE_ERR;
119 // Zum Einchecken mit neuem String:
120 nRet
= ERR_WW6_FASTSAVE_ERR
;
127 Ww1Sprm::DeinitTab();
131 ///////////////////////////////////////////////////////////////// Shell
133 // Die Shell ist die Schnittstelle vom Filter zum Writer. Sie ist
134 // abgeleitet von der mit ww-filter gemeinsam benutzten Shell
135 // SwFltShell und enthaelt alle fuer ww1 noetigen Erweiterungen. Wie
136 // in einen Stream werden alle Informationen, die aus der Datei
137 // gelesen werden, in die shell ge'piped'.
139 Ww1Shell::Ww1Shell( SwDoc
& rD
, SwPaM
& rPam
, const String
& rBaseURL
, BOOL bNew
, ULONG nFieldFlags
)
140 : SwFltShell(&rD
, rPam
, rBaseURL
, bNew
, nFieldFlags
)