21 #include <com/sun/star/i18n/ScriptType.hpp>
22 #include <com/sun/star/i18n/XBreakIterator.hpp>
74 #include <rtl/character.hxx>
75 #include <osl/diagnose.h>
91 {
nullptr,
nullptr, SvMacroItemId::NONE }
123 if( m_nDefListLvl < nNewLvl )
131 ChangeParaToken( HtmlTokenId::NONE );
134 for( sal_uInt16
i=m_nDefListLvl;
i<nNewLvl;
i++ )
140 m_bLFPossible =
true;
143 else if( m_nDefListLvl > nNewLvl )
145 for( sal_uInt16
i=nNewLvl ;
i < m_nDefListLvl;
i++ )
151 m_bLFPossible =
true;
155 m_nDefListLvl = nNewLvl;
160 if( nNew != m_nLastParaToken && HtmlTokenId::PREFORMTXT_ON == m_nLastParaToken )
163 m_bLFPossible =
true;
165 m_nLastParaToken = nNew;
172 switch( nScriptType )
174 case i18n::ScriptType::LATIN:
177 case i18n::ScriptType::ASIAN:
180 case i18n::ScriptType::COMPLEX:
202 struct SwHTMLTextCollOutputInfo
205 std::optional<SfxItemSet> moItemSet;
207 bool bInNumberBulletList;
212 SwHTMLTextCollOutputInfo() :
213 bInNumberBulletList(
false ),
214 bParaPossible(
false ),
219 bool HasParaToken()
const {
return aToken.getLength()==1 && aToken[0]==
'P'; }
220 bool ShouldOutputToken()
const {
return bOutPara || !HasParaToken(); }
228 sal_uInt16 nCSS1Script )
232 , nFirstLineIndent(0)
235 , bScriptDependent(
false )
237 sal_uInt16 nRefPoolId = 0;
241 OSL_ENSURE( nDeep ? !
aToken.isEmpty() :
aToken.isEmpty(),
242 "Something seems to be wrong with this token!" );
243 OSL_ENSURE( nDeep ? nRefPoolId != 0 : nRefPoolId == 0,
244 "Something seems to be wrong with the comparison style!" );
249 const SwFormat *pReferenceFormat =
nullptr;
287 if( !bOutStyles && pTemplate )
293 if( pReferenceFormat || nDeep==0 )
303 if( pReferenceFormat )
321 static const sal_uInt16 aWhichIds[3][4] =
332 sal_uInt16 aSets[2] = {0,0};
333 switch( nCSS1Script )
351 for(
int i=0;
i<4; ++
i )
354 for(sal_uInt16 nSet : aSets)
371 (pReferenceFormat ? pReferenceFormat :
pFormat)->GetLRSpace();
377 (pReferenceFormat ? pReferenceFormat :
pFormat)->GetULSpace();
382 sal_uInt16 nWhichId =
387 if( eLang != eDfltLang )
395 static const sal_uInt16 aWhichIds[3] =
398 for(sal_uInt16
i : aWhichIds)
422 SwHTMLTextCollOutputInfo& rInfo )
425 "not a paragraph style" );
430 sal_uInt16 nNewDefListLvl = 0;
431 sal_uInt16 nNumStart = USHRT_MAX;
432 bool bForceDL =
false;
434 rInfo.bInNumberBulletList =
false;
435 bool bNumbered =
false;
437 rInfo.bParaPossible =
false;
438 bool bNoEndTag =
false;
440 rHWrt.m_bNoAlign =
false;
444 rHWrt.m_bNoAlign =
true;
453 if( rHWrt.GetNextNumInfo() )
455 aNumInfo = *rHWrt.GetNextNumInfo();
456 rHWrt.ClearNextNumInfo();
460 aNumInfo.
Set( *pTextNd );
465 rInfo.bInNumberBulletList =
true;
473 "Remembered Num level is wrong" );
475 "Remembered numbering state is wrong" );
479 nBulletGrfLvl = nLvl;
489 OSL_ENSURE( rHWrt.m_nLastParaToken == HtmlTokenId::NONE,
490 "<PRE> was not closed before <LI>." );
497 SwHTMLFormatInfos::iterator it = rHWrt.m_TextCollInfos.find( pTmpInfo );
498 if (it != rHWrt.m_TextCollInfos.end())
500 pFormatInfo = it->get();
505 rHWrt.m_bCfgOutStyles, rHWrt.m_eLang,
506 rHWrt.m_nCSS1Script );
507 rHWrt.m_TextCollInfos.insert(std::unique_ptr<SwHTMLFormatInfo>(pFormatInfo));
508 if( rHWrt.m_aScriptParaStyles.count( rFormat.
GetName() ) )
514 bool bOutNewLine =
false;
515 if( !pFormatInfo->
aToken.isEmpty() )
519 rInfo.aToken = pFormatInfo->
aToken;
523 rInfo.bParaPossible =
true;
524 rHWrt.m_bNoAlign =
true;
528 rInfo.bParaPossible =
true;
529 rHWrt.m_bNoAlign =
true;
537 if (HtmlTokenId::PREFORMTXT_ON == rHWrt.m_nLastParaToken)
543 nToken = HtmlTokenId::PREFORMTXT_ON;
544 rHWrt.m_bNoAlign =
true;
551 rInfo.bParaPossible = !bDT;
552 rHWrt.m_bNoAlign =
true;
568 OSL_ENSURE(!rInfo.moItemSet,
"Where does this ItemSet come from?");
569 rInfo.moItemSet.emplace( *pFormatInfo->
moItemSet );
576 rInfo.moItemSet->Put( *pNodeItemSet );
578 rInfo.moItemSet.emplace( *pNodeItemSet );
586 if( (rHWrt.m_bOutHeader &&
591 if( rHWrt.m_bCfgOutStyles )
594 if( rHWrt.m_bOutHeader )
595 aULSpaceItem.
SetLower( rHWrt.m_nHeaderFooterSpace );
597 aULSpaceItem.
SetUpper( rHWrt.m_nHeaderFooterSpace );
599 if (!rInfo.moItemSet)
601 rInfo.moItemSet.emplace(*rFormat.
GetAttrSet().
GetPool(), svl::Items<RES_UL_SPACE, RES_UL_SPACE>);
603 rInfo.moItemSet->Put( aULSpaceItem );
605 rHWrt.m_bOutHeader =
false;
606 rHWrt.m_bOutFooter =
false;
613 rInfo.aToken.clear();
622 if( rInfo.moItemSet )
627 bool bUseParSpace = !rHWrt.m_bOutTable ||
634 if( (!rHWrt.m_bCfgOutStyles || bForceDL) && !rInfo.bInNumberBulletList )
644 if( nLeftMargin > 0 && rHWrt.m_nDefListMargin > 0 )
646 nNewDefListLvl =
static_cast< sal_uInt16
>((nLeftMargin + (rHWrt.m_nDefListMargin/2)) /
647 rHWrt.m_nDefListMargin);
648 if( nNewDefListLvl == 0 && bForceDL && !bDT )
656 nNewDefListLvl = (bForceDL&& !bDT) ? 1 : 0;
659 bool bIsNextTextNode =
663 if( bForceDL && bDT )
668 else if( !nNewDefListLvl && !rHWrt.m_bCfgOutStyles && bPara &&
670 ((bUseParSpace && bIsNextTextNode) || rHWrt.m_nDefListLvl==1) &&
671 (!pAdjItem || SvxAdjust::Left==pAdjItem->
GetAdjust()) )
676 rInfo.bParaPossible =
false;
677 rHWrt.m_bNoAlign =
true;
681 if( nNewDefListLvl != rHWrt.m_nDefListLvl )
682 rHWrt.OutAndSetDefList( nNewDefListLvl );
685 if( rInfo.bInNumberBulletList )
687 OSL_ENSURE( !rHWrt.m_nDefListLvl,
"DL cannot be inside OL!" );
692 if( !rHWrt.m_aBulletGrfs[nBulletGrfLvl].isEmpty() )
701 rHWrt.m_nDfltLeftMargin = pFormatInfo->
nLeftMargin;
705 if( rInfo.bInNumberBulletList )
714 if( rInfo.bInNumberBulletList && bNumbered && bPara && !rHWrt.m_bCfgOutStyles )
717 rHWrt.m_nDfltTopMargin = 0;
718 rHWrt.m_nDfltBottomMargin = 0;
720 else if( rHWrt.m_nDefListLvl && bPara )
723 rHWrt.m_nDfltTopMargin = 0;
724 rHWrt.m_nDfltBottomMargin = 0;
728 rHWrt.m_nDfltTopMargin = pFormatInfo->
nTopMargin;
733 if( rHWrt.m_bCfgNetscape4 && !bUseParSpace )
734 rHWrt.m_nDfltBottomMargin = rULSpace.
GetLower();
739 if( rHWrt.m_nDefListLvl )
741 rHWrt.m_nLeftMargin =
742 (rHWrt.m_nDefListLvl-1) * rHWrt.m_nDefListMargin;
745 if( rHWrt.m_bLFPossible && !rHWrt.m_bFirstLine )
747 rInfo.bOutPara =
false;
750 rHWrt.ChangeParaToken( nToken );
752 bool bHasParSpace = bUseParSpace && rULSpace.
GetLower() > 0;
757 if( rInfo.bInNumberBulletList && bNumbered )
761 if( USHRT_MAX != nNumStart )
767 if( rHWrt.m_nDefListLvl > 0 && !bForceDL )
775 rHWrt.HasControls() )
783 rHWrt.m_bTextAttr =
false;
784 rHWrt.m_bOutOpts =
true;
788 rHWrt.m_bNoAlign =
false;
789 rInfo.bOutDiv =
true;
790 rHWrt.IncIndentLevel();
791 rHWrt.m_bLFPossible =
true;
799 OString aToken = rInfo.aToken;
800 if( (!rHWrt.m_bCfgOutStyles || rHWrt.mbXHTML) && rInfo.bParaPossible && !bPara &&
801 (bHasParSpace || bXhtmlBlockQuote || pAdjItem) )
806 rHWrt.m_bNoAlign =
false;
813 eLang = rHWrt.m_eLang;
815 if( rInfo.moItemSet )
819 for(
auto const &
i : aWhichIds)
824 rInfo.moItemSet->ClearItem(
i );
844 (!rInfo.bInNumberBulletList && !rHWrt.m_nDefListLvl) ||
845 (rInfo.bInNumberBulletList && !bNumbered) ||
846 (!rHWrt.m_bCfgOutStyles &&
847 (bHasParSpace || bXhtmlBlockQuote || pAdjItem ||
849 nDir != rHWrt.m_nDirection ||
850 rHWrt.m_bCfgOutStyles )
853 rHWrt.m_bTextAttr =
false;
854 rHWrt.m_bOutOpts =
true;
856 OString sOut =
"<" + rHWrt.GetNamespace() + aToken;
862 rHWrt.OutLanguage( eLang );
865 if( nDir != rHWrt.m_nDirection )
867 if( !sOut.isEmpty() )
872 rHWrt.OutDirection( nDir );
875 if( rHWrt.m_bCfgOutStyles &&
881 OUString aClass( pFormatInfo->
aClass );
884 if( !aClass.isEmpty() )
886 switch( rHWrt.m_nCSS1Script )
906 if( !rHWrt.m_bNoAlign && pAdjItem )
909 rHWrt.m_bParaDotLeaders = bPara && rHWrt.m_bCfgPrintLayout && rHWrt.indexOfDotLeaders(
913 if (rHWrt.m_bCfgOutStyles && rInfo.moItemSet)
918 if (rHWrt.m_bParaDotLeaders) {
931 ( rHWrt.m_bCfgOutStyles || bHasParSpace );
935 rInfo.aToken.clear();
938 if( nBulletGrfLvl != 255 )
940 OSL_ENSURE( aNumInfo.
GetNumRule(),
"Where is the numbering gone???" );
941 OSL_ENSURE( nBulletGrfLvl <
MAXLEVEL,
"There are not this many layers." );
944 rHWrt.m_aBulletGrfs[nBulletGrfLvl]);
947 rHWrt.GetNumInfo() = aNumInfo;
950 rHWrt.m_nDfltLeftMargin = 0;
951 rHWrt.m_nDfltRightMargin = 0;
952 rHWrt.m_nDfltFirstLineIndent = 0;
953 rHWrt.m_nDfltTopMargin = 0;
954 rHWrt.m_nDfltBottomMargin = 0;
955 rHWrt.m_nLeftMargin = 0;
956 rHWrt.m_nFirstLineIndent = 0;
964 if( rInfo.aToken.isEmpty() )
969 if( rInfo.bInNumberBulletList )
985 if( rInfo.ShouldOutputToken() )
994 if( rInfo.bParaPossible && rInfo.bOutPara )
1013 if( rInfo.bInNumberBulletList )
1022 class HTMLStartEndPos
1026 std::unique_ptr<SfxPoolItem> m_pItem;
1030 HTMLStartEndPos(
const SfxPoolItem& rItem, sal_Int32 nStt, sal_Int32 nE );
1034 void SetStart(sal_Int32 nStt) { m_nStart = nStt; }
1035 sal_Int32 GetStart()
const {
return m_nStart; }
1037 sal_Int32 GetEnd()
const {
return m_nEnd; }
1038 void SetEnd(sal_Int32 nE) { m_nEnd = nE; }
1043 HTMLStartEndPos::HTMLStartEndPos(
const SfxPoolItem& rItem, sal_Int32 nStt, sal_Int32 nE)
1046 , m_pItem(rItem.
Clone())
1061 HTML_AUTOFMT_VALUE };
1065 HTMLStartEndPositions m_aStartLst;
1066 HTMLStartEndPositions m_aEndLst;
1067 std::deque<sal_Int32> m_aScriptChgLst;
1072 std::vector<sal_uInt16> m_aScriptLst;
1076 std::optional<Color> m_xDefaultColor;
1077 std::set<OUString>& m_rScriptTextStyles;
1080 bool m_bOutStyles : 1;
1084 void InsertItem_( HTMLStartEndPos *pPos, HTMLStartEndPositions::size_type nEndPos );
1085 void RemoveItem_( HTMLStartEndPositions::size_type nEndPos );
1091 bool ExistsOnTagItem( sal_uInt16 nWhich, sal_Int32 nPos );
1095 bool ExistsOffTagItem( sal_uInt16 nWhich, sal_Int32 nStartPos,
1096 sal_Int32 nEndPos );
1099 void FixSplittedItem( HTMLStartEndPos *pPos, sal_Int32 nNewEnd,
1100 HTMLStartEndPositions::size_type nStartPos );
1103 void InsertItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1107 void SplitItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1111 void InsertNoScript(
const SfxPoolItem& rItem, sal_Int32 nStart,
1120 HTMLEndPosLst(
SwDoc *pDoc,
SwDoc* pTemplate, std::optional<Color> xDfltColor,
1122 const OUString& rText, std::set<OUString>& rStyles );
1130 bool bParaAttrs=
false );
1134 sal_uInt16 GetScriptAtPos( sal_Int32 nPos,
1137 void OutStartAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos );
1138 void OutEndAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos );
1140 bool IsHTMLMode(
sal_uLong nMode)
const {
return (m_nHTMLMode & nMode) != 0; }
1145 void HTMLEndPosLst::InsertItem_( HTMLStartEndPos *pPos, HTMLStartEndPositions::size_type nEndPos )
1149 sal_Int32 nStart = pPos->GetStart();
1150 HTMLStartEndPositions::size_type
i {0};
1152 while (i < m_aStartLst.size() && m_aStartLst[
i]->GetStart() <= nStart)
1154 m_aStartLst.insert(m_aStartLst.begin() +
i, pPos);
1157 m_aEndLst.insert(m_aEndLst.begin() + nEndPos, pPos);
1160 void HTMLEndPosLst::RemoveItem_( HTMLStartEndPositions::size_type nEndPos )
1162 HTMLStartEndPos* pPos = m_aEndLst[nEndPos];
1165 HTMLStartEndPositions::iterator it = std::find(m_aStartLst.begin(), m_aStartLst.end(), pPos);
1166 OSL_ENSURE(it != m_aStartLst.end(),
"Item not found in Start List!");
1167 if (it != m_aStartLst.end())
1168 m_aStartLst.erase(it);
1170 m_aEndLst.erase(m_aEndLst.begin() + nEndPos);
1178 switch( rItem.
Which() )
1183 switch( static_cast<const SvxPostureItem&>(rItem).GetPosture() )
1186 eState = HTML_ON_VALUE;
1189 eState = HTML_OFF_VALUE;
1192 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1193 eState = HTML_STYLE_VALUE;
1199 switch( static_cast<const SvxCrossedOutItem&>(rItem).GetStrikeout() )
1203 eState = HTML_ON_VALUE;
1206 eState = HTML_OFF_VALUE;
1214 switch( static_cast<SvxEscapement>(static_cast<const SvxEscapementItem&>(rItem).GetEnumValue()) )
1216 case SvxEscapement::Superscript:
1217 case SvxEscapement::Subscript:
1218 eState = HTML_ON_VALUE;
1220 case SvxEscapement::Off:
1221 eState = HTML_OFF_VALUE;
1229 switch( static_cast<const SvxUnderlineItem&>(rItem).GetLineStyle() )
1232 eState = HTML_ON_VALUE;
1235 eState = HTML_OFF_VALUE;
1238 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1239 eState = HTML_STYLE_VALUE;
1246 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1247 eState = HTML_STYLE_VALUE;
1253 switch( static_cast<const SvxWeightItem&>(rItem).GetWeight() )
1256 eState = HTML_ON_VALUE;
1259 eState = HTML_OFF_VALUE;
1262 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1263 eState = HTML_STYLE_VALUE;
1274 eState = HTML_COLOR_VALUE;
1287 eState = HTML_REAL_VALUE;
1291 eState = HTML_CHRFMT_VALUE;
1295 eState = HTML_AUTOFMT_VALUE;
1299 eState = HTML_STYLE_VALUE;
1303 eState = HTML_STYLE_VALUE;
1307 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1308 eState = HTML_STYLE_VALUE;
1312 eState = HTML_DROPCAP_VALUE;
1316 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1317 eState = HTML_STYLE_VALUE;
1324 bool HTMLEndPosLst::ExistsOnTagItem( sal_uInt16 nWhich, sal_Int32 nPos )
1326 for (
auto pTest : m_aStartLst)
1328 if( pTest->GetStart() > nPos )
1333 else if( pTest->GetEnd() > nPos )
1338 if( pItem->
Which() == nWhich &&
1339 HTML_ON_VALUE == GetHTMLItemState(*pItem) )
1350 bool HTMLEndPosLst::ExistsOffTagItem( sal_uInt16 nWhich, sal_Int32 nStartPos,
1360 for (
auto pTest : m_aStartLst)
1362 if( pTest->GetStart() > nStartPos )
1367 else if( pTest->GetStart()==nStartPos &&
1368 pTest->GetEnd()==nEndPos )
1373 sal_uInt16 nTstWhich = pItem->
Which();
1377 HTML_OFF_VALUE == GetHTMLItemState(*pItem) )
1389 void HTMLEndPosLst::FixSplittedItem( HTMLStartEndPos *pPos, sal_Int32 nNewEnd,
1390 HTMLStartEndPositions::size_type nStartPos )
1393 pPos->SetEnd( nNewEnd );
1396 HTMLStartEndPositions::iterator it = std::find(m_aEndLst.begin(), m_aEndLst.end(), pPos);
1397 OSL_ENSURE(it != m_aEndLst.end(),
"Item not found in End List!");
1398 if (it != m_aEndLst.end())
1399 m_aEndLst.erase(it);
1402 HTMLStartEndPositions::size_type nEndPos {0};
1403 while (nEndPos < m_aEndLst.size() && m_aEndLst[nEndPos]->GetEnd() <= nNewEnd)
1405 m_aEndLst.insert(m_aEndLst.begin() + nEndPos, pPos);
1408 for (HTMLStartEndPositions::size_type i = nStartPos + 1;
i < m_aStartLst.size(); ++
i)
1410 HTMLStartEndPos* pTest = m_aStartLst[
i];
1411 sal_Int32 nTestEnd = pTest->GetEnd();
1412 if( pTest->GetStart() >= nNewEnd )
1418 else if( nTestEnd > nNewEnd )
1424 pTest->SetEnd( nNewEnd );
1427 it = std::find(m_aEndLst.begin(), m_aEndLst.end(), pTest);
1428 OSL_ENSURE(it != m_aEndLst.end(),
"Item not found in End List!");
1429 if (it != m_aEndLst.end())
1430 m_aEndLst.erase(it);
1434 m_aEndLst.insert(m_aEndLst.begin() + nEndPos, pTest);
1437 InsertItem( *pTest->GetItem(), nNewEnd, nTestEnd );
1442 void HTMLEndPosLst::InsertItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1445 HTMLStartEndPositions::size_type
i;
1446 for (i = 0; i < m_aEndLst.size(); i++)
1448 HTMLStartEndPos* pTest = m_aEndLst[i];
1449 sal_Int32 nTestEnd = pTest->GetEnd();
1450 if( nTestEnd <= nStart )
1455 else if( nTestEnd < nEnd )
1457 if( pTest->GetStart() < nStart )
1461 InsertItem_(
new HTMLStartEndPos( rItem, nStart, nTestEnd ), i );
1474 InsertItem_(
new HTMLStartEndPos( rItem, nStart, nEnd ), i );
1477 void HTMLEndPosLst::SplitItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1480 sal_uInt16 nWhich = rItem.
Which();
1485 for (HTMLStartEndPositions::size_type i = 0; i < m_aStartLst.size(); ++i)
1487 HTMLStartEndPos* pTest = m_aStartLst[i];
1488 sal_Int32 nTestStart = pTest->GetStart();
1489 sal_Int32 nTestEnd = pTest->GetEnd();
1491 if( nTestStart >= nEnd )
1496 else if( nTestEnd > nStart )
1502 if( pItem->
Which() == nWhich &&
1503 HTML_ON_VALUE == GetHTMLItemState( *pItem ) )
1505 bool bDelete =
true;
1507 if( nTestStart < nStart )
1511 FixSplittedItem( pTest, nStart, i );
1518 m_aStartLst.erase(m_aStartLst.begin() + i);
1521 HTMLStartEndPositions::iterator it
1522 = std::find(m_aEndLst.begin(), m_aEndLst.end(), pTest);
1523 OSL_ENSURE(it != m_aEndLst.end(),
"Item not found in End List!");
1524 if (it != m_aEndLst.end())
1525 m_aEndLst.erase(it);
1530 if( nTestEnd > nEnd )
1532 InsertItem( *pTest->GetItem(), nEnd, nTestEnd );
1546 std::unique_ptr<SwHTMLFormatInfo> pTmpInfo(
new SwHTMLFormatInfo(&rFormat));
1547 SwHTMLFormatInfos::iterator it = rFormatInfos.find( pTmpInfo );
1548 if (it != rFormatInfos.end())
1550 pFormatInfo = it->get();
1554 pFormatInfo =
new SwHTMLFormatInfo(&rFormat, m_pDoc, m_pTemplate, m_bOutStyles);
1555 rFormatInfos.insert(std::unique_ptr<SwHTMLFormatInfo>(pFormatInfo));
1556 if (m_rScriptTextStyles.count(rFormat.
GetName()))
1563 HTMLEndPosLst::HTMLEndPosLst(
SwDoc* pD,
SwDoc* pTempl, std::optional<Color> xDfltCol,
bool bStyles,
1564 sal_uLong nMode,
const OUString& rText, std::set<OUString>& rStyles)
1566 , m_pTemplate(pTempl)
1567 , m_xDefaultColor(
std::move(xDfltCol))
1568 , m_rScriptTextStyles(rStyles)
1569 , m_nHTMLMode(nMode)
1570 , m_bOutStyles(bStyles)
1572 sal_Int32 nEndPos = rText.getLength();
1574 while( nPos < nEndPos )
1578 m_aScriptChgLst.push_back(nPos);
1579 m_aScriptLst.push_back(nScript);
1583 HTMLEndPosLst::~HTMLEndPosLst()
1585 OSL_ENSURE(m_aStartLst.empty(),
"Start List not empty in destructor");
1586 OSL_ENSURE(m_aEndLst.empty(),
"End List not empty in destructor");
1589 void HTMLEndPosLst::InsertNoScript(
const SfxPoolItem& rItem,
1590 sal_Int32 nStart, sal_Int32 nEnd,
1594 if( nStart == nEnd )
1597 bool bSet =
false, bSplit =
false;
1598 switch( GetHTMLItemState(rItem) )
1602 if( !ExistsOnTagItem( rItem.
Which(), nStart ) )
1606 case HTML_OFF_VALUE:
1611 if( ExistsOnTagItem( rItem.
Which(), nStart ) )
1613 bSet = m_bOutStyles && !bParaAttrs && !ExistsOffTagItem(rItem.
Which(), nStart, nEnd);
1616 case HTML_REAL_VALUE:
1621 case HTML_STYLE_VALUE:
1631 case HTML_CHRFMT_VALUE:
1634 "Not a character style after all" );
1636 const SwCharFormat* pFormat = rChrFormat.GetCharFormat();
1638 const SwHTMLFormatInfo *pFormatInfo = GetFormatInfo( *pFormat, rFormatInfos );
1639 if( !pFormatInfo->
aToken.isEmpty() )
1643 InsertItem( rItem, nStart, nEnd );
1648 rFormatInfos,
true, bParaAttrs );
1653 case HTML_AUTOFMT_VALUE:
1656 const std::shared_ptr<SfxItemSet>& pSet = rAutoFormat.
GetStyleHandle();
1658 Insert( *pSet, nStart, nEnd, rFormatInfos,
true, bParaAttrs );
1662 case HTML_COLOR_VALUE:
1667 "Not a foreground color, after all" );
1668 Color aColor( static_cast<const SvxColorItem&>(rItem).
GetValue() );
1669 if( COL_AUTO == aColor )
1671 bSet = !bParaAttrs || !m_xDefaultColor || !m_xDefaultColor->IsRGBEqual(aColor);
1675 case HTML_DROPCAP_VALUE:
1678 "Not a drop cap, after all" );
1684 const SwCharFormat *pCharFormat = rDrop.GetCharFormat();
1688 rFormatInfos,
true, bParaAttrs );
1702 InsertItem( rItem, nStart, nEnd );
1704 SplitItem( rItem, nStart, nEnd );
1707 void HTMLEndPosLst::Insert(
const SfxPoolItem& rItem,
1708 sal_Int32 nStart, sal_Int32 nEnd,
1711 bool bDependsOnScript =
false, bDependsOnAnyScript =
false;
1712 sal_uInt16 nScript = i18n::ScriptType::LATIN;
1713 switch( rItem.
Which() )
1720 bDependsOnScript =
true;
1721 nScript = i18n::ScriptType::LATIN;
1729 bDependsOnScript =
true;
1730 nScript = i18n::ScriptType::ASIAN;
1738 bDependsOnScript =
true;
1739 nScript = i18n::ScriptType::COMPLEX;
1745 const SwHTMLFormatInfo *pFormatInfo = GetFormatInfo( *pFormat, rFormatInfos );
1748 bDependsOnScript =
true;
1749 bDependsOnAnyScript =
true;
1755 if (GetFormatInfo(*m_pDoc->getIDocumentStylePoolAccess().GetCharFormatFromPool(
1759 || GetFormatInfo(*m_pDoc->getIDocumentStylePoolAccess().GetCharFormatFromPool(
1764 bDependsOnScript =
true;
1765 bDependsOnAnyScript =
true;
1771 if( bDependsOnScript )
1773 sal_Int32 nPos = nStart;
1774 for (
size_t i = 0; i < m_aScriptChgLst.size(); i++)
1776 sal_Int32 nChgPos = m_aScriptChgLst[i];
1777 if( nPos >= nChgPos )
1783 if( nEnd <= nChgPos )
1788 if (bDependsOnAnyScript || nScript == m_aScriptLst[i])
1789 InsertNoScript( rItem, nPos, nEnd, rFormatInfos,
1797 if (bDependsOnAnyScript || nScript == m_aScriptLst[i])
1798 InsertNoScript( rItem, nPos, nChgPos, rFormatInfos, bParaAttrs );
1804 InsertNoScript( rItem, nStart, nEnd, rFormatInfos, bParaAttrs );
1808 void HTMLEndPosLst::Insert(
const SfxItemSet& rItemSet,
1809 sal_Int32 nStart, sal_Int32 nEnd,
1811 bool bDeep,
bool bParaAttrs )
1815 sal_uInt16 nWhich = aIter.FirstWhich();
1819 if( SfxItemState::SET == rItemSet.
GetItemState( nWhich, bDeep, &pItem ) )
1821 Insert( *pItem, nStart, nEnd, rFormatInfos, bParaAttrs );
1824 nWhich = aIter.NextWhich();
1842 bool bOutStylesOld = m_bOutStyles;
1843 m_bOutStyles =
false;
1844 Insert( aItemSet, nPos, nPos+1, rFormatInfos,
false );
1845 m_bOutStyles = bOutStylesOld;
1848 sal_uInt16 HTMLEndPosLst::GetScriptAtPos( sal_Int32 nPos, sal_uInt16 nWeak )
1852 size_t nScriptChgs = m_aScriptChgLst.size();
1854 while (i < nScriptChgs && nPos >= m_aScriptChgLst[i])
1856 OSL_ENSURE( i < nScriptChgs,
"script list is too short" );
1857 if( i < nScriptChgs )
1859 if (i18n::ScriptType::WEAK == m_aScriptLst[i])
1868 void HTMLEndPosLst::OutStartAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos )
1874 HTMLStartEndPositions::size_type nCharBoxIndex = 0;
1875 while (nCharBoxIndex < m_aStartLst.size()
1876 && m_aStartLst[nCharBoxIndex]->GetItem()->Which() !=
RES_CHRATR_BOX)
1882 for (HTMLStartEndPositions::size_type i = 0; i < m_aStartLst.size(); ++i)
1884 HTMLStartEndPos *pPos =
nullptr;
1885 if (nCharBoxIndex < m_aStartLst.size())
1888 pPos = m_aStartLst[nCharBoxIndex];
1889 else if( i == nCharBoxIndex )
1890 pPos = m_aStartLst[0];
1892 pPos = m_aStartLst[i];
1895 pPos = m_aStartLst[i];
1897 sal_Int32 nStart = pPos->GetStart();
1903 else if( nStart == nPos )
1907 sal_uInt16 nWhich = pPos->GetItem()->Which();
1922 void HTMLEndPosLst::OutEndAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos )
1927 HTMLStartEndPositions::size_type i {0};
1928 while (i < m_aEndLst.size())
1930 HTMLStartEndPos* pPos = m_aEndLst[i];
1931 sal_Int32 nEnd = pPos->GetEnd();
1933 if( SAL_MAX_INT32 == nPos || nEnd == nPos )
1937 bool bSkipOut =
false;
1940 HTMLStartEndPositions::iterator it
1941 = std::find(m_aStartLst.begin(), m_aStartLst.end(), pPos);
1942 OSL_ENSURE(it != m_aStartLst.end(),
"Item not found in Start List!");
1943 if (it != m_aStartLst.end())
1945 while (it != m_aStartLst.end())
1947 HTMLStartEndPos *pEndPos = *it;
1949 *
static_cast<const SvxBoxItem*
>(pEndPos->GetItem()) ==
1950 *static_cast<const SvxBoxItem*>(pPos->GetItem()) )
1952 pEndPos->SetStart(pPos->GetStart());
1966 else if( nEnd > nPos )
1975 OSL_ENSURE( nEnd >= nPos,
1976 "The attribute should've been closed a long time ago" );
1988 const OUString& rStr = pNd->
GetText();
1989 sal_Int32 nEnd = rStr.getLength();
2019 aHtml.endAttribute();
2024 sal_Int32 nLeft = pItem->GetLeft();
2025 sal_Int32 nRight = pItem->GetRight();
2026 if( nLeft || nRight )
2096 if( pItemSet && pItemSet->
Count() &&
2125 bool bPageBreakBehind =
false;
2130 bool bPageBreakBefore =
false;
2136 if( pPageDescItem && pPageDescItem->
GetPageDesc() )
2138 bPageBreakBefore =
true;
2142 switch( pItem->GetBreak() )
2144 case SvxBreak::PageBefore:
2145 bPageBreakBefore =
true;
2147 case SvxBreak::PageAfter:
2148 bPageBreakBehind =
true;
2150 case SvxBreak::PageBoth:
2151 bPageBreakBefore =
true;
2152 bPageBreakBehind =
true;
2160 if( bPageBreakBefore )
2179 nEnd = rHTMLWrt.
m_pCurrentPam->GetMark()->nContent.GetIndex();
2187 SwHTMLTextCollOutputInfo aFormatInfo;
2211 sal_Int32 nOffset = 0;
2212 OUString aOutlineText;
2221 nOffset = nOffset + aOutlineText.getLength();
2222 aFullText = aOutlineText;
2224 OUString aFootEndNoteSym;
2228 nOffset = nOffset + aFootEndNoteSym.getLength();
2229 aFullText += aFootEndNoteSym;
2244 if( aFormatInfo.moItemSet )
2246 aEndPosLst.Insert( *aFormatInfo.moItemSet, 0, nEnd + nOffset,
2254 aEndPosLst.OutStartAttrs( rHTMLWrt, 0 );
2260 if( !aOutlineText.isEmpty() )
2266 aEndPosLst.GetScriptAtPos( aOutlineText.getLength(), rHTMLWrt.
m_nCSS1Script ) );
2275 size_t nAttrPos = 0;
2276 sal_Int32 nStrPos = rHTMLWrt.
m_pCurrentPam->GetPoint()->nContent.GetIndex();
2279 if( nCntAttr && nStrPos > ( pHt = pNd->
GetSwpHints().
Get(0) )->GetStart() )
2283 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset );
2292 const sal_Int32 nHtEnd = *pHt->
End(),
2298 if( nHtEnd == nHtStt )
2303 aEndPosLst.Insert( pHt->
GetAttr(), nHtStt + nOffset,
2308 sal_Int32 nTmpStt = nHtStt < nStrPos ? nStrPos : nHtStt;
2309 sal_Int32 nTmpEnd =
std::min(nHtEnd, nEnd);
2310 aEndPosLst.Insert( pHt->
GetAttr(), nTmpStt + nOffset,
2318 }
while( nAttrPos < nCntAttr && nStrPos >
2322 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset );
2323 aEndPosLst.OutStartAttrs( rHTMLWrt, nStrPos + nOffset );
2326 bool bWriteBreak = (HtmlTokenId::PREFORMTXT_ON != rHTMLWrt.
m_nLastParaToken);
2330 bWriteBreak =
false;
2335 bool bLeadingTab =
true;
2336 for( ; nStrPos < nEnd; nStrPos++ )
2341 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset );
2346 bool bOutChar =
true;
2348 if (nAttrPos < nCntAttr && pHt->GetStart() == nStrPos)
2353 if( *pHt->
End() != nStrPos )
2358 aEndPosLst.Insert( pHt->
GetAttr(), nStrPos + nOffset,
2359 *pHt->
End() + nOffset,
2366 OSL_ENSURE( !pTextHt,
"Why is there already an attribute without an end?" );
2379 bWriteBreak =
false;
2384 }
while( ++nAttrPos < nCntAttr && nStrPos ==
2395 aEndPosLst.Insert( *static_cast<const SwDrawFrameFormat *>(pFrameFormat),
2400 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset );
2401 aEndPosLst.OutStartAttrs( rHTMLWrt, nStrPos + nOffset );
2407 rStr[nStrPos-1] ==
' ';
2410 nStrPos + nOffset, nCSS1Script );
2419 sal_uInt32 c = rStr[nStrPos];
2420 if( rtl::isHighSurrogate(c) && nStrPos < nEnd - 1 )
2423 if( rtl::isLowSurrogate(d) )
2425 c = rtl::combineSurrogates(c, d);
2437 sal_Int32 nWordLen = rStr.indexOf(
' ', nStrPos+1 );
2438 if( nWordLen == -1 )
2440 nWordLen -= nStrPos;
2470 bool bConsumed =
false;
2487 bLeadingTab =
false;
2501 bWriteBreak = (0x0a == c) &&
2516 OSL_ENSURE( !bFlysLeft,
"Not all frames were saved!" );
2526 if( bEndOfCell && !nEnd &&
2538 if (rULSpace.
GetLower() > 0 && !bEndOfCell)
2548 const char* pString;
2576 nEnd > 0 &&
' ' == rStr[nEnd-1] )
2580 if (nIndexTab > -1) {
2581 OString sOut =
OUStringToOString(rStr.subView(nIndexTab + 1), RTL_TEXTENCODING_ASCII_US);
2582 rWrt.
Strm().
WriteOString( OStringConcatenation(
"</span><span>" + sOut +
"</span>") );
2591 if( bPageBreakBehind )
2601 Size aSz( bVert ? 0 : nVal, bVert ? nVal : 0 );
2615 if( static_cast<SwHTMLWriter&>(rWrt).m_bCfgOutStyles && static_cast<SwHTMLWriter&>(rWrt).m_bTextAttr )
2638 Color aColor( static_cast<const SvxColorItem&>(rHt).
GetValue() );
2711 .WriteCharPtr(
"\">");
2719 .WriteCharPtr(
"\">" );
2753 sal_uInt16 nSize = nHeight / 20;
2755 + OString::number(static_cast<sal_Int32>(nSize)) +
"pt\"";
2765 OString::number(static_cast<sal_Int32>(nSize)) +
"\"";
2870 if( !aTag.isEmpty() )
2926 if( static_cast<const SvxBlinkItem&>(rHt).GetValue() )
2945 bool bEvents = pMacTable !=
nullptr && !pMacTable->
empty();
2948 if(
aURL.isEmpty() && !bEvents && rINetFormat.
GetName().isEmpty() )
2960 bool bScriptDependent =
false;
2964 std::unique_ptr<SwHTMLFormatInfo> pFormatInfo(
new SwHTMLFormatInfo(pFormat));
2968 bScriptDependent = (*it)->bScriptDependent;
2971 if( !bScriptDependent )
2975 std::unique_ptr<SwHTMLFormatInfo> pFormatInfo(
new SwHTMLFormatInfo(pFormat));
2979 bScriptDependent = (*it)->bScriptDependent;
2983 if( bScriptDependent )
2986 const char* pStr =
nullptr;
2999 sOut += pStr + OString::Concat(
"\"");
3007 if( !
aURL.isEmpty() || bEvents )
3009 OUString sTmp(
aURL.toAsciiUpperCase() );
3010 sal_Int32 nPos = sTmp.indexOf(
"\" REL=" );
3013 sRel =
aURL.copy( nPos+1 );
3024 if( !rINetFormat.
GetName().isEmpty() )
3033 if( !rTarget.isEmpty() )
3041 if( !sRel.isEmpty() )
3044 if( !sOut.isEmpty() )
3085 OSL_ENSURE( rHTMLWrt.
m_aINetFormats.size(),
"there must be a URL attribute missing" );
3120 SwHTMLFormatInfos::const_iterator it = rHTMLWrt.
m_CharFormatInfos.find(pTmpInfo);
3125 OSL_ENSURE( pFormatInfo,
"Why is there no information about the character style?" );
3130 if( !pFormatInfo->
aToken.isEmpty() )
3131 sOut += pFormatInfo->
aToken;
3140 OUString aClass( pFormatInfo->
aClass );
3143 if( !aClass.isEmpty() )
3148 aClass +=
"western";
3166 OString aTag = !pFormatInfo->
aToken.isEmpty() ? pFormatInfo->
aToken.getStr()
3181 const char* pStr =
nullptr;
tools::Long const nBottomMargin
virtual SwCharFormat * GetCharFormatFromPool(sal_uInt16 nId)=0
sal_uInt8 GetLevel() const
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
constexpr TypedWhichId< SvxFrameDirectionItem > RES_FRAMEDIR(120)
constexpr TypedWhichId< SvxBlinkItem > RES_CHRATR_BLINK(18)
tools::Long GetWidth() const
constexpr TypedWhichId< SwFormatPageDesc > RES_PAGEDESC(93)
static const SdrObject * GetMarqueeTextObj(const SwDrawFrameFormat &rFormat)
constexpr TypedWhichId< SvxCrossedOutItem > RES_CHRATR_CROSSEDOUT(5)
#define OOO_STRING_SVTOOLS_HTML_preformtxt
sal_uInt16 GuessFrameType(const SwFrameFormat &rFrameFormat, const SdrObject *&rpStrObj)
SwHTMLNumRuleInfo & GetNumInfo()
static SVT_DLLPUBLIC SvStream & FlushToAscii(SvStream &)
bool mbXHTML
If XHTML markup should be written instead of HTML.
#define OOO_STRING_SVTOOLS_HTML_O_clear
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
Marks a position in the document model.
#define OOO_STRING_SVTOOLS_HTML_blink
bool IsSectionNode() const
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_CTL_FONT(27)
constexpr TypedWhichId< SvxEscapementItem > RES_CHRATR_ESCAPEMENT(6)
Pagedescriptor Client of SwPageDesc that is "described" by the attribute.
const SwTableBox * GetTableBox(const OUString &rName, const bool bPerformValidCheck=false) const
sal_uInt16 GetLower() const
SvxAdjust GetAdjust() const
SwPageDesc * GetPageDesc()
const OUString & GetText() const
bool IsOutline() const
Returns if this text node is an outline.
Writer & OutHTML_NumberBulletListStart(SwHTMLWriter &rWrt, const SwHTMLNumRuleInfo &rInfo)
SwHTMLNumRuleInfo * GetNextNumInfo()
#define OOO_STRING_SVTOOLS_HTML_AL_all
#define OOO_STRING_SVTOOLS_HTML_AL_center
sal_Int32 indexOfDotLeaders(sal_uInt16 nPoolId, std::u16string_view rText)
SwNodeOffset StartOfSectionIndex() const
sal_uInt16 m_nTextAttrsToIgnore
tools::Long const nLeftMargin
#define OOO_STRING_SVTOOLS_HTML_O_SDonmouseover
void Set(const SwHTMLNumRuleInfo &rInf)
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_LANGUAGE(10)
tools::Long GetRight() const
static Writer & OutHTML_SvxLanguage(Writer &rWrt, const SfxPoolItem &rHt)
constexpr TypedWhichId< SvxFontHeightItem > RES_CHRATR_FONTSIZE(8)
static void OutHTML_SwFormatOff(Writer &rWrt, const SwHTMLTextCollOutputInfo &rInfo)
LanguageType GetLanguage(SfxItemSet const &aSet, sal_uInt16 nLangWhichId)
constexpr::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
const WhichRangesContainer & GetRanges() const
constexpr sal_uInt8 MAXLEVEL
#define sCSS2_P_CLASS_leaders
static sal_uInt16 GetDefListLvl(std::u16string_view rNm, sal_uInt16 nPoolId)
constexpr TypedWhichId< SvxFormatBreakItem > RES_BREAK(94)
constexpr TypedWhichId< SvxUnderlineItem > RES_CHRATR_UNDERLINE(14)
void OutFrameFormat(AllHtmlFlags nType, const SwFrameFormat &rFormat, const SdrObject *pSdrObj)
bool HasDummyChar() const
Writer & OutHTML_SwTextNode(Writer &rWrt, const SwContentNode &rNode)
constexpr TypedWhichId< SwConditionTextFormatColl > RES_CONDTXTFMTCOLL(160)
static SVT_DLLPUBLIC SvStream & Out_AsciiTag(SvStream &, std::string_view rStr, bool bOn=true)
void single(const OString &aContent)
Writer & OutCSS1_ParaTagStyleOpt(Writer &rWrt, const SfxItemSet &rItemSet)
constexpr TypedWhichId< SvxBoxItem > RES_CHRATR_BOX(40)
std::optional< sal_Int32 > m_nLeadingTabWidth
If set, replace leading tabs with this many non-breaking spaces.
static Writer & OutHTML_SvxEscapement(Writer &rWrt, const SfxPoolItem &rHt)
#define OOO_STRING_SVTOOLS_HTML_superscript
#define OOO_STRING_SVTOOLS_HTML_italic
bool IsListRestart() const
constexpr TypedWhichId< SvxPostureItem > RES_CHRATR_CJK_POSTURE(25)
#define CH_TXT_ATR_FORMELEMENT
SvStream & WriteCharPtr(const char *pBuf)
int GetActualListLevel() const
Returns the actual list level of this text node, when it is a list item.
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_FONT(7)
OString maNamespace
XML namespace, in case of XHTML.
static SVT_DLLPUBLIC SvStream & Out_Color(SvStream &, const Color &, bool bXHTML=false)
#define HTMLMODE_LSPACE_IN_NUMBER_BULLET
constexpr bool starts_with(std::basic_string_view< charT, traits > sv, std::basic_string_view< charT, traits > x) noexcept
static OutputDevice * GetDefaultDevice()
Writer & OutCSS1_HintSpanTag(Writer &rWrt, const SfxPoolItem &rHt)
#define OOO_STRING_SVTOOLS_HTML_subscript
#define OOO_STRING_SVTOOLS_HTML_O_onmouseout
constexpr tools::Long Width() const
constexpr TypedWhichId< SvxCaseMapItem > RES_CHRATR_CASEMAP(RES_CHRATR_BEGIN)
void OutNewLine(bool bCheck=false)
#define OOO_STRING_SVTOOLS_HTML_O_size
static Writer & OutHTML_SwFormatINetFormat(Writer &rWrt, const SfxPoolItem &rHt)
bool mbReqIF
If the ReqIF subset of XHTML should be written.
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(159)
SwAttrFnTab aHTMLAttrFnTab
static void SubtractItemSet(SfxItemSet &rItemSet, const SfxItemSet &rRefItemSet, bool bSetDefaults, bool bClearSame=true, const SfxItemSet *pRefScriptItemSet=nullptr)
#define OOO_STRING_SVTOOLS_HTML_O_href
static Writer & OutHTML_SvxFontHeight(Writer &rWrt, const SfxPoolItem &rHt)
static void PrepareFontList(const SvxFontItem &rFontItem, OUString &rNames, sal_Unicode cQuote, bool bGeneric)
#define CSS1_OUTMODE_ANY_SCRIPT
#define OOO_STRING_SVTOOLS_HTML_strike
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_CTL_LANGUAGE(29)
A wrapper around SfxPoolItem to store the start position of (usually) a text portion, with an optional end.
IDocumentStylePoolAccess const & getIDocumentStylePoolAccess() const
constexpr TypedWhichId< SwFormatDrop > RES_PARATR_DROP(70)
#define OOO_STRING_SVTOOLS_HTML_AL_justify
sal_Int32 GetStart() const
#define HTMLMODE_NO_CONTROL_CENTERING
#define OOO_STRING_SVTOOLS_HTML_horzrule
FnAttrOut SwAttrFnTab[POOLATTR_END-POOLATTR_BEGIN]
const SwTable & GetTable() const
static void OutHTML_SwFormat(Writer &rWrt, const SwFormat &rFormat, const SfxItemSet *pNodeItemSet, SwHTMLTextCollOutputInfo &rInfo)
constexpr TypedWhichId< SwFormatCharFormat > RES_TXTATR_CHARFMT(52)
SwNodeOffset GetIndex() const
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
constexpr TypedWhichId< SwFormatAutoFormat > RES_TXTATR_AUTOFMT(50)
sal_uInt16 GetScaledWidth() const
OUString GetFootEndNoteSym(const SwFormatFootnote &rFormatFootnote)
static Writer & OutHTML_SwBlink(Writer &rWrt, const SfxPoolItem &rHt)
SwAttrPool * GetPool() const
static Writer & OutHTML_SvxFont(Writer &rWrt, const SfxPoolItem &rHt)
#define OOO_STRING_SVTOOLS_HTML_li
bool IsHTMLMode(sal_uInt32 nMode) const
void SetLower(const sal_uInt16 nL, const sal_uInt16 nProp=100)
std::vector< SwFormatINetFormat * > m_aINetFormats
constexpr TypedWhichId< SwFormatINetFormat > RES_TXTATR_INETFMT(51)
#define HTMLMODE_FONT_GENERIC
virtual SwPageDesc * GetPageDescFromPool(sal_uInt16 nId, bool bRegardLanguage=true)=0
Return required automatic page style.
#define OOO_STRING_SVTOOLS_HTML_bold
constexpr TypedWhichId< SvxWeightItem > RES_CHRATR_WEIGHT(15)
void ChangeParaToken(HtmlTokenId nNew)
SwFormatColl & GetAnyFormatColl() const
std::optional< Color > m_xDfltColor
bool OutFlyFrame(SwNodeOffset nNdIdx, sal_Int32 nContentIdx, HtmlPosition nPos)
static sal_uInt16 GetCSS1ScriptForScriptType(sal_uInt16 nScriptType)
std::set< OUString > m_aScriptTextStyles
Table of Contents - heading.
#define OOO_STRING_SVTOOLS_HTML_O_class
#define OOO_STRING_SVTOOLS_HTML_font
static Writer & OutHTML_SvxColor(Writer &rWrt, const SfxPoolItem &rHt)
const SwAttrSet * GetpSwAttrSet() const
void OutLanguage(LanguageType eLang)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
tools::Long GetTextLeft() const
static sal_uInt16 GetCSS1Selector(const SwFormat *pFormat, OString &rToken, OUString &rClass, sal_uInt16 &rRefPoolId, OUString *pPseudo=nullptr)
SwTextAttr * Get(size_t nPos) const
sal_uInt16 GetDepth() const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
Reference< XAnimationNode > Clone(const Reference< XAnimationNode > &xSourceNode, const SdPage *pSource, const SdPage *pTarget)
std::set< std::unique_ptr< SwHTMLFormatInfo >, comphelper::UniquePtrValueLess< SwHTMLFormatInfo > > SwHTMLFormatInfos
constexpr TypedWhichId< SwFormatFlyCnt > RES_TXTATR_FLYCNT(58)
const Color & GetColor() const
SwNumberTree::tSwNumTreeNumber GetActualListStartValue() const
Writer & OutHTML_SwFormatFootnote(Writer &rWrt, const SfxPoolItem &rHt)
Writer & OutCSS1_HintStyleOpt(Writer &rWrt, const SfxPoolItem &rHt)
SwNodeOffset GetIndex() const
tools::Long GetLeft() const
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_GRAY
#define OOO_STRING_SVTOOLS_HTML_AL_left
static const SwFormat * GetTemplateFormat(sal_uInt16 nPoolId, IDocumentStylePoolAccess *pTemplate)
#define OOO_STRING_SVTOOLS_HTML_blockquote
#define OOO_STRING_SVTOOLS_HTML_O_onmouseover
Writer & Out(const SwAttrFnTab, const SfxPoolItem &, Writer &)
#define OOO_STRING_SVTOOLS_HTML_O_name
SwNumRule * GetNumRule(bool bInParent=true) const
Returns numbering rule of this text node.
#define LANGUAGE_DONTKNOW
short GetTextFirstLineOffset() const
#define OOO_STRING_SVTOOLS_HTML_S_nbsp
sal_uInt16 GetHTMLFontSize(sal_uInt32 nFontHeight) const
static SVT_DLLPUBLIC SvStream & Out_Char(SvStream &, sal_uInt32 cChar, OUString *pNonConvertableChars=nullptr)
constexpr TypedWhichId< SwTextFormatColl > RES_TXTFMTCOLL(157)
SwFrameFormat * GetFrameFormat()
SwpHints & GetSwpHints()
getters for SwpHints
static Writer & OutHTML_SwCrossedOut(Writer &rWrt, const SfxPoolItem &rHt)
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
SwStartNodeType GetStartNodeType() const
constexpr TypedWhichId< SvxOverlineItem > RES_CHRATR_OVERLINE(38)
SwNodeIndex * m_pStartNdIdx
SwStartNode * GetStartNode()
#define OOO_STRING_SVTOOLS_HTML_dt
bool IsRGBEqual(const Color &rColor) const
SfxItemPool * GetPool() const
#define OOO_STRING_SVTOOLS_HTML_underline
const SwFormatFootnote * m_pFormatFootnote
bool IgnorePropertyForReqIF(bool bReqIF, std::string_view rProperty, std::string_view rValue, bool bTable)
Determines if rProperty with a given rValue has to be suppressed due to ReqIF mode.
static sal_uInt32 ToPixel(sal_uInt32 nVal, const bool bVert)
constexpr TypedWhichId< SvxCharHiddenItem > RES_CHRATR_HIDDEN(37)
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
css::uno::Reference< css::i18n::XBreakIterator > const & GetBreakIter() const
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
constexpr TypedWhichId< SvxColorItem > RES_CHRATR_COLOR(3)
#define OOO_STRING_SVTOOLS_HTML_O_align
const SwNumFormat & Get(sal_uInt16 i) const
#define OOO_STRING_SVTOOLS_HTML_division
SwFrameFormat & GetMaster()
#define OOO_STRING_SVTOOLS_HTML_linebreak
constexpr TypedWhichId< SvxBrushItem > RES_CHRATR_BACKGROUND(21)
SwTextNode is a paragraph in the document model.
LanguageType GetLanguage() const
Writer & OutHTML_SwFormatField(Writer &rWrt, const SfxPoolItem &rHt)
tools::Long const nTopMargin
sal_uInt32 GetHeight() const
#define OOO_STRING_SVTOOLS_HTML_AL_right
constexpr TypedWhichId< SvxWeightItem > RES_CHRATR_CJK_WEIGHT(26)
static SVT_DLLPUBLIC SvStream & Out_String(SvStream &, const OUString &, OUString *pNonConvertableChars=nullptr)
void start(const OString &aElement)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
SvStream & WriteOString(std::string_view rStr)
#define OOO_STRING_SVTOOLS_HTML_O_style
constexpr tools::Long Height() const
rtl::Reference< SwDoc > m_xTemplate
constexpr TypedWhichId< SvxWeightItem > RES_CHRATR_CTL_WEIGHT(31)
void OutForm(bool bTagOn=true, const SwStartNode *pStNd=nullptr)
#define OOO_STRING_SVTOOLS_HTML_O_target
#define CSS1_OUTMODE_WESTERN
static Writer & OutHTML_SwPosture(Writer &rWrt, const SfxPoolItem &rHt)
static SVT_DLLPUBLIC void applyColor(HtmlWriter &rHtmlWriter, std::string_view aAttributeName, const Color &rColor)
static Writer & OutHTML_SwWeight(Writer &rWrt, const SfxPoolItem &rHt)
sal_Int32 GetIndex() const
static Writer & OutHTML_SwTextCharFormat(Writer &rWrt, const SfxPoolItem &rHt)
bool IsCountedInList() const
#define OOO_STRING_SVTOOLS_HTML_O_onclick
OString strip(const OString &rIn, char c)
virtual SwTextFormatColl * GetTextCollFromPool(sal_uInt16 nId, bool bRegardLanguage=true)=0
Return "Auto-Collection with ID.
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_CJK_FONT(22)
constexpr TypedWhichId< SvxPostureItem > RES_CHRATR_CTL_POSTURE(30)
#define OOO_STRING_SVTOOLS_HTML_O_noshade
const sal_Int32 * End() const
SwTableBox is one table cell in the document model.
#define OOO_STRING_SVTOOLS_HTML_parabreak
OString GetNamespace() const
Determines the prefix string needed to respect the requested namespace alias.
static Writer & OutHTML_CSS1Attr(Writer &rWrt, const SfxPoolItem &rHt)
void OutHyperlinkHRefValue(const OUString &rURL)
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
tools::Long const nRightMargin
constexpr TypedWhichId< SvxLRSpaceItem > RES_LR_SPACE(91)
#define HTMLMODE_NBSP_IN_TABLES
#define OOO_STRING_SVTOOLS_HTML_image
SvStream & WriteChar(char nChar)
constexpr TypedWhichId< SvxBoxItem > RES_BOX(106)
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
#define OOO_STRING_SVTOOLS_HTML_O_SDonmouseout
SwTableNode * FindTableNode()
Search table node, in which it is.
std::shared_ptr< SwUnoCursor > m_pCurrentPam
#define OOO_STRING_SVTOOLS_HTML_O_value
#define OOO_STRING_SVTOOLS_HTML_O_face
OUString GetNumString(const bool _bInclPrefixAndSuffixStrings=true, const unsigned int _nRestrictToThisLevel=MAXLEVEL, SwRootFrame const *pLayout=nullptr) const
Returns outline of numbering string.
const SfxPoolItem & GetAttr() const
SwHTMLFormatInfos m_CharFormatInfos
void OutPointFieldmarks(const SwPosition &rPos)
Writer & OutHTML_NumberBulletListEnd(SwHTMLWriter &rWrt, const SwHTMLNumRuleInfo &rNextInfo)
#define OOO_STRING_SVTOOLS_HTML_address
#define OOO_STRING_SVTOOLS_HTML_O_color
std::vector< HTMLStartEndPos * > HTMLStartEndPositions
static SVT_DLLPUBLIC SvStream & Out_Events(SvStream &, const SvxMacroTableDtor &, const HTMLOutEvent *, bool bOutStarBasic, OUString *pNonConvertableChars=nullptr)
static void GetEEAttrsFromDrwObj(SfxItemSet &rItemSet, const SdrObject *pObj)
static Writer & OutHTML_SwFlyCnt(Writer &rWrt, const SfxPoolItem &rHt)
HTMLOutEvent const aAnchorEventTable[]
static Writer & OutHTML_SwUnderline(Writer &rWrt, const SfxPoolItem &rHt)
void OutAndSetDefList(sal_uInt16 nNewLvl)
Writer & OutHTML_INetFormat(Writer &rWrt, const SwFormatINetFormat &rINetFormat, bool bOn)
Writer & OutHTML_SwFormatLineBreak(Writer &rWrt, const SfxPoolItem &rHt)
static sal_uInt16 GetLangWhichIdFromScript(sal_uInt16 nScript)
constexpr TypedWhichId< SvxFontHeightItem > RES_CHRATR_CTL_FONTSIZE(28)
#define OOO_STRING_SVTOOLS_HTML_dd
void SetUpper(const sal_uInt16 nU, const sal_uInt16 nProp=100)
virtual void Insert(SotClipboardFormatId nFormat, const OUString &rFormatName) override
#define OOO_STRING_SVTOOLS_HTML_span
constexpr TypedWhichId< SvxFontHeightItem > RES_CHRATR_CJK_FONTSIZE(23)
sal_uInt16 GetInWidth() const
constexpr TypedWhichId< SvxKerningItem > RES_CHRATR_KERNING(9)
#define OOO_STRING_SVTOOLS_HTML_anchor
constexpr TypedWhichId< SvxULSpaceItem > RES_UL_SPACE(92)
constexpr TypedWhichId< SvxPostureItem > RES_CHRATR_POSTURE(11)
#define OOO_STRING_SVTOOLS_HTML_O_SDonclick
#define OOO_STRING_SVTOOLS_HTML_O_width
AllHtmlFlags const aHTMLOutFrameAsCharTable[MAX_FRMTYPES][MAX_BROWSERS]
constexpr TypedWhichId< SvxAdjustItem > RES_PARATR_ADJUST(64)
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_CJK_LANGUAGE(24)
static Writer & OutHTML_SvxAdjust(Writer &rWrt, const SfxPoolItem &rHt)
void OutFootEndNoteSym(const SwFormatFootnote &rFormatFootnote, const OUString &rNum, sal_uInt16 nScript)
#define SAL_NEWLINE_STRING
#define OOO_STRING_SVTOOLS_HTML_deflist
sal_uInt32 GetHTMLMode() const
HtmlTokenId m_nLastParaToken
#define OOO_STRING_SVTOOLS_HTML_O_span
SwNumRule * GetOutlineNumRule() const
sal_uInt16 GetUpper() const
Writer & OutHTML_BulletImage(Writer &rWrt, const char *pTag, const SvxBrushItem *pBrush, const OUString &rGraphicURL)
std::map< sal_uInt16, int > maStartedAttributes
Tracks which text portion attributes are currently open: a which id -> open count map...
bool m_bDetectedRangeSegmentation false
Base class of the Writer document model elements.
static const SwFormat * GetParentFormat(const SwFormat &rFormat, sal_uInt16 nDeep)