diff options
Diffstat (limited to 'binfilter/bf_sw/source/core/swg/rdswg.hxx')
-rw-r--r-- | binfilter/bf_sw/source/core/swg/rdswg.hxx | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/binfilter/bf_sw/source/core/swg/rdswg.hxx b/binfilter/bf_sw/source/core/swg/rdswg.hxx new file mode 100644 index 000000000000..90637e2169ce --- /dev/null +++ b/binfilter/bf_sw/source/core/swg/rdswg.hxx @@ -0,0 +1,332 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _RDSWG_HXX +#define _RDSWG_HXX + +#include <vcl/prntypes.hxx> + +#include <bf_svtools/svarray.hxx> +#include <swgstr.hxx> +#include <swgids.hxx> +class Brush; +class Color; +class Pen; +namespace binfilter { +class SfxItemSet; + +class SwRect; +class SwPaM; +class SwDoc; +class SwFrm; +class SwFmt; +class SwAttrSet; +class SwNumFmt; +class SwNumRule; +class SwPageDesc; +class SwPageFtnInfo; +class SwNode; +class SwCntntNode; +class SwTxtNode; +class SwTOXBase; +class SwNodeIndex; +class SwTable; +class SwTableBox; +class SwTableBoxes; +class SwTableLine; +class SwTableLines; +class SwField; +class SwFieldType; +class SwpHints; + + +class SwBlockNames; +class SwStartNode; + +class SfxDocumentInfo; + +struct FmtInfo { // Format-Deskriptor: + union { + SfxItemSet* pSet; // AttrSet oder + SwFmt* pFmt; // Format + }; + BYTE cFmt; // Bitflags +}; + +#define FINFO_FORMAT 0x01 // Eintrag ist Format +#define FINFO_LOCAL 0x02 // Eintrag ist lokal + +struct TxtCollInfo { // Textcollection-Info: + USHORT nDerived; // Abhaengigkeit + USHORT nFollow; // Folgeindex +}; + +struct PageDescInfo { // Seitenbeschreibungs-Info: + USHORT nPoolId; // Pool-ID + USHORT nActualIdx; // der tatsaechliche Index + USHORT nFollow; // Folgeindex +}; + +struct NumRuleInfo { // Numerierungs-Regeln: + SwNumRule* pNumRule; // dazugehoerige Regel + SwTxtNode* pBgn, *pEnd; // Anfang + Ende im Nodes-Array +}; + +struct FrmInfo { // Frame-ID-Info: + SwFrm* pFrm; // der Frame + USHORT nId; // und sein ID +}; + +struct LanguageInfo { // Sprach-Info: + USHORT nLanguage; // Sprache + BOOL bSupported; // TRUE, wenn unterstuetzt +}; + +class PageDescLink : public String{ // Verknuepfung Format mit Seite +public: + PageDescLink* pLink; // Link zum naechsten + USHORT nOffset; // Offset + union { + SwAttrSet* pSet; // AttrSet oder + SwFmt* pFmt; // Format + }; + BYTE cFmt; // TRUE: Ptr ist Format + PageDescLink( const String& s, USHORT n ) : String( s ) + { pLink = NULL; pSet = NULL; cFmt = FALSE; nOffset = n; } +}; + +struct SectionInfo { // Section-Info: + USHORT nId; // Section ID + SwNode* pNode1; // StartNode +}; + +typedef const SwTable *SwgSwTablePtr; +SV_DECL_PTRARR(SwgTables,SwgSwTablePtr,4,4) + + class SwSwgReader + { + friend class Sw2TextBlocks; + + private: + ULONG nErrno; // Fehlernummer + SwPaM* pPaM; // WriterG-Einfuegepos + long nDocStart; // Beginn des Dokuments + long nRecStart; // Beginn der Records im Dokument + long nNextDoc; // Offset des naechsten Dokuments + FrmInfo* pFrms; // Frame-ID-Infos + FmtInfo* pFmts; // Format-Infos + TxtCollInfo* pCollIdx; // Collection Index translation table + PageDescInfo* pLayIdx; // Layout Index translation table + PageDescLink* pPageLinks; // Format-Seiten-Links + NumRuleInfo* pRules; // Num-Regelwerk + SectionInfo* pSects; // Sections + SectionInfo* pLastSect; // letzte Section + LanguageInfo* pLanguages; // Sprachen + const ByteString* pNdOrigTxt; // original text of the textnode + + USHORT nColl, nLay; // Anzahl Collections, Seitenlayouts + USHORT nRules; // Anzahl Regeln + USHORT nNamedFmt; // Anzahl benannte Formate (fuer Textbausteine) + USHORT nFrm, nFrmSize; // Anzahl Frame-IDs, Tabellengroesse + USHORT nSect, nSectSize; // Anzahl Sections, Tabellengroesse + USHORT nTbl, nTblSize; // Anzahl Tabellen, Tabellengroesse + USHORT nLang, nLangSize; // Anzahl Sprachen, Tabellengroesse + USHORT nOptions; // Lese-Optionen + USHORT nHelpFileId; // Hilfe-ID fuer Vorlagen-Templates + USHORT nFlyLevel; // != 0: FlyFmt wird eingelesen + USHORT nFlagBits; // temp fuer PageDesc: Bits aus Format + USHORT nFmtLvl; // Rekursionstiefe fuer InFormat() + USHORT nTblBoxLvl; // Rekursionstiefe fuer InFormat in InTableBox() + + SfxDocumentInfo* pInfo; + String aFileName; // Name vom Eingabe-Stream + SwgTables *pTables; + + // gc25: swistream besitzt privaten Copy-CTOR + SwSwgReader( const SwSwgReader & ); + + BOOL LoadDocInfo( SfxDocumentInfo& ); + + short LayoutIdx( short n ); + void UpdateRuleRange( USHORT nIdx, SwTxtNode* pNd ); + void ResolvePageDescLinks(); + String ParseText(); + // void ConvertLineTerminators( String&, GUIType ); + void LoadHeader(); + + void InTxtFmtColls(); + void InTxtFmtColl( short nIdx ); + + void InPageDescs(); + void InPageDesc( short nIdx ); + void InPageFtnInfo( SwPageFtnInfo& rFtn ); + + void InTextHints( SwTxtNode& rNd, xub_StrLen nOffset ); + void InNodeBookmark( SwNodeIndex& rPos ); + USHORT GetNextSymbolFontHint( SwpHints*, USHORT, xub_StrLen&, xub_StrLen& ); + USHORT GetNextCharsetColorHint( SwpHints*, USHORT, xub_StrLen&, + xub_StrLen&, rtl_TextEncoding, + rtl_TextEncoding&); + void ConvertText( SwTxtNode& rNd, rtl_TextEncoding eSrc ); + void SetAttrSet( SwCntntNode& rNd, USHORT nId ); + void InTxtNodeAttrs( SwTxtNode& rNd, USHORT nWhich1, USHORT nWhich2 ); + void FillTxtNode( SwTxtNode* pNd, SwNodeIndex& rPos, xub_StrLen nOffset, USHORT=0); + void FillString( String& ); + void InGrfNode( SwNodeIndex& rPos ); + void InOleNode( SwNodeIndex& rPos ); + + SwTOXBase* InTOXBase(); + void InTOXContents( SwNodeIndex& rPos, SwTxtNode* ); + void InTOX( SwNodeIndex& rPos, SwTxtNode* ); + + void InContents( BOOL bNode1 = TRUE, BOOL bBlock = FALSE, USHORT=0 ); + String InContentsText( BOOL = TRUE ); + void ScanContents( SwBlockNames* ); + + void InFlyFrames( const SwNodeIndex* pNdIdx ); + void InFlyFrame( const SwNodeIndex* pNdIdx ); + + void InDfltFmts(); + void InNamedFmts( USHORT ); + void ClearFmtIds(); + + void InTableBox( SwTableBoxes&, int, SwTableLine*, SwNodeIndex&, + const SwTable *pTable=0 ); + void InTableLine( SwTableLines&, SwTableBox*, int, SwNodeIndex&, + const SwTable *pTable=0 ); + void InTable( SwNodeIndex& rPos ); + + void InNumFmt( SwNumFmt& rFmt ); + SwNumRule* InNumRule(); + void InOutlineRule(); + void InTxtNumRule(); + void InFtnInfo(); + + void InGlobalMacroTbl(); + void InJobSetup(); + void InDocInfo(); + void InStaticDocInfo( SfxDocumentInfo& ); + void InDynamicDocInfo( SfxDocumentInfo& ); + void InComment(); + + void InLayoutFrames(); + + USHORT InHint( SfxItemSet& ); + USHORT InHint( SwTxtNode&, xub_StrLen, xub_StrLen ); + + void InFieldTypes(); + SwFieldType* InFieldType(); + + BOOL CopyRecord( SvStream* ); + + public: + SwDoc* pDoc; // WriterG-Dokumentzugriff + BOOL bNew; // Darf es was neues sein? + xub_StrLen nCntntCol; // Spalte fuer Rahmen im Node (RES_FLY_ANCHOR) + USHORT nPage1; // Start-Seite bei Einfuegen (RES_FLY_ANCHOR) + swistream r; // Input-Stream + // SvStream r; // Input-Stream + DocHeader aHdr; // Dokument-Header + FileHeader aFile; // Datei-Header + USHORT nStatus; // Status-Flags: + + #define SWGSTAT_SHAREDFMT 0x0001 // Shared Fmt wird eingelesen + #define SWGSTAT_UPDATEEXPR 0x0002 // ExprFields-Update noetig + #define SWGSTAT_NO_BOOKMARKS 0x0004 // Bookmarks ueberlesen + #define SWGSTAT_LOCALFMTS 0x0008 // lokale Formate + #define SWGSTAT_CONVBLOCKS 0x0010 // Konversion von Textbausteinen + + // Ablage-Variable fuer Lesen von Layout-Frames + USHORT nFrmFlags; // Layout-Frame-Flags + SwFrm* pUpper; // Upper Layout-Frame + SwFrm* pMaster; // Master Layout-Frame + USHORT eStartNodeType; // fuers erzeugen von StartNodes + // Fly/Footer/Header! + + SwSwgReader( SwDoc *pSwDoc, const SwPaM* pSwPaM, SvStream& rStream, + const String& rFileName, BOOL bNewDoc ); + ~SwSwgReader(); + ULONG GetError() { return nErrno; } + + const SfxDocumentInfo& GetDocInfo() { return *pInfo; } + + void LoadFileHeader(); + ULONG Read( USHORT nOptions ); + ULONG Scan( SwBlockNames* ); + BOOL CheckPasswd( const String& ); + + void RegisterFmt( SwFmt& rFmt, const SwTable *pTable=0 ); + void RegisterAttrSet( SfxItemSet* pSet, USHORT nIdx ); + void ReleaseAttrSets(); + void ReRegisterFmt( const SwFmt& rFmtOld, const SwFmt& rFmtNew, + const SwTable *pTable=0 ); + SwFmt* FindFmt( USHORT nIdx, BYTE cType ); + SfxItemSet* FindAttrSet( USHORT nIdx ); + SwFmt* InFormat( SwFmt* pFmt = NULL, USHORT* pParentId = 0 ); + USHORT InAttrSet( SwAttrSet& rSet ); + USHORT InAttrSet( SwCntntNode& rNd ); + void FillAttrSet( SwAttrSet& rSet, USHORT nId ); + BOOL TestPoolFmt( SwFmt&, int ); + + void RegisterFrmId( SwFrm& rFrm, USHORT nId ); + SwFrm* FindFrmId( USHORT nId ); + + void RegisterTable( USHORT nIdx, const SwTable *pTable ); + const SwTable *FindTable( USHORT nIdx ); + + USHORT RegisterSection( const SwNodeIndex& rStart, USHORT nId ); + + SwNode* InNodeId(); + SwFrm* InFrame(); + void InFrmRect( SwRect&, SwRect* ); + + SwPageDesc& FindPageDesc( USHORT nIdx ); + + // Methoden fuer Hints: + void Error( ULONG = 0 ); + void AddPageDescLink( const String&, USHORT nOff ); + String GetText( BOOL bReq = TRUE ); + ByteString GetAsciiText( BOOL bReq = TRUE ); + SwField* InField(); + SwStartNode* InSection(); + void FillSection( SwNodeIndex& rPos ); + void InTextBlock( long ); + Color InColor(); + void InPen(USHORT& nWidth, Color& rCol); + Color InBrush(); + + void SetReadTxt( const ByteString* pTxt ) { pNdOrigTxt = pTxt; } + const ByteString* GetReadTxt() const { return pNdOrigTxt; } + + BOOL IsTableBoxFrmFmt() { return BOOL( nFmtLvl == (nTblBoxLvl+1) ); } + }; + + +} //namespace binfilter +#endif // _RDSWG_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |