diff options
Diffstat (limited to 'svx/inc/svxrtf.hxx')
-rw-r--r-- | svx/inc/svxrtf.hxx | 481 |
1 files changed, 0 insertions, 481 deletions
diff --git a/svx/inc/svxrtf.hxx b/svx/inc/svxrtf.hxx deleted file mode 100644 index 7dfa141b259a..000000000000 --- a/svx/inc/svxrtf.hxx +++ /dev/null @@ -1,481 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: svxrtf.hxx,v $ - * $Revision: 1.24.208.1 $ - * - * 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 _SVXRTF_HXX -#define _SVXRTF_HXX - -#ifndef _TABLE_HXX //autogen -#include <tools/table.hxx> -#endif -#include <tools/string.hxx> -#include <svl/itemset.hxx> -#include <svtools/parrtf.hxx> - -#define _SVSTDARR_USHORTS -#include <svl/svstdarr.hxx> -#include "svx/svxdllapi.h" - - -class Font; -class Color; -class Graphic; -class DateTime; -struct SvxRTFStyleType; -class SvxRTFItemStackType; -class SvxRTFItemStackList; - -namespace com { namespace sun { namespace star { - namespace document { - class XDocumentProperties; - } - namespace util { - struct DateTime; - } -} } } - - -// Mapper-Klassen fuer die verschiedenen Anforderungen an Doc-Positionen -// Swg - NodePosition ist ein SwIndex, der intern veraendert wird -// EditEngine - ULONG auf Liste von Absaetzen -// ..... - -class SvxNodeIdx -{ -public: - virtual ~SvxNodeIdx() {} - virtual ULONG GetIdx() const = 0; - virtual SvxNodeIdx* Clone() const = 0; // erzeuge von sich eine Kopie -}; - -class SvxPosition -{ -public: - virtual ~SvxPosition() {} - - virtual ULONG GetNodeIdx() const = 0; - virtual xub_StrLen GetCntIdx() const = 0; - - virtual SvxPosition* Clone() const = 0; // erzeuge von sich eine Kopie - virtual SvxNodeIdx* MakeNodeIdx() const = 0; // erzeuge vom NodeIndex eine Kopie -}; - - -typedef Color* ColorPtr; -SV_DECL_PTRARR( SvxRTFColorTbl, ColorPtr, 16, 4 ) -DECLARE_TABLE( SvxRTFFontTbl, Font* ) -DECLARE_TABLE( SvxRTFStyleTbl, SvxRTFStyleType* ) -typedef SvxRTFItemStackType* SvxRTFItemStackTypePtr; -SV_DECL_PTRARR_DEL( SvxRTFItemStackList, SvxRTFItemStackTypePtr, 1, 1 ) -SV_DECL_PTRARR_STACK( SvxRTFItemStack, SvxRTFItemStackTypePtr, 0, 1 ) - -// einige Hilfsklassen fuer den RTF-Parser -struct SvxRTFStyleType -{ - SfxItemSet aAttrSet; // die Attribute vom Style (+Ableitung!) - String sName; - USHORT nBasedOn, nNext; - BOOL bBasedOnIsSet; //$flr #117411# - BYTE nOutlineNo; - BOOL bIsCharFmt; - - SvxRTFStyleType( SfxItemPool& rPool, const USHORT* pWhichRange ); -}; - - -// Bitmap - Mode - -struct SVX_DLLPUBLIC SvxRTFPictureType -{ - // Format der Bitmap - enum RTF_BMPSTYLE - { - RTF_BITMAP, // Bitmap, die Planes sind in den Pict.Daten - WIN_METAFILE, // in den Pict.Daten steht ein Window-Metafile - MAC_QUICKDRAW, // in den Pict.Daten steht ein Mac-QuickDraw - OS2_METAFILE, // in den Pict.Daten steht ein OS2-Metafile - RTF_DI_BMP, // Device Independent Bitmap - ENHANCED_MF, // in den Pict.Daten steht ein Enhanced-Metafile - RTF_PNG, // in den Pict.Daten steht ein PNG file - RTF_JPG // in den Pict.Daten steht ein JPG file - } eStyle; - - enum RTF_BMPMODE - { - BINARY_MODE, - HEX_MODE - } nMode; - - USHORT nType; - sal_uInt32 uPicLen; - USHORT nWidth, nHeight; - USHORT nGoalWidth, nGoalHeight; - USHORT nBitsPerPixel; - USHORT nPlanes; - USHORT nWidthBytes; - USHORT nScalX, nScalY; - short nCropT, nCropB, nCropL, nCropR; - - SvxRTFPictureType() { ResetValues(); } - // alle Werte auf default; wird nach einlesen der Bitmap aufgerufen ! - void ResetValues(); -}; - -// Hier sind die Ids fuer alle Charakter-Attribute, die vom SvxParser -// erkannt und in einem SfxItemSet gesetzt werden koennen. -// Die Ids werden ueber die SlotIds vom POOL richtig gesetzt. -struct RTFPlainAttrMapIds -{ - USHORT nCaseMap, - nBgColor, - nColor, - nContour, - nCrossedOut, - nEscapement, - nFont, - nFontHeight, - nKering, - nLanguage, - nPosture, - nShadowed, - nUnderline, - nOverline, - nWeight, - nWordlineMode, - nAutoKerning, - nCJKFont, - nCJKFontHeight, - nCJKLanguage, - nCJKPosture, - nCJKWeight, - nCTLFont, - nCTLFontHeight, - nCTLLanguage, - nCTLPosture, - nCTLWeight, - nEmphasis, - nTwoLines, - nCharScaleX, - nHorzVert, - nRuby, - nRelief, - nHidden - ; - RTFPlainAttrMapIds( const SfxItemPool& rPool ); -}; - -// Hier sind die Ids fuer alle Paragraph-Attribute, die vom SvxParser -// erkannt und in einem SfxItemSet gesetzt werden koennen. -// Die Ids werden ueber die SlotIds vom POOL richtig gesetzt. -struct RTFPardAttrMapIds -{ - USHORT nLinespacing, - nAdjust, - nTabStop, - nHyphenzone, - nLRSpace, - nULSpace, - nBrush, - nBox, - nShadow, - nOutlineLvl, - nSplit, - nKeep, - nFontAlign, - nScriptSpace, - nHangPunct, - nForbRule, - nDirection - ; - RTFPardAttrMapIds( const SfxItemPool& rPool ); -}; - - - -// ----------------------------------------------------------------------- - - -class SVX_DLLPUBLIC SvxRTFParser : public SvRTFParser -{ - SvStream &rStrm; - SvxRTFColorTbl aColorTbl; - SvxRTFFontTbl aFontTbl; - SvxRTFStyleTbl aStyleTbl; - SvxRTFItemStack aAttrStack; - SvxRTFItemStackList aAttrSetList; - - SvUShorts aPlainMap; - SvUShorts aPardMap; - SvUShorts aWhichMap; - String sBaseURL; - - SvxPosition* pInsPos; - SfxItemPool* pAttrPool; - Color* pDfltColor; - Font* pDfltFont; - ::com::sun::star::uno::Reference< - ::com::sun::star::document::XDocumentProperties> m_xDocProps; - SfxItemSet *pRTFDefaults; - - long nVersionNo; - int nDfltFont; - - BOOL bNewDoc : 1; // FALSE - in ein bestehendes lesen - BOOL bNewGroup : 1; // TRUE - es gab eine oeffnende Klammer - BOOL bIsSetDfltTab : 1; // TRUE - DefTab wurde eingelesen - BOOL bChkStyleAttr : 1; // TRUE - StyleSheets werden ausgewertet - BOOL bCalcValue : 1; // TRUE - Twipwerte an APP anpassen - BOOL bPardTokenRead : 1; // TRUE - Token \pard wurde erkannt - BOOL bReadDocInfo : 1; // TRUE - DocInfo mit einlesen - BOOL bIsLeftToRightDef : 1; // TRUE - in LeftToRight char run def. - // FALSE - in RightToLeft char run def. - BOOL bIsInReadStyleTab : 1; // TRUE - in ReadStyleTable - - void ClearColorTbl(); - void ClearFontTbl(); - void ClearStyleTbl(); - void ClearAttrStack(); - - SvxRTFItemStackTypePtr _GetAttrSet( int bCopyAttr=FALSE ); // neue ItemStackType anlegen - void _ClearStyleAttr( SvxRTFItemStackType& rStkType ); - - // setzt alle Attribute, die unterschiedlich zum aktuellen sind - void SetAttrSet( SfxItemSet& rAttrSet, SvxPosition& rSttPos ); - void SetAttrSet( SvxRTFItemStackType &rSet ); - void SetDefault( int nToken, int nValue ); - - // pard / plain abarbeiten - void RTFPardPlain( int bPard, SfxItemSet** ppSet ); - - void BuildWhichTbl(); - - enum RTF_CharTypeDef - { - NOTDEF_CHARTYPE, - LOW_CHARTYPE, - HIGH_CHARTYPE, - DOUBLEBYTE_CHARTYPE - }; - - // set latin/asian/complex character attributes - void SetScriptAttr( - RTF_CharTypeDef eType, SfxItemSet& rSet, SfxPoolItem& rItem ); - -protected: - virtual void EnterEnvironment(); - virtual void LeaveEnvironment(); - virtual void ResetPard(); - virtual void InsertPara() = 0; - - - String& DelCharAtEnd( String& rStr, const sal_Unicode cDel ); - - // wird fuer jedes Token gerufen, das in CallParser erkannt wird - virtual void NextToken( int nToken ); - - virtual void ReadBitmapData(); - virtual void ReadOLEData(); - - void ReadStyleTable(); - void ReadColorTable(); - void ReadFontTable(); - void ReadAttr( int nToken, SfxItemSet* pSet ); - void ReadTabAttr( int nToken, SfxItemSet& rSet ); - - // Dokument-Info lesen - ::com::sun::star::util::DateTime GetDateTimeStamp( ); - String& GetTextToEndGroup( String& rStr ); - virtual void ReadInfo( const sal_Char* pChkForVerNo = 0 ); - - inline SfxItemSet& GetAttrSet(); - // wurde noch kein Text eingefuegt ? (SttPos vom obersten StackEintrag!) - int IsAttrSttPos(); - void AttrGroupEnd(); // den akt. Bearbeiten, vom Stack loeschen - void SetAllAttrOfStk(); // end all Attr. and set it into doc - - - virtual void InsertText() = 0; - virtual void MovePos( int bForward = TRUE ) = 0; - virtual void SetEndPrevPara( SvxNodeIdx*& rpNodePos, - xub_StrLen& rCntPos )=0; - virtual void SetAttrInDoc( SvxRTFItemStackType &rSet ); - // fuer Tokens, die im ReadAttr nicht ausgewertet werden - virtual void UnknownAttrToken( int nToken, SfxItemSet* pSet ); - - // falls jemand keine Twips haben moechte - virtual void CalcValue(); - - SvxRTFParser( SfxItemPool& rAttrPool, - SvStream& rIn, - ::com::sun::star::uno::Reference< - ::com::sun::star::document::XDocumentProperties> i_xDocProps, - int bReadNewDoc = TRUE ); - virtual ~SvxRTFParser(); - - int IsNewDoc() const { return bNewDoc; } - void SetNewDoc( int bFlag ) { bNewDoc = bFlag; } - int IsNewGroup() const { return bNewGroup; } - void SetNewGroup( int bFlag ) { bNewGroup = bFlag; } - int IsChkStyleAttr() const { return bChkStyleAttr; } - void SetChkStyleAttr( int bFlag ) { bChkStyleAttr = bFlag; } - int IsCalcValue() const { return bCalcValue; } - void SetCalcValue( int bFlag ) { bCalcValue = bFlag; } - int IsPardTokenRead() const { return bPardTokenRead; } - void SetPardTokenRead( int bFlag ) { bPardTokenRead = bFlag; } - int IsReadDocInfo() const { return bReadDocInfo; } - void SetReadDocInfo( int bFlag ) { bReadDocInfo = bFlag; } - - // erfrage/setze die aktuelle Einfuegeposition - SvxPosition& GetInsPos() const { return *pInsPos; } - void SetInsPos( const SvxPosition& rNew ); - - long GetVersionNo() const { return nVersionNo; } - - // erfrage/setze die Mapping-Ids fuer die Pard/Plain Attribute - // (Set: es werden sich die Pointer gemerkt, also keine Kopie erzeugt!!! ) - void AddPardAttr( USHORT nWhich ) { aPardMap.Insert( nWhich, aPardMap.Count() ); } - void AddPlainAttr( USHORT nWhich ) { aPlainMap.Insert( nWhich, aPlainMap.Count() ); } - - SvxRTFStyleTbl& GetStyleTbl() { return aStyleTbl; } - SvxRTFItemStack& GetAttrStack() { return aAttrStack; } - SvxRTFColorTbl& GetColorTbl() { return aColorTbl; } - SvxRTFFontTbl& GetFontTbl() { return aFontTbl; } - - const String& GetBaseURL() const { return sBaseURL; } - - // lesen die GrafikDaten und fuelle damit die Grafik und die - // die PicDaten. - // Return - TRUE: die Grafik ist gueltig - BOOL ReadBmpData( Graphic& rGrf, SvxRTFPictureType& rPicType ); - // wandel die ASCII-HexCodes in binaere Zeichen um. Werden - // ungueltige Daten gefunden (Zeichen ausser 0-9|a-f|A-F, so - // wird USHRT_MAX returnt, ansonsten die Anzahl der umgewandelten Ze. - xub_StrLen HexToBin( String& rToken ); - -public: - - virtual SvParserState CallParser(); // Aufruf des Parsers - - inline const Color& GetColor( USHORT nId ) const; - const Font& GetFont( USHORT nId ); // aendert den dflt Font - - virtual int IsEndPara( SvxNodeIdx* pNd, xub_StrLen nCnt ) const = 0; - - // um einen anderen Attribut-Pool setzen zukoennen. Darf nur vorm - // CallParser erfolgen!! Die Maps werden nicht neu erzeugt! - void SetAttrPool( SfxItemPool* pNewPool ) { pAttrPool = pNewPool; } - // um andere WhichIds fuer einen anderen Pool zusetzen. - RTFPardAttrMapIds& GetPardMap() - { return (RTFPardAttrMapIds&)*aPardMap.GetData(); } - RTFPlainAttrMapIds& GetPlainMap() - { return (RTFPlainAttrMapIds&)*aPlainMap.GetData(); } - // um diese von aussen z.B. Tabellenzellen zuordnen zu koennen - void ReadBorderAttr( int nToken, SfxItemSet& rSet, int bTableDef=FALSE ); - void ReadBackgroundAttr( int nToken, SfxItemSet& rSet, int bTableDef=FALSE ); - - // fuers asynchrone lesen aus dem SvStream - virtual void Continue( int nToken ); - - // get RTF default ItemSets. Must be used by pard/plain tokens or in - // reset of Style-Items - const SfxItemSet& GetRTFDefaults(); - virtual bool UncompressableStackEntry(const SvxRTFItemStackType &rSet) const; -}; - -// der Stack fuer die Attribute: -// diese Klasse darf nur vom SvxRTFParser benutzt werden! -class SVX_DLLPUBLIC SvxRTFItemStackType -{ - friend class SvxRTFParser; - friend class SvxRTFItemStackList; - - SfxItemSet aAttrSet; - SvxNodeIdx *pSttNd, *pEndNd; - xub_StrLen nSttCnt, nEndCnt; - SvxRTFItemStackList* pChildList; - USHORT nStyleNo; - - SvxRTFItemStackType( SfxItemPool&, const USHORT* pWhichRange, - const SvxPosition& ); - ~SvxRTFItemStackType(); - - void Add( SvxRTFItemStackTypePtr ); - void Compress( const SvxRTFParser& ); - -public: - SvxRTFItemStackType( const SvxRTFItemStackType&, const SvxPosition&, - int bCopyAttr = FALSE ); - //cmc, I'm very suspicios about SetStartPos, it doesn't change - //its children's starting position, and the implementation looks - //bad, consider this deprecated. - void SetStartPos( const SvxPosition& rPos ); - - void MoveFullNode(const SvxNodeIdx &rOldNode, - const SvxNodeIdx &rNewNode); - - ULONG GetSttNodeIdx() const { return pSttNd->GetIdx(); } - ULONG GetEndNodeIdx() const { return pEndNd->GetIdx(); } - - const SvxNodeIdx& GetSttNode() const { return *pSttNd; } - const SvxNodeIdx& GetEndNode() const { return *pEndNd; } - - xub_StrLen GetSttCnt() const { return nSttCnt; } - xub_StrLen GetEndCnt() const { return nEndCnt; } - - SfxItemSet& GetAttrSet() { return aAttrSet; } - const SfxItemSet& GetAttrSet() const { return aAttrSet; } - - USHORT StyleNo() const { return nStyleNo; } - - void SetRTFDefaults( const SfxItemSet& rDefaults ); -}; - - -// ----------- Inline Implementierungen -------------- - -inline const Color& SvxRTFParser::GetColor( USHORT nId ) const -{ - ColorPtr pColor = (ColorPtr)pDfltColor; - if( nId < aColorTbl.Count() ) - pColor = aColorTbl[ nId ]; - return *pColor; -} - -inline SfxItemSet& SvxRTFParser::GetAttrSet() -{ - SvxRTFItemStackTypePtr pTmp; - if( bNewGroup || 0 == ( pTmp = aAttrStack.Top()) ) - pTmp = _GetAttrSet(); - return pTmp->aAttrSet; -} - - -#endif - //_SVXRTF_HXX - |