summaryrefslogtreecommitdiff
path: root/binfilter/bf_sw/source/core/swg/rdswg.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sw/source/core/swg/rdswg.hxx')
-rw-r--r--binfilter/bf_sw/source/core/swg/rdswg.hxx332
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: */