| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef _SWHTML_HXX |
| #define _SWHTML_HXX |
| |
| #if !defined(_SVSTDARR_XUB_STRLEN_DECL) || !defined(_SVSTDARR_LONGS_DECL) || \ |
| !defined(_SVSTDARR_USHORTS_DECL) || !defined(_SVSTDARR_STRINGSDTOR_DECL) |
| #ifndef _SVSTDARR_XUB_STRLEN_DECL |
| #define _SVSTDARR_XUB_STRLEN |
| #endif |
| #ifndef _SVSTDARR_LONGS_DECL |
| #define _SVSTDARR_LONGS |
| #endif |
| #ifndef _SVSTDARR_USHORTS_DECL |
| #define _SVSTDARR_USHORTS |
| #endif |
| #ifndef _SVSTDARR_STRINGSDTOR_DECL |
| #define _SVSTDARR_STRINGSDTOR |
| #endif |
| #include <svl/svstdarr.hxx> |
| #endif |
| #include <tools/urlobj.hxx> |
| #include <sfx2/sfxhtml.hxx> |
| #include <svl/macitem.hxx> |
| #include <editeng/svxenum.hxx> |
| #include <fmtornt.hxx> |
| #include <com/sun/star/drawing/XShape.hpp> |
| #include <com/sun/star/form/XFormComponent.hpp> |
| #include <pam.hxx> |
| |
| #include "calbck.hxx" |
| #include "htmlvsh.hxx" |
| |
| class SfxMedium; |
| class SfxViewFrame; |
| class SdrObject; |
| class SvxMacroTableDtor; |
| class SvStringsDtor; |
| class SwDoc; |
| class SwPaM; |
| class ViewShell; |
| class SwStartNode; |
| class SwFmtColl; |
| class SwField; |
| class SwHTMLForm_Impl; |
| class SwApplet_Impl; |
| struct SwHTMLFootEndNote_Impl; |
| class HTMLTableCnts; |
| struct SwPendingStack; |
| class SvxCSS1PropertyInfo; |
| |
| #define HTML_PARSPACE (MM50) |
| |
| #define HTML_DFLT_IMG_WIDTH (MM50*4) |
| #define HTML_DFLT_IMG_HEIGHT (MM50*2) |
| |
| // ein par Sachen, die man oefter mal braucht |
| extern HTMLOptionEnum __FAR_DATA aHTMLPAlignTable[]; |
| extern HTMLOptionEnum __FAR_DATA aHTMLImgHAlignTable[]; |
| extern HTMLOptionEnum __FAR_DATA aHTMLImgVAlignTable[]; |
| |
| |
| // der Attribut Stack: |
| |
| class _HTMLAttr; |
| typedef _HTMLAttr *_HTMLAttrPtr; |
| SV_DECL_PTRARR( _HTMLAttrs, _HTMLAttrPtr, 5, 5 ) |
| |
| class _HTMLAttr |
| { |
| friend class SwHTMLParser; |
| friend class _CellSaveStruct; |
| |
| SwNodeIndex nSttPara, nEndPara; |
| xub_StrLen nSttCntnt, nEndCntnt; |
| sal_Bool bInsAtStart : 1; |
| sal_Bool bLikePara : 1; // Attribut ueber dem gesamten Absatz setzen |
| sal_Bool bValid : 1; // ist das Attribut gueltig? |
| |
| SfxPoolItem* pItem; |
| sal_uInt16 nCount; // Anzahl noch zu schliessender Attrs mit einem Wert |
| _HTMLAttr *pNext; // noch zu schliessene Attrs mit unterschiedl. Werten |
| _HTMLAttr *pPrev; // bereits geschlossene aber noch nicht gesetze Attrs |
| _HTMLAttr **ppHead; // der Listenkopf |
| |
| _HTMLAttr( const SwPosition& rPos, const SfxPoolItem& rItem, |
| _HTMLAttr **pHd=0 ); |
| |
| _HTMLAttr( const _HTMLAttr &rAttr, const SwNodeIndex &rEndPara, |
| xub_StrLen nEndCnt, _HTMLAttr **pHd ); |
| |
| public: |
| |
| ~_HTMLAttr(); |
| |
| _HTMLAttr *Clone( const SwNodeIndex& rEndPara, xub_StrLen nEndCnt ) const; |
| void Reset( const SwNodeIndex& rSttPara, xub_StrLen nSttCnt, |
| _HTMLAttr **pHd ); |
| inline void SetStart( const SwPosition& rPos ); |
| |
| sal_uInt32 GetSttParaIdx() const { return nSttPara.GetIndex(); } |
| sal_uInt32 GetEndParaIdx() const { return nEndPara.GetIndex(); } |
| |
| const SwNodeIndex& GetSttPara() const { return nSttPara; } |
| const SwNodeIndex& GetEndPara() const { return nEndPara; } |
| |
| xub_StrLen GetSttCnt() const { return nSttCntnt; } |
| xub_StrLen GetEndCnt() const { return nEndCntnt; } |
| |
| sal_Bool IsLikePara() const { return bLikePara; } |
| void SetLikePara( sal_Bool bPara=sal_True ) { bLikePara = bPara; } |
| |
| SfxPoolItem& GetItem() { return *pItem; } |
| const SfxPoolItem& GetItem() const { return *pItem; } |
| |
| _HTMLAttr *GetNext() const { return pNext; } |
| void InsertNext( _HTMLAttr *pNxt ) { pNext = pNxt; } |
| |
| _HTMLAttr *GetPrev() const { return pPrev; } |
| void InsertPrev( _HTMLAttr *pPrv ); |
| void ClearPrev() { pPrev = 0; } |
| |
| void SetHead( _HTMLAttr **ppHd ) { ppHead = ppHd; } |
| |
| // Beim Setzen von Attributen aus Vorlagen kann es passieren, |
| // dass Attribute doch nicht mehr gesetzt werden sollen. Die zu loeschen |
| // waere sehr aufwendig, da man nicht so genau weiss, wo sie eingekettet |
| // sind. Sie werden deshalb einfach invalidiert und erst beim naechsten |
| // _SetAttr() geloescht. |
| void Invalidate() { bValid = sal_False; } |
| sal_Bool IsValid() const { return bValid; } |
| }; |
| |
| // Tabelle der Attribute: Hier ist die Reihenfolge wichtig: Die Attribute |
| // vorne in der Tabelle werden in EndAllAttrs auch zuerst gesetzt. |
| struct _HTMLAttrTable |
| { |
| _HTMLAttr |
| *pKeep, // ::com::sun::star::frame::Frame-Attribure |
| *pBox, |
| *pBrush, |
| *pBreak, |
| *pPageDesc, |
| |
| *pLRSpace, // Absatz-Attribute |
| *pULSpace, |
| *pLineSpacing, |
| *pAdjust, |
| *pDropCap, |
| *pSplit, |
| *pWidows, |
| *pOrphans, |
| *pDirection, |
| |
| *pCharFmts, // Text-Attribute |
| *pINetFmt, |
| |
| *pBold, // Zeichen-Attribute |
| *pBoldCJK, |
| *pBoldCTL, |
| *pItalic, |
| *pItalicCJK, |
| *pItalicCTL, |
| *pStrike, |
| *pUnderline, |
| *pBlink, |
| *pFont, |
| *pFontCJK, |
| *pFontCTL, |
| *pFontHeight, |
| *pFontHeightCJK, |
| *pFontHeightCTL, |
| *pFontColor, |
| *pEscapement, |
| *pCaseMap, |
| *pKerning, // (nur fuer SPACER) |
| *pCharBrush, // Zeichen-Hintergrund |
| *pLanguage, |
| *pLanguageCJK, |
| *pLanguageCTL |
| ; |
| }; |
| |
| class _HTMLAttrContext_SaveDoc; |
| |
| enum SwHTMLAppendMode { |
| AM_NORMAL, // keine Absatz-Abstand-Behandlung |
| AM_NOSPACE, // Abstand hart auf 0cm setzen |
| AM_SPACE, // Abstand hart auf 0.5cm setzen |
| AM_SOFTNOSPACE, // Abstand nicht setzen aber 0cm merken |
| AM_NONE // gar kein Append |
| }; |
| |
| class _HTMLAttrContext |
| { |
| _HTMLAttrs aAttrs; // die in dem Kontext gestarteten Attribute |
| |
| String aClass; // die Klasse des Kontexts |
| |
| _HTMLAttrContext_SaveDoc *pSaveDocContext; |
| SfxItemSet *pFrmItemSet; |
| |
| sal_uInt16 nToken; // das Token, zu dem der Kontext gehoehrt |
| |
| sal_uInt16 nTxtFmtColl; // eine in dem Kontext begonnene Vorlage oder 0 |
| |
| sal_uInt16 nLeftMargin; // ein veraenderter linker Rand |
| sal_uInt16 nRightMargin; // ein veraenderter rechter Rand |
| sal_uInt16 nFirstLineIndent; // ein veraenderter Erstzeilen-Einzug |
| |
| sal_uInt16 nUpperSpace; |
| sal_uInt16 nLowerSpace; |
| |
| SwHTMLAppendMode eAppend; |
| |
| sal_Bool bLRSpaceChanged : 1;// linker/rechtr Rand, Einzug veraendert? |
| sal_Bool bULSpaceChanged : 1;// oberer/unterer Rand veraendert? |
| sal_Bool bDfltTxtFmtColl : 1;// nTxtFmtColl ist nur ein default |
| sal_Bool bSpansSection : 1; // Der Kontext spannt eine SwSection auf |
| sal_Bool bPopStack : 1; // Oberhalb liegende Stack-Elemente entf. |
| sal_Bool bFinishPREListingXMP : 1; |
| sal_Bool bRestartPRE : 1; |
| sal_Bool bRestartXMP : 1; |
| sal_Bool bRestartListing : 1; |
| |
| public: |
| void ClearSaveDocContext(); |
| |
| _HTMLAttrContext( sal_uInt16 nTokn, sal_uInt16 nPoolId, const String& rClass, |
| sal_Bool bDfltColl=sal_False ) : |
| aClass( rClass ), |
| pSaveDocContext( 0 ), |
| pFrmItemSet( 0 ), |
| nToken( nTokn ), |
| nTxtFmtColl( nPoolId ), |
| nLeftMargin( 0 ), |
| nRightMargin( 0 ), |
| nFirstLineIndent( 0 ), |
| nUpperSpace( 0 ), |
| nLowerSpace( 0 ), |
| eAppend( AM_NONE ), |
| bLRSpaceChanged( sal_False ), |
| bULSpaceChanged( sal_False ), |
| bDfltTxtFmtColl( bDfltColl ), |
| bSpansSection( sal_False ), |
| bPopStack( sal_False ), |
| bFinishPREListingXMP( sal_False ), |
| bRestartPRE( sal_False ), |
| bRestartXMP( sal_False ), |
| bRestartListing( sal_False ) |
| {} |
| |
| _HTMLAttrContext( sal_uInt16 nTokn ) : |
| pSaveDocContext( 0 ), |
| pFrmItemSet( 0 ), |
| nToken( nTokn ), |
| nTxtFmtColl( 0 ), |
| nLeftMargin( 0 ), |
| nRightMargin( 0 ), |
| nFirstLineIndent( 0 ), |
| nUpperSpace( 0 ), |
| nLowerSpace( 0 ), |
| eAppend( AM_NONE ), |
| bLRSpaceChanged( sal_False ), |
| bULSpaceChanged( sal_False ), |
| bDfltTxtFmtColl( sal_False ), |
| bSpansSection( sal_False ), |
| bPopStack( sal_False ), |
| bFinishPREListingXMP( sal_False ), |
| bRestartPRE( sal_False ), |
| bRestartXMP( sal_False ), |
| bRestartListing( sal_False ) |
| {} |
| |
| ~_HTMLAttrContext() { ClearSaveDocContext(); delete pFrmItemSet; } |
| |
| sal_uInt16 GetToken() const { return nToken; } |
| |
| sal_uInt16 GetTxtFmtColl() const { return bDfltTxtFmtColl ? 0 : nTxtFmtColl; } |
| sal_uInt16 GetDfltTxtFmtColl() const { return bDfltTxtFmtColl ? nTxtFmtColl : 0; } |
| |
| const String& GetClass() const { return aClass; } |
| |
| inline void SetMargins( sal_uInt16 nLeft, sal_uInt16 nRight, short nIndent ); |
| |
| inline sal_Bool IsLRSpaceChanged() const { return bLRSpaceChanged; } |
| inline void GetMargins( sal_uInt16& nLeft, sal_uInt16& nRight, |
| short &nIndent ) const; |
| |
| inline void SetULSpace( sal_uInt16 nUpper, sal_uInt16 nLower ); |
| inline sal_Bool IsULSpaceChanged() const { return bULSpaceChanged; } |
| inline void GetULSpace( sal_uInt16& rUpper, sal_uInt16& rLower ) const; |
| |
| sal_Bool HasAttrs() const { return aAttrs.Count() != 0; } |
| const _HTMLAttrs& GetAttrs() const { return aAttrs; } |
| _HTMLAttrs& GetAttrs() { return aAttrs; } |
| |
| void SetSpansSection( sal_Bool bSet ) { bSpansSection = bSet; } |
| sal_Bool GetSpansSection() const { return bSpansSection; } |
| |
| void SetPopStack( sal_Bool bSet ) { bPopStack = bSet; } |
| sal_Bool GetPopStack() const { return bPopStack; } |
| |
| sal_Bool HasSaveDocContext() const { return pSaveDocContext!=0; } |
| _HTMLAttrContext_SaveDoc *GetSaveDocContext( sal_Bool bCreate=sal_False ); |
| |
| const SfxItemSet *GetFrmItemSet() const { return pFrmItemSet; } |
| SfxItemSet *GetFrmItemSet( SwDoc *pCreateDoc ); |
| |
| void SetFinishPREListingXMP( sal_Bool bSet ) { bFinishPREListingXMP = bSet; } |
| sal_Bool IsFinishPREListingXMP() const { return bFinishPREListingXMP; } |
| |
| void SetRestartPRE( sal_Bool bSet ) { bRestartPRE = bSet; } |
| sal_Bool IsRestartPRE() const { return bRestartPRE; } |
| |
| void SetRestartXMP( sal_Bool bSet ) { bRestartXMP = bSet; } |
| sal_Bool IsRestartXMP() const { return bRestartXMP; } |
| |
| void SetRestartListing( sal_Bool bSet ) { bRestartListing = bSet; } |
| sal_Bool IsRestartListing() const { return bRestartListing; } |
| |
| void SetAppendMode( SwHTMLAppendMode eMode=AM_NORMAL ) { eAppend = eMode; } |
| SwHTMLAppendMode GetAppendMode() const { return eAppend; } |
| }; |
| |
| typedef _HTMLAttrContext *_HTMLAttrContextPtr; |
| SV_DECL_PTRARR( _HTMLAttrContexts, _HTMLAttrContextPtr, 5, 5 ) |
| |
| class HTMLTable; |
| class SwCSS1Parser; |
| class SwHTMLNumRuleInfo; |
| |
| typedef ImageMap *ImageMapPtr; |
| SV_DECL_PTRARR_DEL( ImageMaps, ImageMapPtr, 1, 1 ) |
| typedef SwFrmFmt *SwFrmFmtPtr; |
| SV_DECL_PTRARR( SwHTMLFrmFmts, SwFrmFmtPtr, 2, 2 ) |
| |
| #define HTML_CNTXT_PROTECT_STACK 0x0001 |
| #define HTML_CNTXT_STRIP_PARA 0x0002 |
| #define HTML_CNTXT_KEEP_NUMRULE 0x0004 |
| #define HTML_CNTXT_HEADER_DIST 0x0008 |
| #define HTML_CNTXT_FOOTER_DIST 0x0010 |
| #define HTML_CNTXT_KEEP_ATTRS 0x0020 |
| |
| #define CONTEXT_FLAGS_ABSPOS \ |
| (HTML_CNTXT_PROTECT_STACK | \ |
| HTML_CNTXT_STRIP_PARA) |
| |
| #define HTML_FF_BOX 0x0001 |
| #define HTML_FF_BACKGROUND 0x0002 |
| #define HTML_FF_PADDING 0x0004 |
| #define HTML_FF_DIRECTION 0x0008 |
| |
| class SwHTMLParser : public SfxHTMLParser, public SwClient |
| { |
| friend class _SectionSaveStruct; |
| friend class _CellSaveStruct; |
| friend class _CaptionSaveStruct; |
| |
| String aPathToFile; |
| String sBaseURL; |
| String sSaveBaseURL; |
| String aBasicLib; |
| String aBasicModule; |
| String aScriptSource; // Inhalt des aktuellen Script-Blocks |
| String aScriptType; // Type des gelesenen Scripts (StarBasic/VB/JAVA) |
| String aScriptURL; // URL eines Scripts |
| String aStyleSource; // Inhalt des aktuellen Style-Sheets |
| String aContents; // Text des akteullen Marquee, Feldes etc. |
| String sTitle; |
| String aUnknownToken; // ein gestartetes unbekanntes Token |
| String aBulletGrfs[MAXLEVEL]; |
| String sJmpMark; |
| |
| SvUShorts aBaseFontStack; // Stack fuer <BASEFONT> |
| // Bit 0-2: Fontgroesse (1-7) |
| SvUShorts aFontStack; // Stack fuer <FONT>, <BIG>, <SMALL> |
| // Bit 0-2: Fontgroesse (1-7) |
| // Bit 15: Fontfarbe wurde gesetzt |
| |
| _HTMLAttrs aSetAttrTab;// "geschlossene", noch nicht gesetzte Attr. |
| _HTMLAttrs aParaAttrs; // vorlauefige Absatz-Attribute |
| _HTMLAttrTable aAttrTab; // "offene" Attribute |
| _HTMLAttrContexts aContexts;// der aktuelle Attribut/Token-Kontext |
| SwHTMLFrmFmts aMoveFlyFrms;// Fly-Frames, the anchor is moved |
| SvXub_StrLens aMoveFlyCnts;// and the Content-Positions |
| |
| SwApplet_Impl *pAppletImpl; // das aktuelle Applet |
| |
| SwCSS1Parser *pCSS1Parser; // der Style-Sheet-Parser |
| SwHTMLNumRuleInfo *pNumRuleInfo; |
| SwPendingStack *pPendStack; |
| |
| SwDoc *pDoc; |
| SwPaM *pPam; // SwPosition duerfte doch reichen, oder ?? |
| ViewShell *pActionViewShell; // ViewShell, an der das StartAction |
| // gerufen wurde. |
| SwNodeIndex *pSttNdIdx; |
| |
| HTMLTable *pTable; // die aktuelle "auesserste" Tabelle |
| SwHTMLForm_Impl *pFormImpl;// die aktuelle Form |
| SdrObject *pMarquee; // aktuelles Marquee |
| SwField *pField; // aktuelles Feld |
| ImageMap *pImageMap; // aktuelle Image-Map |
| ImageMaps *pImageMaps;// alle gelesenen Image-Maps |
| SwHTMLFootEndNote_Impl *pFootEndNoteImpl; |
| |
| Size aHTMLPageSize; // die Seitengroesse der HTML-Vorlage |
| |
| sal_uInt32 aFontHeights[7]; // die Font-Hoehen 1-7 |
| sal_uInt32 nScriptStartLineNr; // Zeilennummer eines Script-Blocks |
| sal_uLong nEventId; |
| |
| sal_uInt16 nBaseFontStMin; // |
| sal_uInt16 nFontStMin; // |
| sal_uInt16 nDefListDeep; // |
| sal_uInt16 nFontStHeadStart; // Elemente im Font-Stack bei <Hn> |
| sal_uInt16 nSBModuleCnt; // Zaehler fuer Basic-Module |
| sal_uInt16 nMissingImgMaps; // Wie viele Image-Maps fehlen noch? |
| sal_uInt16 nParaCnt; |
| sal_uInt16 nContextStMin; // Untergrenze fuer PopContext |
| sal_uInt16 nContextStAttrMin; // Untergrenze fuer Attributierung |
| sal_uInt16 nSelectEntryCnt; // Anzahl der Eintraege der akt. Listbox |
| sal_uInt16 nOpenParaToken; // ein geoeffnetes Absatz-Element |
| |
| enum JumpToMarks { JUMPTO_NONE, JUMPTO_MARK, JUMPTO_TABLE, JUMPTO_FRAME, |
| JUMPTO_REGION, JUMPTO_GRAPHIC } eJumpTo; |
| |
| #ifdef DBG_UTIL |
| sal_uInt16 nContinue; // Tiefe der Continue-Aufrufe |
| #endif |
| |
| SvxAdjust eParaAdjust; // Ausrichtung des aktuellen Absatz |
| HTMLScriptLanguage eScriptLang; // die aktuelle Script-Language |
| |
| sal_Bool bOldIsHTMLMode : 1; // War's mal ein HTML-Dokument? |
| |
| sal_Bool bDocInitalized : 1; // Dokument bzw. Shell wurden initialisiert |
| // Flag um doppeltes init durch Rekursion |
| // zu verhindern. |
| sal_Bool bViewCreated : 1; // die View wurde schon erzeugt (asynchron) |
| sal_Bool bSetCrsr : 1; // Crsr wieder auf den Anfang setzen |
| sal_Bool bSetModEnabled : 1; |
| |
| sal_Bool bInFloatingFrame : 1; // Wir sind in einen Floating ::com::sun::star::frame::Frame |
| sal_Bool bInField : 1; |
| sal_Bool bKeepUnknown : 1; // unbekannte/nicht unterstuetze Tokens beh. |
| // 8 |
| sal_Bool bCallNextToken : 1; // In Tabellen: NextToken in jedem Fall rufen |
| sal_Bool bIgnoreRawData : 1; // Inhalt eines Scripts/Styles ignorieren. |
| sal_Bool bLBEntrySelected : 1; // Ist der aktuelle Listbox-Eintrag selekt. |
| sal_Bool bTAIgnoreNewPara : 1; // naechstes LF in TextArea ignorieren? |
| sal_Bool bFixMarqueeWidth : 1; // Groesse einer Laufschrift anpassen? |
| sal_Bool bFixMarqueeHeight : 1; |
| |
| sal_Bool bUpperSpace : 1; // obererer Absatz-Abstand wird benoetigt |
| sal_Bool bNoParSpace : 1; |
| // 16 |
| |
| sal_Bool bAnyStarBasic : 1; // gibt es ueberhaupt ein StarBasic-Modul |
| sal_Bool bInNoEmbed : 1; // Wir sind in einem NOEMBED-Bereich |
| |
| sal_Bool bInTitle : 1; // Wir sind im Titel |
| |
| sal_Bool bChkJumpMark : 1; // springe ggfs. zu einem vorgegebenem Mark |
| sal_Bool bUpdateDocStat : 1; |
| sal_Bool bFixSelectWidth : 1; // Breite eines Selects neu setzen? |
| sal_Bool bFixSelectHeight : 1; // Breite eines Selects neu setzen? |
| sal_Bool bTextArea : 1; |
| // 24 |
| sal_Bool bSelect : 1; |
| sal_Bool bInFootEndNoteAnchor : 1; |
| sal_Bool bInFootEndNoteSymbol : 1; |
| sal_Bool bIgnoreHTMLComments : 1; |
| sal_Bool bRemoveHidden : 1; // the filter implementation might set the hidden flag |
| |
| /// the names corresponding to the DOCINFO field subtypes INFO[1-4] |
| ::rtl::OUString m_InfoNames[4]; |
| |
| SfxViewFrame* pTempViewFrame; |
| |
| void DeleteFormImpl(); |
| |
| void DocumentDetected(); |
| void Show(); |
| void ShowStatline(); |
| ViewShell *CallStartAction( ViewShell *pVSh = 0, sal_Bool bChkPtr = sal_True ); |
| ViewShell *CallEndAction( sal_Bool bChkAction = sal_False, sal_Bool bChkPtr = sal_True ); |
| ViewShell *CheckActionViewShell(); |
| |
| DECL_LINK( AsyncCallback, void* ); |
| |
| // Attribute am Dok setzen |
| void _SetAttr( sal_Bool bChkEnd, sal_Bool bBeforeTable, _HTMLAttrs *pPostIts ); |
| inline void SetAttr( sal_Bool bChkEnd = sal_True, sal_Bool bBeforeTable = sal_False, |
| _HTMLAttrs *pPostIts = 0 ) |
| { |
| if( aSetAttrTab.Count() || aMoveFlyFrms.Count() ) |
| _SetAttr( bChkEnd, bBeforeTable, pPostIts ); |
| } |
| |
| _HTMLAttr **GetAttrTabEntry( sal_uInt16 nWhich ); |
| |
| // Einen neuen Textknoten an PaM-Position anlegen |
| sal_Bool AppendTxtNode( SwHTMLAppendMode eMode=AM_NORMAL, sal_Bool bUpdateNum=sal_True ); |
| void AddParSpace(); |
| |
| // Ein Attribut beginnen/beenden |
| // ppDepAttr gibt einen Attribut-Tabellen-Eintrag an, dessen Attribute |
| // gesetzt sein muessen, bevor das Attribut beendet werden darf |
| void NewAttr( _HTMLAttr **ppAttr, const SfxPoolItem& rItem ); |
| void EndAttr( _HTMLAttr *pAttr, _HTMLAttr **ppDepAttr=0, |
| sal_Bool bChkEmpty=sal_True ); |
| void DeleteAttr( _HTMLAttr* pAttr ); |
| |
| void EndContextAttrs( _HTMLAttrContext *pContext, sal_Bool bRemove=sal_False ); |
| void SaveAttrTab( _HTMLAttrTable& rNewAttrTab ); |
| void SplitAttrTab( const SwPosition& rNewPos ); |
| void SplitAttrTab( _HTMLAttrTable& rNewAttrTab, sal_Bool bMoveEndBack = sal_True ); |
| void RestoreAttrTab( const _HTMLAttrTable& rNewAttrTab, |
| sal_Bool bSetNewStart = sal_False ); |
| void InsertAttr( const SfxPoolItem& rItem, sal_Bool bLikePara = sal_False, |
| sal_Bool bInsAtStart=sal_False ); |
| void InsertAttrs( _HTMLAttrs& rAttrs ); |
| |
| sal_Bool DoPositioning( SfxItemSet &rItemSet, |
| SvxCSS1PropertyInfo &rPropInfo, |
| _HTMLAttrContext *pContext ); |
| sal_Bool CreateContainer( const String& rClass, SfxItemSet &rItemSet, |
| SvxCSS1PropertyInfo &rPropInfo, |
| _HTMLAttrContext *pContext ); |
| sal_Bool EndSection( sal_Bool bLFStripped=sal_False ); |
| |
| void InsertAttrs( SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo, |
| _HTMLAttrContext *pContext, sal_Bool bCharLvl=sal_False ); |
| void InsertAttr( _HTMLAttr **ppAttr, const SfxPoolItem & rItem, |
| _HTMLAttrContext *pCntxt ); |
| void SplitPREListingXMP( _HTMLAttrContext *pCntxt ); |
| void FixHeaderFooterDistance( sal_Bool bHeader, const SwPosition *pOldPos ); |
| |
| void EndContext( _HTMLAttrContext *pContext ); |
| void ClearContext( _HTMLAttrContext *pContext ); |
| |
| const SwFmtColl *GetCurrFmtColl() const; |
| |
| SwTwips GetCurrentBrowseWidth(); |
| |
| SwHTMLNumRuleInfo& GetNumInfo() { return *pNumRuleInfo; } |
| // --> OD 2008-04-02 #refactorlists# |
| // add parameter <bCountedInList> |
| void SetNodeNum( sal_uInt8 nLevel, bool bCountedInList ); |
| // <-- |
| |
| // Verwalten von Absatz-Vorlagen |
| |
| // die Vorlagen auf dem Stack bzw. deren Attribute setzen |
| void SetTxtCollAttrs( _HTMLAttrContext *pContext = 0 ); |
| |
| void InsertParaAttrs( const SfxItemSet& rItemSet ); |
| |
| // Verwalten des Attribut-Kontexts |
| |
| // aktuellen Kontext merken |
| inline void PushContext( _HTMLAttrContext *pCntxt ); |
| |
| // den obersten/spezifizierten Kontext holen, aber nicht ausserhalb |
| // des Kontexts mit Token nLimit suchen. Wenn bRemove gesetzt ist, |
| // wird er entfernt |
| _HTMLAttrContext *PopContext( sal_uInt16 nToken=0, sal_uInt16 nLimit=0, |
| sal_Bool bRemove=sal_True ); |
| inline const _HTMLAttrContext *GetTopContext() const; |
| |
| sal_Bool GetMarginsFromContext( sal_uInt16 &nLeft, sal_uInt16 &nRight, short& nIndent, |
| sal_Bool bIgnoreCurrent=sal_False ) const; |
| sal_Bool GetMarginsFromContextWithNumBul( sal_uInt16 &nLeft, sal_uInt16 &nRight, |
| short& nIndent ) const; |
| void GetULSpaceFromContext( sal_uInt16 &rUpper, sal_uInt16 &rLower ) const; |
| |
| |
| void MovePageDescAttrs( SwNode *pSrcNd, sal_uLong nDestIdx, sal_Bool bFmtBreak ); |
| |
| // Behandlung von Tags auf Absatz-Ebene |
| |
| // <P> und <H1> bis <H6> |
| void NewPara(); |
| void EndPara( sal_Bool bReal = sal_False ); |
| void NewHeading( int nToken ); |
| void EndHeading(); |
| |
| // <ADDRESS>, <BLOCKQUOTE> und <PRE> |
| void NewTxtFmtColl( int nToken, sal_uInt16 nPoolId ); |
| void EndTxtFmtColl( int nToken ); |
| |
| // <DIV> und <CENTER> |
| void NewDivision( int nToken ); |
| void EndDivision( int nToken ); |
| |
| // Fly-Frames einfuegen/verlassen |
| void InsertFlyFrame( const SfxItemSet& rItemSet, _HTMLAttrContext *pCntxt, |
| const String& rId, sal_uInt16 nFlags ); |
| |
| void SaveDocContext( _HTMLAttrContext *pCntxt, sal_uInt16 nFlags, |
| const SwPosition *pNewPos ); |
| void RestoreDocContext( _HTMLAttrContext *pCntxt ); |
| |
| // alle durch <DIV> aufgespannten Bereiche verlassen |
| sal_Bool EndSections( sal_Bool bLFStripped ); |
| |
| // <MULTICOL> |
| void NewMultiCol(); |
| void EndMultiCol(); |
| |
| // <MARQUEE> |
| void NewMarquee( HTMLTable *pCurTable=0 ); |
| void EndMarquee(); |
| void InsertMarqueeText(); |
| |
| // Behandluung von Listen |
| |
| // Numerierungs <OL> und Aufzaehlungs-Listen <UL> mit <LI> |
| void NewNumBulList( int nToken ); |
| void EndNumBulList( int nToken=0 ); |
| void NewNumBulListItem( int nToken ); |
| void EndNumBulListItem( int nToken=0, sal_Bool bSetColl=sal_True, |
| sal_Bool bLastPara=sal_False ); |
| |
| // Definitions-Listen <DL> mit <DD>, <DT> |
| void NewDefList(); |
| void EndDefList(); |
| void NewDefListItem( int nToken ); |
| void EndDefListItem( int nToken=0, sal_Bool bSetColl=sal_True, |
| sal_Bool bLastPara=sal_False ); |
| |
| |
| // Behandlung von Tags auf Zeichen-Ebene |
| |
| // Tags wie <B>, <I> etc behandeln, die ein bestimmtes Attribut |
| // an und ausschalten, oder die wie SPAN nur Attribute aus Styles holen |
| void NewStdAttr( int nToken ); |
| void NewStdAttr( int nToken, |
| _HTMLAttr **ppAttr, const SfxPoolItem & rItem, |
| _HTMLAttr **ppAttr2=0, const SfxPoolItem *pItem2=0, |
| _HTMLAttr **ppAttr3=0, const SfxPoolItem *pItem3=0 ); |
| void EndTag( int nToken ); |
| |
| // Font-Attribute behandeln |
| void NewBasefontAttr(); // fuer <BASEFONT> |
| void EndBasefontAttr(); |
| void NewFontAttr( int nToken ); // fuer <FONT>, <BIG> und <SMALL> |
| void EndFontAttr( int nToken ); |
| |
| // Tags, die durch Zeichenvorlagen realisiert werden |
| void NewCharFmt( int nToken ); |
| |
| // <SDFIELD> |
| public: |
| static sal_uInt16 GetNumType( const String& rStr, sal_uInt16 eDfltType ); |
| private: |
| void NewField(); |
| void EndField(); |
| void InsertFieldText(); |
| |
| // <SPACER> |
| void InsertSpacer(); |
| |
| // Einfuegen von Grafiken, Plugins und Applets |
| |
| // Image-Maps suchen und mit Grafik-Nodes verbinden |
| ImageMap *FindImageMap( const String& rURL ) const; |
| void ConnectImageMaps(); |
| |
| // Verankerung eines Fly-Frames bestimmen und entsprechende Attribute |
| // in den Attrset setzen (htmlgrin.cxx) |
| void SetAnchorAndAdjustment( sal_Int16 eVertOri, |
| sal_Int16 eHoriOri, |
| const SfxItemSet &rItemSet, |
| const SvxCSS1PropertyInfo &rPropInfo, |
| SfxItemSet& rFrmSet ); |
| void SetAnchorAndAdjustment( sal_Int16 eVertOri, |
| sal_Int16 eHoriOri, |
| SfxItemSet& rFrmSet, |
| sal_Bool bDontAppend=sal_False ); |
| void SetAnchorAndAdjustment( const SfxItemSet &rItemSet, |
| const SvxCSS1PropertyInfo &rPropInfo, |
| SfxItemSet &rFrmItemSet ); |
| |
| void SetFrmFmtAttrs( SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo, |
| sal_uInt16 nFlags, SfxItemSet &rFrmItemSet ); |
| |
| // Frames anlegen und Auto-gebundene Rahmen registrieren |
| void RegisterFlyFrm( SwFrmFmt *pFlyFrm ); |
| |
| // Die Groesse des Fly-Frames an die Vorgaben und Gegebenheiten anpassen |
| // (nicht fuer Grafiken, deshalb htmlplug.cxx) |
| void SetFixSize( const Size& rPixSize, const Size& rTwipDfltSize, |
| sal_Bool bPrcWidth, sal_Bool bPrcHeight, |
| SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo, |
| SfxItemSet& rFlyItemSet ); |
| void SetVarSize( SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo, |
| SfxItemSet& rFlyItemSet, SwTwips nDfltWidth=MINLAY, |
| sal_uInt8 nDltPrcWidth=0 ); |
| void SetSpace( const Size& rPixSpace, SfxItemSet &rItemSet, |
| SvxCSS1PropertyInfo &rPropInfo, SfxItemSet& rFlyItemSet ); |
| |
| sal_uInt16 IncGrfsThatResizeTable(); |
| |
| void GetDefaultScriptType( ScriptType& rType, |
| String& rTypeStr ) const; |
| |
| // die eigentlichen Einfuege-Methoden fuer <IMG>, <EMBED> und <APPLET> |
| // und <PARAM> |
| void InsertImage(); // htmlgrin.cxx |
| void InsertEmbed(); // htmlplug.cxx |
| |
| #ifdef SOLAR_JAVA |
| void NewObject(); // htmlplug.cxx |
| #endif |
| void EndObject(); // CommandLine mit Applet verkn. (htmlplug.cxx) |
| #ifdef SOLAR_JAVA |
| void InsertApplet(); // htmlplug.cxx |
| #endif |
| void EndApplet(); // CommandLine mit Applet verkn. (htmlplug.cxx) |
| void InsertParam(); // htmlplug.cxx |
| |
| void InsertFloatingFrame(); |
| void EndFloatingFrame() { bInFloatingFrame = sal_False; } |
| |
| // <BODY>-Tag auswerten: Hintergrund-Grafiken und -Farben setzen (htmlgrin.cxx) |
| void InsertBodyOptions(); |
| |
| |
| // Einfuegen von Links und ::com::sun::star::text::Bookmarks (htmlgrin.cxx) |
| |
| // <A>-Tag auswerten: einen Link bzw. eine ::com::sun::star::text::Bookmark einfuegen |
| void NewAnchor(); |
| void EndAnchor(); |
| |
| // eine ::com::sun::star::text::Bookmark einfuegen |
| void InsertBookmark( const String& rName ); |
| |
| |
| void InsertCommentText( const sal_Char *pTag = 0 ); |
| void InsertComment( const String& rName, const sal_Char *pTag = 0 ); |
| |
| // sind im aktuellen Absatz ::com::sun::star::text::Bookmarks vorhanden? |
| sal_Bool HasCurrentParaBookmarks( sal_Bool bIgnoreStack=sal_False ) const; |
| |
| |
| // Einfuegen von Script/Basic-Elementen |
| |
| // das zueletzt gelsene Basic-Modul parsen (htmlbas.cxx) |
| void NewScript(); |
| void EndScript(); |
| |
| void AddScriptSource(); |
| |
| // ein Event in die SFX-Konfiguation eintragen (htmlbas.cxx) |
| void InsertBasicDocEvent( rtl::OUString aEventName, const String& rName, |
| ScriptType eScrType, const String& rScrType ); |
| |
| // ein Event an ein VC-Control anhaengen (htmlform.cxx) |
| void InsertBasicCtrlEvent( sal_uInt16 nEvent, const String& rName ); |
| |
| // Einfuegen von Styles |
| |
| // <STYLE> |
| void NewStyle(); |
| void EndStyle(); |
| |
| inline sal_Bool HasStyleOptions( const String &rStyle, const String &rId, |
| const String &rClass, const String *pLang=0, |
| const String *pDir=0 ); |
| sal_Bool ParseStyleOptions( const String &rStyle, const String &rId, |
| const String &rClass, SfxItemSet &rItemSet, |
| SvxCSS1PropertyInfo &rPropInfo, |
| const String *pLang=0, const String *pDir=0 ); |
| |
| |
| // Einfuegen von Controls und ::com::sun::star::form::Forms (htmlform.cxx) |
| |
| // Ein Draw-Objekt in das Dokuement eintragen |
| void InsertDrawObject( SdrObject* pNewDrawObj, const Size& rSpace, |
| sal_Int16 eVertOri, |
| sal_Int16 eHoriOri, |
| SfxItemSet& rCSS1ItemSet, |
| SvxCSS1PropertyInfo& rCSS1PropInfo, |
| sal_Bool bHidden=sal_False ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > InsertControl( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > & rFormComp, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rFCompPropSet, |
| const Size& rSize, |
| sal_Int16 eVertOri, |
| sal_Int16 eHoriOri, |
| SfxItemSet& rCSS1ItemSet, |
| SvxCSS1PropertyInfo& rCSS1PropInfo, |
| const SvxMacroTableDtor& rMacroTbl, |
| const SvStringsDtor& rUnoMacroTbl, |
| const SvStringsDtor& rUnoMacroParamTbl, |
| sal_Bool bSetPropSet = sal_True, |
| sal_Bool bHidden = sal_False ); |
| void SetControlSize( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rShape, const Size& rTextSz, |
| sal_Bool bMinWidth, sal_Bool bMinHeight, int nToken ); |
| void SetPendingControlSize( int nToken ); |
| |
| public: |
| void ResizeDrawObject( SdrObject* pObj, SwTwips nWidth ); |
| private: |
| void RegisterDrawObjectToTable( HTMLTable *pCurTable, SdrObject* pObj, |
| sal_uInt8 nWidth ); |
| |
| |
| // eine neue Form beginnen |
| void NewForm( sal_Bool bAppend=sal_True ); |
| void EndForm( sal_Bool bAppend=sal_True ); |
| |
| // die Einfuege-Methoden fuer <INPUT>, <TEXTAREA> und <SELECT> |
| void InsertInput(); |
| |
| void NewTextArea(); |
| void InsertTextAreaText( sal_uInt16 nToken ); |
| void EndTextArea(); |
| |
| void NewSelect(); |
| void InsertSelectOption(); |
| void InsertSelectText(); |
| void EndSelect(); |
| |
| // Einfuegen von Tabellen (htmltab.cxx) |
| |
| public: // wird in Tabellen benoetigt |
| |
| // einen Boxen-Inhalt hinter dem angegebenen Node einfuegen |
| const SwStartNode *InsertTableSection( const SwStartNode *pPrevStNd ); |
| |
| // Einen Boxen-Inhalt am Ende der Tabelle einfuegen, in der der PaM |
| // steht un den PaM in die Zelle schieben |
| const SwStartNode *InsertTableSection( sal_uInt16 nPoolId ); |
| |
| // Einfeuge-Methoden fuer die diversen Tabellen-Tags |
| HTMLTableCnts *InsertTableContents( sal_Bool bHead ); |
| |
| private: |
| // Eine Section fuer die voruebergende Aufnahme der Tabellen-Ueberschrift |
| // anlegen |
| SwStartNode *InsertTempTableCaptionSection(); |
| |
| void BuildTableCell( HTMLTable *pTable, sal_Bool bReadOptions, sal_Bool bHead ); |
| void BuildTableRow( HTMLTable *pTable, sal_Bool bReadOptions, |
| SvxAdjust eGrpAdjust, sal_Int16 eVertOri ); |
| void BuildTableSection( HTMLTable *pTable, sal_Bool bReadOptions, sal_Bool bHead ); |
| void BuildTableColGroup( HTMLTable *pTable, sal_Bool bReadOptions ); |
| void BuildTableCaption( HTMLTable *pTable ); |
| HTMLTable *BuildTable( SvxAdjust eCellAdjust, |
| sal_Bool bIsParentHead = sal_False, |
| sal_Bool bHasParentSection=sal_True, |
| sal_Bool bIsInMulticol = sal_False, |
| sal_Bool bHasToFlow = sal_False ); |
| |
| |
| // sonstiges ... |
| |
| void ParseMoreMetaOptions(); |
| |
| sal_Bool FileDownload( const String& rURL, String& rStr ); |
| void InsertLink(); |
| |
| void InsertIDOption(); |
| void InsertLineBreak(); |
| void InsertHorzRule(); |
| |
| void FillEndNoteInfo( const String& rContent ); |
| void FillFootNoteInfo( const String& rContent ); |
| void InsertFootEndNote( const String& rName, sal_Bool bEndNote, sal_Bool bFixed ); |
| void FinishFootEndNote(); |
| void InsertFootEndNoteText(); |
| SwNodeIndex *GetFootEndNoteSection( const String& rName ); |
| void DeleteFootEndNoteImpl(); |
| |
| // Line-Break am Ende eines Absatzes entfernen |
| xub_StrLen StripTrailingLF(); |
| |
| // Einen leeren Absatz an der PaM-Position entfernen |
| void StripTrailingPara(); |
| |
| // sind im aktuellen Absatz Fly-Frames vorhanden? |
| sal_Bool HasCurrentParaFlys( sal_Bool bNoSurroundOnly = sal_False, |
| sal_Bool bSurroundOnly = sal_False ) const; |
| |
| public: // wird in Tabellen benoetigt |
| |
| // generieren eines BrushItems (mit new) oder 0 |
| SvxBrushItem* CreateBrushItem( const Color *pColor, |
| const String &rImageURL, |
| const String &rStyle, |
| const String &rId, |
| const String &rClass ); |
| |
| protected: |
| // wird fuer jedes Token gerufen, das in CallParser erkannt wird |
| virtual void NextToken( int nToken ); |
| virtual ~SwHTMLParser(); |
| |
| // wird das Dok geloescht, ist auch der Parser zu loeschen |
| virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew ); |
| |
| virtual void AddMetaUserDefined( ::rtl::OUString const & i_rMetaName ); |
| |
| public: |
| |
| SwHTMLParser( SwDoc* pD, const SwPaM& rCrsr, SvStream& rIn, |
| const String& rFileName, |
| const String& rBaseURL, |
| int bReadNewDoc = sal_True, |
| SfxMedium* pMed = 0, sal_Bool bReadUTF8 = sal_False, |
| sal_Bool bIgnoreHTMLComments = sal_False ); |
| |
| virtual SvParserState CallParser(); // Aufruf des Parsers |
| |
| |
| sal_uInt16 ToTwips( sal_uInt16 nPixel ) const; |
| |
| // fuers asynchrone lesen aus dem SvStream |
| virtual void Continue( int nToken ); |
| |
| virtual bool ParseMetaOptions( const ::com::sun::star::uno::Reference< |
| ::com::sun::star::document::XDocumentProperties>&, |
| SvKeyValueIterator* ); |
| }; |
| |
| |
| struct SwPendingStackData |
| { |
| virtual ~SwPendingStackData() {} |
| }; |
| |
| struct SwPendingStack |
| { |
| int nToken; |
| SwPendingStackData* pData; |
| SwPendingStack* pNext; |
| |
| SwPendingStack( int nTkn, SwPendingStack* pNxt ) |
| : nToken( nTkn ), pData( 0 ), pNext( pNxt ) |
| {} |
| }; |
| |
| inline void _HTMLAttr::SetStart( const SwPosition& rPos ) |
| { |
| nSttPara = rPos.nNode; |
| nSttCntnt = rPos.nContent.GetIndex(); |
| nEndPara = nSttPara; |
| nEndCntnt = nSttCntnt; |
| } |
| |
| inline void _HTMLAttrContext::SetMargins( sal_uInt16 nLeft, sal_uInt16 nRight, |
| short nIndent ) |
| { |
| nLeftMargin = nLeft; |
| nRightMargin = nRight; |
| nFirstLineIndent = nIndent; |
| bLRSpaceChanged = sal_True; |
| } |
| |
| inline void _HTMLAttrContext::GetMargins( sal_uInt16& nLeft, |
| sal_uInt16& nRight, |
| short& nIndent ) const |
| { |
| if( bLRSpaceChanged ) |
| { |
| nLeft = nLeftMargin; |
| nRight = nRightMargin; |
| nIndent = nFirstLineIndent; |
| } |
| } |
| |
| inline void _HTMLAttrContext::SetULSpace( sal_uInt16 nUpper, sal_uInt16 nLower ) |
| { |
| nUpperSpace = nUpper; |
| nLowerSpace = nLower; |
| bULSpaceChanged = sal_True; |
| } |
| |
| inline void _HTMLAttrContext::GetULSpace( sal_uInt16& rUpper, |
| sal_uInt16& rLower ) const |
| { |
| if( bULSpaceChanged ) |
| { |
| rUpper = nUpperSpace; |
| rLower = nLowerSpace; |
| } |
| } |
| |
| inline sal_Bool SwHTMLParser::HasStyleOptions( const String &rStyle, |
| const String &rId, |
| const String &rClass, |
| const String *pLang, |
| const String *pDir ) |
| { |
| return rStyle.Len() || rId.Len() || rClass.Len() || |
| (pLang && pLang->Len()) || (pDir && pDir->Len()); |
| } |
| |
| inline const _HTMLAttrContext *SwHTMLParser::GetTopContext() const |
| { |
| return aContexts.Count() > nContextStMin |
| ? aContexts[aContexts.Count()-1] : 0; |
| } |
| |
| inline void SwHTMLParser::PushContext( _HTMLAttrContext *pCntxt ) |
| { |
| aContexts.Insert( pCntxt, aContexts.Count() ); |
| } |
| |
| |
| #endif |
| |
| |