20 #include <com/sun/star/text/VertOrientation.hpp>
29 #include <osl/diagnose.h>
58 bool bSpace = (rInfo.
GetDepth() + m_nDefListDeep) == 0;
59 if( m_pPam->GetPoint()->nContent.GetIndex() )
72 sal_uInt16
nPos = m_xDoc->MakeNumRule( m_xDoc->GetUniqueNumRuleName() );
73 rInfo.
SetNumRule( m_xDoc->GetNumRuleTable()[nPos] );
78 bool bChangeNumFormat =
false;
85 sal_uInt16 nChrFormatPoolId = 0;
86 if( HtmlTokenId::ORDERLIST_ON == nToken )
111 nAbsLSpace = nAbsLSpace + rPrevNumFormat.
GetAbsLSpace();
114 aNumFormat.SetAbsLSpace( nAbsLSpace );
115 aNumFormat.SetFirstLineOffset( nFirstLineIndent );
116 aNumFormat.SetCharFormat( m_pCSS1Parser->GetCharFormatFromPool(nChrFormatPoolId) );
118 bChangeNumFormat =
true;
120 else if( 1 != aNumFormat.GetStart() )
127 OUString
aId, aStyle, aClass, aLang, aDir;
130 sal_uInt16 nWidth=USHRT_MAX, nHeight=USHRT_MAX;
132 for (
size_t i = rHTMLOptions.size();
i; )
137 case HtmlOptionId::ID:
140 case HtmlOptionId::TYPE:
141 if( bNewNumFormat && !rOption.
GetString().isEmpty() )
145 case HtmlTokenId::ORDERLIST_ON:
146 bChangeNumFormat =
true;
153 default: bChangeNumFormat =
false;
157 case HtmlTokenId::UNORDERLIST_ON:
158 aNumFormat.SetBulletChar( rOption.
GetEnum(
159 aHTMLULTypeTable,aNumFormat.GetBulletChar() ) );
160 bChangeNumFormat =
true;
166 case HtmlOptionId::START:
168 sal_uInt16 nStart = o3tl::narrowing<sal_uInt16>(rOption.
GetNumber());
171 aNumFormat.SetStart( nStart );
172 bChangeNumFormat =
true;
180 case HtmlOptionId::STYLE:
183 case HtmlOptionId::CLASS:
186 case HtmlOptionId::LANG:
189 case HtmlOptionId::DIR:
192 case HtmlOptionId::SRC:
196 if( !InternalImgToPrivateURL(aBulletSrc) )
200 case HtmlOptionId::WIDTH:
201 nWidth = o3tl::narrowing<sal_uInt16>(rOption.
GetNumber());
203 case HtmlOptionId::HEIGHT:
204 nHeight = o3tl::narrowing<sal_uInt16>(rOption.
GetNumber());
206 case HtmlOptionId::ALIGN:
213 if( !aBulletSrc.isEmpty() )
224 Size aTwipSz( nWidth, nHeight), *pTwipSz=
nullptr;
225 if( nWidth!=USHRT_MAX && nHeight!=USHRT_MAX )
234 aNumFormat.SetGraphicBrush( &aBrushItem, pTwipSz,
238 m_aBulletGrfs[nLevel] = aBulletSrc;
239 bChangeNumFormat =
true;
242 m_aBulletGrfs[nLevel].clear();
254 if( HasStyleOptions( aStyle, aId, aClass, &aLang, &aDir ) )
256 SfxItemSet aItemSet( m_xDoc->GetAttrPool(), m_pCSS1Parser->GetWhichMap() );
259 if( ParseStyleOptions( aStyle, aId, aClass, aItemSet, aPropInfo, &aLang, &aDir ) )
263 if( aPropInfo.m_bLeftMargin )
268 if( aPropInfo.m_nLeftMargin < 0 &&
269 nAbsLSpace < -aPropInfo.m_nLeftMargin )
271 else if( aPropInfo.m_nLeftMargin > SHRT_MAX ||
272 nAbsLSpace + aPropInfo.m_nLeftMargin > SHRT_MAX )
273 nAbsLSpace = SHRT_MAX;
275 nAbsLSpace = nAbsLSpace + aPropInfo.m_nLeftMargin;
277 aNumFormat.SetAbsLSpace( nAbsLSpace );
278 bChangeNumFormat =
true;
280 if( aPropInfo.m_bTextIndent )
284 aNumFormat.SetFirstLineOffset( nTextIndent );
285 bChangeNumFormat =
true;
287 if( aPropInfo.m_bNumbering )
289 aNumFormat.SetNumberingType(aPropInfo.m_nNumberingType);
290 bChangeNumFormat =
true;
292 if( aPropInfo.m_bBullet )
294 aNumFormat.SetBulletChar( aPropInfo.m_cBulletChar );
295 bChangeNumFormat =
true;
298 aPropInfo.m_bLeftMargin = aPropInfo.m_bTextIndent =
false;
299 if( !aPropInfo.m_bRightMargin )
305 if( bChangeNumFormat )
308 m_xDoc->ChgNumRuleFormats( *rInfo.
GetNumRule() );
309 bChangeNumFormat =
false;
312 DoPositioning(aItemSet, aPropInfo, xCntxt.get());
314 InsertAttrs(aItemSet, aPropInfo, xCntxt.get());
318 if( bChangeNumFormat )
321 m_xDoc->ChgNumRuleFormats( *rInfo.
GetNumRule() );
337 bool bAppend = m_pPam->GetPoint()->nContent.GetIndex() > 0;
344 HasCurrentParaFlys();
347 bool bSpace = (rInfo.
GetDepth() + m_nDefListDeep) == 1;
354 std::unique_ptr<HTMLAttrContext> xCntxt(nToken != HtmlTokenId::NONE ? PopContext(
getOnToken(nToken)) :
nullptr);
357 if( rInfo.
GetDepth()>0 && (nToken == HtmlTokenId::NONE || xCntxt) )
364 bool bChanged =
false;
370 pRefNumFormat = pNumFormat;
372 else if( pRefNumFormat )
394 m_xDoc->ChgNumRuleFormats( *rInfo.
GetNumRule() );
411 bool bSetAttrs =
false;
414 EndContext(xCntxt.get());
419 if( nToken != HtmlTokenId::NONE )
429 sal_uInt8 nLevel = GetNumInfo().GetLevel();
430 OUString
aId, aStyle, aClass, aLang, aDir;
431 sal_uInt16 nStart = HtmlTokenId::LISTHEADER_ON != nToken
432 ? GetNumInfo().GetNodeStartValue( nLevel )
434 if( USHRT_MAX != nStart )
435 GetNumInfo().SetNodeStartValue( nLevel );
438 for (
size_t i = rHTMLOptions.size();
i; )
443 case HtmlOptionId::VALUE:
444 nStart = o3tl::narrowing<sal_uInt16>(rOption.
GetNumber());
446 case HtmlOptionId::ID:
449 case HtmlOptionId::STYLE:
452 case HtmlOptionId::CLASS:
455 case HtmlOptionId::LANG:
458 case HtmlOptionId::DIR:
466 if( m_pPam->GetPoint()->nContent.GetIndex() )
468 m_bNoParSpace =
false;
473 SAL_WARN(
"sw.html",
"No Text-Node at PaM-Position");
477 const bool bCountedInList = nToken != HtmlTokenId::LISTHEADER_ON;
481 OUString aNumRuleName;
484 aNumRuleName = GetNumInfo().GetNumRule()->GetName();
488 aNumRuleName = m_xDoc->GetUniqueNumRuleName();
501 aNumRule.
Set( 0, aNumFormat );
503 m_xDoc->MakeNumRule( aNumRuleName, &aNumRule );
505 OSL_ENSURE( m_nOpenParaToken == HtmlTokenId::NONE,
506 "Now an open paragraph element is lost" );
509 m_nOpenParaToken = nToken;
524 if ( nStart != USHRT_MAX )
531 GetNumInfo().GetNumRule()->SetInvalidRule(
true );
534 if( HasStyleOptions( aStyle, aId, aClass, &aLang, &aDir ) )
536 SfxItemSet aItemSet( m_xDoc->GetAttrPool(), m_pCSS1Parser->GetWhichMap() );
539 if( ParseStyleOptions( aStyle, aId, aClass, aItemSet, aPropInfo, &aLang, &aDir ) )
541 DoPositioning(aItemSet, aPropInfo, xCntxt.get());
542 InsertAttrs(aItemSet, aPropInfo, xCntxt.get());
558 if( nToken == HtmlTokenId::NONE && m_pPam->GetPoint()->nContent.GetIndex() )
562 std::unique_ptr<HTMLAttrContext> xCntxt;
563 auto nPos = m_aContexts.size();
565 while (!xCntxt &&
nPos>m_nContextStMin)
568 switch( nCntxtToken )
570 case HtmlTokenId::LI_ON:
571 case HtmlTokenId::LISTHEADER_ON:
572 if( nToken == HtmlTokenId::NONE || nToken == nCntxtToken )
574 xCntxt = std::move(m_aContexts[
nPos]);
575 m_aContexts.erase( m_aContexts.begin() + nPos );
578 case HtmlTokenId::ORDERLIST_ON:
579 case HtmlTokenId::UNORDERLIST_ON:
580 case HtmlTokenId::MENULIST_ON:
581 case HtmlTokenId::DIRLIST_ON:
583 nPos = m_nContextStMin;
592 EndContext(xCntxt.get());
607 SAL_WARN(
"sw.html",
"No Text-Node at PaM-Position");
611 OSL_ENSURE( GetNumInfo().
GetNumRule(),
"No numbering rule" );
612 const OUString& rName = GetNumInfo().GetNumRule()->GetName();
619 GetNumInfo().GetNumRule()->SetInvalidRule(
false );
void SetNodeNum(sal_uInt8 nLevel)
SvxNumType GetNumberingType() const
sal_uInt8 GetLevel() const
void SetListRestart(bool bRestart)
EnumT GetEnum(const HTMLOptionEnum< EnumT > *pOptEnums, EnumT nDflt=static_cast< EnumT >(0)) const
HtmlOptionId GetToken() const
constexpr HtmlTokenId getOnToken(HtmlTokenId nToken)
bool IsOutline() const
Returns if this text node is an outline.
const SwNumFormat * GetNumFormat(sal_uInt16 i) const
constexpr TypedWhichId< SwNumRuleItem > RES_PARATR_NUMRULE(72)
void NewNumberBulletList(HtmlTokenId nToken)
SVX_NUM_CHARS_UPPER_LETTER
const OUString & GetString() const
const sal_Unicode cBulletChar
Character for lists.
constexpr sal_uInt8 MAXLEVEL
static OutputDevice * GetDefaultDevice()
void SetCountedInList(bool bCounted)
#define HTML_BULLETCHAR_DISC
void SetNodeStartValue(sal_uInt8 nLvl, sal_uInt16 nVal=USHRT_MAX)
#define HTML_NUMBER_BULLET_INDENT
SVX_NUM_CHARS_LOWER_LETTER
sal_uInt16 GetDepth() const
#define OOO_STRING_SVTOOLS_HTML_ULTYPE_disc
const vcl::Font & GetDefBulletFont()
retrieve font used for the default bullet list characters
void SetNumRule(const SwNumRule *pRule)
void NewNumberBulletListItem(HtmlTokenId nToken)
#define OOO_STRING_SVTOOLS_HTML_ULTYPE_square
#define HTML_BULLETCHAR_CIRCLE
HTMLOptionEnum< sal_Int16 > const aHTMLImgVAlignTable[]
sal_uInt32 GetNumber() const
void EndNumberBulletListItem(HtmlTokenId nToken, bool bSetColl)
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
void SetGraphicPos(SvxGraphicPosition eNew)
void EndNumberBulletList(HtmlTokenId nToken=HtmlTokenId::NONE)
const SwNumFormat & Get(sal_uInt16 i) const
SwTextNode is a paragraph in the document model.
void SetAttrListLevel(int nLevel)
Sets the list level of this text node.
void Set(sal_uInt16 i, const SwNumFormat *)
constexpr TypedWhichId< SvxBrushItem > RES_BACKGROUND(105)
bool IsDefBulletFontUserDefined()
determine if default bullet font is user defined
static void SetTextCollAttrs(SwTextFormatColl *pColl, SfxItemSet &rItemSet, SvxCSS1PropertyInfo const &rPropInfo, SwCSS1Parser *pCSS1Parser)
::std::vector< HTMLOption > HTMLOptions
bool IsCountedInList() const
constexpr TypedWhichId< SvxLRSpaceItem > RES_LR_SPACE(91)
#define SAL_WARN(area, stream)
void SetGraphicLink(const OUString &rNew)
void SetNumberingType(SvxNumType nSet)
#define OOO_STRING_SVTOOLS_HTML_ULTYPE_circle
#define HTML_BULLETCHAR_SQUARE
HTMLOptionEnum< sal_UCS4 > const aHTMLULTypeTable[]
SwNumRule * GetNumRule(SwTextFormatColl &rTextFormatColl)
determines the list style, which directly set at the given paragraph style
void SetAttrListRestartValue(SwNumberTree::tSwNumTreeNumber nNum)
#define HTML_NUMBER_BULLET_MARGINLEFT
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
SVL_DLLPUBLIC OUString SmartRel2Abs(INetURLObject const &rTheBaseURIRef, OUString const &rTheRelURIRef, Link< OUString *, bool > const &rMaybeFileHdl=Link< OUString *, bool >(), bool bCheckFileExists=true, bool bIgnoreFragment=false, INetURLObject::EncodeMechanism eEncodeMechanism=INetURLObject::EncodeMechanism::WasEncoded, INetURLObject::DecodeMechanism eDecodeMechanism=INetURLObject::DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)