1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef INCLUDED_SW_SOURCE_FILTER_HTML_SWHTML_HXX
20 #define INCLUDED_SW_SOURCE_FILTER_HTML_SWHTML_HXX
22 #include <config_features.h>
24 #include <sfx2/sfxhtml.hxx>
25 #include <svl/macitem.hxx>
26 #include <editeng/svxenum.hxx>
27 #include <fmtornt.hxx>
28 #include <com/sun/star/drawing/XShape.hpp>
29 #include <com/sun/star/form/XFormComponent.hpp>
40 class SvxMacroTableDtor
;
47 class SwHTMLForm_Impl
;
49 struct SwHTMLFootEndNote_Impl
;
51 struct SwPendingStack
;
52 class SvxCSS1PropertyInfo
;
55 #define HTML_PARSPACE (MM50)
56 #define HTML_CJK_PARSPACE (MM50/2)
57 #define HTML_CTL_PARSPACE (MM50/2)
59 #define HTML_DFLT_IMG_WIDTH (MM50*4)
60 #define HTML_DFLT_IMG_HEIGHT (MM50*2)
62 // ein par Sachen, die man oefter mal braucht
63 extern HTMLOptionEnum aHTMLPAlignTable
[];
64 extern HTMLOptionEnum aHTMLImgHAlignTable
[];
65 extern HTMLOptionEnum aHTMLImgVAlignTable
[];
67 // der Attribut Stack:
70 typedef std::deque
<HTMLAttr
*> HTMLAttrs
;
74 friend class SwHTMLParser
;
75 friend class CellSaveStruct
;
77 SwNodeIndex nSttPara
, nEndPara
;
78 sal_Int32 nSttContent
, nEndContent
;
80 bool bLikePara
: 1; // Attribut ueber dem gesamten Absatz setzen
81 bool bValid
: 1; // ist das Attribut gueltig?
84 HTMLAttr
*pNext
; // noch zu schliessene Attrs mit unterschiedl. Werten
85 HTMLAttr
*pPrev
; // bereits geschlossene aber noch nicht gesetze Attrs
86 HTMLAttr
**ppHead
; // der Listenkopf
88 HTMLAttr( const SwPosition
& rPos
, const SfxPoolItem
& rItem
,
89 HTMLAttr
**pHd
=nullptr );
91 HTMLAttr( const HTMLAttr
&rAttr
, const SwNodeIndex
&rEndPara
,
92 sal_Int32 nEndCnt
, HTMLAttr
**pHd
);
98 HTMLAttr
*Clone( const SwNodeIndex
& rEndPara
, sal_Int32 nEndCnt
) const;
99 void Reset( const SwNodeIndex
& rSttPara
, sal_Int32 nSttCnt
,
101 inline void SetStart( const SwPosition
& rPos
);
103 sal_uInt32
GetSttParaIdx() const { return nSttPara
.GetIndex(); }
104 sal_uInt32
GetEndParaIdx() const { return nEndPara
.GetIndex(); }
106 const SwNodeIndex
& GetSttPara() const { return nSttPara
; }
107 const SwNodeIndex
& GetEndPara() const { return nEndPara
; }
109 sal_Int32
GetSttCnt() const { return nSttContent
; }
110 sal_Int32
GetEndCnt() const { return nEndContent
; }
112 bool IsLikePara() const { return bLikePara
; }
113 void SetLikePara() { bLikePara
= true; }
115 SfxPoolItem
& GetItem() { return *pItem
; }
116 const SfxPoolItem
& GetItem() const { return *pItem
; }
118 HTMLAttr
*GetNext() const { return pNext
; }
119 void InsertNext( HTMLAttr
*pNxt
) { pNext
= pNxt
; }
121 HTMLAttr
*GetPrev() const { return pPrev
; }
122 void InsertPrev( HTMLAttr
*pPrv
);
123 void ClearPrev() { pPrev
= nullptr; }
125 void SetHead( HTMLAttr
**ppHd
) { ppHead
= ppHd
; }
127 // Beim Setzen von Attributen aus Vorlagen kann es passieren,
128 // dass Attribute doch nicht mehr gesetzt werden sollen. Die zu loeschen
129 // waere sehr aufwendig, da man nicht so genau weiss, wo sie eingekettet
130 // sind. Sie werden deshalb einfach invalidiert und erst beim naechsten
131 // SetAttr_() geloescht.
132 void Invalidate() { bValid
= false; }
135 // Tabelle der Attribute: Hier ist die Reihenfolge wichtig: Die Attribute
136 // vorne in der Tabelle werden in EndAllAttrs auch zuerst gesetzt.
140 *pKeep
, // Frame-Attribute
146 *pLRSpace
, // Absatz-Attribute
156 *pCharFormats
, // Text-Attribute
159 *pBold
, // Zeichen-Attribute
177 *pKerning
, // (nur fuer SPACER)
178 *pCharBrush
, // Zeichen-Hintergrund
186 class HTMLAttrContext_SaveDoc
;
188 enum SwHTMLAppendMode
{
189 AM_NORMAL
, // keine Absatz-Abstand-Behandlung
190 AM_NOSPACE
, // Abstand hart auf 0cm setzen
191 AM_SPACE
, // Abstand hart auf 0.5cm setzen
192 AM_SOFTNOSPACE
, // Abstand nicht setzen aber 0cm merken
193 AM_NONE
// gar kein Append
196 class HTMLAttrContext
198 HTMLAttrs aAttrs
; // die in dem Kontext gestarteten Attribute
200 OUString aClass
; // die Klasse des Kontexts
202 HTMLAttrContext_SaveDoc
*pSaveDocContext
;
203 SfxItemSet
*pFrameItemSet
;
205 sal_uInt16 nToken
; // das Token, zu dem der Kontext gehoehrt
207 sal_uInt16 nTextFormatColl
; // eine in dem Kontext begonnene Vorlage oder 0
209 sal_uInt16 nLeftMargin
; // ein veraenderter linker Rand
210 sal_uInt16 nRightMargin
; // ein veraenderter rechter Rand
211 sal_uInt16 nFirstLineIndent
; // ein veraenderter Erstzeilen-Einzug
213 sal_uInt16 nUpperSpace
;
214 sal_uInt16 nLowerSpace
;
216 SwHTMLAppendMode eAppend
;
218 bool bLRSpaceChanged
: 1;// linker/rechtr Rand, Einzug veraendert?
219 bool bULSpaceChanged
: 1;// oberer/unterer Rand veraendert?
220 bool bDfltTextFormatColl
: 1;// nTextFormatColl ist nur ein default
221 bool bSpansSection
: 1; // Der Kontext spannt eine SwSection auf
222 bool bPopStack
: 1; // Oberhalb liegende Stack-Elemente entf.
223 bool bFinishPREListingXMP
: 1;
224 bool bRestartPRE
: 1;
225 bool bRestartXMP
: 1;
226 bool bRestartListing
: 1;
229 void ClearSaveDocContext();
231 HTMLAttrContext( sal_uInt16 nTokn
, sal_uInt16 nPoolId
, const OUString
& rClass
,
232 bool bDfltColl
=false ) :
234 pSaveDocContext( nullptr ),
235 pFrameItemSet( nullptr ),
237 nTextFormatColl( nPoolId
),
240 nFirstLineIndent( 0 ),
244 bLRSpaceChanged( false ),
245 bULSpaceChanged( false ),
246 bDfltTextFormatColl( bDfltColl
),
247 bSpansSection( false ),
249 bFinishPREListingXMP( false ),
250 bRestartPRE( false ),
251 bRestartXMP( false ),
252 bRestartListing( false )
255 explicit HTMLAttrContext( sal_uInt16 nTokn
) :
256 pSaveDocContext( nullptr ),
257 pFrameItemSet( nullptr ),
259 nTextFormatColl( 0 ),
262 nFirstLineIndent( 0 ),
266 bLRSpaceChanged( false ),
267 bULSpaceChanged( false ),
268 bDfltTextFormatColl( false ),
269 bSpansSection( false ),
271 bFinishPREListingXMP( false ),
272 bRestartPRE( false ),
273 bRestartXMP( false ),
274 bRestartListing( false )
277 ~HTMLAttrContext() { ClearSaveDocContext(); delete pFrameItemSet
; }
279 sal_uInt16
GetToken() const { return nToken
; }
281 sal_uInt16
GetTextFormatColl() const { return bDfltTextFormatColl
? 0 : nTextFormatColl
; }
282 sal_uInt16
GetDfltTextFormatColl() const { return bDfltTextFormatColl
? nTextFormatColl
: 0; }
284 const OUString
& GetClass() const { return aClass
; }
286 inline void SetMargins( sal_uInt16 nLeft
, sal_uInt16 nRight
, short nIndent
);
288 inline bool IsLRSpaceChanged() const { return bLRSpaceChanged
; }
289 inline void GetMargins( sal_uInt16
& nLeft
, sal_uInt16
& nRight
,
290 short &nIndent
) const;
292 inline void SetULSpace( sal_uInt16 nUpper
, sal_uInt16 nLower
);
293 inline bool IsULSpaceChanged() const { return bULSpaceChanged
; }
294 inline void GetULSpace( sal_uInt16
& rUpper
, sal_uInt16
& rLower
) const;
296 bool HasAttrs() const { return !aAttrs
.empty(); }
297 const HTMLAttrs
& GetAttrs() const { return aAttrs
; }
298 HTMLAttrs
& GetAttrs() { return aAttrs
; }
300 void SetSpansSection( bool bSet
) { bSpansSection
= bSet
; }
301 bool GetSpansSection() const { return bSpansSection
; }
303 void SetPopStack( bool bSet
) { bPopStack
= bSet
; }
304 bool GetPopStack() const { return bPopStack
; }
306 bool HasSaveDocContext() const { return pSaveDocContext
!=nullptr; }
307 HTMLAttrContext_SaveDoc
*GetSaveDocContext( bool bCreate
=false );
309 const SfxItemSet
*GetFrameItemSet() const { return pFrameItemSet
; }
310 SfxItemSet
*GetFrameItemSet( SwDoc
*pCreateDoc
);
312 void SetFinishPREListingXMP( bool bSet
) { bFinishPREListingXMP
= bSet
; }
313 bool IsFinishPREListingXMP() const { return bFinishPREListingXMP
; }
315 void SetRestartPRE( bool bSet
) { bRestartPRE
= bSet
; }
316 bool IsRestartPRE() const { return bRestartPRE
; }
318 void SetRestartXMP( bool bSet
) { bRestartXMP
= bSet
; }
319 bool IsRestartXMP() const { return bRestartXMP
; }
321 void SetRestartListing( bool bSet
) { bRestartListing
= bSet
; }
322 bool IsRestartListing() const { return bRestartListing
; }
324 void SetAppendMode( SwHTMLAppendMode eMode
) { eAppend
= eMode
; }
325 SwHTMLAppendMode
GetAppendMode() const { return eAppend
; }
328 typedef std::vector
<HTMLAttrContext
*> HTMLAttrContexts
;
332 class SwHTMLNumRuleInfo
;
334 typedef std::vector
<std::unique_ptr
<ImageMap
>> ImageMaps
;
336 enum class HtmlContextFlags
{
337 ProtectStack
= 0x0001,
339 KeepNumrule
= 0x0004,
343 MultiColMask
= StripPara
| KeepNumrule
| KeepAttrs
// for headers, footers or footnotes
347 template<> struct typed_flags
<HtmlContextFlags
> : is_typed_flags
<HtmlContextFlags
, 0x03f> {};
350 enum class HtmlFrameFormatFlags
{
358 template<> struct typed_flags
<HtmlFrameFormatFlags
> : is_typed_flags
<HtmlFrameFormatFlags
, 0x0f> {};
361 class SwHTMLParser
: public SfxHTMLParser
, public SwClient
363 friend class SectionSaveStruct
;
364 friend class CellSaveStruct
;
365 friend class CaptionSaveStruct
;
367 OUString m_aPathToFile
;
369 OUString m_aBasicLib
;
370 OUString m_aBasicModule
;
371 OUString m_aScriptSource
; // Inhalt des aktuellen Script-Blocks
372 OUString m_aScriptType
; // Type des gelesenen Scripts (StarBasic/VB/JAVA)
373 OUString m_aScriptURL
; // URL eines Scripts
374 OUString m_aStyleSource
; // Inhalt des aktuellen Style-Sheets
375 OUString m_aContents
; // Text des akteullen Marquee, Feldes etc.
377 OUString m_aUnknownToken
; // ein gestartetes unbekanntes Token
378 OUString m_aBulletGrfs
[MAXLEVEL
];
381 std::vector
<sal_uInt16
> m_aBaseFontStack
; // Stack fuer <BASEFONT>
382 // Bit 0-2: Fontgroesse (1-7)
383 std::vector
<sal_uInt16
> m_aFontStack
; // Stack fuer <FONT>, <BIG>, <SMALL>
384 // Bit 0-2: Fontgroesse (1-7)
385 // Bit 15: Fontfarbe wurde gesetzt
387 HTMLAttrs m_aSetAttrTab
;// "geschlossene", noch nicht gesetzte Attr.
388 HTMLAttrs m_aParaAttrs
; // vorlauefige Absatz-Attribute
389 HTMLAttrTable m_aAttrTab
; // "offene" Attribute
390 HTMLAttrContexts m_aContexts
;// der aktuelle Attribut/Token-Kontext
391 std::vector
<SwFrameFormat
*> m_aMoveFlyFrames
;// Fly-Frames, the anchor is moved
392 std::deque
<sal_Int32
> m_aMoveFlyCnts
;// and the Content-Positions
394 SwApplet_Impl
*m_pAppletImpl
; // das aktuelle Applet
396 SwCSS1Parser
*m_pCSS1Parser
; // der Style-Sheet-Parser
397 SwHTMLNumRuleInfo
*m_pNumRuleInfo
;
398 SwPendingStack
*m_pPendStack
;
401 SwPaM
*m_pPam
; // SwPosition duerfte doch reichen, oder ??
402 SwViewShell
*m_pActionViewShell
; // SwViewShell, an der das StartAction
404 SwNodeIndex
*m_pSttNdIdx
;
406 HTMLTable
*m_pTable
; // die aktuelle "auesserste" Tabelle
407 SwHTMLForm_Impl
*m_pFormImpl
;// die aktuelle Form
408 SdrObject
*m_pMarquee
; // aktuelles Marquee
409 SwField
*m_pField
; // aktuelles Feld
410 ImageMap
*m_pImageMap
; // aktuelle Image-Map
411 ImageMaps
*m_pImageMaps
; ///< all Image-Maps that have been read
412 SwHTMLFootEndNote_Impl
*m_pFootEndNoteImpl
;
414 Size m_aHTMLPageSize
; // die Seitengroesse der HTML-Vorlage
416 sal_uInt32 m_aFontHeights
[7]; // die Font-Hoehen 1-7
417 sal_uInt32 m_nScriptStartLineNr
; // Zeilennummer eines Script-Blocks
418 ImplSVEvent
* m_nEventId
;
420 sal_uInt16 m_nBaseFontStMin
;
421 sal_uInt16 m_nFontStMin
;
422 sal_uInt16 m_nDefListDeep
;
423 sal_uInt16 m_nFontStHeadStart
; // Elemente im Font-Stack bei <Hn>
424 sal_uInt16 m_nSBModuleCnt
; // Zaehler fuer Basic-Module
425 sal_uInt16 m_nMissingImgMaps
; // Wie viele Image-Maps fehlen noch?
427 size_t m_nContextStMin
; // Untergrenze fuer PopContext
428 size_t m_nContextStAttrMin
; // Untergrenze fuer Attributierung
429 sal_uInt16 m_nSelectEntryCnt
; // Number of entries in the actual listbox
430 sal_uInt16 m_nOpenParaToken
; // ein geoeffnetes Absatz-Element
432 enum JumpToMarks
{ JUMPTO_NONE
, JUMPTO_MARK
, JUMPTO_TABLE
, JUMPTO_FRAME
,
433 JUMPTO_REGION
, JUMPTO_GRAPHIC
} m_eJumpTo
;
436 sal_uInt16 m_nContinue
; // depth of Continue calls
439 SvxAdjust m_eParaAdjust
; // Ausrichtung des aktuellen Absatz
440 HTMLScriptLanguage m_eScriptLang
; // die aktuelle Script-Language
442 bool m_bOldIsHTMLMode
: 1; // War's mal ein HTML-Dokument?
444 bool m_bDocInitalized
: 1; // Dokument bzw. Shell wurden initialisiert
445 // Flag um doppeltes init durch Rekursion
447 bool m_bViewCreated
: 1; // die View wurde schon erzeugt (asynchron)
448 bool m_bSetModEnabled
: 1;
450 bool m_bInFloatingFrame
: 1; // Wir sind in einen Floating Frame
452 bool m_bKeepUnknown
: 1; // unbekannte/nicht unterstuetze Tokens beh.
454 bool m_bCallNextToken
: 1; // In Tabellen: NextToken in jedem Fall rufen
455 bool m_bIgnoreRawData
: 1; // Inhalt eines Scripts/Styles ignorieren.
456 bool m_bLBEntrySelected
: 1; // Ist der aktuelle Listbox-Eintrag selekt.
457 bool m_bTAIgnoreNewPara
: 1; // naechstes LF in TextArea ignorieren?
458 bool m_bFixMarqueeWidth
: 1; // Groesse einer Laufschrift anpassen?
460 bool m_bUpperSpace
: 1; // obererer Absatz-Abstand wird benoetigt
461 bool m_bNoParSpace
: 1;
464 bool m_bInNoEmbed
: 1; // Wir sind in einem NOEMBED-Bereich
466 bool m_bInTitle
: 1; // Wir sind im Titel
468 bool m_bChkJumpMark
: 1; // springe ggfs. zu einem vorgegebenem Mark
469 bool m_bUpdateDocStat
: 1;
470 bool m_bFixSelectWidth
: 1; // Breite eines Selects neu setzen?
471 bool m_bFixSelectHeight
: 1; // Breite eines Selects neu setzen?
472 bool m_bTextArea
: 1;
475 bool m_bInFootEndNoteAnchor
: 1;
476 bool m_bInFootEndNoteSymbol
: 1;
477 bool m_bIgnoreHTMLComments
: 1;
478 bool m_bRemoveHidden
: 1; // the filter implementation might set the hidden flag
480 bool m_isInTableStructure
;
482 /// the names corresponding to the DOCINFO field subtypes INFO[1-4]
483 OUString m_InfoNames
[4];
485 SfxViewFrame
* m_pTempViewFrame
;
487 void DeleteFormImpl();
489 void DocumentDetected();
492 SwViewShell
*CallStartAction( SwViewShell
*pVSh
= nullptr, bool bChkPtr
= true );
493 SwViewShell
*CallEndAction( bool bChkAction
= false, bool bChkPtr
= true );
494 SwViewShell
*CheckActionViewShell();
496 DECL_LINK( AsyncCallback
, void*, void );
498 // Attribute am Dok setzen
499 void SetAttr_( bool bChkEnd
, bool bBeforeTable
, HTMLAttrs
*pPostIts
);
500 inline void SetAttr( bool bChkEnd
= true, bool bBeforeTable
= false,
501 HTMLAttrs
*pPostIts
= nullptr )
503 if( !m_aSetAttrTab
.empty() || !m_aMoveFlyFrames
.empty() )
504 SetAttr_( bChkEnd
, bBeforeTable
, pPostIts
);
507 HTMLAttr
**GetAttrTabEntry( sal_uInt16 nWhich
);
509 // Einen neuen Textknoten an PaM-Position anlegen
510 bool AppendTextNode( SwHTMLAppendMode eMode
=AM_NORMAL
, bool bUpdateNum
=true );
513 // Ein Attribut beginnen/beenden
514 // ppDepAttr gibt einen Attribut-Tabellen-Eintrag an, dessen Attribute
515 // gesetzt sein muessen, bevor das Attribut beendet werden darf
516 void NewAttr( HTMLAttr
**ppAttr
, const SfxPoolItem
& rItem
);
517 bool EndAttr( HTMLAttr
*pAttr
, bool bChkEmpty
=true );
518 void DeleteAttr( HTMLAttr
* pAttr
);
520 void EndContextAttrs( HTMLAttrContext
*pContext
);
521 void SaveAttrTab( HTMLAttrTable
& rNewAttrTab
);
522 void SplitAttrTab( const SwPosition
& rNewPos
);
523 void SplitAttrTab( HTMLAttrTable
& rNewAttrTab
, bool bMoveEndBack
);
524 void RestoreAttrTab( HTMLAttrTable
& rNewAttrTab
);
525 void InsertAttr( const SfxPoolItem
& rItem
, bool bInsAtStart
);
526 void InsertAttrs( HTMLAttrs
& rAttrs
);
528 bool DoPositioning( SfxItemSet
&rItemSet
,
529 SvxCSS1PropertyInfo
&rPropInfo
,
530 HTMLAttrContext
*pContext
);
531 bool CreateContainer( const OUString
& rClass
, SfxItemSet
&rItemSet
,
532 SvxCSS1PropertyInfo
&rPropInfo
,
533 HTMLAttrContext
*pContext
);
534 bool EndSection( bool bLFStripped
=false );
536 void InsertAttrs( SfxItemSet
&rItemSet
, SvxCSS1PropertyInfo
&rPropInfo
,
537 HTMLAttrContext
*pContext
, bool bCharLvl
=false );
538 void InsertAttr( HTMLAttr
**ppAttr
, const SfxPoolItem
& rItem
,
539 HTMLAttrContext
*pCntxt
);
540 void SplitPREListingXMP( HTMLAttrContext
*pCntxt
);
541 void FixHeaderFooterDistance( bool bHeader
, const SwPosition
*pOldPos
);
543 void EndContext( HTMLAttrContext
*pContext
);
544 void ClearContext( HTMLAttrContext
*pContext
);
546 const SwFormatColl
*GetCurrFormatColl() const;
548 SwTwips
GetCurrentBrowseWidth();
550 SwHTMLNumRuleInfo
& GetNumInfo() { return *m_pNumRuleInfo
; }
551 // add parameter <bCountedInList>
552 void SetNodeNum( sal_uInt8 nLevel
);
554 // Verwalten von Absatz-Vorlagen
556 // die Vorlagen auf dem Stack bzw. deren Attribute setzen
557 void SetTextCollAttrs( HTMLAttrContext
*pContext
= nullptr );
559 void InsertParaAttrs( const SfxItemSet
& rItemSet
);
561 // Verwalten des Attribut-Kontexts
563 // aktuellen Kontext merken
564 inline void PushContext( HTMLAttrContext
*pCntxt
);
566 // den obersten/spezifizierten Kontext holen, aber nicht ausserhalb
567 // des Kontexts mit Token nLimit suchen. Wenn bRemove gesetzt ist,
569 HTMLAttrContext
*PopContext( sal_uInt16 nToken
=0 );
571 bool GetMarginsFromContext( sal_uInt16
&nLeft
, sal_uInt16
&nRight
, short& nIndent
,
572 bool bIgnoreCurrent
=false ) const;
573 void GetMarginsFromContextWithNumBul( sal_uInt16
&nLeft
, sal_uInt16
&nRight
,
574 short& nIndent
) const;
575 void GetULSpaceFromContext( sal_uInt16
&rUpper
, sal_uInt16
&rLower
) const;
577 void MovePageDescAttrs( SwNode
*pSrcNd
, sal_uLong nDestIdx
, bool bFormatBreak
);
579 // Behandlung von Tags auf Absatz-Ebene
581 // <P> und <H1> bis <H6>
583 void EndPara( bool bReal
= false );
584 void NewHeading( int nToken
);
587 // <ADDRESS>, <BLOCKQUOTE> und <PRE>
588 void NewTextFormatColl( int nToken
, sal_uInt16 nPoolId
);
589 void EndTextFormatColl( int nToken
);
591 // <DIV> und <CENTER>
592 void NewDivision( int nToken
);
593 void EndDivision( int nToken
);
595 // Fly-Frames einfuegen/verlassen
596 void InsertFlyFrame( const SfxItemSet
& rItemSet
, HTMLAttrContext
*pCntxt
,
597 const OUString
& rId
);
599 void SaveDocContext( HTMLAttrContext
*pCntxt
, HtmlContextFlags nFlags
,
600 const SwPosition
*pNewPos
);
601 void RestoreDocContext( HTMLAttrContext
*pCntxt
);
603 // alle durch <DIV> aufgespannten Bereiche verlassen
604 bool EndSections( bool bLFStripped
);
607 void NewMultiCol( sal_uInt16 columnsFromCss
=0 );
610 void NewMarquee( HTMLTable
*pCurTable
=nullptr );
612 void InsertMarqueeText();
614 // Behandluung von Listen
616 // Numerierungs <OL> und Aufzaehlungs-Listen <UL> mit <LI>
617 void NewNumBulList( int nToken
);
618 void EndNumBulList( int nToken
=0 );
619 void NewNumBulListItem( int nToken
);
620 void EndNumBulListItem( int nToken
, bool bSetColl
,
621 bool bLastPara
=false );
623 // Definitions-Listen <DL> mit <DD>, <DT>
626 void NewDefListItem( int nToken
);
627 void EndDefListItem( int nToken
=0, bool bLastPara
=false );
629 // Behandlung von Tags auf Zeichen-Ebene
631 // Tags wie <B>, <I> etc behandeln, die ein bestimmtes Attribut
632 // an und ausschalten, oder die wie SPAN nur Attribute aus Styles holen
633 void NewStdAttr( int nToken
);
634 void NewStdAttr( int nToken
,
635 HTMLAttr
**ppAttr
, const SfxPoolItem
& rItem
,
636 HTMLAttr
**ppAttr2
=nullptr, const SfxPoolItem
*pItem2
=nullptr,
637 HTMLAttr
**ppAttr3
=nullptr, const SfxPoolItem
*pItem3
=nullptr );
638 void EndTag( int nToken
);
640 // Font-Attribute behandeln
641 void NewBasefontAttr(); // fuer <BASEFONT>
642 void EndBasefontAttr();
643 void NewFontAttr( int nToken
); // fuer <FONT>, <BIG> und <SMALL>
644 void EndFontAttr( int nToken
);
646 // Tags, die durch Zeichenvorlagen realisiert werden
647 void NewCharFormat( int nToken
);
651 static sal_uInt16
GetNumType( const OUString
& rStr
, sal_uInt16 eDfltType
);
655 void InsertFieldText();
660 // Einfuegen von Grafiken, Plugins und Applets
662 // Image-Maps suchen und mit Grafik-Nodes verbinden
663 ImageMap
*FindImageMap( const OUString
& rURL
) const;
664 void ConnectImageMaps();
666 // Verankerung eines Fly-Frames bestimmen und entsprechende Attribute
667 // in den Attrset setzen (htmlgrin.cxx)
668 void SetAnchorAndAdjustment( sal_Int16 eVertOri
,
670 const SfxItemSet
&rItemSet
,
671 const SvxCSS1PropertyInfo
&rPropInfo
,
672 SfxItemSet
& rFrameSet
);
673 void SetAnchorAndAdjustment( sal_Int16 eVertOri
,
675 SfxItemSet
& rFrameSet
,
676 bool bDontAppend
=false );
677 void SetAnchorAndAdjustment( const SfxItemSet
&rItemSet
,
678 const SvxCSS1PropertyInfo
&rPropInfo
,
679 SfxItemSet
&rFrameItemSet
);
681 static void SetFrameFormatAttrs( SfxItemSet
&rItemSet
, SvxCSS1PropertyInfo
&rPropInfo
,
682 HtmlFrameFormatFlags nFlags
, SfxItemSet
&rFrameItemSet
);
684 // Frames anlegen und Auto-gebundene Rahmen registrieren
685 void RegisterFlyFrame( SwFrameFormat
*pFlyFrame
);
687 // Die Groesse des Fly-Frames an die Vorgaben und Gegebenheiten anpassen
688 // (nicht fuer Grafiken, deshalb htmlplug.cxx)
689 static void SetFixSize( const Size
& rPixSize
, const Size
& rTwipDfltSize
,
690 bool bPrcWidth
, bool bPrcHeight
,
691 SfxItemSet
&rItemSet
, SvxCSS1PropertyInfo
&rPropInfo
,
692 SfxItemSet
& rFlyItemSet
);
693 static void SetVarSize( SfxItemSet
&rItemSet
, SvxCSS1PropertyInfo
&rPropInfo
,
694 SfxItemSet
& rFlyItemSet
, SwTwips nDfltWidth
=MINLAY
,
695 sal_uInt8 nDltPrcWidth
=0 );
696 static void SetSpace( const Size
& rPixSpace
, SfxItemSet
&rItemSet
,
697 SvxCSS1PropertyInfo
&rPropInfo
, SfxItemSet
& rFlyItemSet
);
699 sal_uInt16
IncGrfsThatResizeTable();
701 void GetDefaultScriptType( ScriptType
& rType
,
702 OUString
& rTypeStr
) const;
704 // die eigentlichen Einfuege-Methoden fuer <IMG>, <EMBED> und <APPLET>
706 void InsertImage(); // htmlgrin.cxx
707 void InsertEmbed(); // htmlplug.cxx
709 #if HAVE_FEATURE_JAVA
710 void NewObject(); // htmlplug.cxx
712 void EndObject(); // CommandLine mit Applet verkn. (htmlplug.cxx)
713 #if HAVE_FEATURE_JAVA
714 void InsertApplet(); // htmlplug.cxx
716 void EndApplet(); // CommandLine mit Applet verkn. (htmlplug.cxx)
717 void InsertParam(); // htmlplug.cxx
719 void InsertFloatingFrame();
721 // <BODY>-Tag auswerten: Hintergrund-Grafiken und -Farben setzen (htmlgrin.cxx)
722 void InsertBodyOptions();
724 // Einfuegen von Links und Bookmarks (htmlgrin.cxx)
726 // <A>-Tag auswerten: einen Link bzw. eine Bookmark einfuegen
730 // eine Bookmark einfuegen
731 void InsertBookmark( const OUString
& rName
);
733 void InsertCommentText( const sal_Char
*pTag
);
734 void InsertComment( const OUString
& rName
, const sal_Char
*pTag
= nullptr );
736 // sind im aktuellen Absatz Bookmarks vorhanden?
737 bool HasCurrentParaBookmarks( bool bIgnoreStack
=false ) const;
739 // Einfuegen von Script/Basic-Elementen
741 // das zueletzt gelsene Basic-Modul parsen (htmlbas.cxx)
745 void AddScriptSource();
747 // ein Event in die SFX-Konfiguation eintragen (htmlbas.cxx)
748 void InsertBasicDocEvent( const OUString
& aEventName
, const OUString
& rName
,
749 ScriptType eScrType
, const OUString
& rScrType
);
757 static inline bool HasStyleOptions( const OUString
&rStyle
, const OUString
&rId
,
758 const OUString
&rClass
, const OUString
*pLang
=nullptr,
759 const OUString
*pDir
=nullptr );
760 bool ParseStyleOptions( const OUString
&rStyle
, const OUString
&rId
,
761 const OUString
&rClass
, SfxItemSet
&rItemSet
,
762 SvxCSS1PropertyInfo
&rPropInfo
,
763 const OUString
*pLang
=nullptr, const OUString
*pDir
=nullptr );
765 // Inserting Controls and Forms (htmlform.cxx)
767 // Insert draw object into document
768 void InsertDrawObject( SdrObject
* pNewDrawObj
, const Size
& rSpace
,
771 SfxItemSet
& rCSS1ItemSet
,
772 SvxCSS1PropertyInfo
& rCSS1PropInfo
);
773 css::uno::Reference
< css::drawing::XShape
> InsertControl(
774 const css::uno::Reference
< css::form::XFormComponent
> & rFormComp
,
775 const css::uno::Reference
< css::beans::XPropertySet
> & rFCompPropSet
,
779 SfxItemSet
& rCSS1ItemSet
,
780 SvxCSS1PropertyInfo
& rCSS1PropInfo
,
781 const SvxMacroTableDtor
& rMacroTable
,
782 const std::vector
<OUString
>& rUnoMacroTable
,
783 const std::vector
<OUString
>& rUnoMacroParamTable
,
784 bool bSetPropSet
= true,
785 bool bHidden
= false );
786 void SetControlSize( const css::uno::Reference
< css::drawing::XShape
> & rShape
, const Size
& rTextSz
,
787 bool bMinWidth
, bool bMinHeight
);
790 static void ResizeDrawObject( SdrObject
* pObj
, SwTwips nWidth
);
792 static void RegisterDrawObjectToTable( HTMLTable
*pCurTable
, SdrObject
* pObj
,
795 void NewForm( bool bAppend
=true );
796 void EndForm( bool bAppend
=true );
798 // Insert methods for <INPUT>, <TEXTAREA> und <SELECT>
802 void InsertTextAreaText( sal_uInt16 nToken
);
806 void InsertSelectOption();
807 void InsertSelectText();
810 // Inserting tables (htmltab.cxx)
813 // Insert box content after the given node
814 const SwStartNode
*InsertTableSection( const SwStartNode
*pPrevStNd
);
816 // Insert box content at the end of the table containing the PaM
817 // and move the PaM into the cell
818 const SwStartNode
*InsertTableSection( sal_uInt16 nPoolId
);
820 // Insert methods for various table tags
821 HTMLTableCnts
*InsertTableContents( bool bHead
);
824 // Create a section for the temporary storage of the table caption
825 SwStartNode
*InsertTempTableCaptionSection();
827 void BuildTableCell( HTMLTable
*pTable
, bool bReadOptions
, bool bHead
);
828 void BuildTableRow( HTMLTable
*pTable
, bool bReadOptions
,
829 SvxAdjust eGrpAdjust
, sal_Int16 eVertOri
);
830 void BuildTableSection( HTMLTable
*pTable
, bool bReadOptions
, bool bHead
);
831 void BuildTableColGroup( HTMLTable
*pTable
, bool bReadOptions
);
832 void BuildTableCaption( HTMLTable
*pTable
);
833 HTMLTable
*BuildTable( SvxAdjust eCellAdjust
,
834 bool bIsParentHead
= false,
835 bool bHasParentSection
=true,
836 bool bHasToFlow
= false );
840 void ParseMoreMetaOptions();
842 bool FileDownload( const OUString
& rURL
, OUString
& rStr
);
845 void InsertIDOption();
846 void InsertLineBreak();
847 void InsertHorzRule();
849 void FillEndNoteInfo( const OUString
& rContent
);
850 void FillFootNoteInfo( const OUString
& rContent
);
851 void InsertFootEndNote( const OUString
& rName
, bool bEndNote
, bool bFixed
);
852 void FinishFootEndNote();
853 void InsertFootEndNoteText();
854 SwNodeIndex
*GetFootEndNoteSection( const OUString
& rName
);
855 void DeleteFootEndNoteImpl();
857 sal_Int32
StripTrailingLF();
859 // Remove empty paragraph at the PaM position
860 void StripTrailingPara();
862 // Are there fly frames in the current paragraph?
863 bool HasCurrentParaFlys( bool bNoSurroundOnly
= false,
864 bool bSurroundOnly
= false ) const;
866 public: // used in tables
868 // Create brush item (with new) or 0
869 SvxBrushItem
* CreateBrushItem( const Color
*pColor
,
870 const OUString
&rImageURL
,
871 const OUString
&rStyle
,
873 const OUString
&rClass
);
876 // Executed for each token recognized by CallParser
877 virtual void NextToken( int nToken
) override
;
878 virtual ~SwHTMLParser() override
;
880 // If the document is removed, remove the parser as well
881 virtual void Modify( const SfxPoolItem
* pOld
, const SfxPoolItem
*pNew
) override
;
883 virtual void AddMetaUserDefined( OUString
const & i_rMetaName
) override
;
887 SwHTMLParser( SwDoc
* pD
, SwPaM
& rCursor
, SvStream
& rIn
,
888 const OUString
& rFileName
,
889 const OUString
& rBaseURL
,
891 SfxMedium
* pMed
= nullptr, bool bReadUTF8
= false,
892 bool bIgnoreHTMLComments
= false );
894 virtual SvParserState
CallParser() override
;
896 static sal_uInt16
ToTwips( sal_uInt16 nPixel
);
898 // for reading asynchronously from SvStream
899 virtual void Continue( int nToken
) override
;
901 virtual bool ParseMetaOptions( const css::uno::Reference
<css::document::XDocumentProperties
>&,
902 SvKeyValueIterator
* ) override
;
905 struct SwPendingStackData
907 virtual ~SwPendingStackData() {}
910 struct SwPendingStack
913 SwPendingStackData
* pData
;
914 SwPendingStack
* pNext
;
916 SwPendingStack( int nTkn
, SwPendingStack
* pNxt
)
917 : nToken( nTkn
), pData( nullptr ), pNext( pNxt
)
921 inline void HTMLAttr::SetStart( const SwPosition
& rPos
)
923 nSttPara
= rPos
.nNode
;
924 nSttContent
= rPos
.nContent
.GetIndex();
926 nEndContent
= nSttContent
;
929 inline void HTMLAttrContext::SetMargins( sal_uInt16 nLeft
, sal_uInt16 nRight
,
933 nRightMargin
= nRight
;
934 nFirstLineIndent
= nIndent
;
935 bLRSpaceChanged
= true;
938 inline void HTMLAttrContext::GetMargins( sal_uInt16
& nLeft
,
940 short& nIndent
) const
942 if( bLRSpaceChanged
)
945 nRight
= nRightMargin
;
946 nIndent
= nFirstLineIndent
;
950 inline void HTMLAttrContext::SetULSpace( sal_uInt16 nUpper
, sal_uInt16 nLower
)
952 nUpperSpace
= nUpper
;
953 nLowerSpace
= nLower
;
954 bULSpaceChanged
= true;
957 inline void HTMLAttrContext::GetULSpace( sal_uInt16
& rUpper
,
958 sal_uInt16
& rLower
) const
960 if( bULSpaceChanged
)
962 rUpper
= nUpperSpace
;
963 rLower
= nLowerSpace
;
967 inline bool SwHTMLParser::HasStyleOptions( const OUString
&rStyle
,
969 const OUString
&rClass
,
970 const OUString
*pLang
,
971 const OUString
*pDir
)
973 return !rStyle
.isEmpty() || !rId
.isEmpty() || !rClass
.isEmpty() ||
974 (pLang
&& !pLang
->isEmpty()) || (pDir
&& !pDir
->isEmpty());
977 inline void SwHTMLParser::PushContext( HTMLAttrContext
*pCntxt
)
979 m_aContexts
.push_back( pCntxt
);
984 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */