1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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 ************************************************************************/
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
38 #ifndef _SVSTDARR_LONGS_DECL
39 #define _SVSTDARR_LONGS
41 #ifndef _SVSTDARR_USHORTS_DECL
42 #define _SVSTDARR_USHORTS
44 #ifndef _SVSTDARR_STRINGSDTOR_DECL
45 #define _SVSTDARR_STRINGSDTOR
47 #include <svtools/svstdarr.hxx>
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>
59 #include "htmlvsh.hxx"
64 class SvxMacroTableDtor
;
72 class SwHTMLForm_Impl
;
74 struct SwHTMLFootEndNote_Impl
;
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:
93 typedef _HTMLAttr
*_HTMLAttrPtr
;
94 SV_DECL_PTRARR( _HTMLAttrs
, _HTMLAttrPtr
, 5, 5 )
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?
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
,
116 _HTMLAttr( const _HTMLAttr
&rAttr
, const SwNodeIndex
&rEndPara
,
117 xub_StrLen nEndCnt
, _HTMLAttr
**pHd
);
123 _HTMLAttr
*Clone( const SwNodeIndex
& rEndPara
, xub_StrLen nEndCnt
) const;
124 void Reset( const SwNodeIndex
& rSttPara
, xub_StrLen nSttCnt
,
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
166 *pKeep
, // ::com::sun::star::frame::Frame-Attribure
172 *pLRSpace
, // Absatz-Attribute
182 *pCharFmts
, // Text-Attribute
185 *pBold
, // Zeichen-Attribute
203 *pKerning
, // (nur fuer SPACER)
204 *pCharBrush
, // Zeichen-Hintergrund
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;
254 void ClearSaveDocContext();
256 _HTMLAttrContext( sal_uInt16 nTokn
, sal_uInt16 nPoolId
, const String
& rClass
,
257 sal_Bool bDfltColl
=sal_False
) :
259 pSaveDocContext( 0 ),
262 nTxtFmtColl( nPoolId
),
265 nFirstLineIndent( 0 ),
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 ),
287 nFirstLineIndent( 0 ),
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 )
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
;
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.
398 String aUnknownToken
; // ein gestartetes unbekanntes Token
399 String aBulletGrfs
[MAXLEVEL
];
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
;
422 SwPaM
*pPam
; // SwPosition duerfte doch reichen, oder ??
423 ViewShell
*pActionViewShell
; // ViewShell, an der das StartAction
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
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?
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
;
457 sal_uInt16 nContinue
; // Tiefe der Continue-Aufrufe
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
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.
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;
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;
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();
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
);
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
);
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,
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>
613 void EndPara( sal_Bool bReal
= sal_False
);
614 void NewHeading( int nToken
);
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
);
641 void NewMarquee( HTMLTable
*pCurTable
=0 );
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>
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
);
684 static sal_uInt16
GetNumType( const String
& rStr
, sal_uInt16 eDfltType
);
688 void InsertFieldText();
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
,
703 const SfxItemSet
&rItemSet
,
704 const SvxCSS1PropertyInfo
&rPropInfo
,
705 SfxItemSet
& rFrmSet
);
706 void SetAnchorAndAdjustment( sal_Int16 eVertOri
,
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>
739 void InsertImage(); // htmlgrin.cxx
740 void InsertEmbed(); // htmlplug.cxx
743 void NewObject(); // htmlplug.cxx
745 void EndObject(); // CommandLine mit Applet verkn. (htmlplug.cxx)
747 void InsertApplet(); // htmlplug.cxx
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
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)
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
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
,
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
,
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
);
832 void ResizeDrawObject( SdrObject
* pObj
, SwTwips nWidth
);
834 void RegisterDrawObjectToTable( HTMLTable
*pCurTable
, SdrObject
* pObj
,
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>
846 void InsertTextAreaText( sal_uInt16 nToken
);
850 void InsertSelectOption();
851 void InsertSelectText();
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
);
869 // Eine Section fuer die voruebergende Aufnahme der Tabellen-Ueberschrift
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
);
888 void ParseMoreMetaOptions();
890 sal_Bool
FileDownload( const String
& rURL
, String
& rStr
);
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
,
922 const String
&rClass
);
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
);
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
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();
978 nEndCntnt
= nSttCntnt
;
981 inline void _HTMLAttrContext::SetMargins( sal_uInt16 nLeft
, sal_uInt16 nRight
,
985 nRightMargin
= nRight
;
986 nFirstLineIndent
= nIndent
;
987 bLRSpaceChanged
= sal_True
;
990 inline void _HTMLAttrContext::GetMargins( sal_uInt16
& nLeft
,
992 short& nIndent
) const
994 if( bLRSpaceChanged
)
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
,
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() );