/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #include // fuer SwPam #include #include // class SwTxtNode #include // Ww1Reader #include #ifndef _SWFLTOPT_HXX #include #endif #include // StatLine...() #include // ERR_WW1_... #ifndef _STATSTR_HRC #include // ResId fuer Statusleiste #endif //---------------------------------------- // Initialisieren der Feld-FilterFlags //---------------------------------------- static sal_uLong WW1_Read_FieldIniFlags() { // sal_uInt16 i; static const sal_Char* aNames[ 1 ] = { "WinWord/WW1F" }; sal_uInt32 aVal[ 1 ]; SwFilterOptions aOpt( 1, aNames, aVal ); sal_uLong nFieldFlags = aVal[ 0 ]; if ( SwFltGetFlag( nFieldFlags, SwFltControlStack::HYPO ) ) { SwFltSetFlag( nFieldFlags, SwFltControlStack::BOOK_TO_VAR_REF ); SwFltSetFlag( nFieldFlags, SwFltControlStack::TAGS_DO_ID ); SwFltSetFlag( nFieldFlags, SwFltControlStack::TAGS_IN_TEXT ); SwFltSetFlag( nFieldFlags, SwFltControlStack::ALLOW_FLD_CR ); } return nFieldFlags; } ////////////////////////////////////////////////// StarWriter-Interface // // Eine Methode liefern die call-Schnittstelle fuer den Writer. // Read() liest eine Datei. hierzu werden zwei Objekte erzeugt, die Shell, // die die Informationen aufnimmt und der Manager der sie aus der Datei liest. // Diese werden dann einfach per Pipe 'uebertragen'. // sal_uLong WW1Reader::Read(SwDoc& rDoc, const String& rBaseURL, SwPaM& rPam, const String& /*cName*/) { sal_uLong nRet = ERR_SWG_READ_ERROR; ASSERT(pStrm!=NULL, "W1-Read ohne Stream"); if (pStrm != NULL) { sal_Bool bNew = !bInsertMode; // Neues Doc ( kein Einfuegen ) // erstmal eine shell konstruieren: die ist schnittstelle // zum writer-dokument sal_uLong nFieldFlags = WW1_Read_FieldIniFlags(); Ww1Shell* pRdr = new Ww1Shell( rDoc, rPam, rBaseURL, bNew, nFieldFlags ); if( pRdr ) { // dann den manager, der liest die struktur des word-streams Ww1Manager* pMan = new Ww1Manager( *pStrm, nFieldFlags ); if( pMan ) { if( !pMan->GetError() ) { ::StartProgress( STR_STATSTR_W4WREAD, 0, 100, rDoc.GetDocShell() ); ::SetProgressState( 0, rDoc.GetDocShell() ); // jetzt nur noch alles rueberschieben *pRdr << *pMan; if( !pMan->GetError() ) // und nur hier, wenn kein fehler auftrat // fehlerfreiheit melden nRet = 0; // besser waere: WARN_SWG_FEATURES_LOST; ::EndProgress( rDoc.GetDocShell() ); } else { if( pMan->GetFib().GetFIB().fComplexGet() ) //!!! ACHTUNG: hier muss eigentlich ein Error // wegen Fastsave kommen, das der PMW-Filter // das nicht unterstuetzt. Stattdessen temporaer // nur eine Warnung, bis die entsprechende // Meldung und Behandlung weiter oben eingebaut ist. // nRet = WARN_WW6_FASTSAVE_ERR; // Zum Einchecken mit neuem String: nRet = ERR_WW6_FASTSAVE_ERR; } } delete pMan; } delete pRdr; } Ww1Sprm::DeinitTab(); return nRet; } ///////////////////////////////////////////////////////////////// Shell // // Die Shell ist die Schnittstelle vom Filter zum Writer. Sie ist // abgeleitet von der mit ww-filter gemeinsam benutzten Shell // SwFltShell und enthaelt alle fuer ww1 noetigen Erweiterungen. Wie // in einen Stream werden alle Informationen, die aus der Datei // gelesen werden, in die shell ge'piped'. // Ww1Shell::Ww1Shell( SwDoc& rD, SwPaM& rPam, const String& rBaseURL, sal_Bool bNew, sal_uLong nFieldFlags) : SwFltShell(&rD, rPam, rBaseURL, bNew, nFieldFlags) { }