summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/source/filter/basflt/docfact.cxx220
-rw-r--r--sw/source/filter/basflt/fltini.cxx1548
-rw-r--r--sw/source/filter/basflt/makefile.mk120
-rw-r--r--sw/source/filter/basflt/shellio.cxx1198
4 files changed, 3086 insertions, 0 deletions
diff --git a/sw/source/filter/basflt/docfact.cxx b/sw/source/filter/basflt/docfact.cxx
new file mode 100644
index 000000000000..d4c83c9c42ed
--- /dev/null
+++ b/sw/source/filter/basflt/docfact.cxx
@@ -0,0 +1,220 @@
+/*************************************************************************
+ *
+ * $RCSfile: docfact.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-19 10:59:14 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifdef PRECOMPILED
+#include "filt_pch.hxx"
+#endif
+
+#pragma hdrstop
+
+#ifndef _REF_HXX
+#include <tools/ref.hxx>
+#endif
+
+#ifndef _SHELLIO_HXX
+#include <shellio.hxx>
+#endif
+#ifndef _DOC_HXX
+#include <doc.hxx>
+#endif
+#ifndef _NODE_HXX
+#include <node.hxx>
+#endif
+
+#ifndef _CMDID_H
+#include <cmdid.h>
+#endif
+
+
+/******************************************************************************
+ * Methode : SwDocFac::SwDocFac( SwDoc *pDoc )
+ * Beschreibung:
+ * Erstellt : OK 01-24-94 11:32am
+ * Aenderung : OK 01-24-94 11:32am
+ ******************************************************************************/
+
+
+SwDocFac::SwDocFac( SwDoc *pDc )
+ : pDoc( pDc )
+{
+ if( pDoc )
+ pDoc->AddLink();
+}
+
+/******************************************************************************
+ * Methode : SwDocFac::~SwDocFac()
+ * Beschreibung:
+ * Erstellt : OK 01-24-94 11:33am
+ * Aenderung : OK 01-24-94 11:33am
+ ******************************************************************************/
+
+
+SwDocFac::~SwDocFac()
+{
+ if( pDoc && !pDoc->RemoveLink() )
+ delete pDoc;
+}
+
+/******************************************************************************
+ * Methode : SwDoc *SwDocFac::GetDoc()
+ * Beschreibung: Diese Methode legt immer einen Drucker an.
+ * Erstellt : OK 01-24-94 11:34am
+ * Aenderung : OK 01-24-94 11:34am
+ ******************************************************************************/
+
+
+SwDoc *SwDocFac::GetDoc()
+{
+ if( !pDoc )
+ {
+ pDoc = new SwDoc;
+ pDoc->AddLink();
+ }
+ return pDoc;
+}
+
+
+/******************************************************************************
+ * Erstellt : JP 01-27-94 11:37am
+ * Aenderung : JP 01-27-94 11:37am
+ ******************************************************************************/
+
+ULONG SwDocFac::Count() const
+{
+ // minus den Grund-SectionNodes
+ return pDoc ? pDoc->GetNodes().GetEndOfContent().GetIndex() - 10 : 0;
+}
+
+/*************************************************************************
+
+ Source Code Control System - Header
+
+ $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/sw/source/filter/basflt/docfact.cxx,v 1.1.1.1 2000-09-19 10:59:14 hr Exp $
+
+ Source Code Control System - Update
+
+ $Log: not supported by cvs2svn $
+ Revision 1.36 2000/09/18 16:04:39 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.35 2000/05/08 16:42:28 jp
+ Changes for Unicode
+
+ Revision 1.34 1999/06/29 10:14:48 KZ
+ ins. #include <tools/ref.hxx>
+
+
+ Rev 1.33 29 Jun 1999 12:14:48 KZ
+ ins. #include <tools/ref.hxx>
+
+ Rev 1.32 25 Nov 1997 19:07:32 MA
+ includes
+
+ Rev 1.31 03 Nov 1997 14:04:36 MA
+ precomp entfernt
+
+ Rev 1.30 09 Oct 1997 14:30:40 JP
+ Umstellung NodeIndex/-Array/BigPtrArray
+
+ Rev 1.29 03 Dec 1996 16:55:58 AMA
+ Chg: Der Drucker wird nur im !Browsemodus angelegt.
+
+ Rev 1.28 29 Oct 1996 12:05:40 JP
+ am Doc ist das NodesArray nur noch ueber Get..() zugaenglich
+
+ Rev 1.27 28 Jun 1996 14:18:54 MA
+ includes
+
+ Rev 1.26 24 Nov 1995 17:24:12 OM
+ PCH->PRECOMPILED
+
+ Rev 1.25 22 Nov 1995 15:31:34 JP
+ Segementierung - virtual Methoden impl.
+
+ Rev 1.24 02 Oct 1995 18:30:42 JP
+ Durcker ItemSet erweitert
+
+ Rev 1.23 28 Apr 1995 17:05:34 OS
+ Range fuer Printer-Options-Item veraendert
+
+ Rev 1.22 25 Apr 1995 19:41:54 JP
+ ueberfluessige Methoden entfernt (rund um JobSetup)
+
+ Rev 1.21 22 Apr 1995 19:09:04 JP
+ CTOR: AddLink auf vorhandenes Doc; GetDoc: Printer nur auf bedarf anlegen (Bug 11653)
+
+ Rev 1.20 04 Apr 1995 15:05:14 MA
+ unuetze deletez entfernt.
+
+ Rev 1.19 12 Feb 1995 18:14:40 JP
+ GetDoc: falls Printer schon vorhanden ist nicht neu setzen - ClipBoard !!!!
+
+ Rev 1.18 15 Dec 1994 20:49:14 SWG
+ *ARR* Ersetzungen, svmem, __far_data etc.
+
+ Rev 1.17 08 Nov 1994 16:17:58 OK
+ Pre.Hdr gerichtet
+
+ Rev 1.16 03 Nov 1994 17:38:52 PK
+ sfxitemset fuer printer
+
+*************************************************************************/
+
+
diff --git a/sw/source/filter/basflt/fltini.cxx b/sw/source/filter/basflt/fltini.cxx
new file mode 100644
index 000000000000..22f6fbcdbb18
--- /dev/null
+++ b/sw/source/filter/basflt/fltini.cxx
@@ -0,0 +1,1548 @@
+/*************************************************************************
+ *
+ * $RCSfile: fltini.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-19 10:59:15 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifdef PRECOMPILED
+#include "filt_pch.hxx"
+#endif
+
+#pragma hdrstop
+
+#include <string.h>
+#include <stdio.h> // sscanf
+
+#ifndef _HINTIDS_HXX
+#include <hintids.hxx>
+#endif
+
+#ifndef _LANG_HXX
+#include <tools/lang.hxx>
+#endif
+#ifndef _SV_MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+#ifndef _SV_EXCHANGE_HXX //autogen
+#include <vcl/exchange.hxx>
+#endif
+#ifndef _PARHTML_HXX //autogen
+#include <svtools/parhtml.hxx>
+#endif
+#ifndef _SVSTOR_HXX //autogen
+#include <so3/svstor.hxx>
+#endif
+#ifndef _SO_CLSIDS_HXX
+#include <so3/clsids.hxx>
+#endif
+#ifndef _SFX_DOCFILT_HACK_HXX //autogen
+#include <sfx2/docfilt.hxx>
+#endif
+#ifndef _SFX_FCONTNR_HXX //autogen
+#include <sfx2/fcontnr.hxx>
+#endif
+#ifndef _SFXDOCFILE_HXX //autogen
+#include <sfx2/docfile.hxx>
+#endif
+#ifndef _SVX_LRSPITEM_HXX //autogen
+#include <svx/lrspitem.hxx>
+#endif
+#ifndef _SVX_TSPTITEM_HXX //autogen
+#include <svx/tstpitem.hxx>
+#endif
+
+#ifndef _DOC_HXX
+#include <doc.hxx>
+#endif
+#ifndef _DOCARY_HXX
+#include <docary.hxx>
+#endif
+#ifndef _PAM_HXX
+#include <pam.hxx>
+#endif
+#ifndef _SHELLIO_HXX
+#include <shellio.hxx>
+#endif
+#ifndef _ERRHDL_HXX
+#include <errhdl.hxx>
+#endif
+#ifndef _DOCSH_HXX
+#include <docsh.hxx>
+#endif
+#ifndef _WDOCSH_HXX
+#include <wdocsh.hxx>
+#endif
+#ifndef _FLTINI_HXX
+#include <fltini.hxx>
+#endif
+#ifndef _SWGPAR_HXX
+#include <swgpar.hxx> // fuer den SW/G Parser
+#endif
+#ifndef _SW3IO_HXX
+#include <sw3io.hxx>
+#endif
+#ifndef _FINDER_HXX
+#include <finder.hxx>
+#endif
+#ifndef _W4WFLT_HXX
+#include <w4wflt.hxx> // AutoDetect
+#endif
+#ifndef _IODETECT_HXX
+#include <iodetect.hxx>
+#endif
+#ifndef _HINTS_HXX //autogen
+#include <hints.hxx>
+#endif
+#ifndef _FRMATR_HXX
+#include <frmatr.hxx>
+#endif
+
+#ifndef _FMTFSIZE_HXX //autogen
+#include <fmtfsize.hxx>
+#endif
+#ifndef _SWTABLE_HXX
+#include <swtable.hxx>
+#endif
+#ifndef _FMTCNTNT_HXX //autogen
+#include <fmtcntnt.hxx>
+#endif
+#ifndef _SVX_BOXITEM_HXX //autogen wg. SvxBoxItem
+#include <svx/boxitem.hxx>
+#endif
+#ifndef _FRMATR_HXX
+#include <frmatr.hxx>
+#endif
+#ifndef _FRMFMT_HXX
+#include <frmfmt.hxx>
+#endif
+
+#ifndef _NUMRULE_HXX
+#include <numrule.hxx>
+#endif
+#ifndef _NDTXT_HXX
+#include <ndtxt.hxx>
+#endif
+
+#ifndef _SWSWERROR_H
+#include <swerror.h>
+#endif
+
+
+SwRead ReadRtf = 0, ReadAscii = 0, ReadSwg = 0, ReadSw3 = 0,
+ ReadHTML = 0, ReadXML = 0;
+
+inline BOOL IsDocShellRegistered() { return 0 != SwDocShell::_GetInterface(); }
+
+IO_DETECT_IMPL1
+IO_DETECT_IMPL2
+IO_DETECT_IMPL3
+IO_DETECT_IMPL4
+
+
+inline void _SetFltPtr( USHORT& rPos, SwRead pReader
+ , const sal_Char* pNm
+/* pNm optimiert der Compiler weg, wird nur in der nicht PRODUCT benoetigt! */
+ )
+{
+ ASSERT( !strcmp( aReaderWriter[ rPos ].pName, pNm ), "falscher Filter" );
+ aReaderWriter[ rPos++ ].pReader = pReader;
+}
+
+void _InitFilter()
+{
+ SwRead pRd, pWW8Rd = new WW8Reader;
+
+ USHORT nCnt = 0;
+ _SetFltPtr( nCnt, (ReadSw3 = new Sw3Reader), FILTER_SW5 );
+ _SetFltPtr( nCnt, ReadSw3, FILTER_SW4 );
+ _SetFltPtr( nCnt, ReadSw3, FILTER_SW3 );
+ _SetFltPtr( nCnt, (ReadSwg = new SwgReader), FILTER_SWG );
+ _SetFltPtr( nCnt, ReadSwg, FILTER_SWGV );
+ _SetFltPtr( nCnt, (ReadRtf = new RtfReader), FILTER_RTF );
+ _SetFltPtr( nCnt, new Sw6Reader, sSwDos );
+ _SetFltPtr( nCnt, (ReadAscii = new AsciiReader), STEXT );
+ _SetFltPtr( nCnt, ReadAscii, FILTER_BAS );
+ _SetFltPtr( nCnt, pWW8Rd, sWW6 );
+ _SetFltPtr( nCnt, pWW8Rd, FILTER_WW8 );
+ _SetFltPtr( nCnt, new W4WReader, FILTER_W4W );
+ _SetFltPtr( nCnt, ReadRtf, sRtfWH );
+ _SetFltPtr( nCnt, ( pRd = new ExcelReader ), sCExcel );
+ _SetFltPtr( nCnt, pRd, sExcel );
+ _SetFltPtr( nCnt, new LotusReader, sLotusD );
+ _SetFltPtr( nCnt, (ReadHTML = new HTMLReader), sHTML);
+ _SetFltPtr( nCnt, new WW1Reader, sWW1 );
+ _SetFltPtr( nCnt, pWW8Rd, sWW5 );
+ _SetFltPtr( nCnt, ReadSwg, sSwg1 );
+ _SetFltPtr( nCnt, (ReadXML = new XMLReader), FILTER_XML );
+
+#ifdef NEW_WW97_EXPORT
+ aReaderWriter[ 9 ].fnGetWriter = &::GetWW8Writer;
+ aReaderWriter[ 10 ].fnGetWriter = &::GetWW8Writer;
+#endif
+
+#ifdef DEBUG_SH
+ _SetFltPtr( nCnt, new Internal_W4WReader, sW4W_Int);
+#endif // DEBUG_SH
+
+#if !( defined(PRODUCT) || defined(MAC) || defined(PM2))
+ nCnt += 2; // haben keine Reader sind nur EXPORT!
+#endif
+
+ ASSERT( MAXFILTER == nCnt, "Anzahl Filter ungleich der Definierten" );
+}
+
+
+
+
+void _FinitFilter()
+{
+ // die Reader vernichten
+ for( USHORT n = 0; n < MAXFILTER; ++n )
+ {
+ SwIoDetect& rIo = aReaderWriter[n];
+ if( rIo.bDelReader && rIo.pReader )
+ delete rIo.pReader;
+ }
+}
+
+
+/* */
+
+void SwIoSystem::GetWriter( const String& rFltName, WriterRef& xRet )
+{
+ for( USHORT n = 0; n < MAXFILTER; ++n )
+ if( aReaderWriter[n].IsFilter( rFltName ) )
+ {
+ aReaderWriter[n].GetWriter( rFltName, xRet );
+ break;
+ }
+}
+
+
+SwRead SwIoSystem::GetReader( const String& rFltName )
+{
+ SwRead pRead = 0;
+ for( USHORT n = 0; n < MAXFILTER; ++n )
+ if( aReaderWriter[n].IsFilter( rFltName ) )
+ {
+ pRead = aReaderWriter[n].GetReader();
+ // fuer einige Reader noch eine Sonderbehandlung:
+ pRead->SetFltName( rFltName );
+ break;
+ }
+ return pRead;
+}
+
+ // suche ueber den Filtertext den Filtereintrag
+const SfxFilter* SwIoSystem::GetFilterOfFilterTxt( const String& rFilterNm,
+ const SfxFactoryFilterContainer* pCnt )
+{
+ const SfxFactoryFilterContainer* pFltCnt = pCnt ? pCnt :
+ ( IsDocShellRegistered()
+ ? SwDocShell::Factory().GetFilterContainer()
+ : SwWebDocShell::Factory().GetFilterContainer() );
+
+ do {
+ if( pFltCnt )
+ {
+ const SfxFilter* pFilter;
+ USHORT nCount = pFltCnt->GetFilterCount();
+ for( USHORT i = 0; i < nCount; ++i )
+ if( ( pFilter = pFltCnt->GetFilter( i ))->GetFilterName() == rFilterNm )
+ return pFilter;
+ }
+ if( pCnt || pFltCnt == SwWebDocShell::Factory().GetFilterContainer())
+ break;
+ pFltCnt = SwWebDocShell::Factory().GetFilterContainer();
+ } while( TRUE );
+
+ return 0;
+}
+
+
+/* */
+
+/////////////// die Storage Reader/Writer ////////////////////////////////
+
+#if 0 // SH: WW8-Writer als Fake ueber WW6-Writer
+Writer* GetWW8Writer( const String& )
+{
+ ASSERT( FALSE, "WinWord 97 - Writer ist noch nicht implementiert" );
+ return 0;
+}
+#endif
+
+void GetSw3Writer( const String&, WriterRef& xRet )
+{
+ xRet = new Sw3Writer;
+}
+
+
+ULONG StgReader::OpenMainStream( SvStorageStreamRef& rRef, USHORT& rBuffSize )
+{
+ ULONG nRet = ERR_SWG_READ_ERROR;
+ ASSERT( pStg, "wo ist mein Storage?" );
+ const SfxFilter* pFltr = SwIoSystem::GetFilterOfFormat( aFltName );
+ if( pFltr )
+ {
+ rRef = pStg->OpenStream( SwIoSystem::GetSubStorageName( *pFltr ),
+ STREAM_READ | STREAM_SHARE_DENYALL );
+
+ if( rRef.Is() )
+ {
+ if( SVSTREAM_OK == rRef->GetError() )
+ {
+ USHORT nOld = rRef->GetBufferSize();
+ rRef->SetBufferSize( rBuffSize );
+ rBuffSize = nOld;
+ nRet = 0;
+ }
+ else
+ nRet = rRef->GetError();
+ }
+ }
+ return nRet;
+}
+
+/* */
+
+
+ULONG Sw3Reader::Read( SwDoc &rDoc, SwPaM &rPam, const String & )
+{
+ ULONG nRet;
+ if( pStg && pIO )
+ {
+ // TRUE: Vorlagen ueberschreiben
+ pIO->SetReadOptions( aOpt,TRUE );
+ if( !bInsertMode )
+ {
+ // Im Laden-Modus darf der PaM-Content-Teil nicht
+ // in den Textbereich zeigen (Nodes koennen geloescht werden)
+ rPam.GetBound( TRUE ).nContent.Assign( 0, 0 );
+ rPam.GetBound( FALSE ).nContent.Assign( 0, 0 );
+ }
+ nRet = pIO->Load( pStg, bInsertMode ? &rPam : 0 );
+ aOpt.ResetAllFmtsOnly();
+ pIO->SetReadOptions( aOpt, TRUE );
+ }
+ else
+ {
+ ASSERT( !this, "Sw3-Read ohne Storage und/oder IO-System" );
+ nRet = ERR_SWG_READ_ERROR;
+ }
+ return nRet;
+}
+
+
+ULONG Sw3Writer::WriteStorage()
+{
+ ULONG nRet;
+ if( pIO )
+ {
+ // der gleiche Storage -> Save, sonst SaveAs aufrufen
+ if( !bSaveAs )
+ nRet = pIO->Save( pOrigPam, bWriteAll );
+ else
+ nRet = pIO->SaveAs( pStg, pOrigPam, bWriteAll );
+
+ pIO = 0; // nach dem Schreiben ist der Pointer ungueltig !!
+ }
+ else
+ {
+ ASSERT( !this, "Sw3-Writer ohne IO-System" )
+ nRet = ERR_SWG_WRITE_ERROR;
+ }
+ return nRet;
+}
+
+BOOL Sw3Writer::IsSw3Writer() const { return TRUE; }
+
+
+void Writer::SetPasswd( const String& ) {}
+
+
+void Writer::SetVersion( const String&, long ) {}
+
+
+BOOL Writer::IsStgWriter() const { return FALSE; }
+BOOL Writer::IsSw3Writer() const { return FALSE; }
+
+BOOL StgWriter::IsStgWriter() const { return TRUE; }
+
+/* */
+
+
+ULONG SwgReader::Read( SwDoc &rDoc, SwPaM &rPam, const String& rFileName )
+{
+ if( !pStrm )
+ {
+ ASSERT( !this, "SWG-Read ohne Stream" );
+ return ERR_SWG_READ_ERROR;
+ }
+ SwSwgParser *pSwgParser = new SwSwgParser( &rDoc, &rPam, pStrm,
+ rFileName, !bInsertMode );
+ USHORT nBits = SWGRD_NORMAL;
+ SwgReader* pRdr = (SwgReader*) ReadSwg;
+ if( pRdr->aOpt.IsFmtsOnly() )
+ {
+ nBits = 0;
+ if( pRdr->aOpt.IsFrmFmts() ) nBits |= SWGRD_FRAMEFMTS;
+ if( pRdr->aOpt.IsTxtFmts() ) nBits |= SWGRD_CHARFMTS | SWGRD_PARAFMTS;
+ if( pRdr->aOpt.IsPageDescs() ) nBits |= SWGRD_PAGEFMTS;
+ if( !pRdr->aOpt.IsMerge() )
+ nBits |= SWGRD_FORCE;
+ }
+ ULONG nRet = pSwgParser->CallParser( nBits );
+ delete pSwgParser;
+
+ // die Flags muessen natuerlich wieder geloescht werden!
+ pRdr->aOpt.ResetAllFmtsOnly();
+
+ return nRet;
+}
+
+
+BOOL SwReader::NeedsPasswd( const Reader& rOptions )
+{
+ BOOL bRes = FALSE;
+ if( &rOptions == ReadSwg )
+ {
+ if( !pStrm && pMedium && !pMedium->IsStorage() )
+ pStrm = pMedium->GetInStream();
+
+ ASSERT( pStrm, "Passwort-Test ohne Stream" );
+ if( pStrm )
+ {
+ SwSwgParser *pSwgParser = new SwSwgParser( pStrm );
+ bRes = pSwgParser->NeedsPasswd();
+ delete pSwgParser;
+ }
+ }
+ return bRes;
+}
+
+
+BOOL SwReader::CheckPasswd( const String& rPasswd, const Reader& rOptions )
+{
+ BOOL bRes = TRUE;
+ if( &rOptions == ReadSwg )
+ {
+ if( !pStrm && pMedium && !pMedium->IsStorage() )
+ pStrm = pMedium->GetInStream();
+
+ ASSERT( pStrm, "Passwort-Check ohne Stream" );
+ if( pStrm )
+ {
+ SwSwgParser *pSwgParser = new SwSwgParser( pStrm );
+ bRes = pSwgParser->CheckPasswd( rPasswd );
+ delete pSwgParser;
+ }
+ }
+ return bRes;
+}
+
+
+/* */
+
+//-----------------------------------------
+// IniFlags lesen
+//-----------------------------------------
+// ReadFilterFlags wird von WW / W4W / EXCEL / LOTUS benutzt.
+
+ULONG ReadFilterFlags( const sal_Char* pName, const sal_Char* pAltName )
+{
+ String sName( String::CreateFromAscii( pName ));
+ String aStr( pPathFinder->GetIniUserEntry( sName )); // aName suchen
+
+ if( !aStr.Len() && pAltName && *pAltName )
+ aStr = pPathFinder->GetIniUserEntry( sName.AssignAscii( pAltName ));
+
+ ULONG nVal = 0;
+ if( aStr.Len() )
+ {
+ xub_StrLen nPos = aStr.SearchAscii( "0x" );
+ if( STRING_NOTFOUND != nPos )
+ {
+ sal_Unicode nNibble;
+ for( nPos += 2; nPos < aStr.Len(); ++nPos )
+ {
+ if( ((nNibble = aStr.GetChar(nPos)) >= '0') && ( nNibble <= '9') )
+ nNibble -= '0';
+ else if( (nNibble >= 'A') && (nNibble <= 'F') )
+ nNibble -= 'A' - 10;
+ else if( (nVal >= 'a') && (nNibble <= 'f') )
+ nNibble -= 'a' - 10;
+ else
+ break;
+ ( nVal <<= 4 ) += nNibble;
+ }
+ }
+ else
+ nVal = aStr.ToInt32();
+ }
+ return nVal;
+}
+
+/* */
+
+
+void LotusReader::SetFltName( const String& rFltNm )
+{
+ eCodeSet = rFltNm.EqualsAscii( sLotusD ) ? RTL_TEXTENCODING_IBM_850
+ : RTL_TEXTENCODING_MS_1252;
+}
+
+
+void StgReader::SetFltName( const String& rFltNm )
+{
+ if( SW_STORAGE_READER & GetReaderType() )
+ aFltName = rFltNm;
+}
+
+
+/* */
+
+SwRelNumRuleSpaces::SwRelNumRuleSpaces( SwDoc& rDoc, BOOL bNDoc )
+ : bNewDoc( bNDoc )
+{
+ pNumRuleTbl = new SwNumRuleTbl( 8, 8 );
+ if( !bNDoc )
+ pNumRuleTbl->Insert( &rDoc.GetNumRuleTbl(), 0 );
+}
+
+SwRelNumRuleSpaces::~SwRelNumRuleSpaces()
+{
+ if( pNumRuleTbl )
+ {
+ pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
+ delete pNumRuleTbl;
+ }
+}
+
+void SwRelNumRuleSpaces::SetNumRelSpaces( SwDoc& rDoc )
+{
+ SwNumRuleTbl* pRuleTbl = bNewDoc ? &rDoc.GetNumRuleTbl() : pNumRuleTbl;
+ if( !bNewDoc )
+ {
+ // jetzt alle schon vorhanden NumRules aus dem Array entfernen,
+ // damit nur die neuen angepasst werden
+ SwNumRuleTbl aNumRuleTbl;
+ aNumRuleTbl.Insert( pRuleTbl, 0 );
+ pRuleTbl->Remove( 0, pRuleTbl->Count() );
+ const SwNumRuleTbl& rRuleTbl = rDoc.GetNumRuleTbl();
+ SwNumRule* pRule;
+
+ for( USHORT n = 0; n < rRuleTbl.Count(); ++n )
+ if( USHRT_MAX == aNumRuleTbl.GetPos( ( pRule = rRuleTbl[ n ] )))
+ // war noch nicht vorhanden, also neu
+ pRuleTbl->Insert( pRule, pRuleTbl->Count() );
+
+ aNumRuleTbl.Remove( 0, aNumRuleTbl.Count() );
+ }
+
+ if( pRuleTbl )
+ {
+ for( USHORT n = pRuleTbl->Count(); n; )
+ {
+ SwNumRule* pRule = (*pRuleTbl)[ --n ];
+ // Rule noch gueltig und am Doc vorhanden?
+ if( USHRT_MAX != rDoc.GetNumRuleTbl().GetPos( pRule ))
+ {
+ SwNumRuleInfo aUpd( pRule->GetName() );
+ aUpd.MakeList( rDoc );
+
+ // bei allen nmumerierten Absaetzen vom linken Rand
+ // den absoluten Wert des NumFormates abziehen
+ for( ULONG nUpdPos = 0; nUpdPos < aUpd.GetList().Count();
+ ++nUpdPos )
+ {
+ SwTxtNode* pNd = aUpd.GetList().GetObject( nUpdPos );
+ SetNumLSpace( *pNd, *pRule );
+ }
+ }
+ }
+ }
+
+ if( pNumRuleTbl )
+ {
+ pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
+ delete pNumRuleTbl, pNumRuleTbl = 0;
+ }
+
+ if( bNewDoc )
+ {
+ SetOultineRelSpaces( SwNodeIndex( rDoc.GetNodes() ),
+ SwNodeIndex( rDoc.GetNodes().GetEndOfContent()));
+ }
+}
+
+void SwRelNumRuleSpaces::SetOultineRelSpaces( const SwNodeIndex& rStt,
+ const SwNodeIndex& rEnd )
+{
+ SwDoc* pDoc = rStt.GetNode().GetDoc();
+ const SwOutlineNodes& rOutlNds = pDoc->GetNodes().GetOutLineNds();
+ if( rOutlNds.Count() )
+ {
+ USHORT nPos;
+ rOutlNds.Seek_Entry( &rStt.GetNode(), &nPos );
+ for( ; nPos < rOutlNds.Count() &&
+ rOutlNds[ nPos ]->GetIndex() < rEnd.GetIndex(); ++nPos )
+ {
+ SwTxtNode* pNd = rOutlNds[ nPos ]->GetTxtNode();
+ if( pNd->GetOutlineNum() && !pNd->GetNumRule() )
+ SetNumLSpace( *pNd, *pDoc->GetOutlineNumRule() );
+ }
+ }
+}
+
+void SwRelNumRuleSpaces::SetNumLSpace( SwTxtNode& rNd, const SwNumRule& rRule )
+{
+ BOOL bOutlineRule = OUTLINE_RULE == rRule.GetRuleType();
+ BYTE nLvl;
+ {
+ SwNodeNum aNdNum( 0 );
+ const SwNodeNum* pNum;
+ if( bOutlineRule )
+ {
+ if( 0 == ( pNum = rNd.GetOutlineNum() ))
+ pNum = rNd.UpdateOutlineNum( aNdNum );
+ }
+ else if( 0 == ( pNum = rNd.GetNum() ))
+ pNum = rNd.UpdateNum( aNdNum );
+ nLvl = GetRealLevel( pNum->GetLevel() );
+ }
+ const SwNumFmt& rFmt = rRule.Get( nLvl );
+ const SvxLRSpaceItem& rLR = rNd.GetSwAttrSet().GetLRSpace();
+
+ SvxLRSpaceItem aLR( rLR );
+ aLR.SetTxtFirstLineOfst( 0 );
+
+ // sagt der Node, das die Numerierung den Wert vorgibt?
+ if( !bOutlineRule && rNd.IsSetNumLSpace() )
+ aLR.SetTxtLeft( 0 );
+ else
+ {
+ USHORT nLeft = rFmt.GetAbsLSpace(), nParaLeft = rLR.GetTxtLeft();
+ if( 0 < rLR.GetTxtFirstLineOfst() )
+ nParaLeft += rLR.GetTxtFirstLineOfst();
+ else if( nLeft < nParaLeft )
+ nParaLeft -= nLeft;
+ else
+ nParaLeft = 0;
+ aLR.SetTxtLeft( nParaLeft );
+ }
+
+ if( aLR.GetTxtLeft() != rLR.GetTxtLeft() )
+ {
+ //bevor rLR geloescht wird!
+ long nOffset = rLR.GetTxtLeft() - aLR.GetTxtLeft();
+ rNd.SwCntntNode::SetAttr( aLR );
+
+ // Tabs anpassen !!
+ const SfxPoolItem* pItem;
+ if( SFX_ITEM_SET == rNd.GetSwAttrSet().GetItemState(
+ RES_PARATR_TABSTOP, TRUE, &pItem ))
+ {
+ SvxTabStopItem aTStop( *(SvxTabStopItem*)pItem );
+ for( USHORT n = 0; n < aTStop.Count(); ++n )
+ {
+ SvxTabStop& rTab = (SvxTabStop&)aTStop[ n ];
+ if( SVX_TAB_ADJUST_DEFAULT != rTab.GetAdjustment() )
+ {
+ if( !rTab.GetTabPos() )
+ {
+ aTStop.Remove( n );
+ --n;
+ }
+ else
+ rTab.GetTabPos() += nOffset;
+ }
+ }
+ rNd.SwCntntNode::SetAttr( aTStop );
+ }
+ }
+}
+
+/* */
+
+
+void CalculateFlySize( SfxItemSet& rFlySet, SwNodeIndex& rAnchor,
+ SwTwips nPageWidth )
+{
+ const SfxPoolItem* pItem = 0;
+ if( SFX_ITEM_SET != rFlySet.GetItemState( RES_FRM_SIZE, TRUE, &pItem ) ||
+ MINFLY > ((SwFmtFrmSize*)pItem)->GetWidth() )
+ {
+ SwFmtFrmSize aSz( (SwFmtFrmSize&) (pItem ? *pItem
+ : rFlySet.Get( RES_FRM_SIZE, TRUE )) );
+
+ SwTwips nWidth;
+ // dann die Breite des Flys selbst bestimmen. Ist eine Tabelle
+ // defininiert, dann benutze deren Breite, sonst die Breite der
+ // Seite
+ const SwTableNode* pTblNd = rAnchor.GetNode().FindTableNode();
+ if( pTblNd )
+ nWidth = pTblNd->GetTable().GetFrmFmt()->GetFrmSize().GetWidth();
+ else
+ nWidth = nPageWidth;
+
+ const SwNodeIndex* pSttNd = ((SwFmtCntnt&)rFlySet.Get( RES_CNTNT )).
+ GetCntntIdx();
+ if( pSttNd )
+ {
+ BOOL bOnlyOneNode = TRUE;
+ ULONG nMinFrm = 0;
+ ULONG nMaxFrm = 0;
+ SwTxtNode* pFirstTxtNd = 0;
+ SwNodeIndex aIdx( *pSttNd, 1 );
+ SwNodeIndex aEnd( *pSttNd->GetNode().EndOfSectionNode() );
+ while( aIdx < aEnd )
+ {
+ SwTxtNode *pTxtNd = aIdx.GetNode().GetTxtNode();
+ if( pTxtNd )
+ {
+ if( !pFirstTxtNd )
+ pFirstTxtNd = pTxtNd;
+ else if( pFirstTxtNd != pTxtNd )
+ {
+ // forget it
+ bOnlyOneNode = FALSE;
+ break;
+ }
+
+ ULONG nAbsMinCnts;
+ pTxtNd->GetMinMaxSize( aIdx.GetIndex(), nMinFrm,
+ nMaxFrm, nAbsMinCnts );
+ }
+ aIdx++;
+ }
+
+ if( bOnlyOneNode )
+ {
+ if( nMinFrm < MINLAY && pFirstTxtNd )
+ {
+ // if the first node dont contained any content, then
+ // insert one char in it calc again and delete once again
+ SwIndex aNdIdx( pFirstTxtNd );
+ pFirstTxtNd->Insert( String::CreateFromAscii(
+ RTL_CONSTASCII_STRINGPARAM( "MM" )), aNdIdx );
+ ULONG nAbsMinCnts;
+ pFirstTxtNd->GetMinMaxSize( pFirstTxtNd->GetIndex(),
+ nMinFrm, nMaxFrm, nAbsMinCnts );
+ aNdIdx -= 2;
+ pFirstTxtNd->Erase( aNdIdx, 2 );
+ }
+
+ // Umrandung und Abstand zum Inhalt beachten
+ const SvxBoxItem& rBoxItem = (SvxBoxItem&)rFlySet.Get( RES_BOX );
+ USHORT nLine = BOX_LINE_LEFT;
+ for( int i = 0; i < 2; ++i )
+ {
+ const SvxBorderLine* pLn = rBoxItem.GetLine( nLine );
+ if( pLn )
+ {
+ USHORT nWidth = pLn->GetOutWidth() + pLn->GetInWidth();
+ nWidth += rBoxItem.GetDistance( nLine );
+ nMinFrm += nWidth;
+ nMaxFrm += nWidth;
+ }
+ nLine = BOX_LINE_RIGHT;
+ }
+
+ // Mindestbreite fuer Inhalt einhalten
+ if( nMinFrm < MINLAY )
+ nMinFrm = MINLAY;
+ if( nMaxFrm < MINLAY )
+ nMaxFrm = MINLAY;
+
+ if( nWidth > (USHORT)nMaxFrm )
+ nWidth = nMaxFrm;
+ else if( nWidth > (USHORT)nMinFrm )
+ nWidth = nMinFrm;
+ }
+ }
+
+ if( MINFLY > nWidth )
+ nWidth = MINFLY;
+
+ aSz.SetWidth( nWidth );
+ if( MINFLY > aSz.GetHeight() )
+ aSz.SetHeight( MINFLY );
+ rFlySet.Put( aSz );
+ }
+ else if( MINFLY > ((SwFmtFrmSize*)pItem)->GetHeight() )
+ {
+ SwFmtFrmSize aSz( *(SwFmtFrmSize*)pItem );
+ aSz.SetHeight( MINFLY );
+ rFlySet.Put( aSz );
+ }
+}
+
+/* */
+
+
+static BOOL lcl_FindCharSet( BOOL bSearchId, String& rChrSetStr,
+ rtl_TextEncoding& rChrSet )
+{
+ static const sal_Char
+ sToken001[] = "ANSI",
+ sToken002[] = "MAC",
+ sToken003[] = "DOS",
+ sToken004[] = "IBM_437",
+ sToken005[] = "IBM_860",
+ sToken006[] = "IBM_861",
+ sToken007[] = "IBM_863",
+ sToken008[] = "IBM_865",
+ sToken009[] = "ASCII_US",
+ sToken010[] = "ISO_8859_1",
+ sToken011[] = "ISO_8859_2",
+ sToken012[] = "ISO_8859_3",
+ sToken013[] = "ISO_8859_4",
+ sToken014[] = "ISO_8859_5",
+ sToken015[] = "ISO_8859_6",
+ sToken016[] = "ISO_8859_7",
+ sToken017[] = "ISO_8859_8",
+ sToken018[] = "ISO_8859_9",
+ sToken019[] = "ISO_8859_14",
+ sToken020[] = "ISO_8859_15",
+ sToken021[] = "IBM_737",
+ sToken022[] = "IBM_775",
+ sToken023[] = "IBM_852",
+ sToken024[] = "IBM_855",
+ sToken025[] = "IBM_857",
+ sToken026[] = "IBM_862",
+ sToken027[] = "IBM_864",
+ sToken028[] = "IBM_866",
+ sToken029[] = "IBM_869",
+ sToken030[] = "MS_874",
+ sToken031[] = "MS_1250",
+ sToken032[] = "MS_1251",
+ sToken033[] = "MS_1253",
+ sToken034[] = "MS_1254",
+ sToken035[] = "MS_1255",
+ sToken036[] = "MS_1256",
+ sToken037[] = "MS_1257",
+ sToken038[] = "MS_1258",
+ sToken039[] = "APPLE_ARABIC",
+ sToken040[] = "APPLE_CENTEURO",
+ sToken041[] = "APPLE_CROATIAN",
+ sToken042[] = "APPLE_CYRILLIC",
+ sToken043[] = "APPLE_DEVANAGARI",
+ sToken044[] = "APPLE_FARSI",
+ sToken045[] = "APPLE_GREEK",
+ sToken046[] = "APPLE_GUJARATI",
+ sToken047[] = "APPLE_GURMUKHI",
+ sToken048[] = "APPLE_HEBREW",
+ sToken049[] = "APPLE_ICELAND",
+ sToken050[] = "APPLE_ROMANIAN",
+ sToken051[] = "APPLE_THAI",
+ sToken052[] = "APPLE_TURKISH",
+ sToken053[] = "APPLE_UKRAINIAN",
+ sToken054[] = "APPLE_CHINSIMP",
+ sToken055[] = "APPLE_CHINTRAD",
+ sToken056[] = "APPLE_JAPANESE",
+ sToken057[] = "APPLE_KOREAN",
+ sToken058[] = "MS_932",
+ sToken059[] = "MS_936",
+ sToken060[] = "MS_949",
+ sToken061[] = "MS_950",
+ sToken062[] = "SHIFT_JIS",
+ sToken063[] = "GB_2312",
+ sToken064[] = "GBT_12345",
+ sToken065[] = "GBK",
+ sToken066[] = "BIG5",
+ sToken067[] = "EUC_JP",
+ sToken068[] = "EUC_CN",
+ sToken069[] = "EUC_TW",
+ sToken070[] = "ISO_2022_JP",
+ sToken071[] = "ISO_2022_CN",
+ sToken072[] = "KOI8_R",
+ sToken073[] = "UTF7",
+ sToken074[] = "UTF8",
+ sToken075[] = "ISO_8859_10",
+ sToken076[] = "ISO_8859_13",
+ sToken077[] = "EUC_KR",
+ sToken078[] = "ISO_2022_KR",
+ sToken079[] = "UNICODE_2"
+ ;
+ struct _Dummy_MAP
+ {
+ rtl_TextEncoding eCode;
+ const sal_Char* pChrSetNm;
+ };
+ static const _Dummy_MAP aMapArr[] = {
+
+ RTL_TEXTENCODING_MS_1252, sToken001,
+ RTL_TEXTENCODING_APPLE_ROMAN, sToken002,
+ RTL_TEXTENCODING_IBM_850, sToken003,
+ RTL_TEXTENCODING_IBM_437, sToken004,
+ RTL_TEXTENCODING_IBM_860, sToken005,
+ RTL_TEXTENCODING_IBM_861, sToken006,
+ RTL_TEXTENCODING_IBM_863, sToken007,
+ RTL_TEXTENCODING_IBM_865, sToken008,
+ RTL_TEXTENCODING_ASCII_US, sToken009,
+ RTL_TEXTENCODING_ISO_8859_1, sToken010,
+ RTL_TEXTENCODING_ISO_8859_2, sToken011,
+ RTL_TEXTENCODING_ISO_8859_3, sToken012,
+ RTL_TEXTENCODING_ISO_8859_4, sToken013,
+ RTL_TEXTENCODING_ISO_8859_5, sToken014,
+ RTL_TEXTENCODING_ISO_8859_6, sToken015,
+ RTL_TEXTENCODING_ISO_8859_7, sToken016,
+ RTL_TEXTENCODING_ISO_8859_8, sToken017,
+ RTL_TEXTENCODING_ISO_8859_9, sToken018,
+ RTL_TEXTENCODING_ISO_8859_14, sToken019,
+ RTL_TEXTENCODING_ISO_8859_15, sToken020,
+ RTL_TEXTENCODING_IBM_737, sToken021,
+ RTL_TEXTENCODING_IBM_775, sToken022,
+ RTL_TEXTENCODING_IBM_852, sToken023,
+ RTL_TEXTENCODING_IBM_855, sToken024,
+ RTL_TEXTENCODING_IBM_857, sToken025,
+ RTL_TEXTENCODING_IBM_862, sToken026,
+ RTL_TEXTENCODING_IBM_864, sToken027,
+ RTL_TEXTENCODING_IBM_866, sToken028,
+ RTL_TEXTENCODING_IBM_869, sToken029,
+ RTL_TEXTENCODING_MS_874, sToken030,
+ RTL_TEXTENCODING_MS_1250, sToken031,
+ RTL_TEXTENCODING_MS_1251, sToken032,
+ RTL_TEXTENCODING_MS_1253, sToken033,
+ RTL_TEXTENCODING_MS_1254, sToken034,
+ RTL_TEXTENCODING_MS_1255, sToken035,
+ RTL_TEXTENCODING_MS_1256, sToken036,
+ RTL_TEXTENCODING_MS_1257, sToken037,
+ RTL_TEXTENCODING_MS_1258, sToken038,
+ RTL_TEXTENCODING_APPLE_ARABIC, sToken039,
+ RTL_TEXTENCODING_APPLE_CENTEURO, sToken040,
+ RTL_TEXTENCODING_APPLE_CROATIAN, sToken041,
+ RTL_TEXTENCODING_APPLE_CYRILLIC, sToken042,
+ RTL_TEXTENCODING_APPLE_DEVANAGARI, sToken043,
+ RTL_TEXTENCODING_APPLE_FARSI, sToken044,
+ RTL_TEXTENCODING_APPLE_GREEK, sToken045,
+ RTL_TEXTENCODING_APPLE_GUJARATI, sToken046,
+ RTL_TEXTENCODING_APPLE_GURMUKHI, sToken047,
+ RTL_TEXTENCODING_APPLE_HEBREW, sToken048,
+ RTL_TEXTENCODING_APPLE_ICELAND, sToken049,
+ RTL_TEXTENCODING_APPLE_ROMANIAN, sToken050,
+ RTL_TEXTENCODING_APPLE_THAI, sToken051,
+ RTL_TEXTENCODING_APPLE_TURKISH, sToken052,
+ RTL_TEXTENCODING_APPLE_UKRAINIAN, sToken053,
+ RTL_TEXTENCODING_APPLE_CHINSIMP, sToken054,
+ RTL_TEXTENCODING_APPLE_CHINTRAD, sToken055,
+ RTL_TEXTENCODING_APPLE_JAPANESE, sToken056,
+ RTL_TEXTENCODING_APPLE_KOREAN, sToken057,
+ RTL_TEXTENCODING_MS_932, sToken058,
+ RTL_TEXTENCODING_MS_936, sToken059,
+ RTL_TEXTENCODING_MS_949, sToken060,
+ RTL_TEXTENCODING_MS_950, sToken061,
+ RTL_TEXTENCODING_SHIFT_JIS, sToken062,
+ RTL_TEXTENCODING_GB_2312, sToken063,
+ RTL_TEXTENCODING_GBT_12345, sToken064,
+ RTL_TEXTENCODING_GBK, sToken065,
+ RTL_TEXTENCODING_BIG5, sToken066,
+ RTL_TEXTENCODING_EUC_JP, sToken067,
+ RTL_TEXTENCODING_EUC_CN, sToken068,
+ RTL_TEXTENCODING_EUC_TW, sToken069,
+ RTL_TEXTENCODING_ISO_2022_JP, sToken070,
+ RTL_TEXTENCODING_ISO_2022_CN, sToken071,
+ RTL_TEXTENCODING_KOI8_R, sToken072,
+ RTL_TEXTENCODING_UTF7, sToken073,
+ RTL_TEXTENCODING_UTF8, sToken074,
+ RTL_TEXTENCODING_ISO_8859_10, sToken075,
+ RTL_TEXTENCODING_ISO_8859_13, sToken076,
+ RTL_TEXTENCODING_EUC_KR, sToken077,
+ RTL_TEXTENCODING_ISO_2022_KR, sToken078,
+ RTL_TEXTENCODING_UCS2, sToken079
+ };
+
+ BOOL bFnd = FALSE;
+ USHORT nLen = sizeof( aMapArr ) / sizeof( aMapArr[0] );
+ if( bSearchId )
+ {
+ for( USHORT n = 0; n < nLen; ++n )
+ if( rChrSetStr.EqualsIgnoreCaseAscii( aMapArr[ n ].pChrSetNm ))
+ {
+ rChrSet = aMapArr[ n ].eCode;
+ bFnd = TRUE;
+ break;
+ }
+ }
+ else
+ {
+ for( USHORT n = 0; n < nLen; ++n )
+ if( rChrSet == aMapArr[ n ].eCode )
+ {
+ rChrSetStr.AssignAscii( aMapArr[ n ].pChrSetNm );
+ bFnd = TRUE;
+ break;
+ }
+ }
+ return bFnd;
+}
+
+static BOOL lcl_FindLanguage( BOOL bSearchId, String& rLngStr, USHORT& rId )
+{
+ static const sal_Char
+ sToken001[] = "UNKNOWN",
+ sToken002[] = "SYSTEM",
+ sToken003[] = "AFRIKAANS",
+ sToken004[] = "ALBANIAN",
+ sToken005[] = "ARABIC",
+ sToken006[] = "ARABIC (IRAQ)",
+ sToken007[] = "ARABIC (EGYT)",
+ sToken008[] = "ARABIC (LIBYA)",
+ sToken009[] = "ARABIC (ALGERIA)",
+ sToken010[] = "ARABIC (MOROCCO)",
+ sToken011[] = "ARABIC (TUNESIA)",
+ sToken012[] = "ARABIC (OMAN)",
+ sToken013[] = "ARABIC (YEMEN)",
+ sToken014[] = "ARABIC (SYRIA)",
+ sToken015[] = "ARABIC (JORDAN)",
+ sToken016[] = "ARABIC (LEBANON)",
+ sToken017[] = "ARABIC (KUWAIT)",
+ sToken018[] = "ARABIC (VAE)",
+ sToken019[] = "ARABIC (BAHREIN)",
+ sToken020[] = "ARABIC (QATAR)",
+ sToken021[] = "BASQUE",
+ sToken022[] = "BULGARIAN",
+ sToken023[] = "BELORUSSIAN",
+ sToken024[] = "CATALAN",
+ sToken025[] = "CHINESE",
+ sToken026[] = "CHINESE (TRAD.)",
+ sToken027[] = "CHINESE (SIMPLE)",
+ sToken028[] = "CHINESE (HONGKONG)",
+ sToken029[] = "CHINESE (SINGAPORE)",
+ sToken030[] = "CROATIAN",
+ sToken031[] = "CHECH",
+ sToken032[] = "DANISH",
+ sToken033[] = "DUTCH",
+ sToken034[] = "DUTCH (BELGIUM)",
+ sToken035[] = "ENGLISH",
+ sToken036[] = "ENGLISH (US)",
+ sToken037[] = "ENGLISH (UK)",
+ sToken038[] = "ENGLISH (AUS)",
+ sToken039[] = "ENGLISH (CAN)",
+ sToken040[] = "ENGLISH (NZ)",
+ sToken041[] = "ENGLISH (EIRE)",
+ sToken042[] = "ENGLISH (SA)",
+ sToken043[] = "ENGLISH (JAMAICA)",
+ sToken044[] = "ENGLISH (CARIBBEAN)",
+ sToken045[] = "ENGLISH (BELIZE)",
+ sToken046[] = "ENGLISH (TRINIDAD)",
+ sToken047[] = "ENGLISH (ZIMBABWE)",
+ sToken048[] = "ENGLISH (PHILIPPINES)",
+ sToken049[] = "ESTONIAN",
+ sToken050[] = "FINNISH",
+ sToken051[] = "FAROAN",
+ sToken052[] = "FARSI",
+ sToken053[] = "FRENCH",
+ sToken054[] = "FRENCH (BELGIUM)",
+ sToken055[] = "FRENCH (CAN)",
+ sToken056[] = "FRENCH (CH)",
+ sToken057[] = "FRENCH (LUX)",
+ sToken058[] = "FRENCH (MONACO)",
+ sToken059[] = "GERMAN",
+ sToken060[] = "GERMAN (CH)",
+ sToken061[] = "GERMAN (A)",
+ sToken062[] = "GERMAN (LUX)",
+ sToken063[] = "GERMAN (LIE)",
+ sToken064[] = "GREEK",
+ sToken065[] = "HEBREW",
+ sToken066[] = "HUNGARIAN",
+ sToken067[] = "ICELANDIC",
+ sToken068[] = "INDONESIAN",
+ sToken069[] = "ITALIAN",
+ sToken070[] = "ITALIAN (CH)",
+ sToken071[] = "JAPANESE",
+ sToken072[] = "KOREAN",
+ sToken073[] = "KOREAN (JOHAB)",
+ sToken074[] = "LATVIAN",
+ sToken075[] = "LITHUANIAN",
+ sToken076[] = "MACEDONIAN",
+ sToken077[] = "MALAYSIAN",
+ sToken078[] = "NORWEGIAN",
+ sToken079[] = "NORWEGIAN BOKMAL",
+ sToken080[] = "NORWEGIAN NYNORSK",
+ sToken081[] = "POLISH",
+ sToken082[] = "PORTUGUESE",
+ sToken083[] = "PORTUGUESE (BRAZIL)",
+ sToken084[] = "ROMANSCH",
+ sToken085[] = "RUMANIAN",
+ sToken086[] = "RUSSIAN",
+ sToken087[] = "SLOVAK",
+ sToken088[] = "SLOVENIAN",
+ sToken089[] = "SERBIAN",
+ sToken090[] = "SPANISH",
+ sToken091[] = "SPANISH (MEXICO)",
+ sToken092[] = "SPANISH (MODERN)",
+ sToken093[] = "SPANISH (GUATEMALA)",
+ sToken094[] = "SPANISH (COSTA RICA)",
+ sToken095[] = "SPANISH (PANAMA)",
+// sToken096[] = "SPANISH (DOMINICAN REP.)",
+ sToken097[] = "SPANISH (VENEZUELA)",
+ sToken098[] = "SPANISH (COLUMBIA)",
+ sToken099[] = "SPANISH (PERU)",
+ sToken100[] = "SPANISH (ARGENTINA)",
+ sToken101[] = "SPANISH (EQUADOR)",
+ sToken102[] = "SPANISH (CHILE)",
+ sToken103[] = "SPANISH (URUGUAY)",
+ sToken104[] = "SPANISH (PARAGUAY)",
+ sToken105[] = "SPANISH (BOLIVIA)",
+ sToken106[] = "SPANISH (EL SALVADOR)",
+ sToken107[] = "SPANISH (HONDURAS)",
+ sToken108[] = "SPANISH (NICARAGUA)",
+ sToken109[] = "SPANISH (PUERTO RICO)",
+ sToken110[] = "SWEDISH",
+ sToken111[] = "SWEDISH (FINLAND)",
+ sToken112[] = "THAI",
+ sToken113[] = "TURKISH",
+ sToken114[] = "URDU",
+ sToken115[] = "UKRAINIAN",
+
+ sToken116[] = "ARABIC (SAUDI ARABIA)",
+ sToken117[] = "ARMENIAN",
+ sToken118[] = "ASSAMESE",
+ sToken119[] = "AZERI",
+ sToken120[] = "AZERI (LATIN)",
+ sToken121[] = "AZERI (CYRILLIC)",
+ sToken122[] = "BENGALI",
+ sToken123[] = "CHINESE (MACAU)",
+ sToken124[] = "GUJARATI",
+ sToken125[] = "HINDI",
+ sToken126[] = "KANNADA",
+ sToken127[] = "KASHMIRI",
+ sToken128[] = "KASHMIRI (INDIA)",
+ sToken129[] = "KAZAK",
+ sToken130[] = "KONKANI",
+ sToken131[] = "LITHUANIAN (CLASSIC)",
+ sToken132[] = "MALAY (MALAYSIA)",
+ sToken133[] = "MALAY (BRUNEI DARUSSALAM)",
+ sToken134[] = "MALAYALAM",
+ sToken135[] = "MANIPURI",
+ sToken136[] = "MARATHI",
+ sToken137[] = "NEPALI",
+ sToken138[] = "NEPALI (INDIA)",
+ sToken139[] = "ORIYA",
+ sToken140[] = "PUNJABI",
+ sToken141[] = "SANSKRIT",
+ sToken142[] = "SERBIAN",
+ sToken143[] = "SERBIAN (LATIN)",
+ sToken144[] = "SERBIAN (CYRILLIC)",
+ sToken145[] = "SINDHI",
+ sToken146[] = "SWAHILI",
+ sToken147[] = "TAMIL",
+ sToken148[] = "TATAR",
+ sToken149[] = "TELUGU",
+ sToken150[] = "URDU (PAKISTAN)",
+ sToken151[] = "URDU (INDIA)",
+ sToken152[] = "UZBEK",
+ sToken153[] = "UZBEK (LATIN)",
+ sToken154[] = "UZBEK (CYRILLIC)"
+ ;
+ struct _Dummy_MAP
+ {
+ USHORT nId;
+ const sal_Char* pLanguageNm;
+ };
+ static const _Dummy_MAP aMapArr[] = {
+
+ LANGUAGE_DONTKNOW, sToken001,
+ LANGUAGE_SYSTEM, sToken002,
+ LANGUAGE_AFRIKAANS, sToken003,
+ LANGUAGE_ALBANIAN, sToken004,
+ LANGUAGE_ARABIC, sToken005,
+ LANGUAGE_ARABIC_IRAQ, sToken006,
+ LANGUAGE_ARABIC_EGYPT, sToken007,
+ LANGUAGE_ARABIC_LIBYA, sToken008,
+ LANGUAGE_ARABIC_ALGERIA, sToken009,
+ LANGUAGE_ARABIC_MOROCCO, sToken010,
+ LANGUAGE_ARABIC_TUNISIA, sToken011,
+ LANGUAGE_ARABIC_OMAN, sToken012,
+ LANGUAGE_ARABIC_YEMEN, sToken013,
+ LANGUAGE_ARABIC_SYRIA, sToken014,
+ LANGUAGE_ARABIC_JORDAN, sToken015,
+ LANGUAGE_ARABIC_LEBANON, sToken016,
+ LANGUAGE_ARABIC_KUWAIT, sToken017,
+ LANGUAGE_ARABIC_UAE, sToken018,
+ LANGUAGE_ARABIC_BAHRAIN, sToken019,
+ LANGUAGE_ARABIC_QATAR, sToken020,
+ LANGUAGE_BASQUE, sToken021,
+ LANGUAGE_BULGARIAN, sToken022,
+ LANGUAGE_BELARUSIAN, sToken023,
+ LANGUAGE_CATALAN, sToken024,
+ LANGUAGE_CHINESE, sToken025,
+ LANGUAGE_CHINESE_TRADITIONAL, sToken026,
+ LANGUAGE_CHINESE_SIMPLIFIED, sToken027,
+ LANGUAGE_CHINESE_HONGKONG, sToken028,
+ LANGUAGE_CHINESE_SINGAPORE, sToken029,
+ LANGUAGE_CROATIAN, sToken030,
+ LANGUAGE_CZECH, sToken031,
+ LANGUAGE_DANISH, sToken032,
+ LANGUAGE_DUTCH, sToken033,
+ LANGUAGE_DUTCH_BELGIAN, sToken034,
+ LANGUAGE_ENGLISH, sToken035,
+ LANGUAGE_ENGLISH_US, sToken036,
+ LANGUAGE_ENGLISH_UK, sToken037,
+ LANGUAGE_ENGLISH_AUS, sToken038,
+ LANGUAGE_ENGLISH_CAN, sToken039,
+ LANGUAGE_ENGLISH_NZ, sToken040,
+ LANGUAGE_ENGLISH_EIRE, sToken041,
+ LANGUAGE_ENGLISH_SAFRICA, sToken042,
+ LANGUAGE_ENGLISH_JAMAICA, sToken043,
+ LANGUAGE_ENGLISH_CARRIBEAN, sToken044,
+ LANGUAGE_ENGLISH_BELIZE, sToken045,
+ LANGUAGE_ENGLISH_TRINIDAD, sToken046,
+ LANGUAGE_ENGLISH_ZIMBABWE, sToken047,
+ LANGUAGE_ENGLISH_PHILIPPINES, sToken048,
+ LANGUAGE_ESTONIAN, sToken049,
+ LANGUAGE_FINNISH, sToken050,
+ LANGUAGE_FAEROESE, sToken051,
+ LANGUAGE_FARSI, sToken052,
+ LANGUAGE_FRENCH, sToken053,
+ LANGUAGE_FRENCH_BELGIAN, sToken054,
+ LANGUAGE_FRENCH_CANADIAN, sToken055,
+ LANGUAGE_FRENCH_SWISS, sToken056,
+ LANGUAGE_FRENCH_LUXEMBOURG, sToken057,
+ LANGUAGE_FRENCH_MONACO, sToken058,
+ LANGUAGE_GERMAN, sToken059,
+ LANGUAGE_GERMAN_SWISS, sToken060,
+ LANGUAGE_GERMAN_AUSTRIAN, sToken061,
+ LANGUAGE_GERMAN_LUXEMBOURG, sToken062,
+ LANGUAGE_GERMAN_LIECHTENSTEIN, sToken063,
+ LANGUAGE_GREEK, sToken064,
+ LANGUAGE_HEBREW, sToken065,
+ LANGUAGE_HUNGARIAN, sToken066,
+ LANGUAGE_ICELANDIC, sToken067,
+ LANGUAGE_INDONESIAN, sToken068,
+ LANGUAGE_ITALIAN, sToken069,
+ LANGUAGE_ITALIAN_SWISS, sToken070,
+ LANGUAGE_JAPANESE, sToken071,
+ LANGUAGE_KOREAN, sToken072,
+ LANGUAGE_KOREAN_JOHAB, sToken073,
+ LANGUAGE_LATVIAN, sToken074,
+ LANGUAGE_LITHUANIAN, sToken075,
+ LANGUAGE_MACEDONIAN, sToken076,
+ LANGUAGE_MALAY, sToken077,
+ LANGUAGE_NORWEGIAN, sToken078,
+ LANGUAGE_NORWEGIAN_BOKMAL, sToken079,
+ LANGUAGE_NORWEGIAN_NYNORSK, sToken080,
+ LANGUAGE_POLISH, sToken081,
+ LANGUAGE_PORTUGUESE, sToken082,
+ LANGUAGE_PORTUGUESE_BRAZILIAN, sToken083,
+ LANGUAGE_RHAETO_ROMAN, sToken084,
+ LANGUAGE_ROMANIAN, sToken085,
+ LANGUAGE_RUSSIAN, sToken086,
+ LANGUAGE_SLOVAK, sToken087,
+ LANGUAGE_SLOVENIAN, sToken088,
+ LANGUAGE_SORBIAN, sToken089,
+ LANGUAGE_SPANISH, sToken090,
+ LANGUAGE_SPANISH_MEXICAN, sToken091,
+ LANGUAGE_SPANISH_MODERN, sToken092,
+ LANGUAGE_SPANISH_GUATEMALA, sToken093,
+ LANGUAGE_SPANISH_COSTARICA, sToken094,
+ LANGUAGE_SPANISH_PANAMA, sToken095,
+// LANGUAGE_SPANISH_DOMINICAN, sToken096,
+ LANGUAGE_SPANISH_VENEZUELA, sToken097,
+ LANGUAGE_SPANISH_COLOMBIA, sToken098,
+ LANGUAGE_SPANISH_PERU, sToken099,
+ LANGUAGE_SPANISH_ARGENTINA, sToken100,
+ LANGUAGE_SPANISH_ECUADOR, sToken101,
+ LANGUAGE_SPANISH_CHILE, sToken102,
+ LANGUAGE_SPANISH_URUGUAY, sToken103,
+ LANGUAGE_SPANISH_PARAGUAY, sToken104,
+ LANGUAGE_SPANISH_BOLIVIA, sToken105,
+ LANGUAGE_SPANISH_EL_SALVADOR, sToken106,
+ LANGUAGE_SPANISH_HONDURAS, sToken107,
+ LANGUAGE_SPANISH_NICARAGUA, sToken108,
+ LANGUAGE_SPANISH_PUERTO_RICO, sToken109,
+ LANGUAGE_SWEDISH, sToken110,
+ LANGUAGE_SWEDISH_FINLAND, sToken111,
+ LANGUAGE_THAI, sToken112,
+ LANGUAGE_TURKISH, sToken113,
+ LANGUAGE_URDU, sToken114,
+ LANGUAGE_UKRAINIAN, sToken115,
+ LANGUAGE_ARABIC_SAUDI_ARABIA, sToken116,
+ LANGUAGE_ARMENIAN, sToken117,
+ LANGUAGE_ASSAMESE, sToken118,
+ LANGUAGE_AZERI, sToken119,
+ LANGUAGE_AZERI_LATIN, sToken120,
+ LANGUAGE_AZERI_CYRILLIC, sToken121,
+ LANGUAGE_BENGALI, sToken122,
+ LANGUAGE_CHINESE_MACAU, sToken123,
+ LANGUAGE_GUJARATI, sToken124,
+ LANGUAGE_HINDI, sToken125,
+ LANGUAGE_KANNADA, sToken126,
+ LANGUAGE_KASHMIRI, sToken127,
+ LANGUAGE_KASHMIRI_INDIA, sToken128,
+ LANGUAGE_KAZAK, sToken129,
+ LANGUAGE_KONKANI, sToken130,
+ LANGUAGE_LITHUANIAN_CLASSIC, sToken131,
+ LANGUAGE_MALAY_MALAYSIA, sToken132,
+ LANGUAGE_MALAY_BRUNEI_DARUSSALAM, sToken133,
+ LANGUAGE_MALAYALAM, sToken134,
+ LANGUAGE_MANIPURI, sToken135,
+ LANGUAGE_MARATHI, sToken136,
+ LANGUAGE_NEPALI, sToken137,
+ LANGUAGE_NEPALI_INDIA, sToken138,
+ LANGUAGE_ORIYA, sToken139,
+ LANGUAGE_PUNJABI, sToken140,
+ LANGUAGE_SANSKRIT, sToken141,
+ LANGUAGE_SERBIAN, sToken142,
+ LANGUAGE_SERBIAN_LATIN, sToken143,
+ LANGUAGE_SERBIAN_CYRILLIC, sToken144,
+ LANGUAGE_SINDHI, sToken145,
+ LANGUAGE_SWAHILI, sToken146,
+ LANGUAGE_TAMIL, sToken147,
+ LANGUAGE_TATAR, sToken148,
+ LANGUAGE_TELUGU, sToken149,
+ LANGUAGE_URDU_PAKISTAN, sToken150,
+ LANGUAGE_URDU_INDIA, sToken151,
+ LANGUAGE_UZBEK, sToken152,
+ LANGUAGE_UZBEK_LATIN, sToken153,
+ LANGUAGE_UZBEK_CYRILLIC, sToken154
+ };
+
+ BOOL bFnd = FALSE;
+ USHORT nLen = sizeof( aMapArr ) / sizeof( aMapArr[0] );
+ if( bSearchId )
+ {
+ for( USHORT n = 0; n < nLen; ++n )
+ if( rLngStr.EqualsIgnoreCaseAscii( aMapArr[ n ].pLanguageNm ))
+ {
+ rId = aMapArr[ n ].nId;
+ bFnd = TRUE;
+ break;
+ }
+ }
+ else
+ {
+ for( USHORT n = 0; n < nLen; ++n )
+ if( rId == aMapArr[ n ].nId )
+ {
+ rLngStr.AssignAscii( aMapArr[ n ].pLanguageNm );
+ bFnd = TRUE;
+ break;
+ }
+ }
+ return bFnd;
+}
+
+
+// for the automatic conversion (mail/news/...)
+// The user data contains the options for the ascii import/export filter.
+// The format is:
+// 1. CharSet - as ascii chars
+// 2. LineEnd - as CR/LR/CRLF
+// 3. Fontname
+// 4. Language
+// the delimetercharacter is ","
+//
+
+void SwAsciiOptions::ReadUserData( const String& rStr )
+{
+ xub_StrLen nToken = 0;
+ USHORT nCnt = 0;
+ String sToken;
+ do {
+ if( 0 != (sToken = rStr.GetToken( 0, ',', nToken )).Len() )
+ {
+ switch( nCnt )
+ {
+ case 0: // CharSet
+ ::lcl_FindCharSet( TRUE, sToken, eCharSet );
+ break;
+
+ case 1: // LineEnd
+ if( sToken.EqualsIgnoreCaseAscii( "CRLF" ))
+ eCRLF_Flag = LINEEND_CRLF;
+ else if( sToken.EqualsIgnoreCaseAscii( "LF" ))
+ eCRLF_Flag = LINEEND_LF;
+ else
+ eCRLF_Flag = LINEEND_CR;
+ break;
+
+ case 2: // fontname
+ sFont = sToken;
+ break;
+
+ case 3: // Language
+ ::lcl_FindLanguage( TRUE, sToken, nLanguage );
+ break;
+ }
+ }
+ ++nCnt;
+ } while( STRING_NOTFOUND != nToken );
+}
+
+void SwAsciiOptions::WriteUserData( String& rStr )
+{
+ rStr.Erase();
+
+ // 1. charset
+ ::lcl_FindCharSet( FALSE, rStr, eCharSet );
+ rStr += ',';
+
+ // 2. LineEnd
+ switch( eCRLF_Flag )
+ {
+ case LINEEND_CRLF: rStr.AppendAscii( "CRLF" ); break;
+ case LINEEND_CR: rStr.AppendAscii( "CR" ); break;
+ case LINEEND_LF: rStr.AppendAscii( "LF" ); break;
+ }
+ rStr += ',';
+
+ // 3. Fontname
+ rStr += sFont;
+ rStr += ',';
+
+ // 4. Language
+ if( nLanguage )
+ {
+ String sTmp;
+ ::lcl_FindLanguage( FALSE, sTmp, nLanguage );
+ rStr += sTmp;
+ }
+ rStr += ',';
+}
+/* -----------------------------02.03.00 17:33--------------------------------
+
+ ---------------------------------------------------------------------------*/
+Color ConvertBrushStyle(const Color& rCol, const Color& rFillCol, BYTE nStyle)
+{
+ Color aColor = rCol;
+ switch ( nStyle )
+ {
+ case SW_SV_BRUSH_25:
+ {
+ ULONG nRed = aColor.GetRed();
+ ULONG nGreen = aColor.GetGreen();
+ ULONG nBlue = aColor.GetBlue();
+ nRed += (ULONG)(rFillCol.GetRed())*2;
+ nGreen += (ULONG)(rFillCol.GetGreen())*2;
+ nBlue += (ULONG)(rFillCol.GetBlue())*2;
+ aColor = Color( (BYTE)(nRed/3), (BYTE)(nGreen/3), (BYTE)(nBlue/3) );
+ }
+ break;
+
+ case SW_SV_BRUSH_50:
+ {
+ ULONG nRed = aColor.GetRed();
+ ULONG nGreen = aColor.GetGreen();
+ ULONG nBlue = aColor.GetBlue();
+ nRed += (ULONG)(rFillCol.GetRed());
+ nGreen += (ULONG)(rFillCol.GetGreen());
+ nBlue += (ULONG)(rFillCol.GetBlue());
+ aColor = Color( (BYTE)(nRed/2), (BYTE)(nGreen/2), (BYTE)(nBlue/2) );
+ }
+ break;
+
+ case SW_SV_BRUSH_75:
+ {
+ ULONG nRed = aColor.GetRed()*2;
+ ULONG nGreen = aColor.GetGreen()*2;
+ ULONG nBlue = aColor.GetBlue()*2;
+ nRed += (ULONG)(rFillCol.GetRed());
+ nGreen += (ULONG)(rFillCol.GetGreen());
+ nBlue += (ULONG)(rFillCol.GetBlue());
+ aColor = Color( (BYTE)(nRed/3), (BYTE)(nGreen/3), (BYTE)(nBlue/3) );
+ }
+ break;
+
+ case SW_SV_BRUSH_NULL:
+ aColor = Color( COL_TRANSPARENT );
+ }
+
+ return aColor;
+}
+
+/*************************************************************************
+
+ $Log: not supported by cvs2svn $
+ Revision 1.175 2000/09/18 16:04:39 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.174 2000/08/04 16:26:25 jp
+ read/write unicode ascii files
+
+ Revision 1.173 2000/06/30 13:44:04 tl
+ old lingu header removed
+
+ Revision 1.172 2000/05/16 16:12:44 jp
+ Changes for Unicode
+
+ Revision 1.171 2000/05/15 16:35:27 jp
+ Changes for Unicode
+
+ Revision 1.170 2000/05/08 16:42:32 jp
+ Changes for Unicode
+
+ Revision 1.169 2000/04/17 09:09:10 khz
+ Task #70451# use CalculateFlySize() for WW frames with 'auto'width
+
+ Revision 1.168 2000/03/03 16:21:41 pl
+ #73771# workaround for c50 intel compiler
+
+ Revision 1.167 2000/03/03 16:18:43 pl
+ #73771# workaround for c50 intel compiler
+
+ Revision 1.166 2000/03/03 15:20:59 os
+ StarView remainders removed
+
+ Revision 1.165 2000/02/11 14:36:30 hr
+ #70473# changes for unicode ( patched by automated patchtool )
+
+*************************************************************************/
+
+
diff --git a/sw/source/filter/basflt/makefile.mk b/sw/source/filter/basflt/makefile.mk
new file mode 100644
index 000000000000..35f58c0773ea
--- /dev/null
+++ b/sw/source/filter/basflt/makefile.mk
@@ -0,0 +1,120 @@
+#*************************************************************************
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.1.1.1 $
+#
+# last change: $Author: hr $ $Date: 2000-09-19 10:59:14 $
+#
+# The Contents of this file are made available subject to the terms of
+# either of the following licenses
+#
+# - GNU Lesser General Public License Version 2.1
+# - Sun Industry Standards Source License Version 1.1
+#
+# Sun Microsystems Inc., October, 2000
+#
+# GNU Lesser General Public License Version 2.1
+# =============================================
+# Copyright 2000 by Sun Microsystems, Inc.
+# 901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1, as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#
+# Sun Industry Standards Source License Version 1.1
+# =================================================
+# The contents of this file are subject to the Sun Industry Standards
+# Source License Version 1.1 (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.openoffice.org/license.html.
+#
+# Software provided under this License is provided on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+# See the License for the specific provisions governing your rights and
+# obligations concerning the Software.
+#
+# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#
+# Copyright: 2000 by Sun Microsystems, Inc.
+#
+# All Rights Reserved.
+#
+# Contributor(s): _______________________________________
+#
+#
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=sw
+TARGET=basflt
+
+PROJECTPCH=filt_pch
+PROJECTPCHSOURCE=..$/filt_1st$/filt_pch
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : $(PRJ)$/inc$/swpre.mk
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/sw.mk
+
+.IF "$(mydebug)" != ""
+CDEFS+=-Dmydebug
+.ENDIF
+
+# --- Files --------------------------------------------------------
+
+SLOFILES = \
+ $(SLO)$/docfact.obj \
+ $(SLO)$/fltini.obj \
+ $(SLO)$/shellio.obj \
+ $(SLO)$/w4wflt.obj
+
+EXCEPTIONSFILES = \
+ $(SLO)$/shellio.obj \
+
+OBJFILES = $(OBJ)$/w4wflt.obj
+
+.IF "$(CPU)"=="S"
+SLOFILES += \
+ $(SLO)$/autorec.obj
+OBJFILES += \
+ $(OBJ)$/autorec.obj
+.ENDIF
+
+
+# --- Tagets -------------------------------------------------------
+
+.IF "$(OS)"=="SOLARIS"
+.IF "$(CPU)"=="S"
+ALL: $(OBJ)$/autorec.obj $(SLO)$/autorec.obj ALLTAR
+.ENDIF
+.ENDIF
+
+.INCLUDE : target.mk
+
+
+$(OBJ)$/autorec.obj:
+ $(COPY) autorec.o $(OBJ)$/autorec.o
+ touch $@
+
+$(SLO)$/autorec.obj:
+ $(COPY) autorec.o $(SLO)$/autorec.o
+ touch $@
+
diff --git a/sw/source/filter/basflt/shellio.cxx b/sw/source/filter/basflt/shellio.cxx
new file mode 100644
index 000000000000..beeef156cb27
--- /dev/null
+++ b/sw/source/filter/basflt/shellio.cxx
@@ -0,0 +1,1198 @@
+/*************************************************************************
+ *
+ * $RCSfile: shellio.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-19 10:59:15 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifdef PRECOMPILED
+#include "filt_pch.hxx"
+#endif
+
+#pragma hdrstop
+
+#define ITEMID_BOXINFO SID_ATTR_BORDER_INNER
+#include <hintids.hxx>
+
+#ifndef _UCBHELPER_CONTENT_HXX
+#include <ucbhelper/content.hxx>
+#endif
+#ifndef SVTOOLS_URIHELPER_HXX
+#include <svtools/urihelper.hxx>
+#endif
+#ifndef _COM_SUN_STAR_UTIL_DATETIME_HPP_
+#include <com/sun/star/util/DateTime.hpp>
+#endif
+#ifndef _SV_SVAPP_HXX
+#include <vcl/svapp.hxx>
+#endif
+#ifndef _SFXDOCFILE_HXX //autogen
+#include <sfx2/docfile.hxx>
+#endif
+#ifndef _SVX_LRSPITEM_HXX //autogen
+#include <svx/lrspitem.hxx>
+#endif
+#ifndef _SVX_ULSPITEM_HXX //autogen
+#include <svx/ulspitem.hxx>
+#endif
+#ifndef _SVX_BOXITEM_HXX //autogen
+#include <svx/boxitem.hxx>
+#endif
+#ifndef _SVXLINKMGR_HXX
+#include <svx/linkmgr.hxx>
+#endif
+#ifndef _SVX_PAPERINF_HXX //autogen
+#include <svx/paperinf.hxx>
+#endif
+
+#ifndef _TOOLS_TEMPFILE_HXX
+#include <tools/tempfile.hxx>
+#endif
+#ifndef _NODE_HXX //autogen
+#include <node.hxx>
+#endif
+#ifndef _DOCARY_HXX
+#include <docary.hxx>
+#endif
+#ifndef _FMTANCHR_HXX //autogen
+#include <fmtanchr.hxx>
+#endif
+#ifndef _FMTFSIZE_HXX //autogen
+#include <fmtfsize.hxx>
+#endif
+#ifndef _FMTPDSC_HXX //autogen
+#include <fmtpdsc.hxx>
+#endif
+#ifndef _SWTYPES_HXX
+#include <swtypes.hxx>
+#endif
+#ifndef _SHELLIO_HXX
+#include <shellio.hxx>
+#endif
+#ifndef _DOC_HXX
+#include <doc.hxx>
+#endif
+#ifndef _PAM_HXX
+#include <pam.hxx>
+#endif
+#ifndef _CRSRSH_HXX
+#include <crsrsh.hxx>
+#endif
+#ifndef _UNDOBJ_HXX
+#include <undobj.hxx> // fuer Undo Insert-Dokument
+#endif
+#ifndef _SWUNDO_HXX
+#include <swundo.hxx> // fuer Undo Insert-Dokument
+#endif
+#ifndef _SWTABLE_HXX
+#include <swtable.hxx>
+#endif
+#ifndef _TBLSEL_HXX
+#include <tblsel.hxx>
+#endif
+#ifndef _PAGEDESC_HXX
+#include <pagedesc.hxx>
+#endif
+#ifndef _POOLFMT_HXX
+#include <poolfmt.hxx>
+#endif
+#ifndef _FLTINI_HXX
+#include <fltini.hxx>
+#endif
+#ifndef _DOCSH_HXX
+#include <docsh.hxx>
+#endif
+#ifndef _SW3IO_HXX
+#include <sw3io.hxx>
+#endif
+#ifndef _REDLINE_HXX
+#include <redline.hxx>
+#endif
+#ifndef _LINKENUM_HXX
+#include <linkenum.hxx>
+#endif
+#ifndef _SWSWERROR_H
+#include <swerror.h>
+#endif
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::ucb;
+using namespace ::rtl;
+
+//////////////////////////////////////////////////////////////////////////
+
+ULONG SwReader::Read( const Reader& rOptions )
+{
+ // Variable uebertragen
+ Reader* po = (Reader*) &rOptions;
+ po->pStrm = pStrm;
+ po->pStg = pStg;
+ po->bInsertMode = 0 != pCrsr;
+
+ // ist ein Medium angegeben, dann aus diesem die Streams besorgen
+ if( 0 != (po->pMedium = pMedium ) &&
+ !po->SetStrmStgPtr() )
+ {
+ po->SetReadUTF8( FALSE );
+ return ERR_SWG_FILE_FORMAT_ERROR;
+ }
+
+ ULONG nError = 0L;
+
+ GetDoc();
+
+ // am Sw3-Reader noch den pIo-Pointer "loeschen"
+ if( po == ReadSw3 && pDoc->GetDocShell() &&
+ ((Sw3Reader*)po)->GetSw3Io() != pDoc->GetDocShell()->GetIoSystem() )
+ ((Sw3Reader*)po)->SetSw3Io( pDoc->GetDocShell()->GetIoSystem() );
+
+ // waehrend des einlesens kein OLE-Modified rufen
+ Link aOLELink( pDoc->GetOle2Link() );
+ pDoc->SetOle2Link( Link() );
+
+ pDoc->bInReading = TRUE;
+
+ SwPaM *pPam;
+ if( pCrsr )
+ pPam = pCrsr;
+ else
+ {
+ // Wenn der Reader nicht mit einem Shell konstruiert wurde,
+ // selber einen Pam machen.
+ SwNodeIndex nNode( pDoc->GetNodes().GetEndOfContent(), -1 );
+ pPam = new SwPaM( nNode );
+ // Bei Web-Dokumenten wird die Default-Vorlage schon im InitNew
+ // gesetzt und braucht deshalb nicht nochmal gesetzt zu werden.
+ // Das gilt natuerlich nicht, wenn der Filter nicht der HTML-Filter
+ // ist oder im ConvertFrom zuvor ein SetTemplateName gerufen
+ // wurde.
+ if( !pDoc->IsHTMLMode() || ReadHTML != po || !po->pTemplate )
+ po->SetTemplate( *pDoc );
+ }
+
+ // Pams sind ringfoermig verkettet. Aufhoeren, wenn man wieder beim
+ // ersten ist.
+ SwPaM *pEnd = pPam;
+ SwUndoInsDoc* pUndo = 0L;
+
+ BOOL bReadPageDescs = FALSE;
+ BOOL bDocUndo = pDoc->DoesUndo();
+ BOOL bSaveUndo = bDocUndo && pCrsr;
+ if( bSaveUndo )
+ {
+ // das Einlesen von Seitenvorlagen ist nicht Undofaehig!
+ if( 0 != ( bReadPageDescs = po->aOpt.IsPageDescs() ) )
+ {
+ bSaveUndo = FALSE;
+ pDoc->DelAllUndoObj();
+ }
+ else
+ {
+ pDoc->ClearRedo();
+ pDoc->StartUndo( UNDO_INSDOKUMENT );
+ }
+ }
+ pDoc->DoUndo( FALSE );
+
+ SwNodeIndex aSplitIdx( pDoc->GetNodes() );
+
+ SwRedlineMode eOld = pDoc->GetRedlineMode();
+ pDoc->SetRedlineMode_intern( REDLINE_IGNORE );
+
+ // Array von FlyFormaten
+ SwSpzFrmFmts aFlyFrmArr;
+ // only read templates? then ignore multi selection!
+ BOOL bFmtsOnly = po->aOpt.IsFmtsOnly();
+
+ while( TRUE )
+ {
+ if( bSaveUndo )
+ pUndo = new SwUndoInsDoc( *pPam );
+
+ SwPaM* pUndoPam = 0L;
+ if( bDocUndo || pCrsr )
+ {
+ // Pam auf den Node davor setzen damit er nicht mit verschoben wird
+ const SwNodeIndex& rTmp = pPam->GetPoint()->nNode;
+ pUndoPam = new SwPaM( rTmp, rTmp, 0, -1 );
+ }
+
+ // Speicher mal alle Fly's
+ if( pCrsr )
+ aFlyFrmArr.Insert( pDoc->GetSpzFrmFmts(), 0L );
+
+ xub_StrLen nSttCntnt = pPam->GetPoint()->nContent.GetIndex();
+
+ // damit fuer alle Reader die Ende-Position immer stimmt, hier
+ // pflegen.
+ SwCntntNode* pCNd = pPam->GetCntntNode();
+ xub_StrLen nEndCntnt = pCNd ? pCNd->Len() - nSttCntnt : 0;
+ SwNodeIndex aEndPos( pPam->GetPoint()->nNode, 1 );
+
+ nError = po->Read( *pDoc, *pPam, aFileName );
+
+ if( !IsError( nError )) // dann setzen wir das Ende mal richtig
+ {
+ aEndPos--;
+ pCNd = aEndPos.GetNode().GetCntntNode();
+ if( !pCNd && 0 == ( pCNd = pDoc->GetNodes().GoPrevious( &aEndPos ) ))
+ pCNd = pDoc->GetNodes().GoNext( &aEndPos );
+
+ pPam->GetPoint()->nNode = aEndPos;
+ xub_StrLen nLen = pCNd->Len();
+ if( nLen < nEndCntnt )
+ nEndCntnt = 0;
+ else
+ nEndCntnt = nLen - nEndCntnt;
+ pPam->GetPoint()->nContent.Assign( pCNd, nEndCntnt );
+ }
+
+ if( pCrsr )
+ {
+ *pUndoPam->GetMark() = *pPam->GetPoint();
+ pUndoPam->GetPoint()->nNode++;
+ SwNode* pNd = pUndoPam->GetNode();
+ if( pNd->IsCntntNode() )
+ pUndoPam->GetPoint()->nContent.Assign(
+ (SwCntntNode*)pNd, nSttCntnt );
+ else
+ pUndoPam->GetPoint()->nContent.Assign( 0, 0 );
+
+ int bChkHeaderFooter = pNd->FindHeaderStartNode() ||
+ pNd->FindFooterStartNode();
+
+ // Suche alle neuen Fly's und speicher sie als einzelne Undo
+ // Objecte
+ for( USHORT n = 0; n < pDoc->GetSpzFrmFmts()->Count(); ++n )
+ {
+ SwFrmFmt* pFrmFmt = (*pDoc->GetSpzFrmFmts())[ n ];
+ const SwFmtAnchor& rAnchor = pFrmFmt->GetAnchor();
+ if( USHRT_MAX == aFlyFrmArr.GetPos( pFrmFmt) )
+ {
+ if( FLY_PAGE == rAnchor.GetAnchorId() ||
+ ( FLY_AT_CNTNT == rAnchor.GetAnchorId() &&
+ rAnchor.GetCntntAnchor() &&
+ ( pUndoPam->GetPoint()->nNode ==
+ rAnchor.GetCntntAnchor()->nNode ||
+ pUndoPam->GetMark()->nNode ==
+ rAnchor.GetCntntAnchor()->nNode ) ) )
+ {
+ if( bChkHeaderFooter &&
+ FLY_AT_CNTNT == rAnchor.GetAnchorId() &&
+ RES_DRAWFRMFMT == pFrmFmt->Which() )
+ {
+ // DrawObjecte in Kopf-/Fusszeilen ist nicht
+ // erlaubt!
+ pFrmFmt->DelFrms();
+ pDoc->DelFrmFmt( pFrmFmt );
+ --n;
+ }
+ else
+ {
+ if( bSaveUndo )
+ pDoc->AppendUndo( new SwUndoInsLayFmt( pFrmFmt ) );
+ if( pFrmFmt->GetDepends() )
+ {
+ // beim Insert legen Draw-Objecte einen Frame an
+ // also weg damit.
+ pFrmFmt->DelFrms();
+ }
+
+ if( FLY_PAGE == rAnchor.GetAnchorId() )
+ {
+ if( !rAnchor.GetCntntAnchor() )
+ pFrmFmt->MakeFrms();
+ else if( pCrsr )
+ // seitengebundene Flys eingefuegt, dann schalte
+ // die Optimierungs-Flags vom SwDoc ab. Sonst
+ // werden die Flys nicht an der Position erzeugt.
+ pDoc->SetLoaded( FALSE );
+ }
+ else
+ pFrmFmt->MakeFrms();
+ }
+ }
+ }
+ }
+ if( aFlyFrmArr.Count() )
+ aFlyFrmArr.Remove( 0, aFlyFrmArr.Count() );
+
+ pDoc->SetRedlineMode_intern( eOld );
+ if( pDoc->IsRedlineOn() )
+ pDoc->AppendRedline( new SwRedline( REDLINE_INSERT, *pUndoPam ));
+ else
+ pDoc->SplitRedline( *pUndoPam );
+ pDoc->SetRedlineMode_intern( REDLINE_IGNORE );
+ }
+ if( bSaveUndo )
+ {
+ pUndo->SetInsertRange( *pUndoPam, FALSE );
+ pDoc->AppendUndo( pUndo );
+ }
+
+ delete pUndoPam;
+
+ pPam = (SwPaM *) pPam->GetNext();
+ if( pPam == pEnd )
+ break;
+
+ // only read templates? then ignore multi selection! Bug 68593
+ if( bFmtsOnly )
+ break;
+
+ /*
+ * !!! man muss selbst den Status vom Stream zuruecksetzen. !!!
+ * Beim seekg wird der akt. Status, eof- und bad-Bit
+ * gesetzt, warum weiss keiner
+ */
+ if( pStrm )
+ {
+ pStrm->Seek(0);
+ pStrm->ResetError();
+ }
+ }
+
+ pDoc->bInReading = FALSE;
+ pDoc->SetAllUniqueFlyNames();
+
+ if( bReadPageDescs )
+ pDoc->DoUndo( TRUE );
+ else
+ {
+ pDoc->DoUndo( bDocUndo );
+ if( bSaveUndo )
+ pDoc->EndUndo( UNDO_INSDOKUMENT );
+ }
+
+ // Wenn der Pam nur fuers Lesen konstruiert wurde, jetzt zerstoeren.
+ if( !pCrsr )
+ {
+ delete pPam; // ein neues aufgemacht.
+
+ // alle Links updaten und Fehler melden
+ // (die Graphic-Links nicht, passiert ueber unseren Grafik-Cache!!)
+ // JP 20.03.96: aber nicht wenn die DocShell als INTERNAL
+ // construiert wurde (FileLinks in FileLinks in ...)
+ // JP 27.06.96: wenn internal, dann nie Updaten! (rekursionen werden
+ // sonst nicht erkannt! ( Bug )
+
+ SfxObjectCreateMode eMode;
+ USHORT nLinkMode = pDoc->GetLinkUpdMode();
+ if( nLinkMode != NEVER && pDoc->GetDocShell() &&
+ pDoc->GetLinkManager().GetLinks().Count() &&
+ SFX_CREATE_MODE_INTERNAL !=
+ ( eMode = pDoc->GetDocShell()->GetCreateMode()) &&
+ SFX_CREATE_MODE_ORGANIZER != eMode &&
+ SFX_CREATE_MODE_PREVIEW != eMode &&
+ !pDoc->GetDocShell()->IsPreview() )
+ {
+ ViewShell* pVSh = 0;
+ if( pDoc->GetRootFrm() && !pDoc->GetEditShell( &pVSh ) && !pVSh )
+ {
+ ViewShell aVSh( pDoc, ::GetSpellChecker(), ::GetHyphenator(),
+ 0, 0 );
+
+ SET_CURR_SHELL( &aVSh );
+ pDoc->GetLinkManager().UpdateAllLinks( nLinkMode == MANUAL, TRUE, FALSE );
+ }
+ else
+ pDoc->GetLinkManager().UpdateAllLinks( nLinkMode == MANUAL, TRUE, FALSE );
+ }
+
+ eOld = (SwRedlineMode)(pDoc->GetRedlineMode() & ~REDLINE_IGNORE);
+
+ pDoc->SetFieldsDirty( FALSE );
+ }
+
+ pDoc->SetRedlineMode_intern( eOld );
+ pDoc->SetOle2Link( aOLELink );
+
+ if( pCrsr ) // das Doc ist jetzt modifiziert
+ pDoc->SetModified();
+
+ if( po == ReadSw3 ) // am Sw3-Reader noch den pIo-Pointer "loeschen"
+ ((Sw3Reader*)po)->SetSw3Io( 0 );
+
+ po->SetReadUTF8( FALSE );
+ return nError;
+}
+
+
+/*
+ * Konstruktoren, Destruktor
+ */
+
+// Initiales Einlesben
+
+
+SwReader::SwReader( SvStream& rStrm, const String& rFileName, SwDoc *pDoc )
+ : SwDocFac( pDoc ),
+ pStrm( &rStrm ),
+ pStg( 0 ),
+ pMedium( 0 ),
+ aFileName( rFileName ),
+ pCrsr( 0 )
+{
+}
+
+
+SwReader::SwReader( SvStorage& rStg, const String& rFileName, SwDoc *pDoc )
+ : SwDocFac( pDoc ),
+ pStrm( 0 ),
+ pStg( &rStg ),
+ pMedium( 0 ),
+ aFileName( rFileName ),
+ pCrsr( 0 )
+{
+}
+
+
+SwReader::SwReader( SfxMedium& rMedium, const String& rFileName, SwDoc *pDoc )
+ : SwDocFac( pDoc ),
+ pStrm( 0 ),
+ pStg( 0 ),
+ pMedium( &rMedium ),
+ aFileName( rFileName ),
+ pCrsr( 0 )
+{
+}
+
+// In ein existierendes Dokument einlesen
+
+SwReader::SwReader( SvStream& rStrm, const String& rFileName, SwPaM& rPam )
+ : SwDocFac( rPam.GetDoc() ),
+ aFileName( rFileName ),
+ pStrm( &rStrm ),
+ pStg( 0 ),
+ pMedium( 0 ),
+ pCrsr( &rPam )
+{
+}
+
+SwReader::SwReader( SvStorage& rStg, const String& rFileName, SwPaM& rPam )
+ : SwDocFac( rPam.GetDoc() ),
+ aFileName( rFileName ),
+ pStg( &rStg ),
+ pStrm( 0 ),
+ pMedium( 0 ),
+ pCrsr( &rPam )
+{
+}
+
+
+SwReader::SwReader( SfxMedium& rMedium, const String& rFileName, SwPaM& rPam )
+ : SwDocFac( rPam.GetDoc() ),
+ aFileName( rFileName ),
+ pStg( 0 ),
+ pStrm( 0 ),
+ pMedium( &rMedium ),
+ pCrsr( &rPam )
+{
+}
+
+
+Reader::Reader()
+ : pStrm(0), pStg(0), pMedium(0), pTemplate(0),
+ bTmplBrowseMode( FALSE ), bInsertMode( FALSE ),
+ bReadUTF8( FALSE )
+{
+}
+
+Reader::~Reader()
+{
+ delete pTemplate;
+}
+
+// Die Filter-Vorlage laden, setzen und wieder freigeben
+SwDoc* Reader::GetTemplateDoc()
+{
+ if( !aTemplateNm.Len() )
+ ClearTemplate();
+ else
+ {
+ INetURLObject aTDir( URIHelper::SmartRelToAbs(aTemplateNm) );
+ DateTime aCurrDateTime;
+ BOOL bLoad = FALSE;
+
+ // Wenn das Template schon mal geladen wurde, nur einmal pro
+ // Minute nachschauen, ob es geaendert wurde.
+ if( !pTemplate || aCurrDateTime >= aChkDateTime )
+ {
+ try
+ {
+ ::ucb::Content aTestContent(
+ aTDir.GetMainURL(), uno::Reference< XCommandEnvironment > ());
+ uno::Any aAny = aTestContent.getPropertyValue( OUString::createFromAscii("DateModified") );
+ if(aAny.hasValue())
+ {
+ const util::DateTime* pDT = (util::DateTime*)aAny.getValue();
+ Date aTestDate(pDT->Day, pDT->Month, pDT->Year);
+ Time aTestTime(pDT->Hours, pDT->Minutes, pDT->Seconds, pDT->HundredthSeconds);
+
+ if( !pTemplate || aDStamp != aTestDate ||
+ aTStamp != aTestTime )
+ {
+ bLoad = TRUE;
+ aDStamp = aTestDate;
+ aTStamp = aTestTime;
+ }
+ }
+ }
+ catch(...)
+ {
+ }
+
+ // Erst in einer Minute wieder mal nachschauen, ob sich die
+ // Vorlage geaendert hat.
+ aChkDateTime = aCurrDateTime;
+ aChkDateTime += Time( 0L, 1L );
+ }
+
+ if( bLoad )
+ {
+ ClearTemplate();
+
+ SvStorageRef xStor( new SvStorage( aTDir.GetFull(), STREAM_READ ));
+ pTemplate = new SwDoc;
+ pTemplate->AddLink();
+
+ // sicher ist sicher
+ pTemplate->SetBrowseMode( bTmplBrowseMode );
+
+ Sw3Io aIO( *pTemplate );
+ aIO.LoadStyles( xStor );
+ }
+#ifdef DBG_UTIL
+ BOOL bExist = FALSE;
+ try
+ {
+ ::ucb::Content aTestContent(
+ aTDir.GetMainURL(), uno::Reference< XCommandEnvironment > ());
+ bExist = aTestContent.isDocument();
+
+ }
+ catch(...)
+ {
+ }
+
+ ASSERT( !pTemplate || bExist ||
+ aTemplateNm.EqualsAscii( "$$Dummy$$" ),
+ "TemplatePtr aber Template existiert nicht!" );
+#endif
+ }
+
+ return pTemplate;
+}
+
+BOOL Reader::SetTemplate( SwDoc& rDoc )
+{
+ BOOL bRet = FALSE;
+
+ GetTemplateDoc();
+ if( pTemplate )
+ {
+ rDoc.ReplaceStyles( *pTemplate );
+ rDoc.SetFixFields();
+ bRet = TRUE;
+ }
+
+ return bRet;
+}
+
+void Reader::ClearTemplate()
+{
+ if( pTemplate )
+ {
+ if( 0 == pTemplate->RemoveLink() )
+ delete pTemplate,
+ pTemplate = 0;
+ }
+}
+
+void Reader::SetTemplateName( const String& rDir )
+{
+ if( rDir.Len() && aTemplateNm != rDir )
+ {
+ ClearTemplate();
+ aTemplateNm = rDir;
+ }
+}
+
+void Reader::MakeHTMLDummyTemplateDoc()
+{
+ ClearTemplate();
+ pTemplate = new SwDoc;
+ pTemplate->AddLink();
+ pTemplate->SetBrowseMode( bTmplBrowseMode );
+ pTemplate->GetPrt( TRUE );
+ aChkDateTime = Date( 1, 1, 2300 ); // 2300. Jahrtausend sollte reichen
+ aTemplateNm.AssignAscii( "$$Dummy$$" );
+}
+
+// alle die die Streams / Storages nicht geoeffnet brauchen,
+// muessen die Methode ueberladen
+int Reader::SetStrmStgPtr()
+{
+ ASSERT( pMedium, "Wo ist das Medium??" );
+
+ if( pMedium->IsStorage() )
+ {
+ if( SW_STORAGE_READER & GetReaderType() )
+ {
+ pStg = pMedium->GetStorage();
+ return TRUE;
+ }
+ }
+ else if( SW_STREAM_READER & GetReaderType() )
+ {
+ pStrm = pMedium->GetInStream();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+int Reader::GetReaderType()
+{
+ return SW_STREAM_READER;
+}
+
+
+void Reader::SetFltName( const String& )
+{
+}
+
+
+void Reader::SetNoOutlineNum( SwDoc& rDoc )
+{
+ // JP 10.03.96: jetzt wieder keine Nummerierung in den Vorlagen
+
+#if 0
+ //JP 18.01.96: Alle Ueberschriften sind normalerweise ohne
+ // Kapitelnummer. Darum hier explizit abschalten
+ // weil das Default jetzt wieder auf AN ist.
+ SwNumRules aRules( OUTLINE_RULES );
+ if( rDoc.GetOutlineNumRules() )
+ aRules = *rDoc.GetOutlineNumRules();
+ for( BYTE n = 0; n < MAXLEVEL; ++n )
+ {
+ SwNumFmt aFmt( aRules.Get( n ) );
+ aFmt.eType = NUMBER_NONE;
+ aRules.Set( n, aFmt );
+ }
+ rDoc.SetOutlineNumRules( aRules );
+
+ // und UeberschirftBasis ohne Einrueckung!
+ SwTxtFmtColl* pCol = rDoc.GetTxtCollFromPool( RES_POOLCOLL_HEADLINE_BASE );
+ pCol->ResetAttr( RES_LR_SPACE );
+#endif
+}
+
+
+void Reader::ResetFrmFmtAttrs( SfxItemSet &rFrmSet )
+{
+ rFrmSet.Put( SvxLRSpaceItem() );
+ rFrmSet.Put( SvxULSpaceItem() );
+ rFrmSet.Put( SvxBoxItem() );
+}
+
+
+void Reader::ResetFrmFmts( SwDoc& rDoc )
+{
+ for( USHORT i=0; i<3; i++ )
+ {
+ USHORT nPoolId;
+ switch( i )
+ {
+ case 0: nPoolId = RES_POOLFRM_FRAME; break;
+ case 1: nPoolId = RES_POOLFRM_GRAPHIC; break;
+ case 2: nPoolId = RES_POOLFRM_OLE; break;
+ }
+
+ SwFrmFmt *pFrmFmt = rDoc.GetFrmFmtFromPool( nPoolId );
+
+ pFrmFmt->ResetAttr( RES_LR_SPACE );
+ pFrmFmt->ResetAttr( RES_UL_SPACE );
+ pFrmFmt->ResetAttr( RES_BOX );
+ }
+}
+
+// ------------------------------------------------
+BOOL SwReader::HasGlossaries( const Reader& rOptions )
+{
+ // Variable uebertragen
+ Reader* po = (Reader*) &rOptions;
+ po->pStrm = pStrm;
+ po->pStg = pStg;
+ po->bInsertMode = FALSE;
+
+ // ist ein Medium angegeben, dann aus diesem die Streams besorgen
+ BOOL bRet = FALSE;
+ if( !( 0 != (po->pMedium = pMedium ) && !po->SetStrmStgPtr() ))
+ bRet = po->HasGlossaries();
+ return bRet;
+}
+
+BOOL SwReader::ReadGlossaries( const Reader& rOptions,
+ SwTextBlocks& rBlocks, BOOL bSaveRelFiles )
+{
+ // Variable uebertragen
+ Reader* po = (Reader*) &rOptions;
+ po->pStrm = pStrm;
+ po->pStg = pStg;
+ po->bInsertMode = FALSE;
+
+ // ist ein Medium angegeben, dann aus diesem die Streams besorgen
+ BOOL bRet = FALSE;
+ if( !( 0 != (po->pMedium = pMedium ) && !po->SetStrmStgPtr() ))
+ bRet = po->ReadGlossaries( rBlocks, bSaveRelFiles );
+ return bRet;
+}
+
+BOOL Reader::HasGlossaries() const
+{
+ return FALSE;
+}
+
+BOOL Reader::ReadGlossaries( SwTextBlocks&, BOOL ) const
+{
+ return FALSE;
+}
+
+// ------------------------------------------------
+
+int StgReader::GetReaderType()
+{
+ return SW_STORAGE_READER;
+}
+
+
+
+
+/*
+ * Writer
+ */
+
+/*
+ * Konstruktoren, Destruktoren sind inline (inc/shellio.hxx).
+ */
+
+
+SwWriter::SwWriter( SvStream& rStrm, SwCrsrShell &rShell, BOOL bWriteAll )
+ : pStrm( &rStrm ),
+ pStg( 0 ),
+ pMedium( 0 ),
+ pShell( &rShell ),
+ pOutPam( 0 ),
+ rDoc( *rShell.GetDoc() ),
+ bWriteAll( bWriteAll )
+{
+}
+
+
+SwWriter::SwWriter(SvStream& rStrm,SwDoc &rDoc)
+ :pStrm( &rStrm ),
+ pStg( 0 ),
+ pMedium( 0 ),
+ pShell( 0 ),
+ pOutPam( 0 ),
+ rDoc( rDoc ),
+ bWriteAll( TRUE )
+{
+}
+
+
+SwWriter::SwWriter( SvStream& rStrm, SwPaM& rPam, BOOL bWriteAll )
+ : pStrm( &rStrm ),
+ pStg( 0 ),
+ pMedium( 0 ),
+ pShell( 0 ),
+ pOutPam( &rPam ),
+ rDoc( *rPam.GetDoc() ),
+ bWriteAll( bWriteAll )
+{
+}
+
+/*
+
+SwWriter::SwWriter( SvStorage& rStg, SwCrsrShell &rShell, BOOL bWriteAll )
+ : pStrm( 0 ),
+ pStg( &rStg ),
+ pMedium( 0 ),
+ pShell( &rShell ),
+ pOutPam( 0 ),
+ rDoc( *rShell.GetDoc() ),
+ bWriteAll( bWriteAll )
+{
+}
+*/
+
+
+SwWriter::SwWriter(SvStorage& rStg,SwDoc &rDoc)
+ :pStrm( 0 ),
+ pStg( &rStg ),
+ pMedium( 0 ),
+ pShell( 0 ),
+ pOutPam( 0 ),
+ rDoc( rDoc ),
+ bWriteAll( TRUE )
+{
+}
+/*
+
+SwWriter::SwWriter( SvStorage& rStg, SwPaM& rPam, BOOL bWriteAll )
+ : pStrm( 0 ),
+ pStg( &rStg ),
+ pMedium( 0 ),
+ pShell( 0 ),
+ pOutPam( &rPam ),
+ rDoc( *rPam.GetDoc() ),
+ bWriteAll( bWriteAll )
+{
+}
+*/
+
+SwWriter::SwWriter( SfxMedium& rMedium, SwCrsrShell &rShell, BOOL bWriteAll )
+ : pStrm( 0 ),
+ pStg( 0 ),
+ pMedium( &rMedium ),
+ pShell( &rShell ),
+ pOutPam( 0 ),
+ rDoc( *rShell.GetDoc() ),
+ bWriteAll( bWriteAll )
+{
+}
+
+
+SwWriter::SwWriter( SfxMedium& rMedium, SwDoc &rDoc)
+ :pStrm( 0 ),
+ pStg( 0 ),
+ pMedium( &rMedium ),
+ pShell( 0 ),
+ pOutPam( 0 ),
+ rDoc( rDoc ),
+ bWriteAll( TRUE )
+{
+}
+
+/*
+
+SwWriter::SwWriter( SfxMedium& rMedium, SwPaM& rPam, BOOL bWriteAll )
+ : pStrm( 0 ),
+ pStg( 0 ),
+ pShell( 0 ),
+ pMedium( &rMedium ),
+ pOutPam( &rPam ),
+ rDoc( *rPam.GetDoc() ),
+ bWriteAll( bWriteAll )
+{
+}
+*/
+
+
+ULONG SwWriter::Write( WriterRef& rxWriter, const String* pRealFileName )
+{
+ BOOL bHasMark = FALSE;
+ SwPaM * pPam;
+
+ SwDoc *pDoc = 0L;
+
+ if ( pShell && !bWriteAll && pShell->IsTableMode() )
+ {
+ bWriteAll = TRUE;
+ pDoc = new SwDoc;
+ pDoc->AddLink();
+
+ // kopiere Teile aus einer Tabelle: lege eine Tabelle mit der Breite
+ // von der Originalen an und kopiere die selectierten Boxen.
+ // Die Groessen werden prozentual korrigiert.
+
+ // lasse ueber das Layout die Boxen suchen
+ SwSelBoxes aBoxes;
+ GetTblSel( *pShell, aBoxes );
+ SwTableNode* pTblNd = (SwTableNode*)aBoxes[0]->GetSttNd()->FindStartNode();
+ SwNodeIndex aIdx( pDoc->GetNodes().GetEndOfExtras(), 2 );
+ SwCntntNode *pNd = aIdx.GetNode().GetCntntNode();
+ ASSERT( pNd, "Node not found" );
+ SwPosition aPos( aIdx, SwIndex( pNd ) );
+ pTblNd->GetTable().MakeCopy( pDoc, aPos, aBoxes );
+ }
+
+ if( !bWriteAll && ( pShell || pOutPam ))
+ {
+ if( pShell )
+ pPam = pShell->GetCrsr();
+ else
+ pPam = pOutPam;
+
+ SwPaM *pEnd = pPam;
+
+ // Erste Runde: Nachsehen, ob eine Selektion besteht.
+ while(TRUE)
+ {
+ bHasMark = bHasMark || pPam->HasMark();
+ pPam = (SwPaM *) pPam->GetNext();
+ if(bHasMark || pPam == pEnd)
+ break;
+ }
+
+ // Wenn keine Selektion besteht, eine ueber das ganze Dokument aufspannen.
+ if(!bHasMark)
+ {
+ if( pShell )
+ {
+ pShell->Push();
+ pShell->SttDoc();
+ pShell->SetMark();
+ pShell->EndDoc();
+ }
+ else
+ {
+ pPam = new SwPaM( *pPam );
+ pPam->Move( fnMoveBackward, fnGoDoc );
+ pPam->SetMark();
+ pPam->Move( fnMoveForward, fnGoDoc );
+ }
+ }
+ // pPam ist immer noch der akt. Cursor !!
+ }
+ else
+ {
+ // keine Shell oder alles schreiben -> eigenen Pam erzeugen
+ SwDoc* pOutDoc = pDoc ? pDoc : &rDoc;
+ pPam = new SwPaM( pOutDoc->GetNodes().GetEndOfContent() );
+ pPam->Move( fnMoveBackward, fnGoDoc );
+ pPam->SetMark();
+ pPam->Move( fnMoveForward, fnGoDoc );
+ }
+
+ rxWriter->bWriteAll = bWriteAll;
+ SwDoc* pOutDoc = pDoc ? pDoc : &rDoc;
+
+ // falls der Standart PageDesc. immer noch auf initalen Werten steht
+ // (wenn z.B. kein Drucker gesetzt wurde) dann setze jetzt auf DIN A4
+ if( !pOutDoc->GetPrt() )
+ {
+ const SwPageDesc& rPgDsc = pOutDoc->GetPageDesc( 0L );
+ //const SwPageDesc& rPgDsc = *pOutDoc->GetPageDescFromPool( RES_POOLPAGE_STANDARD );;
+ const SwFmtFrmSize& rSz = rPgDsc.GetMaster().GetFrmSize();
+ // Clipboard-Dokument wird immer ohne Drucker angelegt, so ist
+ // der Std.PageDesc immer aug LONG_MAX !! Mappe dann auf DIN A4
+ if( LONG_MAX == rSz.GetHeight() || LONG_MAX == rSz.GetWidth() )
+ {
+ SwPageDesc aNew( rPgDsc );
+ SwFmtFrmSize aNewSz( rSz );
+ aNewSz.SetHeight( lA4Height );
+ aNewSz.SetWidth( lA4Width );
+ aNew.GetMaster().SetAttr( aNewSz );
+ pOutDoc->ChgPageDesc( 0, aNew );
+ }
+ }
+
+ BOOL bWasPurgeOle = pOutDoc->IsPurgeOLE();
+ pOutDoc->SetPurgeOLE( FALSE );
+
+ ULONG nError = 0;
+ if( pMedium )
+ nError = rxWriter->Write( *pPam, *pMedium, pRealFileName );
+ else if( pStg )
+ nError = rxWriter->Write( *pPam, *pStg, pRealFileName );
+ else if( pStrm )
+ nError = rxWriter->Write( *pPam, *pStrm, pRealFileName );
+
+ pOutDoc->SetPurgeOLE( bWasPurgeOle );
+
+ // Falls nur zum Schreiben eine Selektion aufgespannt wurde, vor der
+ // Rueckkehr den alten Crsr wieder herstellen.
+ if( !bWriteAll && ( pShell || pOutPam ))
+ {
+ if(!bHasMark)
+ {
+ if( pShell )
+ pShell->Pop( FALSE );
+ else
+ delete pPam;
+ }
+ }
+ else
+ {
+ delete pPam; // loesche den hier erzeugten Pam
+ // Alles erfolgreich geschrieben? Sag' das dem Dokument!
+ if( !IsError( nError ) && !pDoc )
+ rDoc.ResetModified();
+ }
+
+ if ( pDoc )
+ {
+ if ( !pDoc->RemoveLink() )
+ delete pDoc;
+ bWriteAll = FALSE;
+ }
+
+ return nError;
+}
+
+
+/* */
+
+String GetTmpFileName()
+{
+ String sRet = TempFile::CreateTempName(0);
+ return sRet;
+}
+
+
+// ----------------------------------------------------------------------
+
+
+BOOL SetHTMLTemplate( SwDoc & rDoc )
+{
+ // Vorlagennamen von den Sfx-HTML-Filter besorgen!!!
+ if( !ReadHTML->GetTemplateDoc() )
+ ReadHTML->MakeHTMLDummyTemplateDoc();
+
+ BOOL bRet = ReadHTML->SetTemplate( rDoc );
+
+ SwNodes& rNds = rDoc.GetNodes();
+ SwNodeIndex aIdx( rNds.GetEndOfExtras(), 1 );
+ SwCntntNode* pCNd = rNds.GoNext( &aIdx );
+ if( pCNd )
+ {
+ pCNd->SetAttr( SwFmtPageDesc(
+ rDoc.GetPageDescFromPool(RES_POOLPAGE_HTML) ) );
+ pCNd->ChgFmtColl( rDoc.GetTxtCollFromPool( RES_POOLCOLL_TEXT ));
+ }
+
+ return bRet;
+}
+
+/*************************************************************************
+
+ $Log: not supported by cvs2svn $
+ Revision 1.361 2000/09/18 16:04:40 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.360 2000/06/26 12:52:39 os
+ INetURLObject::SmartRelToAbs removed
+
+ Revision 1.359 2000/06/13 09:42:56 os
+ using UCB
+
+ Revision 1.358 2000/05/11 11:51:49 tl
+ if[n]def ONE_LINGU entfernt
+
+ Revision 1.357 2000/05/08 16:42:38 jp
+ Changes for Unicode
+
+ Revision 1.356 2000/04/04 15:37:42 jp
+ Bug #74638#: dont unload OLE-Objects in a save call
+
+ Revision 1.355 2000/02/11 14:36:34 hr
+ #70473# changes for unicode ( patched by automated patchtool )
+
+ Revision 1.354 2000/02/09 11:59:21 jp
+ Task #72579#: WW8Reader can import glossaries
+
+ Revision 1.353 2000/02/02 16:59:06 jp
+ Task #72579#: interface of SwReader is changed
+
+ Revision 1.352 2000/01/20 12:53:35 jp
+ Bug #72119#: HTML-Template is moved into an other directory
+
+ Revision 1.351 2000/01/20 12:17:45 jp
+ Bug #72119#: HTML-Template is moved into an other directory
+
+ Revision 1.350 1999/10/25 19:34:19 tl
+ ongoing ONE_LINGU implementation
+
+ Revision 1.349 1999/10/21 17:49:54 jp
+ have to change - SearchFile with SfxIniManager, dont use SwFinder for this
+
+ Revision 1.348 1999/09/08 13:49:52 jp
+ Bug #68593#: Read - no nulti read if formatsonlyflag set
+
+ Revision 1.347 1999/08/31 08:53:26 TL
+ #if[n]def ONE_LINGU inserted (for transition of lingu to StarOne)
+
+
+ Rev 1.346 31 Aug 1999 10:53:26 TL
+ #if[n]def ONE_LINGU inserted (for transition of lingu to StarOne)
+
+ Rev 1.345 26 Aug 1999 15:45:52 OS
+ double methods in PathFinder removed
+
+ Rev 1.344 16 Jun 1999 19:53:14 JP
+ Change interface of base class Writer
+
+ Rev 1.343 04 May 1999 14:59:28 JP
+ FilterExportklasse Writer von SvRef abgeleitet, damit sie immer zerstoert wird
+
+ Rev 1.342 11 Mar 1999 23:54:40 JP
+ Task #63171#: Optionen fuer Feld-/LinkUpdate Doc oder Modul lokal
+
+ Rev 1.341 10 Mar 1999 10:40:28 JP
+ Bug #63040#: bei normalem Lesen Felder als aktuell kennzeichnen
+
+ Rev 1.340 04 Feb 1999 21:19:06 JP
+ Bug #61404#/#61014#: neu: SetFixFields statt zweier Methoden
+
+ Rev 1.339 02 Feb 1999 13:24:34 JP
+ Bug #61014#: UpdateAllLinks nur rufen, wenn Liks vorhanden sind (erspart eine temp. ViewSh!)
+
+*************************************************************************/
+
+