Update ooo320-m1
[ooovba.git] / sw / source / filter / html / swhtml.hxx
blob9ba812b62e571ea560cc9a9b1d16031452625c81
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: swhtml.hxx,v $
10 * $Revision: 1.18.100.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
30 #ifndef _SWHTML_HXX
31 #define _SWHTML_HXX
33 #if !defined(_SVSTDARR_XUB_STRLEN_DECL) || !defined(_SVSTDARR_LONGS_DECL) || \
34 !defined(_SVSTDARR_USHORTS_DECL) || !defined(_SVSTDARR_STRINGSDTOR_DECL)
35 #ifndef _SVSTDARR_XUB_STRLEN_DECL
36 #define _SVSTDARR_XUB_STRLEN
37 #endif
38 #ifndef _SVSTDARR_LONGS_DECL
39 #define _SVSTDARR_LONGS
40 #endif
41 #ifndef _SVSTDARR_USHORTS_DECL
42 #define _SVSTDARR_USHORTS
43 #endif
44 #ifndef _SVSTDARR_STRINGSDTOR_DECL
45 #define _SVSTDARR_STRINGSDTOR
46 #endif
47 #include <svtools/svstdarr.hxx>
48 #endif
49 #include <tools/urlobj.hxx>
50 #include <sfx2/sfxhtml.hxx>
51 #include <svtools/macitem.hxx>
52 #include <svx/svxenum.hxx>
53 #include <fmtornt.hxx>
54 #include <com/sun/star/drawing/XShape.hpp>
55 #include <com/sun/star/form/XFormComponent.hpp>
56 #include <pam.hxx>
58 #include "calbck.hxx"
59 #include "htmlvsh.hxx"
61 class SfxMedium;
62 class SfxViewFrame;
63 class SdrObject;
64 class SvxMacroTableDtor;
65 class SvStringsDtor;
66 class SwDoc;
67 class SwPaM;
68 class ViewShell;
69 class SwStartNode;
70 class SwFmtColl;
71 class SwField;
72 class SwHTMLForm_Impl;
73 class SwApplet_Impl;
74 struct SwHTMLFootEndNote_Impl;
75 class HTMLTableCnts;
76 struct SwPendingStack;
77 class SvxCSS1PropertyInfo;
79 #define HTML_PARSPACE (MM50)
81 #define HTML_DFLT_IMG_WIDTH (MM50*4)
82 #define HTML_DFLT_IMG_HEIGHT (MM50*2)
84 // ein par Sachen, die man oefter mal braucht
85 extern HTMLOptionEnum __FAR_DATA aHTMLPAlignTable[];
86 extern HTMLOptionEnum __FAR_DATA aHTMLImgHAlignTable[];
87 extern HTMLOptionEnum __FAR_DATA aHTMLImgVAlignTable[];
90 // der Attribut Stack:
92 class _HTMLAttr;
93 typedef _HTMLAttr *_HTMLAttrPtr;
94 SV_DECL_PTRARR( _HTMLAttrs, _HTMLAttrPtr, 5, 5 )
96 class _HTMLAttr
98 friend class SwHTMLParser;
99 friend class _CellSaveStruct;
101 SwNodeIndex nSttPara, nEndPara;
102 xub_StrLen nSttCntnt, nEndCntnt;
103 sal_Bool bInsAtStart : 1;
104 sal_Bool bLikePara : 1; // Attribut ueber dem gesamten Absatz setzen
105 sal_Bool bValid : 1; // ist das Attribut gueltig?
107 SfxPoolItem* pItem;
108 sal_uInt16 nCount; // Anzahl noch zu schliessender Attrs mit einem Wert
109 _HTMLAttr *pNext; // noch zu schliessene Attrs mit unterschiedl. Werten
110 _HTMLAttr *pPrev; // bereits geschlossene aber noch nicht gesetze Attrs
111 _HTMLAttr **ppHead; // der Listenkopf
113 _HTMLAttr( const SwPosition& rPos, const SfxPoolItem& rItem,
114 _HTMLAttr **pHd=0 );
116 _HTMLAttr( const _HTMLAttr &rAttr, const SwNodeIndex &rEndPara,
117 xub_StrLen nEndCnt, _HTMLAttr **pHd );
119 public:
121 ~_HTMLAttr();
123 _HTMLAttr *Clone( const SwNodeIndex& rEndPara, xub_StrLen nEndCnt ) const;
124 void Reset( const SwNodeIndex& rSttPara, xub_StrLen nSttCnt,
125 _HTMLAttr **pHd );
126 inline void SetStart( const SwPosition& rPos );
128 sal_uInt32 GetSttParaIdx() const { return nSttPara.GetIndex(); }
129 sal_uInt32 GetEndParaIdx() const { return nEndPara.GetIndex(); }
131 const SwNodeIndex& GetSttPara() const { return nSttPara; }
132 const SwNodeIndex& GetEndPara() const { return nEndPara; }
134 xub_StrLen GetSttCnt() const { return nSttCntnt; }
135 xub_StrLen GetEndCnt() const { return nEndCntnt; }
137 sal_Bool IsLikePara() const { return bLikePara; }
138 void SetLikePara( sal_Bool bPara=sal_True ) { bLikePara = bPara; }
140 SfxPoolItem& GetItem() { return *pItem; }
141 const SfxPoolItem& GetItem() const { return *pItem; }
143 _HTMLAttr *GetNext() const { return pNext; }
144 void InsertNext( _HTMLAttr *pNxt ) { pNext = pNxt; }
146 _HTMLAttr *GetPrev() const { return pPrev; }
147 void InsertPrev( _HTMLAttr *pPrv );
148 void ClearPrev() { pPrev = 0; }
150 void SetHead( _HTMLAttr **ppHd ) { ppHead = ppHd; }
152 // Beim Setzen von Attributen aus Vorlagen kann es passieren,
153 // dass Attribute doch nicht mehr gesetzt werden sollen. Die zu loeschen
154 // waere sehr aufwendig, da man nicht so genau weiss, wo sie eingekettet
155 // sind. Sie werden deshalb einfach invalidiert und erst beim naechsten
156 // _SetAttr() geloescht.
157 void Invalidate() { bValid = sal_False; }
158 sal_Bool IsValid() const { return bValid; }
161 // Tabelle der Attribute: Hier ist die Reihenfolge wichtig: Die Attribute
162 // vorne in der Tabelle werden in EndAllAttrs auch zuerst gesetzt.
163 struct _HTMLAttrTable
165 _HTMLAttr
166 *pKeep, // ::com::sun::star::frame::Frame-Attribure
167 *pBox,
168 *pBrush,
169 *pBreak,
170 *pPageDesc,
172 *pLRSpace, // Absatz-Attribute
173 *pULSpace,
174 *pLineSpacing,
175 *pAdjust,
176 *pDropCap,
177 *pSplit,
178 *pWidows,
179 *pOrphans,
180 *pDirection,
182 *pCharFmts, // Text-Attribute
183 *pINetFmt,
185 *pBold, // Zeichen-Attribute
186 *pBoldCJK,
187 *pBoldCTL,
188 *pItalic,
189 *pItalicCJK,
190 *pItalicCTL,
191 *pStrike,
192 *pUnderline,
193 *pBlink,
194 *pFont,
195 *pFontCJK,
196 *pFontCTL,
197 *pFontHeight,
198 *pFontHeightCJK,
199 *pFontHeightCTL,
200 *pFontColor,
201 *pEscapement,
202 *pCaseMap,
203 *pKerning, // (nur fuer SPACER)
204 *pCharBrush, // Zeichen-Hintergrund
205 *pLanguage,
206 *pLanguageCJK,
207 *pLanguageCTL
211 class _HTMLAttrContext_SaveDoc;
213 enum SwHTMLAppendMode {
214 AM_NORMAL, // keine Absatz-Abstand-Behandlung
215 AM_NOSPACE, // Abstand hart auf 0cm setzen
216 AM_SPACE, // Abstand hart auf 0.5cm setzen
217 AM_SOFTNOSPACE, // Abstand nicht setzen aber 0cm merken
218 AM_NONE // gar kein Append
221 class _HTMLAttrContext
223 _HTMLAttrs aAttrs; // die in dem Kontext gestarteten Attribute
225 String aClass; // die Klasse des Kontexts
227 _HTMLAttrContext_SaveDoc *pSaveDocContext;
228 SfxItemSet *pFrmItemSet;
230 sal_uInt16 nToken; // das Token, zu dem der Kontext gehoehrt
232 sal_uInt16 nTxtFmtColl; // eine in dem Kontext begonnene Vorlage oder 0
234 sal_uInt16 nLeftMargin; // ein veraenderter linker Rand
235 sal_uInt16 nRightMargin; // ein veraenderter rechter Rand
236 sal_uInt16 nFirstLineIndent; // ein veraenderter Erstzeilen-Einzug
238 sal_uInt16 nUpperSpace;
239 sal_uInt16 nLowerSpace;
241 SwHTMLAppendMode eAppend;
243 sal_Bool bLRSpaceChanged : 1;// linker/rechtr Rand, Einzug veraendert?
244 sal_Bool bULSpaceChanged : 1;// oberer/unterer Rand veraendert?
245 sal_Bool bDfltTxtFmtColl : 1;// nTxtFmtColl ist nur ein default
246 sal_Bool bSpansSection : 1; // Der Kontext spannt eine SwSection auf
247 sal_Bool bPopStack : 1; // Oberhalb liegende Stack-Elemente entf.
248 sal_Bool bFinishPREListingXMP : 1;
249 sal_Bool bRestartPRE : 1;
250 sal_Bool bRestartXMP : 1;
251 sal_Bool bRestartListing : 1;
253 public:
254 void ClearSaveDocContext();
256 _HTMLAttrContext( sal_uInt16 nTokn, sal_uInt16 nPoolId, const String& rClass,
257 sal_Bool bDfltColl=sal_False ) :
258 aClass( rClass ),
259 pSaveDocContext( 0 ),
260 pFrmItemSet( 0 ),
261 nToken( nTokn ),
262 nTxtFmtColl( nPoolId ),
263 nLeftMargin( 0 ),
264 nRightMargin( 0 ),
265 nFirstLineIndent( 0 ),
266 nUpperSpace( 0 ),
267 nLowerSpace( 0 ),
268 eAppend( AM_NONE ),
269 bLRSpaceChanged( sal_False ),
270 bULSpaceChanged( sal_False ),
271 bDfltTxtFmtColl( bDfltColl ),
272 bSpansSection( sal_False ),
273 bPopStack( sal_False ),
274 bFinishPREListingXMP( sal_False ),
275 bRestartPRE( sal_False ),
276 bRestartXMP( sal_False ),
277 bRestartListing( sal_False )
280 _HTMLAttrContext( sal_uInt16 nTokn ) :
281 pSaveDocContext( 0 ),
282 pFrmItemSet( 0 ),
283 nToken( nTokn ),
284 nTxtFmtColl( 0 ),
285 nLeftMargin( 0 ),
286 nRightMargin( 0 ),
287 nFirstLineIndent( 0 ),
288 nUpperSpace( 0 ),
289 nLowerSpace( 0 ),
290 eAppend( AM_NONE ),
291 bLRSpaceChanged( sal_False ),
292 bULSpaceChanged( sal_False ),
293 bDfltTxtFmtColl( sal_False ),
294 bSpansSection( sal_False ),
295 bPopStack( sal_False ),
296 bFinishPREListingXMP( sal_False ),
297 bRestartPRE( sal_False ),
298 bRestartXMP( sal_False ),
299 bRestartListing( sal_False )
302 ~_HTMLAttrContext() { ClearSaveDocContext(); delete pFrmItemSet; }
304 sal_uInt16 GetToken() const { return nToken; }
306 sal_uInt16 GetTxtFmtColl() const { return bDfltTxtFmtColl ? 0 : nTxtFmtColl; }
307 sal_uInt16 GetDfltTxtFmtColl() const { return bDfltTxtFmtColl ? nTxtFmtColl : 0; }
309 const String& GetClass() const { return aClass; }
311 inline void SetMargins( sal_uInt16 nLeft, sal_uInt16 nRight, short nIndent );
313 inline sal_Bool IsLRSpaceChanged() const { return bLRSpaceChanged; }
314 inline void GetMargins( sal_uInt16& nLeft, sal_uInt16& nRight,
315 short &nIndent ) const;
317 inline void SetULSpace( sal_uInt16 nUpper, sal_uInt16 nLower );
318 inline sal_Bool IsULSpaceChanged() const { return bULSpaceChanged; }
319 inline void GetULSpace( sal_uInt16& rUpper, sal_uInt16& rLower ) const;
321 sal_Bool HasAttrs() const { return aAttrs.Count() != 0; }
322 const _HTMLAttrs& GetAttrs() const { return aAttrs; }
323 _HTMLAttrs& GetAttrs() { return aAttrs; }
325 void SetSpansSection( sal_Bool bSet ) { bSpansSection = bSet; }
326 sal_Bool GetSpansSection() const { return bSpansSection; }
328 void SetPopStack( sal_Bool bSet ) { bPopStack = bSet; }
329 sal_Bool GetPopStack() const { return bPopStack; }
331 sal_Bool HasSaveDocContext() const { return pSaveDocContext!=0; }
332 _HTMLAttrContext_SaveDoc *GetSaveDocContext( sal_Bool bCreate=sal_False );
334 const SfxItemSet *GetFrmItemSet() const { return pFrmItemSet; }
335 SfxItemSet *GetFrmItemSet( SwDoc *pCreateDoc );
337 void SetFinishPREListingXMP( sal_Bool bSet ) { bFinishPREListingXMP = bSet; }
338 sal_Bool IsFinishPREListingXMP() const { return bFinishPREListingXMP; }
340 void SetRestartPRE( sal_Bool bSet ) { bRestartPRE = bSet; }
341 sal_Bool IsRestartPRE() const { return bRestartPRE; }
343 void SetRestartXMP( sal_Bool bSet ) { bRestartXMP = bSet; }
344 sal_Bool IsRestartXMP() const { return bRestartXMP; }
346 void SetRestartListing( sal_Bool bSet ) { bRestartListing = bSet; }
347 sal_Bool IsRestartListing() const { return bRestartListing; }
349 void SetAppendMode( SwHTMLAppendMode eMode=AM_NORMAL ) { eAppend = eMode; }
350 SwHTMLAppendMode GetAppendMode() const { return eAppend; }
353 typedef _HTMLAttrContext *_HTMLAttrContextPtr;
354 SV_DECL_PTRARR( _HTMLAttrContexts, _HTMLAttrContextPtr, 5, 5 )
356 class HTMLTable;
357 class SwCSS1Parser;
358 class SwHTMLNumRuleInfo;
360 typedef ImageMap *ImageMapPtr;
361 SV_DECL_PTRARR_DEL( ImageMaps, ImageMapPtr, 1, 1 )
362 typedef SwFrmFmt *SwFrmFmtPtr;
363 SV_DECL_PTRARR( SwHTMLFrmFmts, SwFrmFmtPtr, 2, 2 )
365 #define HTML_CNTXT_PROTECT_STACK 0x0001
366 #define HTML_CNTXT_STRIP_PARA 0x0002
367 #define HTML_CNTXT_KEEP_NUMRULE 0x0004
368 #define HTML_CNTXT_HEADER_DIST 0x0008
369 #define HTML_CNTXT_FOOTER_DIST 0x0010
370 #define HTML_CNTXT_KEEP_ATTRS 0x0020
372 #define CONTEXT_FLAGS_ABSPOS \
373 (HTML_CNTXT_PROTECT_STACK | \
374 HTML_CNTXT_STRIP_PARA)
376 #define HTML_FF_BOX 0x0001
377 #define HTML_FF_BACKGROUND 0x0002
378 #define HTML_FF_PADDING 0x0004
379 #define HTML_FF_DIRECTION 0x0008
381 class SwHTMLParser : public SfxHTMLParser, public SwClient
383 friend class _SectionSaveStruct;
384 friend class _CellSaveStruct;
385 friend class _CaptionSaveStruct;
387 String aPathToFile;
388 String sBaseURL;
389 String sSaveBaseURL;
390 String aBasicLib;
391 String aBasicModule;
392 String aScriptSource; // Inhalt des aktuellen Script-Blocks
393 String aScriptType; // Type des gelesenen Scripts (StarBasic/VB/JAVA)
394 String aScriptURL; // URL eines Scripts
395 String aStyleSource; // Inhalt des aktuellen Style-Sheets
396 String aContents; // Text des akteullen Marquee, Feldes etc.
397 String sTitle;
398 String aUnknownToken; // ein gestartetes unbekanntes Token
399 String aBulletGrfs[MAXLEVEL];
400 String sJmpMark;
402 SvUShorts aBaseFontStack; // Stack fuer <BASEFONT>
403 // Bit 0-2: Fontgroesse (1-7)
404 SvUShorts aFontStack; // Stack fuer <FONT>, <BIG>, <SMALL>
405 // Bit 0-2: Fontgroesse (1-7)
406 // Bit 15: Fontfarbe wurde gesetzt
408 _HTMLAttrs aSetAttrTab;// "geschlossene", noch nicht gesetzte Attr.
409 _HTMLAttrs aParaAttrs; // vorlauefige Absatz-Attribute
410 _HTMLAttrTable aAttrTab; // "offene" Attribute
411 _HTMLAttrContexts aContexts;// der aktuelle Attribut/Token-Kontext
412 SwHTMLFrmFmts aMoveFlyFrms;// Fly-Frames, deren Anker verschoben wird
413 SvXub_StrLens aMoveFlyCnts;// und deren Content-Positionen
415 SwApplet_Impl *pAppletImpl; // das aktuelle Applet
417 SwCSS1Parser *pCSS1Parser; // der Style-Sheet-Parser
418 SwHTMLNumRuleInfo *pNumRuleInfo;
419 SwPendingStack *pPendStack;
421 SwDoc *pDoc;
422 SwPaM *pPam; // SwPosition duerfte doch reichen, oder ??
423 ViewShell *pActionViewShell; // ViewShell, an der das StartAction
424 // gerufen wurde.
425 SwNodeIndex *pSttNdIdx;
427 HTMLTable *pTable; // die aktuelle "auesserste" Tabelle
428 SwHTMLForm_Impl *pFormImpl;// die aktuelle Form
429 SdrObject *pMarquee; // aktuelles Marquee
430 SwField *pField; // aktuelles Feld
431 ImageMap *pImageMap; // aktuelle Image-Map
432 ImageMaps *pImageMaps;// alle gelesenen Image-Maps
433 SwHTMLFootEndNote_Impl *pFootEndNoteImpl;
435 Size aHTMLPageSize; // die Seitengroesse der HTML-Vorlage
437 sal_uInt32 aFontHeights[7]; // die Font-Hoehen 1-7
438 sal_uInt32 nScriptStartLineNr; // Zeilennummer eines Script-Blocks
439 ULONG nEventId;
441 sal_uInt16 nBaseFontStMin; //
442 sal_uInt16 nFontStMin; //
443 sal_uInt16 nDefListDeep; //
444 sal_uInt16 nFontStHeadStart; // Elemente im Font-Stack bei <Hn>
445 sal_uInt16 nSBModuleCnt; // Zaehler fuer Basic-Module
446 sal_uInt16 nMissingImgMaps; // Wie viele Image-Maps fehlen noch?
447 sal_uInt16 nParaCnt;
448 sal_uInt16 nContextStMin; // Untergrenze fuer PopContext
449 sal_uInt16 nContextStAttrMin; // Untergrenze fuer Attributierung
450 sal_uInt16 nSelectEntryCnt; // Anzahl der Eintraege der akt. Listbox
451 sal_uInt16 nOpenParaToken; // ein geoeffnetes Absatz-Element
453 enum JumpToMarks { JUMPTO_NONE, JUMPTO_MARK, JUMPTO_TABLE, JUMPTO_FRAME,
454 JUMPTO_REGION, JUMPTO_GRAPHIC } eJumpTo;
456 #ifndef PRODUCT
457 sal_uInt16 nContinue; // Tiefe der Continue-Aufrufe
458 #endif
460 SvxAdjust eParaAdjust; // Ausrichtung des aktuellen Absatz
461 HTMLScriptLanguage eScriptLang; // die aktuelle Script-Language
463 sal_Bool bOldIsHTMLMode : 1; // War's mal ein HTML-Dokument?
465 sal_Bool bDocInitalized : 1; // Dokument bzw. Shell wurden initialisiert
466 // Flag um doppeltes init durch Rekursion
467 // zu verhindern.
468 sal_Bool bViewCreated : 1; // die View wurde schon erzeugt (asynchron)
469 sal_Bool bSetCrsr : 1; // Crsr wieder auf den Anfang setzen
470 sal_Bool bSetModEnabled : 1;
472 sal_Bool bInFloatingFrame : 1; // Wir sind in einen Floating ::com::sun::star::frame::Frame
473 sal_Bool bInField : 1;
474 sal_Bool bKeepUnknown : 1; // unbekannte/nicht unterstuetze Tokens beh.
475 // 8
476 sal_Bool bCallNextToken : 1; // In Tabellen: NextToken in jedem Fall rufen
477 sal_Bool bIgnoreRawData : 1; // Inhalt eines Scripts/Styles ignorieren.
478 sal_Bool bLBEntrySelected : 1; // Ist der aktuelle Listbox-Eintrag selekt.
479 sal_Bool bTAIgnoreNewPara : 1; // naechstes LF in TextArea ignorieren?
480 sal_Bool bFixMarqueeWidth : 1; // Groesse einer Laufschrift anpassen?
481 sal_Bool bFixMarqueeHeight : 1;
483 sal_Bool bUpperSpace : 1; // obererer Absatz-Abstand wird benoetigt
484 sal_Bool bNoParSpace : 1;
485 // 16
487 sal_Bool bAnyStarBasic : 1; // gibt es ueberhaupt ein StarBasic-Modul
488 sal_Bool bInNoEmbed : 1; // Wir sind in einem NOEMBED-Bereich
490 sal_Bool bInTitle : 1; // Wir sind im Titel
492 sal_Bool bChkJumpMark : 1; // springe ggfs. zu einem vorgegebenem Mark
493 sal_Bool bUpdateDocStat : 1;
494 sal_Bool bFixSelectWidth : 1; // Breite eines Selects neu setzen?
495 sal_Bool bFixSelectHeight : 1; // Breite eines Selects neu setzen?
496 sal_Bool bTextArea : 1;
497 // 24
498 sal_Bool bSelect : 1;
499 sal_Bool bInFootEndNoteAnchor : 1;
500 sal_Bool bInFootEndNoteSymbol : 1;
501 sal_Bool bIgnoreHTMLComments : 1;
502 sal_Bool bRemoveHidden : 1; // the filter implementation might set the hidden flag
504 /// the names corresponding to the DOCINFO field subtypes INFO[1-4]
505 ::rtl::OUString m_InfoNames[4];
507 SfxViewFrame* pTempViewFrame;
509 void DeleteFormImpl();
511 void DocumentDetected();
512 void Show();
513 void ShowStatline();
514 ViewShell *CallStartAction( ViewShell *pVSh = 0, sal_Bool bChkPtr = sal_True );
515 ViewShell *CallEndAction( sal_Bool bChkAction = sal_False, sal_Bool bChkPtr = sal_True );
516 ViewShell *CheckActionViewShell();
518 DECL_LINK( AsyncCallback, void* );
520 // Attribute am Dok setzen
521 void _SetAttr( sal_Bool bChkEnd, sal_Bool bBeforeTable, _HTMLAttrs *pPostIts );
522 inline void SetAttr( sal_Bool bChkEnd = sal_True, sal_Bool bBeforeTable = sal_False,
523 _HTMLAttrs *pPostIts = 0 )
525 if( aSetAttrTab.Count() || aMoveFlyFrms.Count() )
526 _SetAttr( bChkEnd, bBeforeTable, pPostIts );
529 _HTMLAttr **GetAttrTabEntry( sal_uInt16 nWhich );
531 // Einen neuen Textknoten an PaM-Position anlegen
532 sal_Bool AppendTxtNode( SwHTMLAppendMode eMode=AM_NORMAL, sal_Bool bUpdateNum=sal_True );
533 void AddParSpace();
535 // Ein Attribut beginnen/beenden
536 // ppDepAttr gibt einen Attribut-Tabellen-Eintrag an, dessen Attribute
537 // gesetzt sein muessen, bevor das Attribut beendet werden darf
538 void NewAttr( _HTMLAttr **ppAttr, const SfxPoolItem& rItem );
539 void EndAttr( _HTMLAttr *pAttr, _HTMLAttr **ppDepAttr=0,
540 sal_Bool bChkEmpty=sal_True );
541 void DeleteAttr( _HTMLAttr* pAttr );
543 void EndContextAttrs( _HTMLAttrContext *pContext, sal_Bool bRemove=sal_False );
544 void SaveAttrTab( _HTMLAttrTable& rNewAttrTab );
545 void SplitAttrTab( const SwPosition& rNewPos );
546 void SplitAttrTab( _HTMLAttrTable& rNewAttrTab, sal_Bool bMoveEndBack = sal_True );
547 void RestoreAttrTab( const _HTMLAttrTable& rNewAttrTab,
548 sal_Bool bSetNewStart = sal_False );
549 void InsertAttr( const SfxPoolItem& rItem, sal_Bool bLikePara = sal_False,
550 sal_Bool bInsAtStart=sal_False );
551 void InsertAttrs( _HTMLAttrs& rAttrs );
553 sal_Bool DoPositioning( SfxItemSet &rItemSet,
554 SvxCSS1PropertyInfo &rPropInfo,
555 _HTMLAttrContext *pContext );
556 sal_Bool CreateContainer( const String& rClass, SfxItemSet &rItemSet,
557 SvxCSS1PropertyInfo &rPropInfo,
558 _HTMLAttrContext *pContext );
559 sal_Bool EndSection( sal_Bool bLFStripped=sal_False );
561 void InsertAttrs( SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo,
562 _HTMLAttrContext *pContext, sal_Bool bCharLvl=sal_False );
563 void InsertAttr( _HTMLAttr **ppAttr, const SfxPoolItem & rItem,
564 _HTMLAttrContext *pCntxt );
565 void SplitPREListingXMP( _HTMLAttrContext *pCntxt );
566 void FixHeaderFooterDistance( sal_Bool bHeader, const SwPosition *pOldPos );
568 void EndContext( _HTMLAttrContext *pContext );
569 void ClearContext( _HTMLAttrContext *pContext );
571 const SwFmtColl *GetCurrFmtColl() const;
573 SwTwips GetCurrentBrowseWidth();
575 SwHTMLNumRuleInfo& GetNumInfo() { return *pNumRuleInfo; }
576 // --> OD 2008-04-02 #refactorlists#
577 // add parameter <bCountedInList>
578 void SetNodeNum( sal_uInt8 nLevel, bool bCountedInList );
579 // <--
581 // Verwalten von Absatz-Vorlagen
583 // die Vorlagen auf dem Stack bzw. deren Attribute setzen
584 void SetTxtCollAttrs( _HTMLAttrContext *pContext = 0 );
586 void InsertParaAttrs( const SfxItemSet& rItemSet );
588 // Verwalten des Attribut-Kontexts
590 // aktuellen Kontext merken
591 inline void PushContext( _HTMLAttrContext *pCntxt );
593 // den obersten/spezifizierten Kontext holen, aber nicht ausserhalb
594 // des Kontexts mit Token nLimit suchen. Wenn bRemove gesetzt ist,
595 // wird er entfernt
596 _HTMLAttrContext *PopContext( sal_uInt16 nToken=0, sal_uInt16 nLimit=0,
597 sal_Bool bRemove=sal_True );
598 inline const _HTMLAttrContext *GetTopContext() const;
600 sal_Bool GetMarginsFromContext( sal_uInt16 &nLeft, sal_uInt16 &nRight, short& nIndent,
601 sal_Bool bIgnoreCurrent=sal_False ) const;
602 sal_Bool GetMarginsFromContextWithNumBul( sal_uInt16 &nLeft, sal_uInt16 &nRight,
603 short& nIndent ) const;
604 void GetULSpaceFromContext( sal_uInt16 &rUpper, sal_uInt16 &rLower ) const;
607 void MovePageDescAttrs( SwNode *pSrcNd, ULONG nDestIdx, sal_Bool bFmtBreak );
609 // Behandlung von Tags auf Absatz-Ebene
611 // <P> und <H1> bis <H6>
612 void NewPara();
613 void EndPara( sal_Bool bReal = sal_False );
614 void NewHeading( int nToken );
615 void EndHeading();
617 // <ADDRESS>, <BLOCKQUOTE> und <PRE>
618 void NewTxtFmtColl( int nToken, sal_uInt16 nPoolId );
619 void EndTxtFmtColl( int nToken );
621 // <DIV> und <CENTER>
622 void NewDivision( int nToken );
623 void EndDivision( int nToken );
625 // Fly-Frames einfuegen/verlassen
626 void InsertFlyFrame( const SfxItemSet& rItemSet, _HTMLAttrContext *pCntxt,
627 const String& rId, sal_uInt16 nFlags );
629 void SaveDocContext( _HTMLAttrContext *pCntxt, sal_uInt16 nFlags,
630 const SwPosition *pNewPos );
631 void RestoreDocContext( _HTMLAttrContext *pCntxt );
633 // alle durch <DIV> aufgespannten Bereiche verlassen
634 sal_Bool EndSections( sal_Bool bLFStripped );
636 // <MULTICOL>
637 void NewMultiCol();
638 void EndMultiCol();
640 // <MARQUEE>
641 void NewMarquee( HTMLTable *pCurTable=0 );
642 void EndMarquee();
643 void InsertMarqueeText();
645 // Behandluung von Listen
647 // Numerierungs <OL> und Aufzaehlungs-Listen <UL> mit <LI>
648 void NewNumBulList( int nToken );
649 void EndNumBulList( int nToken=0 );
650 void NewNumBulListItem( int nToken );
651 void EndNumBulListItem( int nToken=0, sal_Bool bSetColl=sal_True,
652 sal_Bool bLastPara=sal_False );
654 // Definitions-Listen <DL> mit <DD>, <DT>
655 void NewDefList();
656 void EndDefList();
657 void NewDefListItem( int nToken );
658 void EndDefListItem( int nToken=0, sal_Bool bSetColl=sal_True,
659 sal_Bool bLastPara=sal_False );
662 // Behandlung von Tags auf Zeichen-Ebene
664 // Tags wie <B>, <I> etc behandeln, die ein bestimmtes Attribut
665 // an und ausschalten, oder die wie SPAN nur Attribute aus Styles holen
666 void NewStdAttr( int nToken );
667 void NewStdAttr( int nToken,
668 _HTMLAttr **ppAttr, const SfxPoolItem & rItem,
669 _HTMLAttr **ppAttr2=0, const SfxPoolItem *pItem2=0,
670 _HTMLAttr **ppAttr3=0, const SfxPoolItem *pItem3=0 );
671 void EndTag( int nToken );
673 // Font-Attribute behandeln
674 void NewBasefontAttr(); // fuer <BASEFONT>
675 void EndBasefontAttr();
676 void NewFontAttr( int nToken ); // fuer <FONT>, <BIG> und <SMALL>
677 void EndFontAttr( int nToken );
679 // Tags, die durch Zeichenvorlagen realisiert werden
680 void NewCharFmt( int nToken );
682 // <SDFIELD>
683 public:
684 static sal_uInt16 GetNumType( const String& rStr, sal_uInt16 eDfltType );
685 private:
686 void NewField();
687 void EndField();
688 void InsertFieldText();
690 // <SPACER>
691 void InsertSpacer();
693 // Einfuegen von Grafiken, Plugins und Applets
695 // Image-Maps suchen und mit Grafik-Nodes verbinden
696 ImageMap *FindImageMap( const String& rURL ) const;
697 void ConnectImageMaps();
699 // Verankerung eines Fly-Frames bestimmen und entsprechende Attribute
700 // in den Attrset setzen (htmlgrin.cxx)
701 void SetAnchorAndAdjustment( sal_Int16 eVertOri,
702 sal_Int16 eHoriOri,
703 const SfxItemSet &rItemSet,
704 const SvxCSS1PropertyInfo &rPropInfo,
705 SfxItemSet& rFrmSet );
706 void SetAnchorAndAdjustment( sal_Int16 eVertOri,
707 sal_Int16 eHoriOri,
708 SfxItemSet& rFrmSet,
709 sal_Bool bDontAppend=sal_False );
710 void SetAnchorAndAdjustment( const SfxItemSet &rItemSet,
711 const SvxCSS1PropertyInfo &rPropInfo,
712 SfxItemSet &rFrmItemSet );
714 void SetFrmFmtAttrs( SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo,
715 sal_uInt16 nFlags, SfxItemSet &rFrmItemSet );
717 // Frames anlegen und Auto-gebundene Rahmen registrieren
718 void RegisterFlyFrm( SwFrmFmt *pFlyFrm );
720 // Die Groesse des Fly-Frames an die Vorgaben und Gegebenheiten anpassen
721 // (nicht fuer Grafiken, deshalb htmlplug.cxx)
722 void SetFixSize( const Size& rPixSize, const Size& rTwipDfltSize,
723 sal_Bool bPrcWidth, sal_Bool bPrcHeight,
724 SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo,
725 SfxItemSet& rFlyItemSet );
726 void SetVarSize( SfxItemSet &rItemSet, SvxCSS1PropertyInfo &rPropInfo,
727 SfxItemSet& rFlyItemSet, SwTwips nDfltWidth=MINLAY,
728 sal_uInt8 nDltPrcWidth=0 );
729 void SetSpace( const Size& rPixSpace, SfxItemSet &rItemSet,
730 SvxCSS1PropertyInfo &rPropInfo, SfxItemSet& rFlyItemSet );
732 sal_uInt16 IncGrfsThatResizeTable();
734 void GetDefaultScriptType( ScriptType& rType,
735 String& rTypeStr ) const;
737 // die eigentlichen Einfuege-Methoden fuer <IMG>, <EMBED> und <APPLET>
738 // und <PARAM>
739 void InsertImage(); // htmlgrin.cxx
740 void InsertEmbed(); // htmlplug.cxx
742 #ifdef SOLAR_JAVA
743 void NewObject(); // htmlplug.cxx
744 #endif
745 void EndObject(); // CommandLine mit Applet verkn. (htmlplug.cxx)
746 #ifdef SOLAR_JAVA
747 void InsertApplet(); // htmlplug.cxx
748 #endif
749 void EndApplet(); // CommandLine mit Applet verkn. (htmlplug.cxx)
750 void InsertParam(); // htmlplug.cxx
752 void InsertFloatingFrame();
753 void EndFloatingFrame() { bInFloatingFrame = sal_False; }
755 // <BODY>-Tag auswerten: Hintergrund-Grafiken und -Farben setzen (htmlgrin.cxx)
756 void InsertBodyOptions();
759 // Einfuegen von Links und ::com::sun::star::text::Bookmarks (htmlgrin.cxx)
761 // <A>-Tag auswerten: einen Link bzw. eine ::com::sun::star::text::Bookmark einfuegen
762 void NewAnchor();
763 void EndAnchor();
765 // eine ::com::sun::star::text::Bookmark einfuegen
766 void InsertBookmark( const String& rName );
769 void InsertCommentText( const sal_Char *pTag = 0 );
770 void InsertComment( const String& rName, const sal_Char *pTag = 0 );
772 // sind im aktuellen Absatz ::com::sun::star::text::Bookmarks vorhanden?
773 sal_Bool HasCurrentParaBookmarks( sal_Bool bIgnoreStack=sal_False ) const;
776 // Einfuegen von Script/Basic-Elementen
778 // das zueletzt gelsene Basic-Modul parsen (htmlbas.cxx)
779 void NewScript();
780 void EndScript();
782 void AddScriptSource();
784 // ein Event in die SFX-Konfiguation eintragen (htmlbas.cxx)
785 void InsertBasicDocEvent( rtl::OUString aEventName, const String& rName,
786 ScriptType eScrType, const String& rScrType );
788 // ein Event an ein VC-Control anhaengen (htmlform.cxx)
789 void InsertBasicCtrlEvent( sal_uInt16 nEvent, const String& rName );
791 // Einfuegen von Styles
793 // <STYLE>
794 void NewStyle();
795 void EndStyle();
797 inline sal_Bool HasStyleOptions( const String &rStyle, const String &rId,
798 const String &rClass, const String *pLang=0,
799 const String *pDir=0 );
800 sal_Bool ParseStyleOptions( const String &rStyle, const String &rId,
801 const String &rClass, SfxItemSet &rItemSet,
802 SvxCSS1PropertyInfo &rPropInfo,
803 const String *pLang=0, const String *pDir=0 );
806 // Einfuegen von Controls und ::com::sun::star::form::Forms (htmlform.cxx)
808 // Ein Draw-Objekt in das Dokuement eintragen
809 void InsertDrawObject( SdrObject* pNewDrawObj, const Size& rSpace,
810 sal_Int16 eVertOri,
811 sal_Int16 eHoriOri,
812 SfxItemSet& rCSS1ItemSet,
813 SvxCSS1PropertyInfo& rCSS1PropInfo,
814 sal_Bool bHidden=sal_False );
815 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > InsertControl( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > & rFormComp,
816 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rFCompPropSet,
817 const Size& rSize,
818 sal_Int16 eVertOri,
819 sal_Int16 eHoriOri,
820 SfxItemSet& rCSS1ItemSet,
821 SvxCSS1PropertyInfo& rCSS1PropInfo,
822 const SvxMacroTableDtor& rMacroTbl,
823 const SvStringsDtor& rUnoMacroTbl,
824 const SvStringsDtor& rUnoMacroParamTbl,
825 sal_Bool bSetPropSet = sal_True,
826 sal_Bool bHidden = sal_False );
827 void SetControlSize( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rShape, const Size& rTextSz,
828 sal_Bool bMinWidth, sal_Bool bMinHeight, int nToken );
829 void SetPendingControlSize( int nToken );
831 public:
832 void ResizeDrawObject( SdrObject* pObj, SwTwips nWidth );
833 private:
834 void RegisterDrawObjectToTable( HTMLTable *pCurTable, SdrObject* pObj,
835 sal_uInt8 nWidth );
838 // eine neue Form beginnen
839 void NewForm( sal_Bool bAppend=sal_True );
840 void EndForm( sal_Bool bAppend=sal_True );
842 // die Einfuege-Methoden fuer <INPUT>, <TEXTAREA> und <SELECT>
843 void InsertInput();
845 void NewTextArea();
846 void InsertTextAreaText( sal_uInt16 nToken );
847 void EndTextArea();
849 void NewSelect();
850 void InsertSelectOption();
851 void InsertSelectText();
852 void EndSelect();
854 // Einfuegen von Tabellen (htmltab.cxx)
856 public: // wird in Tabellen benoetigt
858 // einen Boxen-Inhalt hinter dem angegebenen Node einfuegen
859 const SwStartNode *InsertTableSection( const SwStartNode *pPrevStNd );
861 // Einen Boxen-Inhalt am Ende der Tabelle einfuegen, in der der PaM
862 // steht un den PaM in die Zelle schieben
863 const SwStartNode *InsertTableSection( sal_uInt16 nPoolId );
865 // Einfeuge-Methoden fuer die diversen Tabellen-Tags
866 HTMLTableCnts *InsertTableContents( sal_Bool bHead );
868 private:
869 // Eine Section fuer die voruebergende Aufnahme der Tabellen-Ueberschrift
870 // anlegen
871 SwStartNode *InsertTempTableCaptionSection();
873 void BuildTableCell( HTMLTable *pTable, sal_Bool bReadOptions, sal_Bool bHead );
874 void BuildTableRow( HTMLTable *pTable, sal_Bool bReadOptions,
875 SvxAdjust eGrpAdjust, sal_Int16 eVertOri );
876 void BuildTableSection( HTMLTable *pTable, sal_Bool bReadOptions, sal_Bool bHead );
877 void BuildTableColGroup( HTMLTable *pTable, sal_Bool bReadOptions );
878 void BuildTableCaption( HTMLTable *pTable );
879 HTMLTable *BuildTable( SvxAdjust eCellAdjust,
880 sal_Bool bIsParentHead = sal_False,
881 sal_Bool bHasParentSection=sal_True,
882 sal_Bool bIsInMulticol = sal_False,
883 sal_Bool bHasToFlow = sal_False );
886 // sonstiges ...
888 void ParseMoreMetaOptions();
890 sal_Bool FileDownload( const String& rURL, String& rStr );
891 void InsertLink();
893 void InsertIDOption();
894 void InsertLineBreak();
895 void InsertHorzRule();
897 void FillEndNoteInfo( const String& rContent );
898 void FillFootNoteInfo( const String& rContent );
899 void InsertFootEndNote( const String& rName, sal_Bool bEndNote, sal_Bool bFixed );
900 void FinishFootEndNote();
901 void InsertFootEndNoteText();
902 SwNodeIndex *GetFootEndNoteSection( const String& rName );
903 void DeleteFootEndNoteImpl();
905 // Line-Break am Ende eines Absatzes entfernen
906 xub_StrLen StripTrailingLF();
908 // Einen leeren Absatz an der PaM-Position entfernen
909 void StripTrailingPara();
911 // sind im aktuellen Absatz Fly-Frames vorhanden?
912 sal_Bool HasCurrentParaFlys( sal_Bool bNoSurroundOnly = sal_False,
913 sal_Bool bSurroundOnly = sal_False ) const;
915 public: // wird in Tabellen benoetigt
917 // generieren eines BrushItems (mit new) oder 0
918 SvxBrushItem* CreateBrushItem( const Color *pColor,
919 const String &rImageURL,
920 const String &rStyle,
921 const String &rId,
922 const String &rClass );
924 protected:
925 // wird fuer jedes Token gerufen, das in CallParser erkannt wird
926 virtual void NextToken( int nToken );
927 virtual ~SwHTMLParser();
929 // wird das Dok geloescht, ist auch der Parser zu loeschen
930 virtual void Modify( SfxPoolItem *pOld, SfxPoolItem *pNew );
932 virtual void AddMetaUserDefined( ::rtl::OUString const & i_rMetaName );
934 public:
936 SwHTMLParser( SwDoc* pD, const SwPaM& rCrsr, SvStream& rIn,
937 const String& rFileName,
938 const String& rBaseURL,
939 int bReadNewDoc = sal_True,
940 SfxMedium* pMed = 0, sal_Bool bReadUTF8 = sal_False,
941 sal_Bool bIgnoreHTMLComments = sal_False );
943 virtual SvParserState CallParser(); // Aufruf des Parsers
946 sal_uInt16 ToTwips( sal_uInt16 nPixel ) const;
948 // fuers asynchrone lesen aus dem SvStream
949 virtual void Continue( int nToken );
951 virtual bool ParseMetaOptions( const ::com::sun::star::uno::Reference<
952 ::com::sun::star::document::XDocumentProperties>&,
953 SvKeyValueIterator* );
957 struct SwPendingStackData
959 virtual ~SwPendingStackData() {}
962 struct SwPendingStack
964 int nToken;
965 SwPendingStackData* pData;
966 SwPendingStack* pNext;
968 SwPendingStack( int nTkn, SwPendingStack* pNxt )
969 : nToken( nTkn ), pData( 0 ), pNext( pNxt )
973 inline void _HTMLAttr::SetStart( const SwPosition& rPos )
975 nSttPara = rPos.nNode;
976 nSttCntnt = rPos.nContent.GetIndex();
977 nEndPara = nSttPara;
978 nEndCntnt = nSttCntnt;
981 inline void _HTMLAttrContext::SetMargins( sal_uInt16 nLeft, sal_uInt16 nRight,
982 short nIndent )
984 nLeftMargin = nLeft;
985 nRightMargin = nRight;
986 nFirstLineIndent = nIndent;
987 bLRSpaceChanged = sal_True;
990 inline void _HTMLAttrContext::GetMargins( sal_uInt16& nLeft,
991 sal_uInt16& nRight,
992 short& nIndent ) const
994 if( bLRSpaceChanged )
996 nLeft = nLeftMargin;
997 nRight = nRightMargin;
998 nIndent = nFirstLineIndent;
1002 inline void _HTMLAttrContext::SetULSpace( sal_uInt16 nUpper, sal_uInt16 nLower )
1004 nUpperSpace = nUpper;
1005 nLowerSpace = nLower;
1006 bULSpaceChanged = sal_True;
1009 inline void _HTMLAttrContext::GetULSpace( sal_uInt16& rUpper,
1010 sal_uInt16& rLower ) const
1012 if( bULSpaceChanged )
1014 rUpper = nUpperSpace;
1015 rLower = nLowerSpace;
1019 inline sal_Bool SwHTMLParser::HasStyleOptions( const String &rStyle,
1020 const String &rId,
1021 const String &rClass,
1022 const String *pLang,
1023 const String *pDir )
1025 return rStyle.Len() || rId.Len() || rClass.Len() ||
1026 (pLang && pLang->Len()) || (pDir && pDir->Len());
1029 inline const _HTMLAttrContext *SwHTMLParser::GetTopContext() const
1031 return aContexts.Count() > nContextStMin
1032 ? aContexts[aContexts.Count()-1] : 0;
1035 inline void SwHTMLParser::PushContext( _HTMLAttrContext *pCntxt )
1037 aContexts.Insert( pCntxt, aContexts.Count() );
1041 #endif