20#include <com/sun/star/embed/XEmbeddedObject.hpp>
21#include <com/sun/star/i18n/ScriptType.hpp>
22#include <com/sun/star/drawing/XShape.hpp>
23#include <com/sun/star/beans/XPropertySet.hpp>
102#if OSL_DEBUG_LEVEL > 1
134const char aTableHeadingName[] =
"Table Heading";
135const char aQuotations[] =
"Quotations";
136const char aCaption[] =
"Caption";
137const char aHeading[] =
"Heading";
138const char aQuotation[] =
"Quotation";
139const char aSourceText[] =
"Source Text";
142constexpr OUStringLiteral aDocumentString =
u"Document";
143constexpr OUStringLiteral aDivString =
u"Div";
144constexpr OUStringLiteral aSectString =
u"Sect";
145constexpr OUStringLiteral aHString =
u"H";
146constexpr OUStringLiteral aH1String =
u"H1";
147constexpr OUStringLiteral aH2String =
u"H2";
148constexpr OUStringLiteral aH3String =
u"H3";
149constexpr OUStringLiteral aH4String =
u"H4";
150constexpr OUStringLiteral aH5String =
u"H5";
151constexpr OUStringLiteral aH6String =
u"H6";
152constexpr OUStringLiteral aH7String =
u"H7";
153constexpr OUStringLiteral aH8String =
u"H8";
154constexpr OUStringLiteral aH9String =
u"H9";
155constexpr OUStringLiteral aH10String =
u"H10";
156constexpr OUStringLiteral aListString =
u"L";
157constexpr OUStringLiteral aListItemString =
u"LI";
158constexpr OUStringLiteral aListLabelString =
u"Lbl";
159constexpr OUStringLiteral aListBodyString =
u"LBody";
160constexpr OUStringLiteral aBlockQuoteString =
u"BlockQuote";
161constexpr OUStringLiteral aCaptionString =
u"Caption";
162constexpr OUStringLiteral aIndexString =
u"Index";
163constexpr OUStringLiteral aTOCString =
u"TOC";
164constexpr OUStringLiteral aTOCIString =
u"TOCI";
165constexpr OUStringLiteral aTableString =
u"Table";
166constexpr OUStringLiteral aTRString =
u"TR";
167constexpr OUStringLiteral aTDString =
u"TD";
168constexpr OUStringLiteral aTHString =
u"TH";
169constexpr OUStringLiteral aBibEntryString =
u"BibEntry";
170constexpr OUStringLiteral aQuoteString =
u"Quote";
171constexpr OUStringLiteral aSpanString =
u"Span";
172constexpr OUStringLiteral aCodeString =
u"Code";
173constexpr OUStringLiteral aFigureString =
u"Figure";
174constexpr OUStringLiteral aFormulaString =
u"Formula";
175constexpr OUStringLiteral aLinkString =
u"Link";
176constexpr OUStringLiteral aNoteString =
u"Note";
179bool lcl_IsHeadlineCell(
const SwCellFrame& rCellFrame )
191 bRet = sStyleName == aTableHeadingName;
199 OUString
const& rStyleName(pTable->GetTableStyleName());
200 if (!rStyleName.isEmpty())
203 pTable->GetFrameFormat()->GetDoc()->GetTableStyles().FindAutoFormat(rStyleName))
205 bRet |= pTableAF->HasHeaderRow();
214bool lcl_IsInNonStructEnv(
const SwFrame& rFrame )
226 if ( rFrame.
GetUpper() != pTabFrame &&
227 pTabFrame->IsFollow() && pTabFrame->
IsInHeadline( rFrame ) )
235void* lcl_GetKeyFromFrame(
const SwFrame& rFrame )
237 void* pKey =
nullptr;
240 pKey =
const_cast<void*
>(
static_cast<void const *
>(&(
static_cast<const SwPageFrame&
>(rFrame).
GetFormat()->getIDocumentSettingAccess())));
246 pKey =
const_cast<void*
>(
static_cast<void const *
>(
static_cast<const SwTabFrame&
>(rFrame).
GetTable()));
248 pKey =
const_cast<void*
>(
static_cast<void const *
>(
static_cast<const SwRowFrame&
>(rFrame).
GetTabLine()));
253 pKey =
const_cast<void*
>(
static_cast<void const *
>(&
static_cast<const SwCellFrame&
>(rFrame).GetTabBox()->FindStartOfRowSpan( *pTable )));
265 const SwNode* pNode = &rNode;
272 if (aIdx.GetNode().IsTextNode())
275 *rTextFrame.
getRootFrame(), *aIdx.GetNode().GetTextNode());
280 if ( (pPrevNumRule == pNumRule) &&
287 pNode = &aIdx.GetNode();
301 rShell.SwCursorShell::ClearMark();
313 : m_nEndStructureElement( 0 ),
314 m_nRestoreCurrentTag( -1 ),
315 mpNumInfo( pNumInfo ),
316 mpFrameInfo( pFrameInfo ),
317 mpPorInfo( pPorInfo )
325#if OSL_DEBUG_LEVEL > 1
338#if OSL_DEBUG_LEVEL > 1
341 (void)nCurrentStruct;
350#if OSL_DEBUG_LEVEL > 1
356#if OSL_DEBUG_LEVEL > 1
359 (void)nCurrentStruct;
365 void const*
const pKey = lcl_GetKeyFromFrame(rFrame);
370 auto const it(rFrameTagIdMap.find(pKey));
371 if (it != rFrameTagIdMap.end())
388 sal_Int32 nReopenTag = -1;
389 bool bContinue =
false;
394 const SwFrame* pKeyFrame =
nullptr;
404 ( rFrame.
IsFlowFrame() && SwFlowFrame::CastFlowFrame(&rFrame)->IsFollow() ) ||
414 if ((RndStdIds::FLY_AT_PARA == rAnchor.
GetAnchorId()) ||
415 (RndStdIds::FLY_AT_CHAR == rAnchor.
GetAnchorId()) ||
418 pKeyFrame =
static_cast<const SwFlyFrame&
>(rFrame).GetAnchorFrame();
429 if ( -1 != nReopenTag )
433 OSL_ENSURE( bSuccess,
"Failed to reopen tag" );
435#if OSL_DEBUG_LEVEL > 1
442 return bRet && !bContinue;
450 OSL_ENSURE( bSuccess,
"Failed to restore reopened tag" );
452#if OSL_DEBUG_LEVEL > 1
464#if OSL_DEBUG_LEVEL > 1
485 rNumListIdMap[ pNodeNum ] =
nId;
490 rNumListBodyIdMap[ pNodeNum ] =
nId;
503 rNumListBodyIdMap[ pNodeNum ] =
nId;
507 ( rFrame.
IsFlowFrame() && !SwFlowFrame::CastFlowFrame(&rFrame)->IsFollow() && SwFlowFrame::CastFlowFrame(&rFrame)->HasFollow() ) ||
512 const void* pKey = lcl_GetKeyFromFrame( rFrame );
517 rFrameTagIdMap[ pKey ] =
nId;
529#if OSL_DEBUG_LEVEL > 1
548 bool bPlacement =
false;
549 bool bWritingMode =
false;
550 bool bSpaceBefore =
false;
551 bool bSpaceAfter =
false;
552 bool bStartIndent =
false;
553 bool bEndIndent =
false;
554 bool bTextIndent =
false;
555 bool bTextAlign =
false;
557 bool bHeight =
false;
559 bool bRowSpan =
false;
560 bool bAltText =
false;
706 OSL_ENSURE( pFrame->
IsTextFrame(),
"Frame type <-> tag attribute mismatch" );
708 static_cast<const SwTextFrame*
>(pFrame)->GetTextNodeForParaProps()->GetSwAttrSet().GetFirstLineIndent());
716 OSL_ENSURE( pFrame->
IsTextFrame(),
"Frame type <-> tag attribute mismatch" );
717 const SwAttrSet& aSet =
static_cast<const SwTextFrame*
>(pFrame)->GetTextNodeForParaProps()->GetSwAttrSet();
719 if ( SvxAdjust::Block ==
nAdjust || SvxAdjust::Center ==
nAdjust ||
723 eVal = SvxAdjust::Block ==
nAdjust ?
745 ? OUString() : OUString(
" - "));
747 if (!altText.isEmpty())
770 !
static_cast<const SwTabFrame*
>(pFrame)->IsFollow() &&
771 !
static_cast<const SwTabFrame*
>(pFrame)->HasFollow() ) )
796 const TableColumnsMapEntry::const_iterator aLeftIter = rCols.find( nLeft );
797 const TableColumnsMapEntry::const_iterator aRightIter = rCols.find( nRight );
799 OSL_ENSURE( aLeftIter != rCols.end() && aRightIter != rCols.end(),
"Colspan trouble" );
800 if ( aLeftIter != rCols.end() && aRightIter != rCols.end() )
802 nVal = std::distance( aLeftIter, aRightIter );
818 bool bActualText =
false;
819 bool bBaselineShift =
false;
820 bool bTextDecorationType =
false;
821 bool bLinkAttribute =
false;
822 bool bLanguage =
false;
837 bTextDecorationType =
843 bTextDecorationType =
850 bTextDecorationType =
862 OUString aActualText;
864 aActualText = OUString(
u'\x00ad');
870 if ( bBaselineShift )
874 if ( nVal > 0 ) nVal = 33;
875 else if ( nVal < 0 ) nVal = -33;
879 nVal = nVal * pPor->
Height() / 100;
884 if ( bTextDecorationType )
902 if ( nDefaultLang != nCurrentLanguage )
906 if ( bLinkAttribute )
912 auto aIter = std::find_if(rLinkIdMap.begin(), rLinkIdMap.end(),
913 [&aPorCenter](
const IdMapEntry& rEntry) { return rEntry.first.Contains(aPorCenter); });
914 if (aIter != rLinkIdMap.end())
916 sal_Int32 nLinkId = (*aIter).second;
929 switch (rFormat.GetNumberingType())
931 case css::style::NumberingType::CHARS_UPPER_LETTER:
933 case css::style::NumberingType::CHARS_LOWER_LETTER:
935 case css::style::NumberingType::ROMAN_UPPER:
937 case css::style::NumberingType::ROMAN_LOWER:
939 case css::style::NumberingType::ARABIC:
941 case css::style::NumberingType::CHAR_SPECIAL:
942 switch (rFormat.GetBulletChar())
944 case u'\u2022':
case u'\uE12C':
case u'\uE01E':
case u'\uE437':
946 case u'\u2218':
case u'\u25CB':
case u'\u25E6':
948 case u'\u25A0':
case u'\u25AA':
case u'\uE00A':
970 OSL_ENSURE(
mpNumInfo,
"List without mpNumInfo?" );
979 if (lcl_IsInNonStructEnv(rTextFrame))
983 for (SwFlowFrame
const* pPrecede = rTextFrame.GetPrecede(); pPrecede; pPrecede = pPrecede->GetPrecede())
996 const bool bNumbered = !pTextNd->
IsOutline() && pNodeNum && pNodeNum->
GetParent() && pNumRule;
1005 const bool bSameNumbering = lcl_HasPreviousParaSameNumRule(rTextFrame, *pTextNd);
1008 if ( bSameNumbering )
1010 sal_Int32 nReopenTag = -1;
1020 if ( bNewSubListStart || bNoLabel )
1025 if ( bNewSubListStart )
1029 NumListBodyIdMap::const_iterator aIter;
1032 aIter = rNumListBodyIdMap.find( pParent );
1033 while ( aIter == rNumListBodyIdMap.end() &&
nullptr != ( pParent = pParent->
GetParent() ) );
1035 if ( aIter != rNumListBodyIdMap.end() )
1036 nReopenTag = (*aIter).second;
1047 const NumListBodyIdMap::const_iterator aIter = rNumListBodyIdMap.find( pPrevious );
1048 if ( aIter != rNumListBodyIdMap.end() )
1050 nReopenTag = (*aIter).second;
1054 pPrevious = pPrevious->
GetPred(
true);
1070 const NumListIdMap::const_iterator aIter = rNumListIdMap.find( pPrevious );
1071 if ( aIter != rNumListIdMap.end() )
1073 nReopenTag = (*aIter).second;
1077 pPrevious = pPrevious->
GetPred(
true);
1081 if ( -1 != nReopenTag )
1086#if OSL_DEBUG_LEVEL > 1
1095 rNumListIdMap.clear();
1097 rNumListBodyIdMap.clear();
1125 if (lcl_IsInNonStructEnv(*pFrame) && !pFrame->
IsFlyFrame())
1133 sal_uInt16 nPDFType = USHRT_MAX;
1147 aPDFType = aDocumentString;
1163 aPDFType = aDivString;
1173 aPDFType = aNoteString;
1191 aPDFType = aIndexString;
1196 aPDFType = aTOCString;
1203 aPDFType = aSectString;
1226 OUString sStyleName;
1227 OUString sParentStyleName;
1231 if ( pParentTextFormat)
1238 aPDFType = sStyleName;
1242 if (sStyleName == aQuotations)
1245 aPDFType = aBlockQuoteString;
1250 else if (sStyleName == aCaption)
1253 aPDFType = aCaptionString;
1258 else if (sParentStyleName == aCaption)
1261 aPDFType = sStyleName + aCaptionString;
1266 else if (sStyleName == aHeading)
1269 aPDFType = aHString;
1282 aPDFType = aH1String;
1285 aPDFType = aH2String;
1288 aPDFType = aH3String;
1291 aPDFType = aH4String;
1294 aPDFType = aH5String;
1297 aPDFType = aH6String;
1300 aPDFType = aH7String;
1303 aPDFType = aH8String;
1306 aPDFType = aH9String;
1309 aPDFType = aH10String;
1319 nRealLevel =
std::min(nRealLevel, 5);
1348 aPDFType = aTableString;
1356 const TableColumnsMap::const_iterator aIter = rTableColumnsMap.find( pTable );
1358 if ( aIter == rTableColumnsMap.end() )
1363 const SwTabFrame* pMasterFrame = pTabFrame->IsFollow() ? pTabFrame->
FindMaster(
true ) : pTabFrame;
1365 while ( pMasterFrame )
1374 rCols.insert( nLeft );
1376 while ( pCellFrame )
1379 rCols.insert( nRight );
1380 pCellFrame = pCellFrame->
GetNext();
1384 pMasterFrame = pMasterFrame->
GetFollow();
1402 aPDFType = aTRString;
1419 aPDFType = aTHString;
1424 aPDFType = aTDString;
1446 bool bFormula =
false;
1453 uno::Reference< embed::XEmbeddedObject > aRef = aOLEObj.
GetOleRef();
1462 aPDFType = aFormulaString;
1467 aPDFType = aFigureString;
1473 aPDFType = aDivString;
1481 if ( USHRT_MAX != nPDFType )
1506 if ( lcl_IsInNonStructEnv( *pFrame ) )
1509 sal_uInt16 nPDFType = USHRT_MAX;
1520 aPDFType = aSpanString;
1527 std::pair<SwTextNode const*, sal_Int32>
const pos(
1532 OUString sStyleName;
1533 if ( !pInetFormatAttr )
1535 std::vector<SwTextAttr *>
const charAttrs(
1539 ? (*charAttrs.begin())->GetCharFormat().GetCharFormat() :
nullptr;
1545 if( pInetFormatAttr )
1548 aPDFType = aLinkString;
1551 else if (sStyleName == aQuotation)
1554 aPDFType = aQuoteString;
1556 else if (sStyleName == aSourceText)
1559 aPDFType = aCodeString;
1573 nCurrentLanguage != nDefaultLang ||
1574 !sStyleName.isEmpty())
1577 if (!sStyleName.isEmpty())
1578 aPDFType = sStyleName;
1580 aPDFType = aSpanString;
1588 aPDFType = aLinkString;
1604 aPDFType = aLinkString;
1609 aPDFType = aBibEntryString;
1620 aPDFType = aLinkString;
1630 aPDFType = aListLabelString;
1643 if ( USHRT_MAX != nPDFType )
1657 const OUString& rPageRange,
1658 bool bSkipEmptyPages,
1659 bool bEditEngineOnly,
1663 mbSkipEmptyPages( bSkipEmptyPages ),
1664 mbEditEngineOnly( bEditEngineOnly ),
1665 mrPrintData( rPrintData )
1667 if ( !rPageRange.isEmpty() )
1675 sal_Int32 nPageNumber = 0;
1693#if OSL_DEBUG_LEVEL > 1
1700 if ( i18n::ScriptType::ASIAN == nScript )
1702 else if ( i18n::ScriptType::COMPLEX == nScript )
1724 double fScale = 0.75;
1732 aRect.
Move(0, nShiftY);
1742 if ( !pPDFExtOutDevData )
1760 mrSh.SwCursorShell::Push();
1761 mrSh.SwCursorShell::ClearMark();
1772 std::vector<SwFormatField*> vpFields;
1774 for(
auto pFormatField : vpFields)
1776 const SwTextNode* pTNd = pFormatField->GetTextField()->GetpTextNode();
1777 OSL_ENSURE(
nullptr != pTNd,
"Enhanced pdf export - text node is missing");
1778 if(!lcl_TryMoveToNonHiddenField(
mrSh, *pTNd, *pFormatField))
1786 for (sal_Int32 aNotePageNum : aNotePageNums)
1795 const Color* pColor;
1806 pPDFExtOutDevData->
CreateNote(aRect, aNote, aNotePageNum);
1808 mrSh.SwCursorShell::ClearMark();
1816 for(
auto &rAttr :
aArr )
1819 OSL_ENSURE(
nullptr !=
p,
"Enhanced pdf export - SwGetINetAttr is missing" );
1821 const SwTextNode* pTNd =
p->rINetAttr.GetpTextNode();
1822 OSL_ENSURE(
nullptr != pTNd,
"Enhanced pdf export - text node is missing" );
1838 p->rINetAttr.GetINetFormat().GetValue(),
1842 const bool bInternal =
'#' ==
aURL[0];
1850 aTmp.insert( aTmp.begin(),
mrSh.SwCursorShell::GetCursor_()->begin(),
mrSh.SwCursorShell::GetCursor_()->end() );
1851 OSL_ENSURE( !aTmp.empty(),
"Enhanced pdf export - rectangles are missing" );
1858 sal_Int32 nDestId = -1;
1862 mrSh.SwCursorShell::ClearMark();
1878 if ( -1 != nDestPageNum )
1881 nDestId = pPDFExtOutDevData->
CreateDest(aRect, nDestPageNum);
1885 if ( !bInternal || -1 != nDestId )
1891 const size_t nNumOfRects = aTmp.size();
1892 for (
size_t i = 0;
i < nNumOfRects; ++
i )
1895 const SwRect& rLinkRect( aTmp[
i ] );
1900 for (sal_Int32 aLinkPageNum : aLinkPageNums)
1904 const sal_Int32 nLinkId =
1905 pPDFExtOutDevData->
CreateLink(aRect, altText, aLinkPageNum);
1908 const IdMapEntry aLinkEntry( rLinkRect, nLinkId );
1913 pPDFExtOutDevData->
SetLinkDest( nLinkId, nDestId );
1918 if ( bHeaderFooter )
1925 mrSh.SwCursorShell::ClearMark();
1935 (pItem = pFrameFormat->GetAttrSet().GetItemIfSet(
RES_URL )) )
1943 const bool bInternal =
'#' ==
aURL[0];
1946 sal_Int32 nDestId = -1;
1950 mrSh.SwCursorShell::ClearMark();
1965 if ( -1 != nDestPageNum )
1968 nDestId = pPDFExtOutDevData->
CreateDest(aRect, nDestPageNum);
1972 if ( !bInternal || -1 != nDestId )
1975 const SwRect aLinkRect = pFrameFormat->FindLayoutRect(
false, &aNullPt );
1976 OUString
const formatName(pFrameFormat->GetName());
1981 for (sal_Int32 aLinkPageNum : aLinkPageNums)
1984 const sal_Int32 nLinkId =
1985 pPDFExtOutDevData->
CreateLink(aRect, formatName, aLinkPageNum);
1989 pPDFExtOutDevData->
SetLinkDest( nLinkId, nDestId );
1995 if (RndStdIds::FLY_AT_PAGE != rAnch.
GetAnchorId())
2015 if (aScreenPageNums.empty())
2018 uno::Reference<drawing::XShape> xShape(
pObject->getUnoShape(), uno::UNO_QUERY);
2019 if (xShape->getShapeType() ==
"com.sun.star.drawing.MediaShape")
2021 uno::Reference<beans::XPropertySet> xShapePropSet(xShape, uno::UNO_QUERY);
2023 xShapePropSet->getPropertyValue(
"Title") >>= title;
2024 OUString description;
2025 xShapePropSet->getPropertyValue(
"Description") >>= description;
2026 OUString
const altText(title.isEmpty()
2028 : description.isEmpty()
2030 : OUString::Concat(title) + OUString::Concat(
"\n") + OUString::Concat(description));
2033 xShapePropSet->getPropertyValue(
"MediaURL") >>= aMediaURL;
2034 if (!aMediaURL.isEmpty())
2036 OUString
const mimeType(xShapePropSet->getPropertyValue(
"MediaMimeType").get<OUString>());
2039 for (sal_Int32 nScreenPageNum : aScreenPageNums)
2041 sal_Int32 nScreenId = pPDFExtOutDevData->
CreateScreen(aPDFRect, altText, mimeType, nScreenPageNum,
pObject);
2042 if (aMediaURL.startsWith(
"vnd.sun.star.Package:"))
2045 OUString aTempFileURL;
2046 xShapePropSet->getPropertyValue(
"PrivateTempFileURL") >>= aTempFileURL;
2057 mrSh.SwCursorShell::ClearMark();
2062 std::vector<SwFormatField*> vpFields;
2064 for(
auto pFormatField : vpFields )
2066 if( pFormatField->GetTextField() && pFormatField->IsFieldInDoc() )
2068 const SwTextNode* pTNd = pFormatField->GetTextField()->GetpTextNode();
2069 OSL_ENSURE(
nullptr != pTNd,
"Enhanced pdf export - text node is missing" );
2070 if(!lcl_TryMoveToNonHiddenField(
mrSh, *pTNd, *pFormatField))
2073 mrSh.SwCursorShell::SetMark();
2078 aTmp.insert( aTmp.begin(),
mrSh.SwCursorShell::GetCursor_()->begin(),
mrSh.SwCursorShell::GetCursor_()->end() );
2079 OSL_ENSURE( !aTmp.empty(),
"Enhanced pdf export - rectangles are missing" );
2081 mrSh.SwCursorShell::ClearMark();
2094 if ( -1 != nDestPageNum )
2098 const sal_Int32 nDestId = pPDFExtOutDevData->
CreateDest(aRect, nDestPageNum);
2105 const size_t nNumOfRects = aTmp.size();
2106 for (
size_t i = 0;
i < nNumOfRects; ++
i )
2109 const SwRect& rLinkRect( aTmp[
i ] );
2114 for (sal_Int32 aLinkPageNum : aLinkPageNums)
2118 const sal_Int32 nLinkId =
2119 pPDFExtOutDevData->
CreateLink(aRect, content, aLinkPageNum);
2122 const IdMapEntry aLinkEntry( rLinkRect, nLinkId );
2126 pPDFExtOutDevData->
SetLinkDest( nLinkId, nDestId );
2129 if ( bHeaderFooter )
2137 mrSh.SwCursorShell::ClearMark();
2145 for (
size_t nIdx = 0; nIdx < nFootnoteCount; ++nIdx )
2165 mrSh.SwCursorShell::SetMark();
2170 aTmp.insert( aTmp.begin(),
mrSh.SwCursorShell::GetCursor_()->begin(),
mrSh.SwCursorShell::GetCursor_()->end() );
2171 OSL_ENSURE( !aTmp.empty(),
"Enhanced pdf export - rectangles are missing" );
2174 mrSh.SwCursorShell::ClearMark();
2179 const SwRect aLinkRect( aTmp[ 0 ] );
2187 if ( -1 != nDestPageNum )
2198 fnSymbolRect =
SwRect(rDestRect.
Pos().X(),fnSymbolTop,rDestRect.
Width(),symbolHeight);
2203 fnSymbolRect =
SwRect(rDestRect.
Pos().X(),rDestRect.
Pos().Y(),symbolWidth,rDestRect.
Height());
2207 fnSymbolRect =
SwRect(fnSymbolLeft,rDestRect.
Pos().Y(),symbolWidth,rDestRect.
Height());
2216 const sal_Int32 nBackLinkId = pPDFExtOutDevData->
CreateLink(aFootnoteSymbolRect, numStrSymbol, nDestPageNum);
2218 const sal_Int32 nDestId = pPDFExtOutDevData->
CreateDest(aRect, nDestPageNum);
2225 const sal_Int32 nLinkId = pPDFExtOutDevData->
CreateLink(aRect, numStrRef, aLinkPageNum);
2227 const sal_Int32 nBackDestId = pPDFExtOutDevData->
CreateDest(aRect, aLinkPageNum);
2229 const IdMapEntry aLinkEntry( aLinkRect, nLinkId );
2233 const IdMapEntry aBackLinkEntry( aFootnoteSymbolRect, nBackLinkId );
2236 pPDFExtOutDevData->
SetLinkDest( nLinkId, nDestId );
2237 pPDFExtOutDevData->
SetLinkDest( nBackLinkId, nBackDestId );
2246 typedef std::pair< sal_Int8, sal_Int32 > StackEntry;
2247 std::stack< StackEntry > aOutlineStack;
2248 aOutlineStack.push( StackEntry( -1, -1 ) );
2256 OSL_ENSURE(
nullptr != pTNd,
"Enhanced pdf export - text node is missing" );
2266 sal_Int8 nLevelOnTopOfStack = aOutlineStack.top().first;
2267 while ( nLevelOnTopOfStack >= nLevel &&
2268 nLevelOnTopOfStack != -1 )
2270 aOutlineStack.pop();
2271 nLevelOnTopOfStack = aOutlineStack.top().first;
2273 const sal_Int32 nParent = aOutlineStack.top().second;
2285 if ( -1 != nDestPageNum )
2289 const sal_Int32 nDestId =
2290 pPDFExtOutDevData->
CreateDest(aRect, nDestPageNum);
2297 const sal_Int32 nOutlineId =
2301 aOutlineStack.push( StackEntry( nLevel, nOutlineId ) );
2319 const ::sw::mark::IMark* pBkmk = *ppMark;
2320 mrSh.SwCursorShell::ClearMark();
2321 const OUString& sBkName = pBkmk->GetName();
2339 if ( -1 != nDestPageNum )
2345 mrSh.SwCursorShell::ClearMark();
2354 std::vector< vcl::PDFExtOutDevBookmarkEntry >& rBookmarks = pPDFExtOutDevData->
GetBookmarks();
2355 for (
const auto& rBookmark : rBookmarks )
2357 OUString aBookmarkName( rBookmark.aBookmark );
2358 const bool bInternal =
'#' == aBookmarkName[0];
2361 aBookmarkName = aBookmarkName.copy( 1 );
2373 if ( -1 != nDestPageNum )
2376 if ( rBookmark.nLinkId != -1 )
2379 const sal_Int32 nDestId = pPDFExtOutDevData->
CreateDest(aRect, nDestPageNum);
2382 pPDFExtOutDevData->
SetLinkDest( rBookmark.nLinkId, nDestId );
2391 pPDFExtOutDevData->
SetLinkURL( rBookmark.nLinkId, aBookmarkName );
2405 if (!pPDFExtOutDevData)
2411 std::vector<std::tuple<const SwTOXBase*, const OUString*, sal_Int32>> vDestinations;
2419 const SwTOXBase* pIteratedTOX =
nullptr;
2439 if ( -1 != nDestPageNum )
2442 const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest(aRect, nDestPageNum);
2443 const OUString* vNodeText = &
static_cast<const SwTextNode*
>(&rCurrentNode)->GetText();
2444 vDestinations.emplace_back(pIteratedTOX, vNodeText, nDestId);
2454 std::vector<SwFormatField*> aFields;
2463 for (
const auto pFormatField : aFields)
2465 if (!pFormatField->GetTextField() || !pFormatField->IsFieldInDoc())
2470 const auto& rAuthorityField
2473 if (
auto targetType = rAuthorityField.GetTargetType();
2474 targetType == SwAuthorityField::TargetType::UseDisplayURL
2475 || targetType == SwAuthorityField::TargetType::UseTargetURL)
2479 if (rURL.getLength() == 0)
2485 if (!lcl_TryMoveToNonHiddenField(
mrSh, rTextNode, *pFormatField))
2490 OUString
const content(rAuthorityField.ExpandField(
true,
mrSh.
GetLayout()));
2493 mrSh.SwCursorShell::SetMark();
2497 for (
const auto& rLinkRect : *
mrSh.SwCursorShell::GetCursor_())
2502 sal_Int32 nLinkId = pPDFExtOutDevData->CreateLink(aRect, content, rLinkPageNum);
2505 pPDFExtOutDevData->SetLinkURL(nLinkId, rURL);
2508 mrSh.SwCursorShell::ClearMark();
2510 else if (targetType == SwAuthorityField::TargetType::BibliographyTableRow)
2513 sal_Int32 nDestId = -1;
2515 std::unordered_map<const SwTOXBase*, OUString> vFormattedFieldStrings;
2516 for (
const auto& rDestinationTuple : vDestinations)
2518 if (vFormattedFieldStrings.find(std::get<0>(rDestinationTuple))
2519 == vFormattedFieldStrings.end())
2520 vFormattedFieldStrings.emplace(std::get<0>(rDestinationTuple),
2522 &std::get<0>(rDestinationTuple)->GetTOXForm()));
2524 if (vFormattedFieldStrings.at(std::get<0>(rDestinationTuple)) == *std::get<1>(rDestinationTuple))
2526 nDestId = std::get<2>(rDestinationTuple);
2535 if (!lcl_TryMoveToNonHiddenField(
mrSh, rTextNode, *pFormatField))
2540 OUString
const content(rAuthorityField.ExpandField(
true,
mrSh.
GetLayout()));
2543 mrSh.SwCursorShell::SetMark();
2547 for (
const auto& rLinkRect : *
mrSh.SwCursorShell::GetCursor_())
2552 sal_Int32 nLinkId = pPDFExtOutDevData->CreateLink(aRect, content, rLinkPageNum);
2555 pPDFExtOutDevData->SetLinkDest(nLinkId, nDestId);
2558 mrSh.SwCursorShell::ClearMark();
2568 if ( !aPageNums.empty() )
2569 return aPageNums[0];
2577 const SwRect& rRect )
const
2579 std::vector< sal_Int32 > aPageNums;
2583 if ( nPageNumOfRect < 0 )
2595 sal_Int32 nOutputPageNum = 0;
2598 for ( ; aIter != aEnd; ++aIter )
2600 if ( *aIter == nPageNumOfRect )
2601 aPageNums.push_back( nOutputPageNum );
2610 sal_Int32 nOutputPageNum = 0;
2615 if (
i ==
static_cast<size_t>( nPageNumOfRect ) )
2617 aPageNums.push_back( nOutputPageNum );
2625 aPageNums.push_back( nPageNumOfRect );
2635 const OUString& rURL,
2637 OUString
const& rContent)
const
2648 SwRect aHFLinkRect( rLinkRect );
2654 if ( aHFLinkRect.
Pos() != rLinkRect.
Pos() )
2659 for (sal_Int32 aHFLinkPageNum : aHFLinkPageNums)
2663 const sal_Int32 nHFLinkId =
2664 rPDFExtOutDevData.
CreateLink(aRect, rContent, aHFLinkPageNum);
2668 rPDFExtOutDevData.
SetLinkDest( nHFLinkId, nDestId );
2670 rPDFExtOutDevData.
SetLinkURL( nHFLinkId, rURL );
static std::vector< sal_uInt16 > aStructStack
static auto GetReopenTagFromFrame(SwFrame const &rFrame) -> sal_Int32
std::set< tools::Long, lt_TableColumn > TableColumnsMapEntry
std::map< const SwNumberTreeNode *, sal_Int32 > NumListIdMap
std::map< const SwNumberTreeNode *, sal_Int32 > NumListBodyIdMap
std::vector< IdMapEntry > LinkIdMap
std::map< const void *, sal_Int32 > FrameTagIdMap
std::map< const SwTable *, TableColumnsMapEntry > TableColumnsMap
std::pair< SwRect, sal_Int32 > IdMapEntry
o3tl::strong_int< sal_Int32, struct Tag_TextFrameIndex > TextFrameIndex
Denotes a character index in a text frame at a layout level, after extent mapping from a text node at...
sal_Int32 GetDate() const
wrapper iterator: wraps iterator of implementation while hiding MarkBase class; only IMark instances ...
Provides access to the marks of a document.
virtual const_iterator_t getBookmarksBegin() const =0
returns a STL-like random access iterator to the begin of the sequence the IBookmarks.
virtual const_iterator_t getBookmarksEnd() const =0
returns a STL-like random access iterator to the end of the sequence of IBookmarks.
virtual tSortedOutlineNodeList::size_type getOutlineNodesCount() const =0
virtual OUString getOutlineText(const tSortedOutlineNodeList::size_type nIdx, SwRootFrame const *pLayout, const bool bWithNumber=true, const bool bWithSpacesForLevel=false, const bool bWithFootnote=true) const =0
virtual int getOutlineLevel(const tSortedOutlineNodeList::size_type nIdx) const =0
static OUString decode(std::u16string_view rText, DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
void SetMapUnit(MapUnit eUnit)
const Point & GetOrigin() const
vcl::ExtOutDevData * GetExtOutDevData() const
const MapMode & GetMapMode() const
void Push(vcl::PushFlags nFlags=vcl::PushFlags::ALL)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
void setWidth(tools::Long nWidth)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
static sal_uInt16 IsMath(const SvGlobalName &rName)
SvxAdjust GetAdjust() const
short GetTextFirstLineOffset() const
const SwFrame * GetAnchorFrame() const
SwTextAttr * GetAttr(TextFrameIndex nPos) const
Returns the attribute for a position.
const SvxAdjustItem & GetAdjust(bool=true) const
Represents an inserted bibliography entry, created using Insert -> Table of Contents and Index -> Bib...
OUString GetAbsoluteURL() const
Returns absolute target URL in case there is one (GetTargetType() should be checked).
SwCellFrame is one table cell in the document layout.
const SwTableBox * GetTabBox() const
SwContentFrame is the layout for content nodes: a common base class for text (paragraph) and non-text...
SwFormatColl * GetFormatColl() const
A helper class to save cursor state (position).
bool GotoRefMark(const OUString &rRefMark, sal_uInt16 nSubType, sal_uInt16 nSeqNo)
jump to reference marker
SwShellCursor * GetCursor_()
const SwRect & GetCharRect() const
bool IsInHiddenRange(const bool bSelect)
If the current cursor position is inside a hidden range true is returned.
bool GotoFootnoteAnchor()
jump from footnote to anchor
bool MovePara(SwWhichPara, SwMoveFnCollection const &)
bool GotoPage(sal_uInt16 nPage)
SwCursor * GetCursor(bool bMakeTableCursor=true) const
Return pointer to the current shell cursor.
OUString GetSelText() const
get selected text of a node at current cursor
bool GotoFootnoteText()
jump from content to footnote
bool GotoNextTOXBase(const OUString *=nullptr)
jump to the next index
bool GotoOutline(const OUString &rName)
bool GotoFormatField(const SwFormatField &rField)
bool GotoINetAttr(const SwTextINetFormat &rAttr)
void RestoreSavePos()
Restore cursor state to the one saved by SwCursorSaveState.
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
SwFootnoteIdxs & GetFootnoteIdxs()
const SfxPoolItem & GetDefault(sal_uInt16 nFormatHint) const
Get the default attribute in this document.
IDocumentMarkAccess * getIDocumentMarkAccess()
const sw::FrameFormats< sw::SpzFrameFormat * > * GetSpzFrameFormats() const
SvNumberFormatter * GetNumberFormatter(bool bCreate=true)
bool IsInHeaderFooter(const SwNode &) const
void GetINetAttrs(SwGetINetAttrs &rArr, bool bIncludeInToxContent=true)
const SwTOXBase * GetCurTOX() const
Get current listing before or at the Cursor.
SwFieldType * GetFieldType(size_t nField, SwFieldIds nResId=SwFieldIds::Unknown) const
get field types with a ResId, if 0 get all
static TableColumnsMap & GetTableColumnsMap()
static LinkIdMap s_aLinkIdMap
static NumListIdMap s_aNumListIdMap
static FrameTagIdMap s_aFrameTagIdMap
static NumListBodyIdMap & GetNumListBodyIdMap()
sal_Int32 CalcOutputPageNum(const SwRect &rRect) const
static FrameTagIdMap & GetFrameTagIdMap()
SwEnhancedPDFExportHelper(SwEditShell &rSh, OutputDevice &rOut, const OUString &rPageRange, bool bSkipEmptyPages, bool bEditEngineOnly, const SwPrintData &rPrintData)
static TableColumnsMap s_aTableColumnsMap
static LanguageType GetDefaultLanguage()
static NumListBodyIdMap s_aNumListBodyIdMap
static NumListIdMap & GetNumListIdMap()
std::vector< sal_Int32 > CalcOutputPageNums(const SwRect &rRect) const
void ExportAuthorityEntryLinks()
Exports bibliography entry links.
const SwPrintData & mrPrintData
std::vector< sal_Int32 > maPageNumberMap
The problem is that numbers in StringRangeEnumerator aren't accordant to real page numbers if mbSkipE...
tools::Rectangle SwRectToPDFRect(const SwPageFrame *pCurrPage, const tools::Rectangle &rRectangle) const
void MakeHeaderFooterLinks(vcl::PDFExtOutDevData &rPDFExtOutDevData, const SwTextNode &rTNd, const SwRect &rLinkRect, sal_Int32 nDestId, const OUString &rURL, bool bIntern, OUString const &rContent) const
static LanguageType s_eLanguageDefault
static LinkIdMap & GetLinkIdMap()
std::unique_ptr< StringRangeEnumerator > mpRangeEnum
~SwEnhancedPDFExportHelper()
Instances of SwFields and those derived from it occur 0 to n times.
void GatherFields(std::vector< SwFormatField * > &rvFormatFields, bool bCollectOnlyInDocNodes=true) const
Base class of all fields.
OUString ExpandField(bool bCached, SwRootFrame const *pLayout) const
expand the field.
SwFieldIds Which() const
ResId.
LanguageType GetLanguage() const
Language at field position.
general base class for all free-flowing frames
virtual SwFrameFormat & GetFrameFormat() override
FontLineStyle GetUnderline() const
short GetEscapement() const
FontStrikeout GetStrikeout() const
FontEmphasisMark GetEmphasisMark() const
SwFontScript GetActual() const
FontLineStyle GetOverline() const
LanguageType GetLanguage() const
const SwRect & getFrameArea() const
Base class of the Writer layout elements.
tools::Long GetLeftMargin() const
tools::Long GetRightMargin() const
SwSectionFrame * FindSctFrame()
SwTabFrame * FindTabFrame()
SwFrameType GetType() const
bool IsHeaderFrame() const
const SwSortedObjs * GetDrawObjs() const
bool IsRightToLeft() const
const SwRowFrame * IsInFollowFlowRow() const
SwLayoutFrame * GetNextCellLeaf()
bool IsFooterFrame() const
SwLayoutFrame * GetUpper()
SwRootFrame * getRootFrame()
bool IsNoTextFrame() const
SwPageFrame * FindPageFrame()
const SwRowFrame * IsInSplitTableRow() const
SwFrame * FindFooterOrHeader()
tools::Long GetTopMargin() const
SwLayoutFrame * GetPrevCellLeaf()
virtual sal_uInt16 GetSubType() const override
Get/set sub type.
const OUString & GetSetRefName() const
sal_uInt16 GetSeqNo() const
Get/set SequenceNo (of interest only for REF_SEQUENCEFLD).
const SwContentFrame * ContainsContent() const
Checks if the frame contains one or more ContentFrame's anywhere in his subsidiary structure; if so t...
const SwFrame * Lower() const
Base class for anything that can be part of a line in the Writer layout.
PortionType GetWhichPor() const
TextFrameIndex GetLen() const
const SwContentNode * GetNode() const
Marks a node in the document model.
Base class of the Writer document model elements.
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
bool IsInRedlines() const
Checks if this node is in redlines.
SwSectionNode * FindSectionNode()
Search section node, in which it is.
SwOLENode * GetOLENode()
Inline methods from Node.hxx.
SwNodeType GetNodeType() const
const SwOutlineNodes & GetOutLineNds() const
Array of all OutlineNodes.
SwNode * DocumentSectionStartNode(SwNode *pNode) const
const SwNumFormat & Get(sal_uInt16 i) const
A tree of numbered nodes.
virtual bool IsCounted() const
Return if this node is counted.
bool IsFirst(const SwNumberTreeNode *pNode) const
Return if a node is first non-phantom child of this node.
SwNumberTreeNode * GetPred(bool bSibling=false) const
Returns the greatest descendant of the root that is smaller than this node, aka the predecessor of th...
SwNumberTreeNode * GetParent() const
Returns the parent of this node.
const SwOLEObj & GetOLEObj() const
css::uno::Reference< css::embed::XEmbeddedObject > const & GetOleRef()
const SwPosition * GetPoint() const
A page of the document layout.
bool HasContentPortions() const
bool HasNumberingPortion(FootnoteOrNot) const
virtual OUString GetPar1() const override
Author.
const OUString & GetText() const
SwPostItMode GetPrintPostIts() const
tools::Long GetHeight(const SwRect &rRect) const
tools::Long GetRightMargin(const SwFrame &rFrame) const
tools::Long GetTopMargin(const SwFrame &rFrame) const
tools::Long GetWidth(const SwRect &rRect) const
tools::Long GetBottomMargin(const SwFrame &rFrame) const
tools::Long GetLeftMargin(const SwFrame &rFrame) const
tools::Long GetLeft(const SwRect &rRect) const
tools::Long GetRight(const SwRect &rRect) const
Of course Writer needs its own rectangles.
void Height(tools::Long nNew)
void Top(const tools::Long nTop)
void Right(const tools::Long nRight)
void Pos(const Point &rNew)
tools::Rectangle SVRect() const
void Left(const tools::Long nLeft)
void Width(tools::Long nNew)
SwPageFrame * GetPageByPageNum(sal_uInt16 _nPageNum) const
Get page frame by physical page number looping through the lowers, which are page frame,...
const SwPageFrame * GetPageAtPos(const Point &rPt, const Size *pSize=nullptr, bool bExtend=false) const
Point rPt: The point that should be used to find the page Size pSize: If given, we return the (first)...
bool IsHideRedlines() const
Replacement for sw::DocumentRedlineManager::GetRedlineFlags() (this is layout-level redline hiding).
SwRowFrame is one table row in the document layout.
bool IsRepeatedHeadline() const
const SwTableLine * GetTabLine() const
const SwSection & GetSection() const
const SwTOXBase * GetTOXBase() const
SectionType GetType() const
static void FillProgName(const OUString &rName, OUString &rFillName, SwGetPoolIdFromName)
SwTabFrame is one table in the document layout, containing rows (which contain cells).
SwTabFrame * FindMaster(bool bFirstMaster=false) const
const SwTabFrame * GetFollow() const
const SwTable * GetTable() const
bool IsInHeadline(const SwFrame &rFrame) const
sal_Int32 getRowSpan() const
SwTable is one table in the document model, containing rows (which contain cells).
const Frame_Info * mpFrameInfo
void BeginInlineStructureElements()
const Por_Info * mpPorInfo
void SetAttributes(vcl::PDFWriter::StructElement eType)
static bool IsExportTaggedPDF(const OutputDevice &rOut)
void CheckRestoreTag() const
void EndStructureElements()
const Num_Info * mpNumInfo
void BeginBlockStructureElements()
void BeginNumberedListStructureElements()
SwTaggedPDFHelper(const Num_Info *pNumInfo, const Frame_Info *pFrameInfo, const Por_Info *pPorInfo, OutputDevice const &rOut)
sal_Int32 m_nRestoreCurrentTag
vcl::PDFExtOutDevData * mpPDFExtOutDevData
sal_uInt8 m_nEndStructureElement
void BeginTag(vcl::PDFWriter::StructElement aTagRole, const OUString &rTagName)
A wrapper around SfxPoolItem to store the start position of (usually) a text portion,...
const SwFormatFootnote & GetFootnote() const
sal_Int32 GetStart() const
const SwFormatField & GetFormatField() const
Represents the visualization of a paragraph.
std::pair< SwTextNode *, sal_Int32 > MapViewToModel(TextFrameIndex nIndex) const
map position in potentially merged text frame to SwPosition
SwParaPortion * GetPara()
SwTextNode * GetTextNodeFirst()
SwTextNode const * GetTextNodeForParaProps() const
SwTextNode is a paragraph in the document model.
bool IsOutline() const
Returns if this text node is an outline.
const SwNodeNum * GetNum(SwRootFrame const *pLayout=nullptr, SwListRedlineType eRedline=SwListRedlineType::SHOW) const
bool IsCountedInList() const
SwNumRule * GetNumRule(bool bInParent=true) const
Returns numbering rule of this text node.
int GetActualListLevel(SwListRedlineType eRedline=SwListRedlineType::SHOW) const
Returns the actual list level of this text node, when it is a list item.
bool IsListRestart() const
int GetAttrOutlineLevel() const
Returns outline level of this text node.
const OUString & GetText() const
void CalcRect(const SwLinePortion &rPor, SwRect *pRect, SwRect *pIntersect=nullptr, const bool bInsideBox=false) const
Calculate the rectangular area where the portion takes place.
SwTextPaintInfo & GetInfo()
SwTextFrame * GetTextFrame()
const OUString & GetText() const
TextFrameIndex GetIdx() const
bool IsViewLocked() const
sal_Int32 GetPageNumAndSetOffsetForPDF(OutputDevice &rOut, const SwRect &rRect) const
const SwNodes & GetNodes() const
SwRootFrame * GetLayout() const
sal_uInt16 GetPageCount() const
const IDocumentOutlineNodes * getIDocumentOutlineNodesAccess() const
std::vector< Value >::size_type size_type
bool SetCurrentStructureElement(sal_Int32 nElement)
void SetStructureBoundingBox(const tools::Rectangle &rRect)
void CreateNote(const tools::Rectangle &rRect, const PDFNote &rNote, sal_Int32 nPageNr=-1)
sal_Int32 CreateScreen(const tools::Rectangle &rRect, OUString const &rAltText, OUString const &rMimeType, sal_Int32 nPageNr, SdrObject const *pObj)
sal_Int32 CreateDest(const tools::Rectangle &rRect, sal_Int32 nPageNr=-1, PDFWriter::DestAreaType eType=PDFWriter::DestAreaType::XYZ)
std::vector< PDFExtOutDevBookmarkEntry > & GetBookmarks()
bool GetIsExportTaggedPDF() const
void SetDocumentLocale(const css::lang::Locale &rLoc)
void SetStructureAttributeNumerical(PDFWriter::StructAttribute eAttr, sal_Int32 nValue)
bool GetIsExportNotes() const
void SetScreenStream(sal_Int32 nScreenId, const OUString &rURL)
void SetAlternateText(const OUString &rText)
sal_Int32 GetCurrentStructureElement() const
void SetStructureAttribute(PDFWriter::StructAttribute eAttr, PDFWriter::StructAttributeValue eVal)
void SetActualText(const OUString &rText)
void SetScreenURL(sal_Int32 nScreenId, const OUString &rURL)
void DescribeRegisteredDest(sal_Int32 nDestId, const tools::Rectangle &rRect, sal_Int32 nPageNr, PDFWriter::DestAreaType eType=PDFWriter::DestAreaType::XYZ)
void SetLinkURL(sal_Int32 nLinkId, const OUString &rURL)
bool GetIsExportBookmarks() const
sal_Int32 CreateOutlineItem(sal_Int32 nParent, const OUString &rText, sal_Int32 nDestID)
sal_Int32 BeginStructureElement(PDFWriter::StructElement eType, const OUString &rAlias=OUString())
bool GetIsExportNamedDestinations() const
sal_Int32 CreateNamedDest(const OUString &sDestName, const tools::Rectangle &rRect, sal_Int32 nPageNr=-1)
sal_Int32 CreateLink(const tools::Rectangle &rRect, OUString const &rAltText, sal_Int32 nPageNr=-1)
void EndStructureElement()
void SetLinkDest(sal_Int32 nLinkId, sal_Int32 nDestId)
virtual SotClipboardFormatId GetFormat(const TransferableDataHelper &aHelper) override
std::vector< SwGetINetAttr > SwGetINetAttrs
bool JumpToSwMark(SwViewShell const *pVwSh, std::u16string_view rMark)
EmbeddedObjectRef * pObject
constexpr TypedWhichId< SwFormatURL > RES_URL(117)
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_LANGUAGE(10)
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_CTL_LANGUAGE(29)
constexpr TypedWhichId< SwFormatINetFormat > RES_TXTATR_INETFMT(51)
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_CJK_LANGUAGE(24)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
constexpr TypedWhichId< SwFormatCharFormat > RES_TXTATR_CHARFMT(52)
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(165)
constexpr TypedWhichId< SfxBoolItem > RES_DECORATIVE(140)
LanguageType GetAppLanguage()
sal_Int16 GetI18NScriptTypeOfLanguage(LanguageType nLang)
LanguageType GetLanguage(SfxItemSet const &aSet, sal_uInt16 nLangWhichId)
const LanguageTag & getLocale()
void GotoPrevLayoutTextFrame(SwNodeIndex &rIndex, SwRootFrame const *const pLayout)
bool IsFootnoteDeleted(IDocumentRedlineAccess const &rIDRA, SwTextFootnote const &rTextFootnote)
bool IsParaPropsNode(SwRootFrame const &rLayout, SwTextNode const &rNode)
SwTextNode * GetParaPropsNode(SwRootFrame const &rLayout, SwNode const &rNode)
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
bool GoNextPara(SwPaM &rPam, SwMoveFnCollection const &aPosPara)
SwMoveFnCollection const & fnParaStart
SwPostItMode
this must match the definitions in css::text::NotePrintMode
const SwLinePortion & mrPor
const SwTextPainter & mrTextPainter
bool const m_isNumberingLabel
For querying the INet-attributes for Navigator.
void Assign(const SwNode &rNd, SwNodeOffset nDelta, sal_Int32 nContentOffset=0)
These all set both nNode and nContent.
OUString SwResId(TranslateId aId)
std::vector< SwRect > SwRects