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>
90 {
nullptr,
nullptr, SvMacroItemId::NONE }
107 if( rNm.startsWith(sDTDD) )
112 if( rNm.startsWith(sDTDD) )
122 if( m_nDefListLvl < nNewLvl )
130 ChangeParaToken( HtmlTokenId::NONE );
133 for( sal_uInt16
i=m_nDefListLvl;
i<nNewLvl;
i++ )
139 m_bLFPossible =
true;
142 else if( m_nDefListLvl > nNewLvl )
144 for( sal_uInt16
i=nNewLvl ;
i < m_nDefListLvl;
i++ )
150 m_bLFPossible =
true;
154 m_nDefListLvl = nNewLvl;
159 if( nNew != m_nLastParaToken && HtmlTokenId::PREFORMTXT_ON == m_nLastParaToken )
162 m_bLFPossible =
true;
164 m_nLastParaToken = nNew;
171 switch( nScriptType )
173 case i18n::ScriptType::LATIN:
176 case i18n::ScriptType::ASIAN:
179 case i18n::ScriptType::COMPLEX:
201 struct SwHTMLTextCollOutputInfo
204 std::unique_ptr<SfxItemSet> pItemSet;
206 bool bInNumberBulletList;
211 SwHTMLTextCollOutputInfo() :
212 bInNumberBulletList( false ),
213 bParaPossible( false ),
218 bool HasParaToken()
const {
return aToken.getLength()==1 && aToken[0]==
'P'; }
219 bool ShouldOutputToken()
const {
return bOutPara || !HasParaToken(); }
227 sal_uInt16 nCSS1Script )
231 , nFirstLineIndent(0)
234 , bScriptDependent( false )
236 sal_uInt16 nRefPoolId = 0;
240 OSL_ENSURE( nDeep ? !
aToken.isEmpty() :
aToken.isEmpty(),
241 "Something seems to be wrong with this token!" );
242 OSL_ENSURE( nDeep ? nRefPoolId != 0 : nRefPoolId == 0,
243 "Something seems to be wrong with the comparison style!" );
248 const SwFormat *pReferenceFormat =
nullptr;
286 if( !bOutStyles && pTemplate )
292 if( pReferenceFormat || nDeep==0 )
302 if( pReferenceFormat )
320 static const sal_uInt16 aWhichIds[3][4] =
331 sal_uInt16 aSets[2] = {0,0};
332 switch( nCSS1Script )
350 for(
int i=0;
i<4; ++
i )
353 for(sal_uInt16 nSet : aSets)
370 (pReferenceFormat ? pReferenceFormat :
pFormat)->GetLRSpace();
376 (pReferenceFormat ? pReferenceFormat :
pFormat)->GetULSpace();
381 sal_uInt16 nWhichId =
386 if( eLang != eDfltLang )
394 static const sal_uInt16 aWhichIds[3] =
397 for(sal_uInt16
i : aWhichIds)
421 SwHTMLTextCollOutputInfo& rInfo )
424 "not a paragraph style" );
429 sal_uInt16 nNewDefListLvl = 0;
431 bool bForceDL =
false;
433 rInfo.bInNumberBulletList =
false;
434 bool bNumbered =
false;
436 rInfo.bParaPossible =
false;
437 bool bNoEndTag =
false;
439 rHWrt.m_bNoAlign =
false;
443 rHWrt.m_bNoAlign =
true;
452 if( rHWrt.GetNextNumInfo() )
454 aNumInfo = *rHWrt.GetNextNumInfo();
455 rHWrt.ClearNextNumInfo();
459 aNumInfo.
Set( *pTextNd );
464 rInfo.bInNumberBulletList =
true;
472 "Remembered Num level is wrong" );
474 "Remembered numbering state is wrong" );
478 nBulletGrfLvl = nLvl;
488 OSL_ENSURE( rHWrt.m_nLastParaToken == HtmlTokenId::NONE,
489 "<PRE> was not closed before <LI>." );
496 SwHTMLFormatInfos::iterator it = rHWrt.m_TextCollInfos.find( pTmpInfo );
497 if (it != rHWrt.m_TextCollInfos.end())
499 pFormatInfo = it->get();
504 rHWrt.m_bCfgOutStyles, rHWrt.m_eLang,
505 rHWrt.m_nCSS1Script );
506 rHWrt.m_TextCollInfos.insert(std::unique_ptr<SwHTMLFormatInfo>(pFormatInfo));
507 if( rHWrt.m_aScriptParaStyles.count( rFormat.
GetName() ) )
513 bool bOutNewLine =
false;
514 if( !pFormatInfo->
aToken.isEmpty() )
518 rInfo.aToken = pFormatInfo->
aToken;
522 rInfo.bParaPossible =
true;
523 rHWrt.m_bNoAlign =
true;
527 rInfo.bParaPossible =
true;
528 rHWrt.m_bNoAlign =
true;
536 if (HtmlTokenId::PREFORMTXT_ON == rHWrt.m_nLastParaToken)
542 nToken = HtmlTokenId::PREFORMTXT_ON;
543 rHWrt.m_bNoAlign =
true;
550 rInfo.bParaPossible = !bDT;
551 rHWrt.m_bNoAlign =
true;
567 OSL_ENSURE(!rInfo.pItemSet,
"Where does this ItemSet come from?");
575 rInfo.pItemSet->Put( *pNodeItemSet );
577 rInfo.pItemSet.reset(
new SfxItemSet( *pNodeItemSet ));
585 if( (rHWrt.m_bOutHeader &&
590 if( rHWrt.m_bCfgOutStyles )
593 if( rHWrt.m_bOutHeader )
594 aULSpaceItem.
SetLower( rHWrt.m_nHeaderFooterSpace );
596 aULSpaceItem.
SetUpper( rHWrt.m_nHeaderFooterSpace );
602 rInfo.pItemSet->Put( aULSpaceItem );
604 rHWrt.m_bOutHeader =
false;
605 rHWrt.m_bOutFooter =
false;
612 rInfo.aToken.clear();
622 if( rInfo.pItemSet &&
631 bool bUseParSpace = !rHWrt.m_bOutTable ||
638 if( (!rHWrt.m_bCfgOutStyles || bForceDL) && !rInfo.bInNumberBulletList )
648 if( nLeftMargin > 0 && rHWrt.m_nDefListMargin > 0 )
650 nNewDefListLvl =
static_cast< sal_uInt16
>((nLeftMargin + (rHWrt.m_nDefListMargin/2)) /
651 rHWrt.m_nDefListMargin);
652 if( nNewDefListLvl == 0 && bForceDL && !bDT )
660 nNewDefListLvl = (bForceDL&& !bDT) ? 1 : 0;
663 bool bIsNextTextNode =
667 if( bForceDL && bDT )
672 else if( !nNewDefListLvl && !rHWrt.m_bCfgOutStyles && bPara &&
674 ((bUseParSpace && bIsNextTextNode) || rHWrt.m_nDefListLvl==1) &&
675 (!pAdjItem || SvxAdjust::Left==
681 rInfo.bParaPossible =
false;
682 rHWrt.m_bNoAlign =
true;
686 if( nNewDefListLvl != rHWrt.m_nDefListLvl )
687 rHWrt.OutAndSetDefList( nNewDefListLvl );
690 if( rInfo.bInNumberBulletList )
692 OSL_ENSURE( !rHWrt.m_nDefListLvl,
"DL cannot be inside OL!" );
697 if( !rHWrt.m_aBulletGrfs[nBulletGrfLvl].isEmpty() )
706 rHWrt.m_nDfltLeftMargin = pFormatInfo->
nLeftMargin;
710 if( rInfo.bInNumberBulletList )
719 if( rInfo.bInNumberBulletList && bNumbered && bPara && !rHWrt.m_bCfgOutStyles )
722 rHWrt.m_nDfltTopMargin = 0;
723 rHWrt.m_nDfltBottomMargin = 0;
725 else if( rHWrt.m_nDefListLvl && bPara )
728 rHWrt.m_nDfltTopMargin = 0;
729 rHWrt.m_nDfltBottomMargin = 0;
733 rHWrt.m_nDfltTopMargin = pFormatInfo->
nTopMargin;
738 if( rHWrt.m_bCfgNetscape4 && !bUseParSpace )
739 rHWrt.m_nDfltBottomMargin = rULSpace.
GetLower();
744 if( rHWrt.m_nDefListLvl )
746 rHWrt.m_nLeftMargin =
747 (rHWrt.m_nDefListLvl-1) * rHWrt.m_nDefListMargin;
750 if( rHWrt.m_bLFPossible && !rHWrt.m_bFirstLine )
752 rInfo.bOutPara =
false;
755 rHWrt.ChangeParaToken( nToken );
757 bool bHasParSpace = bUseParSpace && rULSpace.
GetLower() > 0;
760 if( rInfo.bInNumberBulletList && bNumbered )
767 html.characters(OString());
770 if( rHWrt.m_nDefListLvl > 0 && !bForceDL )
778 rHWrt.HasControls() )
786 rHWrt.m_bTextAttr =
false;
787 rHWrt.m_bOutOpts =
true;
791 rHWrt.m_bNoAlign =
false;
792 rInfo.bOutDiv =
true;
793 rHWrt.IncIndentLevel();
794 rHWrt.m_bLFPossible =
true;
802 OString aToken = rInfo.aToken;
803 if( (!rHWrt.m_bCfgOutStyles || rHWrt.mbXHTML) && rInfo.bParaPossible && !bPara &&
804 (bHasParSpace || pAdjItem) )
809 rHWrt.m_bNoAlign =
false;
816 eLang = rHWrt.m_eLang;
822 for(sal_uInt16
i : aWhichIds)
826 if( SfxItemState::SET == rInfo.pItemSet->GetItemState(
i,
829 rInfo.pItemSet->ClearItem(
i );
849 (!rInfo.bInNumberBulletList && !rHWrt.m_nDefListLvl) ||
850 (rInfo.bInNumberBulletList && !bNumbered) ||
851 (!rHWrt.m_bCfgOutStyles &&
852 (bHasParSpace || pAdjItem ||
854 nDir != rHWrt.m_nDirection ||
855 rHWrt.m_bCfgOutStyles )
858 rHWrt.m_bTextAttr =
false;
859 rHWrt.m_bOutOpts =
true;
861 OString sOut =
"<" + rHWrt.GetNamespace() + aToken;
867 rHWrt.OutLanguage( eLang );
870 if( nDir != rHWrt.m_nDirection )
872 if( !sOut.isEmpty() )
877 rHWrt.OutDirection( nDir );
880 if( rHWrt.m_bCfgOutStyles &&
886 OUString aClass( pFormatInfo->
aClass );
889 if( !aClass.isEmpty() )
891 switch( rHWrt.m_nCSS1Script )
905 rHWrt.m_eDestEnc, &rHWrt.m_aNonConvertableCharacters );
912 if( !rHWrt.m_bNoAlign && pAdjItem )
915 rHWrt.m_bParaDotLeaders = bPara && rHWrt.m_bCfgPrintLayout && rHWrt.indexOfDotLeaders(
919 if (rHWrt.m_bCfgOutStyles && rInfo.pItemSet)
924 if (rHWrt.m_bParaDotLeaders) {
937 ( rHWrt.m_bCfgOutStyles || bHasParSpace );
941 rInfo.aToken.clear();
944 if( nBulletGrfLvl != 255 )
946 OSL_ENSURE( aNumInfo.
GetNumRule(),
"Where is the numbering gone???" );
947 OSL_ENSURE( nBulletGrfLvl <
MAXLEVEL,
"There are not this many layers." );
950 rHWrt.m_aBulletGrfs[nBulletGrfLvl]);
953 rHWrt.GetNumInfo() = aNumInfo;
956 rHWrt.m_nDfltLeftMargin = 0;
957 rHWrt.m_nDfltRightMargin = 0;
958 rHWrt.m_nDfltFirstLineIndent = 0;
959 rHWrt.m_nDfltTopMargin = 0;
960 rHWrt.m_nDfltBottomMargin = 0;
961 rHWrt.m_nLeftMargin = 0;
962 rHWrt.m_nFirstLineIndent = 0;
970 if( rInfo.aToken.isEmpty() )
975 if( rInfo.bInNumberBulletList )
991 if( rInfo.ShouldOutputToken() )
1000 if( rInfo.bParaPossible && rInfo.bOutPara )
1019 if( rInfo.bInNumberBulletList )
1028 class HTMLStartEndPos
1032 std::unique_ptr<SfxPoolItem> pItem;
1036 HTMLStartEndPos(
const SfxPoolItem& rItem, sal_Int32 nStt, sal_Int32 nE );
1040 void SetStart( sal_Int32 nStt ) { nStart = nStt; }
1041 sal_Int32 GetStart()
const {
return nStart; }
1043 sal_Int32 GetEnd()
const {
return nEnd; }
1044 void SetEnd( sal_Int32 nE ) { nEnd = nE; }
1049 HTMLStartEndPos::HTMLStartEndPos(
const SfxPoolItem& rItem, sal_Int32 nStt,
1053 pItem( rItem.
Clone() )
1068 HTML_AUTOFMT_VALUE };
1072 HTMLStartEndPositions aStartLst;
1073 HTMLStartEndPositions aEndLst;
1074 std::deque<sal_Int32> aScriptChgLst;
1079 std::vector<sal_uInt16> aScriptLst;
1083 std::optional<Color> xDfltColor;
1084 std::set<OUString>& rScriptTextStyles;
1087 bool bOutStyles : 1;
1091 void InsertItem_( HTMLStartEndPos *pPos, HTMLStartEndPositions::size_type nEndPos );
1092 void RemoveItem_( HTMLStartEndPositions::size_type nEndPos );
1098 bool ExistsOnTagItem( sal_uInt16 nWhich, sal_Int32 nPos );
1102 bool ExistsOffTagItem( sal_uInt16 nWhich, sal_Int32 nStartPos,
1103 sal_Int32 nEndPos );
1106 void FixSplittedItem( HTMLStartEndPos *pPos, sal_Int32 nNewEnd,
1107 HTMLStartEndPositions::size_type nStartPos );
1110 void InsertItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1114 void SplitItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1118 void InsertNoScript(
const SfxPoolItem& rItem, sal_Int32 nStart,
1127 HTMLEndPosLst(
SwDoc *pDoc,
SwDoc* pTemplate, std::optional<Color> xDfltColor,
1129 const OUString& rText, std::set<OUString>& rStyles );
1137 bool bParaAttrs=
false );
1141 sal_uInt16 GetScriptAtPos( sal_Int32 nPos,
1144 void OutStartAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos,
1149 bool IsHTMLMode(
sal_uLong nMode )
const {
return (nHTMLMode & nMode) != 0; }
1154 void HTMLEndPosLst::InsertItem_( HTMLStartEndPos *pPos, HTMLStartEndPositions::size_type nEndPos )
1158 sal_Int32 nStart = pPos->GetStart();
1159 HTMLStartEndPositions::size_type
i {0};
1161 while( i < aStartLst.size() && aStartLst[
i]->GetStart() <= nStart )
1163 aStartLst.insert( aStartLst.begin() +
i, pPos );
1166 aEndLst.insert( aEndLst.begin() + nEndPos, pPos );
1169 void HTMLEndPosLst::RemoveItem_( HTMLStartEndPositions::size_type nEndPos )
1171 HTMLStartEndPos *pPos = aEndLst[nEndPos];
1174 HTMLStartEndPositions::iterator it =
1175 std::find(aStartLst.begin(), aStartLst.end(), pPos );
1176 OSL_ENSURE(it != aStartLst.end(),
"Item not found in Start List!");
1177 if( it != aStartLst.end() )
1178 aStartLst.erase( it );
1180 aEndLst.erase( aEndLst.begin() + nEndPos );
1188 switch( rItem.
Which() )
1193 switch( static_cast<const SvxPostureItem&>(rItem).GetPosture() )
1196 eState = HTML_ON_VALUE;
1199 eState = HTML_OFF_VALUE;
1202 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1203 eState = HTML_STYLE_VALUE;
1209 switch( static_cast<const SvxCrossedOutItem&>(rItem).GetStrikeout() )
1213 eState = HTML_ON_VALUE;
1216 eState = HTML_OFF_VALUE;
1224 switch( static_cast<SvxEscapement>(static_cast<const SvxEscapementItem&>(rItem).GetEnumValue()) )
1226 case SvxEscapement::Superscript:
1227 case SvxEscapement::Subscript:
1228 eState = HTML_ON_VALUE;
1230 case SvxEscapement::Off:
1231 eState = HTML_OFF_VALUE;
1239 switch( static_cast<const SvxUnderlineItem&>(rItem).GetLineStyle() )
1242 eState = HTML_ON_VALUE;
1245 eState = HTML_OFF_VALUE;
1248 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1249 eState = HTML_STYLE_VALUE;
1256 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1257 eState = HTML_STYLE_VALUE;
1263 switch( static_cast<const SvxWeightItem&>(rItem).GetWeight() )
1266 eState = HTML_ON_VALUE;
1269 eState = HTML_OFF_VALUE;
1272 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1273 eState = HTML_STYLE_VALUE;
1284 eState = HTML_COLOR_VALUE;
1297 eState = HTML_REAL_VALUE;
1301 eState = HTML_CHRFMT_VALUE;
1305 eState = HTML_AUTOFMT_VALUE;
1309 eState = HTML_STYLE_VALUE;
1313 eState = HTML_STYLE_VALUE;
1317 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1318 eState = HTML_STYLE_VALUE;
1322 eState = HTML_DROPCAP_VALUE;
1326 if( IsHTMLMode(HTMLMODE_SOME_STYLES) )
1327 eState = HTML_STYLE_VALUE;
1334 bool HTMLEndPosLst::ExistsOnTagItem( sal_uInt16 nWhich, sal_Int32 nPos )
1336 for(
auto pTest : aStartLst )
1338 if( pTest->GetStart() > nPos )
1343 else if( pTest->GetEnd() > nPos )
1348 if( pItem->
Which() == nWhich &&
1349 HTML_ON_VALUE == GetHTMLItemState(*pItem) )
1360 bool HTMLEndPosLst::ExistsOffTagItem( sal_uInt16 nWhich, sal_Int32 nStartPos,
1370 for(
auto pTest : aStartLst )
1372 if( pTest->GetStart() > nStartPos )
1377 else if( pTest->GetStart()==nStartPos &&
1378 pTest->GetEnd()==nEndPos )
1383 sal_uInt16 nTstWhich = pItem->
Which();
1387 HTML_OFF_VALUE == GetHTMLItemState(*pItem) )
1399 void HTMLEndPosLst::FixSplittedItem( HTMLStartEndPos *pPos, sal_Int32 nNewEnd,
1400 HTMLStartEndPositions::size_type nStartPos )
1403 pPos->SetEnd( nNewEnd );
1406 HTMLStartEndPositions::iterator it =
1407 std::find(aEndLst.begin(), aEndLst.end(), pPos );
1408 OSL_ENSURE(it != aEndLst.end(),
"Item not found in End List!" );
1409 if( it != aEndLst.end() )
1410 aEndLst.erase( it );
1413 HTMLStartEndPositions::size_type nEndPos {0};
1414 while( nEndPos < aEndLst.size() && aEndLst[nEndPos]->GetEnd() <= nNewEnd )
1416 aEndLst.insert( aEndLst.begin() + nEndPos, pPos );
1419 for( HTMLStartEndPositions::size_type i = nStartPos+1;
i<aStartLst.size(); ++
i )
1421 HTMLStartEndPos *pTest = aStartLst[
i];
1422 sal_Int32 nTestEnd = pTest->GetEnd();
1423 if( pTest->GetStart() >= nNewEnd )
1429 else if( nTestEnd > nNewEnd )
1435 pTest->SetEnd( nNewEnd );
1438 it = std::find(aEndLst.begin(), aEndLst.end(), pTest );
1439 OSL_ENSURE(it != aEndLst.end(),
"Item not found in End List!" );
1440 if( it != aEndLst.end() )
1441 aEndLst.erase( it );
1445 aEndLst.insert( aEndLst.begin() + nEndPos, pTest );
1448 InsertItem( *pTest->GetItem(), nNewEnd, nTestEnd );
1453 void HTMLEndPosLst::InsertItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1456 HTMLStartEndPositions::size_type
i;
1457 for( i = 0; i < aEndLst.size(); i++ )
1459 HTMLStartEndPos *pTest = aEndLst[i];
1460 sal_Int32 nTestEnd = pTest->GetEnd();
1461 if( nTestEnd <= nStart )
1466 else if( nTestEnd < nEnd )
1468 if( pTest->GetStart() < nStart )
1472 InsertItem_(
new HTMLStartEndPos( rItem, nStart, nTestEnd ), i );
1485 InsertItem_(
new HTMLStartEndPos( rItem, nStart, nEnd ), i );
1488 void HTMLEndPosLst::SplitItem(
const SfxPoolItem& rItem, sal_Int32 nStart,
1491 sal_uInt16 nWhich = rItem.
Which();
1496 for( HTMLStartEndPositions::size_type i=0; i<aStartLst.size(); ++i )
1498 HTMLStartEndPos *pTest = aStartLst[i];
1499 sal_Int32 nTestStart = pTest->GetStart();
1500 sal_Int32 nTestEnd = pTest->GetEnd();
1502 if( nTestStart >= nEnd )
1507 else if( nTestEnd > nStart )
1513 if( pItem->
Which() == nWhich &&
1514 HTML_ON_VALUE == GetHTMLItemState( *pItem ) )
1516 bool bDelete =
true;
1518 if( nTestStart < nStart )
1522 FixSplittedItem( pTest, nStart, i );
1529 aStartLst.erase( aStartLst.begin() + i );
1532 HTMLStartEndPositions::iterator it =
1533 std::find(aEndLst.begin(), aEndLst.end(), pTest );
1534 OSL_ENSURE(it != aEndLst.end(),
"Item not found in End List!" );
1535 if( it != aEndLst.end() )
1536 aEndLst.erase( it );
1541 if( nTestEnd > nEnd )
1543 InsertItem( *pTest->GetItem(), nEnd, nTestEnd );
1557 std::unique_ptr<SwHTMLFormatInfo> pTmpInfo(
new SwHTMLFormatInfo(&rFormat));
1558 SwHTMLFormatInfos::iterator it = rFormatInfos.find( pTmpInfo );
1559 if (it != rFormatInfos.end())
1561 pFormatInfo = it->get();
1567 rFormatInfos.insert(std::unique_ptr<SwHTMLFormatInfo>(pFormatInfo));
1568 if ( rScriptTextStyles.count( rFormat.
GetName() ) )
1575 HTMLEndPosLst::HTMLEndPosLst(
SwDoc* pD,
SwDoc* pTempl, std::optional<Color> xDfltCol,
1576 bool bStyles,
sal_uLong nMode,
const OUString& rText,
1577 std::set<OUString>& rStyles)
1580 , xDfltColor(
std::move(xDfltCol))
1581 , rScriptTextStyles(rStyles)
1583 , bOutStyles(bStyles)
1585 sal_Int32 nEndPos = rText.getLength();
1587 while( nPos < nEndPos )
1591 aScriptChgLst.push_back( nPos );
1592 aScriptLst.push_back( nScript );
1596 HTMLEndPosLst::~HTMLEndPosLst()
1598 OSL_ENSURE(aStartLst.empty(),
"Start List not empty in destructor");
1599 OSL_ENSURE(aEndLst.empty(),
"End List not empty in destructor");
1602 void HTMLEndPosLst::InsertNoScript(
const SfxPoolItem& rItem,
1603 sal_Int32 nStart, sal_Int32 nEnd,
1607 if( nStart == nEnd )
1610 bool bSet =
false, bSplit =
false;
1611 switch( GetHTMLItemState(rItem) )
1615 if( !ExistsOnTagItem( rItem.
Which(), nStart ) )
1619 case HTML_OFF_VALUE:
1624 if( ExistsOnTagItem( rItem.
Which(), nStart ) )
1626 bSet = bOutStyles && !bParaAttrs &&
1627 !ExistsOffTagItem( rItem.
Which(), nStart, nEnd );
1630 case HTML_REAL_VALUE:
1635 case HTML_STYLE_VALUE:
1640 bSet = bOutStyles &&
1647 case HTML_CHRFMT_VALUE:
1650 "Not a character style after all" );
1652 const SwCharFormat* pFormat = rChrFormat.GetCharFormat();
1654 const SwHTMLFormatInfo *pFormatInfo = GetFormatInfo( *pFormat, rFormatInfos );
1655 if( !pFormatInfo->
aToken.isEmpty() )
1659 InsertItem( rItem, nStart, nEnd );
1664 rFormatInfos,
true, bParaAttrs );
1669 case HTML_AUTOFMT_VALUE:
1672 const std::shared_ptr<SfxItemSet>& pSet = rAutoFormat.
GetStyleHandle();
1674 Insert( *pSet, nStart, nEnd, rFormatInfos,
true, bParaAttrs );
1678 case HTML_COLOR_VALUE:
1683 "Not a foreground color, after all" );
1684 Color aColor( static_cast<const SvxColorItem&>(rItem).
GetValue() );
1685 if( COL_AUTO == aColor )
1687 bSet = !bParaAttrs || !xDfltColor ||
1688 !xDfltColor->IsRGBEqual( aColor );
1692 case HTML_DROPCAP_VALUE:
1695 "Not a drop cap, after all" );
1701 const SwCharFormat *pCharFormat = rDrop.GetCharFormat();
1705 rFormatInfos,
true, bParaAttrs );
1719 InsertItem( rItem, nStart, nEnd );
1721 SplitItem( rItem, nStart, nEnd );
1724 void HTMLEndPosLst::Insert(
const SfxPoolItem& rItem,
1725 sal_Int32 nStart, sal_Int32 nEnd,
1728 bool bDependsOnScript =
false, bDependsOnAnyScript =
false;
1729 sal_uInt16 nScript = i18n::ScriptType::LATIN;
1730 switch( rItem.
Which() )
1737 bDependsOnScript =
true;
1738 nScript = i18n::ScriptType::LATIN;
1746 bDependsOnScript =
true;
1747 nScript = i18n::ScriptType::ASIAN;
1755 bDependsOnScript =
true;
1756 nScript = i18n::ScriptType::COMPLEX;
1762 const SwHTMLFormatInfo *pFormatInfo = GetFormatInfo( *pFormat, rFormatInfos );
1765 bDependsOnScript =
true;
1766 bDependsOnAnyScript =
true;
1772 if( GetFormatInfo( *pDoc->getIDocumentStylePoolAccess().GetCharFormatFromPool(
1774 GetFormatInfo( *pDoc->getIDocumentStylePoolAccess().GetCharFormatFromPool(
1777 bDependsOnScript =
true;
1778 bDependsOnAnyScript =
true;
1784 if( bDependsOnScript )
1786 sal_Int32 nPos = nStart;
1787 for(
size_t i=0; i < aScriptChgLst.size(); i++ )
1789 sal_Int32 nChgPos = aScriptChgLst[i];
1790 if( nPos >= nChgPos )
1796 if( nEnd <= nChgPos )
1801 if( bDependsOnAnyScript || nScript == aScriptLst[i] )
1802 InsertNoScript( rItem, nPos, nEnd, rFormatInfos,
1810 if( bDependsOnAnyScript || nScript == aScriptLst[i] )
1811 InsertNoScript( rItem, nPos, nChgPos, rFormatInfos, bParaAttrs );
1817 InsertNoScript( rItem, nStart, nEnd, rFormatInfos, bParaAttrs );
1821 void HTMLEndPosLst::Insert(
const SfxItemSet& rItemSet,
1822 sal_Int32 nStart, sal_Int32 nEnd,
1824 bool bDeep,
bool bParaAttrs )
1828 sal_uInt16 nWhich = aIter.FirstWhich();
1832 if( SfxItemState::SET == rItemSet.
GetItemState( nWhich, bDeep, &pItem ) )
1834 Insert( *pItem, nStart, nEnd, rFormatInfos, bParaAttrs );
1837 nWhich = aIter.NextWhich();
1856 bool bOutStylesOld = bOutStyles;
1858 Insert( aItemSet, nPos, nPos+1, rFormatInfos,
false );
1859 bOutStyles = bOutStylesOld;
1862 sal_uInt16 HTMLEndPosLst::GetScriptAtPos( sal_Int32 nPos, sal_uInt16 nWeak )
1866 size_t nScriptChgs = aScriptChgLst.size();
1868 while( i < nScriptChgs && nPos >= aScriptChgLst[i] )
1870 OSL_ENSURE( i < nScriptChgs,
"script list is too short" );
1871 if( i < nScriptChgs )
1873 if( i18n::ScriptType::WEAK == aScriptLst[i] )
1882 void HTMLEndPosLst::OutStartAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos,
1889 HTMLStartEndPositions::size_type nCharBoxIndex = 0;
1890 while( nCharBoxIndex < aStartLst.size() &&
1897 for( HTMLStartEndPositions::size_type i=0; i< aStartLst.size(); ++i )
1899 HTMLStartEndPos *pPos =
nullptr;
1900 if( nCharBoxIndex < aStartLst.size() )
1903 pPos = aStartLst[nCharBoxIndex];
1904 else if( i == nCharBoxIndex )
1905 pPos = aStartLst[0];
1907 pPos = aStartLst[i];
1910 pPos = aStartLst[i];
1912 sal_Int32 nStart = pPos->GetStart();
1918 else if( nStart == nPos )
1922 sal_uInt16 nWhich = pPos->GetItem()->Which();
1941 void HTMLEndPosLst::OutEndAttrs(
SwHTMLWriter& rHWrt, sal_Int32 nPos,
1947 HTMLStartEndPositions::size_type i {0};
1948 while( i < aEndLst.size() )
1950 HTMLStartEndPos *pPos = aEndLst[i];
1951 sal_Int32 nEnd = pPos->GetEnd();
1953 if( SAL_MAX_INT32 == nPos || nEnd == nPos )
1961 bool bSkipOut =
false;
1964 HTMLStartEndPositions::iterator it =
1965 std::find(aStartLst.begin(), aStartLst.end(), pPos );
1966 OSL_ENSURE(it != aStartLst.end(),
"Item not found in Start List!" );
1967 if (it != aStartLst.end())
1969 while(it != aStartLst.end() )
1971 HTMLStartEndPos *pEndPos = *it;
1973 *
static_cast<const SvxBoxItem*
>(pEndPos->GetItem()) ==
1974 *static_cast<const SvxBoxItem*>(pPos->GetItem()) )
1976 pEndPos->SetStart(pPos->GetStart());
1990 else if( nEnd > nPos )
1999 OSL_ENSURE( nEnd >= nPos,
2000 "The attribute should've been closed a long time ago" );
2012 const OUString& rStr = pNd->
GetText();
2013 sal_Int32 nEnd = rStr.getLength();
2043 aHtml.endAttribute();
2049 sal_Int32 nLeft =
static_cast<const SvxLRSpaceItem*
>(pItem)->GetLeft();
2050 sal_Int32 nRight =
static_cast<const SvxLRSpaceItem*
>(pItem)->GetRight();
2051 if( nLeft || nRight )
2122 if( pItemSet && pItemSet->
Count() &&
2151 bool bPageBreakBehind =
false;
2156 bool bPageBreakBefore =
false;
2165 bPageBreakBefore =
true;
2169 switch( static_cast<const SvxFormatBreakItem *>(pItem)->GetBreak() )
2171 case SvxBreak::PageBefore:
2172 bPageBreakBefore =
true;
2174 case SvxBreak::PageAfter:
2175 bPageBreakBehind =
true;
2177 case SvxBreak::PageBoth:
2178 bPageBreakBefore =
true;
2179 bPageBreakBehind =
true;
2187 if( bPageBreakBefore )
2206 nEnd = rHTMLWrt.
m_pCurrentPam->GetMark()->nContent.GetIndex();
2214 SwHTMLTextCollOutputInfo aFormatInfo;
2236 sal_Int32 nOffset = 0;
2237 OUString aOutlineText;
2246 nOffset = nOffset + aOutlineText.getLength();
2247 aFullText = aOutlineText;
2249 OUString aFootEndNoteSym;
2253 nOffset = nOffset + aFootEndNoteSym.getLength();
2254 aFullText += aFootEndNoteSym;
2269 if( aFormatInfo.pItemSet )
2271 aEndPosLst.Insert( *aFormatInfo.pItemSet, 0, nEnd + nOffset,
2279 aEndPosLst.OutStartAttrs( rHTMLWrt, 0 );
2285 if( !aOutlineText.isEmpty() )
2292 aEndPosLst.GetScriptAtPos( aOutlineText.getLength(), rHTMLWrt.
m_nCSS1Script ) );
2301 size_t nAttrPos = 0;
2302 sal_Int32 nStrPos = rHTMLWrt.
m_pCurrentPam->GetPoint()->nContent.GetIndex();
2305 if( nCntAttr && nStrPos > ( pHt = pNd->
GetSwpHints().
Get(0) )->GetStart() )
2309 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset );
2318 const sal_Int32 nHtEnd = *pHt->
End(),
2324 if( nHtEnd == nHtStt )
2329 aEndPosLst.Insert( pHt->
GetAttr(), nHtStt + nOffset,
2334 sal_Int32 nTmpStt = nHtStt < nStrPos ? nStrPos : nHtStt;
2335 sal_Int32 nTmpEnd = std::min(nHtEnd, nEnd);
2336 aEndPosLst.Insert( pHt->
GetAttr(), nTmpStt + nOffset,
2344 }
while( nAttrPos < nCntAttr && nStrPos >
2348 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset );
2349 aEndPosLst.OutStartAttrs( rHTMLWrt, nStrPos + nOffset );
2352 bool bWriteBreak = (HtmlTokenId::PREFORMTXT_ON != rHTMLWrt.
m_nLastParaToken);
2354 bWriteBreak =
false;
2359 for( ; nStrPos < nEnd; nStrPos++ )
2364 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset, &aContext );
2370 bool bOutChar =
true;
2372 if (nAttrPos < nCntAttr && pHt->GetStart() == nStrPos)
2377 if( *pHt->
End() != nStrPos )
2382 aEndPosLst.Insert( pHt->
GetAttr(), nStrPos + nOffset,
2383 *pHt->
End() + nOffset,
2390 OSL_ENSURE( !pTextHt,
"Why is there already an attribute without an end?" );
2403 bWriteBreak =
false;
2408 }
while( ++nAttrPos < nCntAttr && nStrPos ==
2419 aEndPosLst.Insert( *static_cast<const SwDrawFrameFormat *>(pFrameFormat),
2424 aEndPosLst.OutEndAttrs( rHTMLWrt, nStrPos + nOffset, &aContext );
2425 aEndPosLst.OutStartAttrs( rHTMLWrt, nStrPos + nOffset, &aContext );
2431 rStr[nStrPos-1] ==
' ';
2434 nStrPos + nOffset, nCSS1Script );
2443 sal_uInt32 c = rStr[nStrPos];
2444 if( rtl::isHighSurrogate(c) && nStrPos < nEnd - 1 )
2447 if( rtl::isLowSurrogate(d) )
2449 c = rtl::combineSurrogates(c, d);
2461 sal_Int32 nWordLen = rStr.indexOf(
' ', nStrPos+1 );
2462 if( nWordLen == -1 )
2464 nWordLen -= nStrPos;
2497 bWriteBreak = (0x0a == c) &&
2511 OSL_ENSURE( !bFlysLeft,
"Not all frames were saved!" );
2521 if( bEndOfCell && !nEnd &&
2533 if (rULSpace.
GetLower() > 0 && !bEndOfCell)
2543 const char* pString;
2571 nEnd > 0 &&
' ' == rStr[nEnd-1] )
2575 if (nIndexTab > -1) {
2576 OString sOut =
OUStringToOString(rStr.subView(nIndexTab + 1), RTL_TEXTENCODING_ASCII_US);
2586 if( bPageBreakBehind )
2596 Size aSz( bVert ? 0 : nVal, bVert ? nVal : 0 );
2610 if( static_cast<SwHTMLWriter&>(rWrt).m_bCfgOutStyles && static_cast<SwHTMLWriter&>(rWrt).m_bTextAttr )
2633 Color aColor( static_cast<const SvxColorItem&>(rHt).
GetValue() );
2707 .WriteCharPtr(
"\">");
2715 .WriteCharPtr(
"\">" );
2749 sal_uInt16 nSize = nHeight / 20;
2751 + OString::number(static_cast<sal_Int32>(nSize)) +
"pt\"";
2761 OString::number(static_cast<sal_Int32>(nSize)) +
"\"";
2866 if( !aTag.isEmpty() )
2922 if( static_cast<const SvxBlinkItem&>(rHt).GetValue() )
2941 bool bEvents = pMacTable !=
nullptr && !pMacTable->
empty();
2944 if(
aURL.isEmpty() && !bEvents && rINetFormat.
GetName().isEmpty() )
2956 bool bScriptDependent =
false;
2960 std::unique_ptr<SwHTMLFormatInfo> pFormatInfo(
new SwHTMLFormatInfo(pFormat));
2964 bScriptDependent = (*it)->bScriptDependent;
2967 if( !bScriptDependent )
2971 std::unique_ptr<SwHTMLFormatInfo> pFormatInfo(
new SwHTMLFormatInfo(pFormat));
2975 bScriptDependent = (*it)->bScriptDependent;
2979 if( bScriptDependent )
2982 const char* pStr =
nullptr;
2995 sOut += pStr + OStringLiteral(
"\"");
3003 if( !
aURL.isEmpty() || bEvents )
3005 OUString sTmp(
aURL.toAsciiUpperCase() );
3006 sal_Int32 nPos = sTmp.indexOf(
"\" REL=" );
3009 sRel =
aURL.copy( nPos+1 );
3020 if( !rINetFormat.
GetName().isEmpty() )
3030 if( !rTarget.isEmpty() )
3038 if( !sRel.isEmpty() )
3041 if( !sOut.isEmpty() )
3083 OSL_ENSURE( rHTMLWrt.
m_aINetFormats.size(),
"there must be a URL attribute missing" );
3118 SwHTMLFormatInfos::const_iterator it = rHTMLWrt.
m_CharFormatInfos.find(pTmpInfo);
3123 OSL_ENSURE( pFormatInfo,
"Why is there no information about the character style?" );
3128 if( !pFormatInfo->
aToken.isEmpty() )
3129 sOut += pFormatInfo->
aToken;
3138 OUString aClass( pFormatInfo->
aClass );
3141 if( !aClass.isEmpty() )
3146 aClass +=
"western";
3165 OString aTag = !pFormatInfo->
aToken.isEmpty() ? pFormatInfo->
aToken.getStr()
3180 const char* pStr =
nullptr;
tools::Long const nBottomMargin
virtual SwCharFormat * GetCharFormatFromPool(sal_uInt16 nId)=0
sal_uInt8 GetLevel() const
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)
sal_uLong GetIndex() const
SwHTMLNumRuleInfo & GetNumInfo()
bool mbXHTML
If XHTML markup should be written instead of HTML.
#define OOO_STRING_SVTOOLS_HTML_O_clear
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
static SVT_DLLPUBLIC SvStream & Out_String(SvStream &, const OUString &, rtl_TextEncoding eDestEnc, OUString *pNonConvertableChars=nullptr)
static SVT_DLLPUBLIC void applyColor(HtmlWriter &rHtmlWriter, const OString &aAttributeName, const Color &rColor)
sal_uLong StartOfSectionIndex() const
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_uInt16 m_nTextAttrsToIgnore
tools::Long const nLeftMargin
#define OOO_STRING_SVTOOLS_HTML_O_SDonmouseover
static SVT_DLLPUBLIC SvStream & Out_Events(SvStream &, const SvxMacroTableDtor &, const HTMLOutEvent *, bool bOutStarBasic, rtl_TextEncoding eDestEnc, OUString *pNonConvertableChars)
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 sal_uInt16 GetDefListLvl(const OUString &rNm, sal_uInt16 nPoolId)
static void OutHTML_SwFormatOff(Writer &rWrt, const SwHTMLTextCollOutputInfo &rInfo)
LanguageType GetLanguage(SfxItemSet const &aSet, sal_uInt16 nLangWhichId)
sal_Int32 toInt32(OUString const &rStr)
OUString m_aNonConvertableCharacters
constexpr TypedWhichId< SwFormatFlyCnt > RES_TXTATR_FLYCNT(57)
#define sCSS2_P_CLASS_leaders
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)
SvStream & WriteOString(const OString &rStr)
void single(const OString &aContent)
Writer & OutCSS1_ParaTagStyleOpt(Writer &rWrt, const SfxItemSet &rItemSet)
constexpr TypedWhichId< SvxBoxItem > RES_CHRATR_BOX(40)
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< SwFormatField > RES_TXTATR_ANNOTATION(59)
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
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 TypedWhichId< SvxCaseMapItem > RES_CHRATR_CASEMAP(RES_CHRATR_BEGIN)
void OutNewLine(bool bCheck=false)
constexpr::Color COL_AUTO(0xFF, 0xFF, 0xFF, 0xFF)
#define OOO_STRING_SVTOOLS_HTML_O_size
static SVT_DLLPUBLIC SvStream & Out_AsciiTag(SvStream &, const OString &rStr, bool bOn=true)
static Writer & OutHTML_SwFormatINetFormat(Writer &rWrt, const SfxPoolItem &rHt)
bool mbReqIF
If the ReqIF subset of XHTML should be written.
SwAttrFnTab aHTMLAttrFnTab
static SVT_DLLPUBLIC SvStream & Out_Char(SvStream &, sal_uInt32 cChar, HTMLOutContext &rContext, OUString *pNonConvertableChars)
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)
IDocumentStylePoolAccess const & getIDocumentStylePoolAccess() const
constexpr TypedWhichId< SwFormatDrop > RES_PARATR_DROP(70)
sal_uLong GetIndex() const
#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)
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
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)
rtl_TextEncoding m_eDestEnc
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
bool OutFlyFrame(sal_uLong nNdIdx, sal_Int32 nContentIdx, HtmlPosition nPos, HTMLOutContext *pContext=nullptr)
const Color & GetColor() const
SwNumberTree::tSwNumTreeNumber GetActualListStartValue() const
Writer & OutHTML_SwFormatFootnote(Writer &rWrt, const SfxPoolItem &rHt)
static SVT_DLLPUBLIC SvStream & FlushToAscii(SvStream &, HTMLOutContext &rContext)
Writer & OutCSS1_HintStyleOpt(Writer &rWrt, const SfxPoolItem &rHt)
tools::Long GetLeft() const
tools::Long Width() 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
SwFrameFormat * GetFrameFormat()
SwpHints & GetSwpHints()
getters for SwpHints
static Writer & OutHTML_SwCrossedOut(Writer &rWrt, const SfxPoolItem &rHt)
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
static sal_uInt32 ToPixel(sal_uInt32 nVal, const bool bVert)
constexpr TypedWhichId< SvxCharHiddenItem > RES_CHRATR_HIDDEN(37)
Point LogicToPixel(const Point &rLogicPt) const
css::uno::Reference< css::i18n::XBreakIterator > const & GetBreakIter() const
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
constexpr sal_uInt16 RES_CHRATR_BEGIN(HINT_BEGIN)
#define OOO_STRING_SVTOOLS_HTML_AL_right
constexpr TypedWhichId< SvxWeightItem > RES_CHRATR_CJK_WEIGHT(26)
void start(const OString &aElement)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
#define OOO_STRING_SVTOOLS_HTML_O_style
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
const o3tl::enumarray< SvxAdjust, unsigned short > aSvxToUnoAdjust USHRT_MAX
#define CSS1_OUTMODE_WESTERN
static Writer & OutHTML_SwPosture(Writer &rWrt, const SfxPoolItem &rHt)
constexpr TypedWhichId< SwTextFormatColl > RES_TXTFMTCOLL(155)
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
tools::Long Height() 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)
constexpr TypedWhichId< SwConditionTextFormatColl > RES_CONDTXTFMTCOLL(158)
void OutHyperlinkHRefValue(const OUString &rURL)
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
bool IgnorePropertyForReqIF(bool bReqIF, std::string_view rProperty, std::string_view rValue)
Determines if rProperty with a given rValue has to be suppressed due to ReqIF mode.
tools::Long const nRightMargin
constexpr TypedWhichId< SvxLRSpaceItem > RES_LR_SPACE(91)
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(157)
#define HTMLMODE_NBSP_IN_TABLES
#define OOO_STRING_SVTOOLS_HTML_image
SvStream & WriteChar(char nChar)
constexpr sal_uInt16 RES_CHRATR_END(46)
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
const sal_uInt16 * GetRanges() const
#define OOO_STRING_SVTOOLS_HTML_O_color
std::vector< HTMLStartEndPos * > HTMLStartEndPositions
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)
sal_Int32 indexOfDotLeaders(sal_uInt16 nPoolId, const OUString &rText)
Writer & OutHTML_INetFormat(Writer &rWrt, const SwFormatINetFormat &rINetFormat, bool bOn)
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)
#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)
const editeng::SvxBorderLine * GetBottom() const
#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...
Base class of the Writer document model elements.
static const SwFormat * GetParentFormat(const SwFormat &rFormat, sal_uInt16 nDeep)