24#include <osl/diagnose.h>
28#include <vcl/font.hxx>
78 pNextBand(nullptr), nGapHalf(0), mnDefaultLeft(0), mnDefaultTop(0), mnDefaultRight(0),
79 mnDefaultBottom(0), mbHasSpacing(false), nLineHeight(0), nRows(0), nCenter{}, nWidth{},
80 nWwCols(0), nSwCols(0), bLEmptyCol(false), bREmptyCol(false), bCantSplit(false),
81 bCantSplit90(false), pTCs(nullptr), nOverrideSpacing{}, nOverrideValues{}, pSHDs(nullptr),
82 pNewSHDs(nullptr), bExist{}, nTransCell{}
106 OSL_ENSURE( bResult,
"close without open!");
113 OSL_ENSURE(!maSegments.empty(),
114 "should not be possible, must be at least one segment");
115 if (!maSegments.empty())
116 maSegments.back().mbHasFootnote =
true;
121 OSL_ENSURE(!maSegments.empty(),
122 "should not be possible, must be at least one segment");
123 if ( !maSegments.empty() )
124 maSegments.back().mnVerticalAdjustment = nVA;
129 OSL_ENSURE(!maSegments.empty(),
130 "should not be possible, must be at least one segment");
131 if (!maSegments.empty())
132 return maSegments.back().IsVertical();
138 OSL_ENSURE(!maSegments.empty(),
139 "should not be possible, must be at least one segment");
140 if (!maSegments.empty())
141 return SectionIsProtected(maSegments.back());
147 return !maSegments.empty() ? maSegments.back().m_nPgLeft : 0;
152 return !maSegments.empty() ? maSegments.back().m_nPgRight : 0;
157 return !maSegments.empty() ? maSegments.back().GetPageWidth() : 0;
162 return !maSegments.empty() ? maSegments.back().GetTextAreaWidth() : 0;
167 return !maSegments.empty() ? maSegments.back().maSep.dyaTop : 0;
182 OSL_ENSURE(!m_aFootnoteStack.empty(),
"footnote end without start");
183 if (m_aFootnoteStack.empty())
186 bool bFtEdOk =
false;
192 sal_Int32
nPos = m_pPaM->GetPoint()->GetContentIndex();
201 m_pPaM->GetMark()->AdjustContent(-1);
202 std::shared_ptr<SwUnoCursor> xLastAnchorCursor(m_oLastAnchorPos ?
m_rDoc.
CreateUnoCursor(*m_oLastAnchorPos) :
nullptr);
203 m_oLastAnchorPos.reset();
205 m_pPaM->DeleteMark();
206 if (xLastAnchorCursor)
207 m_oLastAnchorPos.emplace(*xLastAnchorCursor->GetPoint());
211 OSL_ENSURE(pFN,
"Problems creating the footnote text");
216 m_xPlcxMan->SaveAllPLCFx( aSave );
217 std::shared_ptr<WW8PLCFMan> xOldPlcxMan = m_xPlcxMan;
220 assert(pSttIdx &&
"Problems creating footnote text");
224 bool bOld = m_bFootnoteEdn;
225 m_bFootnoteEdn =
true;
234 m_bFootnoteEdn = bOld;
241 OSL_ENSURE(sChar.getLength()==1 && ((rDesc.
mbAutoNum == (sChar[0] == 2))),
242 "footnote autonumbering must be 0x02, and everything else must not be");
254 SwPosition& rPaMPointPos = *m_pPaM->GetPoint();
257 if (pTNd && !pTNd->
GetText().isEmpty() && !sChar.isEmpty())
259 const OUString &rText = pTNd->
GetText();
260 if (rText[0] == sChar[0])
263 sal_Int32 nFirstLineIndent=0;
275 if (nFirstLineIndent < 0 && rText.getLength() > 1 && rText[1] == 0x09)
276 m_pPaM->GetMark()->AdjustContent(1);
277 m_pPaM->GetMark()->AdjustContent(1);
278 m_xReffingStck->Delete(*m_pPaM);
280 m_pPaM->DeleteMark();
285 *m_pPaM->GetPoint() = aTmpPos;
287 m_xPlcxMan = xOldPlcxMan;
288 m_xPlcxMan->RestoreAllPLCFx( aSave );
292 m_aSectionManager.SetCurrentSectionHasFootnote();
294 m_aFootnoteStack.pop_back();
316 if (
const void*
pData = pEndNote ? pEndNote->
GetData() :
nullptr)
323 if (
const void*
pData = pFootNote ? pFootNote->
GetData() :
nullptr)
330 m_aFootnoteStack.push_back(aDesc);
341 std::set<std::pair<WW8_CP, WW8_CP>> aPrevRes;
351 aSprmRes = pPap->
HasSprm(0x6649);
355 if (nLevel + 1 == *pLevel)
360 OSL_ENSURE(!nLevel || pLevel,
"sublevel without level sprm");
377 if (!aPrevRes.insert(aBounds).second)
379 SAL_WARN(
"sw.ww8",
"SearchRowEnd, loop in paragraph property chain");
398 std::set<std::pair<WW8_CP, WW8_CP>> aPrevRes;
418 if (!aPrevRes.insert(aBounds).second)
420 SAL_WARN(
"sw.ww8",
"SearchTableEnd, loop in paragraph property chain");
431 const WW8_TablePos *pTopLevelTable = nCellLevel <= 1 ? pTabPos :
nullptr;
435 sal_uInt16
const nStyle(m_xPlcxMan->GetColl());
436 if (!m_bTxbxFlySection && nStyle < m_vColl.size())
437 aRet.
mpStyleApo = StyleExists(nStyle) ? m_vColl[nStyle].m_xWWFly.get() :
nullptr;
458 aRet.
m_bHasSprm37 = m_xPlcxMan->HasParaSprm(m_bVer67 ? 37 : 0x2423).pSprm !=
nullptr;
459 SprmResult aSrpm29 = m_xPlcxMan->HasParaSprm(m_bVer67 ? 29 : 0x261B);
465 bool bNowApo = aRet.
HasFrame() || pTopLevelTable;
468 if (!ConstructApo(aRet, pTabPos))
472 bool bTestAllowed = !m_bTxbxFlySection && !bTableRowEnd;
481 if (nCellLevel == m_nInTable)
490 OSL_ENSURE(m_xTableDesc,
"What!");
491 bTestAllowed =
false;
500 m_xTableDesc->GetCurrentCol() == 0 &&
501 ( !m_xTableDesc->IsValidCell( m_xTableDesc->GetCurrentCol() ) ||
502 m_xTableDesc->InFirstParaInCell() );
511 aRet.
mbStartApo = bNowApo && !InEqualOrHigherApo(1);
512 aRet.
mbStopApo = InEqualOrHigherApo(nCellLevel) && !bNowApo;
520 if (bNowApo && InEqualApo(nCellLevel))
523 if (!TestSameApo(aRet, pTabPos))
538 static const SvxAdjust eAdjA[4] = { SvxAdjust::Left,
539 SvxAdjust::Right, SvxAdjust::Left, SvxAdjust::Left };
573 if ((rAV.
aBits1 & 0x4) >> 2)
581 sal_Int16 nIndent =
std::abs(
static_cast<sal_Int16
>(SVBT16ToUInt16( rAV.
dxaIndent )));
590 if( rAV.
nfc == 5 || rAV.
nfc == 7 )
600 const sal_uInt8* pText,
size_t nStart,
size_t nElements,
bool bOutline)
608 bool bInsert =
false;
609 rtl_TextEncoding eCharSet = m_eStructCharSet;
611 const WW8_FFN* pF = m_xFonts->GetFont(SVBT16ToUInt16(rAV.
ftc));
612 bool bListSymbol = pF && ( pF->
aFFNBase.
chs == 2 );
615 OUStringBuffer sText(
static_cast<sal_Int32
>(nLen));
620 SAL_WARN(
"sw.ww8",
"SetAnlvStrings: ignoring out of range "
621 << nLen <<
" vs " <<
nElements <<
" max");
624 sText = OUString(
reinterpret_cast<char const *
>(pText), nLen, eCharSet);
633 SAL_WARN(
"sw.ww8",
"SetAnlvStrings: ignoring out of range "
634 << nLen <<
" vs " <<
nElements / 2 <<
" max");
637 for(sal_uInt32
i = 0;
i < nLen; ++
i, pText += 2)
639 sText.append(
static_cast<sal_Unicode>(SVBT16ToUInt16(*
reinterpret_cast<SVBT16 const *
>(pText))));
670 if( GetFontParams( SVBT16ToUInt16( rAV.
ftc ), eFamily,
aName,
671 ePitch, eCharSet ) ){
686 OUString::unacquired(sText).iterateCodePoints(&
o3tl::temporary(sal_Int32(0))));
729 pNumR->
Set(nSwLevel, aNF);
739 if( m_xStyles->mpStyRule )
740 return m_xStyles->mpStyRule;
742 const OUString aBaseName(
"WW8StyleNum");
750 m_xStyles->mpStyRule->SetAutoRule(
false);
752 return m_xStyles->mpStyRule;
758 m_nSwNumLevel = 0xff;
775 m_nSwNumLevel = *
pData - 1;
776 if (!m_bNoAttrImport)
777 static_cast<SwTextFormatColl*
>(m_pCurrentColl)->AssignToListLevelOfOutlineStyle( m_nSwNumLevel );
787 m_xStyles->mnWwNumLevel = *
pData;
803 if( !m_pCurrentColl || nLen <= 0
804 || (pStyInf && !pStyInf->
m_bColl)
807 m_nSwNumLevel = 0xff;
813 SAL_WARN(
"sw.ww8",
"ANLevelDesc property is " << nLen <<
" long, needs to be at least " <<
sizeof(
WW8_ANLD));
814 m_nSwNumLevel = 0xff;
818 if (m_nSwNumLevel <= 9)
824 const OUString
aName(
"Outline");
830 SetAnld(&aNR,
reinterpret_cast<WW8_ANLD const *
>(
pData), m_nSwNumLevel,
true);
835 else if( m_xStyles->mnWwNumLevel == 10 || m_xStyles->mnWwNumLevel == 11 ){
837 SetAnld(pNR,
reinterpret_cast<WW8_ANLD const *
>(
pData), 0,
false);
840 pStyInf = GetStyle(m_nCurrentColl);
841 if (pStyInf !=
nullptr)
860 for (
i = 0, pAV1 = pO->
rganlv;
i < nSwLevel; ++
i, ++pAV1)
866 pNumR->
Set(nSwLevel, aNF);
881 SAL_WARN(
"sw.ww8",
"WW8_OLST property is " << nLen <<
" long, needs to be at least " <<
sizeof(
WW8_OLST));
892 if( nWwLevelNo == 12 )
894 else if( nWwLevelNo == 10 )
896 else if( nWwLevelNo == 11 )
898 else if( nWwLevelNo > 0 && nWwLevelNo <= 9 )
906 if (rNumRule.isEmpty())
914 msNumberingNumRule = rNumRule;
916 msOutlineNumRule = rNumRule;
923 m_bCurrentAND_fNumberAcross =
false;
938 sNumRule = m_xTableDesc->GetNumRuleName();
939 if (!sNumRule.isEmpty())
963 if (sNumRule.isEmpty())
977 m_xTableDesc->SetNumRuleName(pNumRule->
GetName());
983 sNumRule = pNumRule ? pNumRule->
GetName() : OUString();
985 m_xCtrlStck->NewAttr(*m_pPaM->GetPoint(),
988 m_aANLDRules.SetNumRule(sNumRule, m_nWwNumType);
1003 if (*pSprm13 == 10 || *pSprm13 == 11)
1006 if (pNumRule && !pNumRule->
GetNumFormat(m_nSwNumLevel))
1012 SetAnld(pNumRule,
reinterpret_cast<WW8_ANLD const *
>(aS12.
pSprm), m_nSwNumLevel,
false);
1015 else if( *pSprm13 > 0 && *pSprm13 <=
MAXLEVEL )
1017 m_nSwNumLevel = *pSprm13 - 1;
1019 if (pNumRule && !pNumRule->
GetNumFormat(m_nSwNumLevel))
1024 for (
sal_uInt8 nI = 0; nI < m_nSwNumLevel; ++nI)
1027 SetNumOlst(pNumRule, m_xNumOlst.get(), nI);
1030 SetNumOlst(pNumRule, m_xNumOlst.get(), m_nSwNumLevel);
1037 SetAnld(pNumRule,
reinterpret_cast<WW8_ANLD const *
>(aS12.
pSprm), m_nSwNumLevel,
false);
1042 m_nSwNumLevel = 0xff;
1061 StopAnlToRestart(
WW8_None, bGoBack);
1071 *m_pPaM->GetPoint() = aTmpPos;
1076 m_aANLDRules.msNumberingNumRule.clear();
1082 bool bNumberingNotStopOutline =
1085 if (!bNumberingNotStopOutline)
1086 m_aANLDRules.msOutlineNumRule.clear();
1088 m_nSwNumLevel = 0xff;
1105 memcpy( pSHDs, rBand.
pSHDs, nWwCols *
sizeof(
WW8_SHD ) );
1109 pNewSHDs =
new Color[nWwCols];
1112 memcpy(aDefBrcs, rBand.
aDefBrcs,
sizeof(aDefBrcs));
1126 nLen -= 2 * (nCols + 1);
1130 short nOldCols = nWwCols;
1134 for (
int i = 0;
i <= nCols;
i++, pT+=2)
1135 nCenter[
i] =
static_cast<sal_Int16
>(SVBT16ToUInt16( pT ));
1137 if( nCols != nOldCols )
1147 short nFileCols = nLen / ( bVer67 ? 10 : 20 );
1155 short nColsToRead = std::min<short>(nFileCols, nCols);
1157 if (nColsToRead <= 0)
1174 for (
int i = 0;
i < nColsToRead;
i++, ++pCurrentTC,++pTc)
1178 pCurrentTC->bFirstMerged =
sal_uInt8( ( aBits1 & 0x01 ) != 0 );
1179 pCurrentTC->bMerged =
sal_uInt8( ( aBits1 & 0x02 ) != 0 );
1188 if( ( pCurrentTC->bMerged )
1204 for (
int k = 0; k < nColsToRead; ++k, ++pCurrentTC, ++pTc )
1206 sal_uInt16 aBits1 = SVBT16ToUInt16( pTc->
aBits1Ver8 );
1207 pCurrentTC->bFirstMerged =
sal_uInt8( ( aBits1 & 0x0001 ) != 0 );
1208 pCurrentTC->bMerged =
sal_uInt8( ( aBits1 & 0x0002 ) != 0 );
1209 pCurrentTC->bVertical =
sal_uInt8( ( aBits1 & 0x0004 ) != 0 );
1210 pCurrentTC->bBackward =
sal_uInt8( ( aBits1 & 0x0008 ) != 0 );
1211 pCurrentTC->bRotateFont =
sal_uInt8( ( aBits1 & 0x0010 ) != 0 );
1212 pCurrentTC->bVertMerge =
sal_uInt8( ( aBits1 & 0x0020 ) != 0 );
1213 pCurrentTC->bVertRestart =
sal_uInt8( ( aBits1 & 0x0040 ) != 0 );
1214 pCurrentTC->nVertAlign = ( ( aBits1 & 0x0180 ) >> 7 );
1228 for (
int k = 0; k < nCols; ++k)
1230 if(maDirections[k] == 4)
1232 if(pTCs[k].bVertical)
1234 if(pTCs[k].bBackward)
1235 maDirections[k] = 3;
1237 maDirections[k] = 1;
1245 if( !pParamsTSetBRC || !pTCs )
1250 SAL_WARN(
"sw.ww8",
"table border property is too short");
1258 if (nitcFirst >= nWwCols)
1261 if (nitcLim > nWwCols)
1264 bool bChangeRight = (nFlag & 0x08) != 0;
1265 bool bChangeBottom = (nFlag & 0x04) != 0;
1266 bool bChangeLeft = (nFlag & 0x02) != 0;
1267 bool bChangeTop = (nFlag & 0x01) != 0;
1269 WW8_TCell* pCurrentTC = pTCs + nitcFirst;
1275 SAL_WARN(
"sw.ww8",
"table border property is too short");
1280 else if( nBrcVer == 8 )
1282 static_assert(
sizeof (
WW8_BRC) == 4,
"this has to match the msword size");
1283 if (nParamsLen <
sizeof(
WW8_BRC) + 3)
1285 SAL_WARN(
"sw.ww8",
"table border property is too short");
1294 SAL_WARN(
"sw.ww8",
"table border property is too short");
1297 brcVer9 = *
reinterpret_cast<WW8_BRCVer9 const *
>(pParamsTSetBRC+3);
1300 for(
int i = nitcFirst;
i < nitcLim; ++
i, ++pCurrentTC )
1320 SAL_WARN(
"sw.ww8",
"table border property is too short");
1324 for (
int i = 0;
i < 6; ++
i)
1327 else if ( nBrcVer == 8 )
1329 static_assert(
sizeof (
WW8_BRC) == 4,
"this has to match the msword size");
1330 if (nParamsLen <
sizeof(
WW8_BRC) * 6)
1332 SAL_WARN(
"sw.ww8",
"table border property is too short");
1335 for(
int i = 0;
i < 6; ++
i )
1340 if (nParamsLen <
sizeof( aDefBrcs ))
1342 SAL_WARN(
"sw.ww8",
"table border property is too short");
1345 memcpy( aDefBrcs, pParams,
sizeof( aDefBrcs ) );
1354 if( !(nWwCols && pParamsTDxaCol) )
1359 short nDxaCol =
static_cast<sal_Int16
>(SVBT16ToUInt16( pParamsTDxaCol + 2 ));
1361 for(
int i = nitcFirst; (
i < nitcLim) && (
i < nWwCols);
i++ )
1363 const short nOrgWidth = nCenter[
i+1] - nCenter[
i];
1364 const short nDelta = nDxaCol - nOrgWidth;
1365 for(
int j =
i+1; j <= nWwCols; j++ )
1367 nCenter[j] = nCenter[j] + nDelta;
1374 if( !nWwCols || !pParamsTInsert )
1377 sal_uInt8 nitcInsert = pParamsTInsert[0];
1381 sal_uInt16 ndxaCol = SVBT16ToUInt16( pParamsTInsert+2 );
1384 if (nitcInsert > nWwCols)
1386 nNewWwCols = nitcInsert+nctc;
1392 nctc = ::sal::static_int_cast<sal_uInt8>(nNewWwCols-nitcInsert);
1397 nNewWwCols = nWwCols+nctc;
1403 nctc = ::sal::static_int_cast<sal_uInt8>(nNewWwCols-nWwCols);
1411 memcpy( pTC2s, pTCs, nWwCols *
sizeof(
WW8_TCell ) );
1417 if (nitcInsert <= nWwCols)
1420 nCenter[nWwCols + nctc] = nCenter[nWwCols]+nctc*ndxaCol;
1421 for(
int i = nWwCols-1;
i >= nitcInsert;
i--)
1424 nCenter[
i + nctc] = nCenter[
i]+nctc*ndxaCol;
1427 pTCs[
i + nctc] = pTCs[
i];
1432 for(
int i = nWwCols;
i > nitcInsert+nWwCols;
i--)
1433 nCenter[
i] =
i ? (nCenter[
i - 1]+ndxaCol) : 0;
1436 for(
int j = 0;j < nctc; j++)
1437 nCenter[j + nitcInsert] = (j + nitcInsert) ? (nCenter[j + nitcInsert -1]+ndxaCol) : 0;
1439 nWwCols = nNewWwCols;
1447 sal_uInt16
nCode = SVBT16ToUInt16(pParams);
1449 OSL_ENSURE(nStartCell < nEndCell,
"not as I thought");
1450 OSL_ENSURE(nEndCell <
MAX_COL + 1,
"not as I thought");
1456 for (;nStartCell < nEndCell; ++nStartCell)
1457 maDirections[nStartCell] =
nCode;
1462 sal_uInt8 nLen = pParams ? *(pParams - 1) : 0;
1463 OSL_ENSURE(nLen == 6,
"Unexpected spacing len");
1467#if OSL_DEBUG_LEVEL > 0
1469 OSL_ENSURE(nWhichCell == 0,
"Expected cell to be 0!");
1475 OSL_ENSURE(nSideBits < 0x10,
"Unexpected value for nSideBits");
1477 sal_uInt16
nValue = SVBT16ToUInt16( pParams );
1478 for (
int i = wwTOP;
i <= wwRIGHT;
i++)
1480 switch (nSideBits & (1 <<
i))
1489 mnDefaultBottom =
nValue;
1497 OSL_ENSURE(
false,
"Impossible");
1505 sal_uInt8 nLen = pParams ? *(pParams - 1) : 0;
1506 OSL_ENSURE(nLen == 6,
"Unexpected spacing len");
1510 const sal_uInt8 nStartCell = *pParams++;
1512 OSL_ENSURE(nStartCell <
MAX_COL + 1,
"Cell out of range in spacings");
1513 if ( nStartCell >= nEndCell || nEndCell >
MAX_COL+1 )
1517 OSL_ENSURE(nSideBits < 0x10,
"Unexpected value for nSideBits");
1520 OSL_ENSURE(nSizeType == 0x3,
"Unexpected non-twip value for margin width");
1521 if ( nSizeType != 0x3 )
1524 sal_uInt16
nValue = SVBT16ToUInt16( pParams );
1526 for (
int nCell = nStartCell; nCell < nEndCell; ++nCell)
1528 nOverrideSpacing[ nCell ] |= nSideBits;
1529 OSL_ENSURE(nOverrideSpacing[ nCell ] < 0x10,
"Unexpected value for nSideBits");
1531 for (
int i=0;
i < 4;
i++)
1533 if (nSideBits & (1 <<
i))
1534 nOverrideValues[ nCell ][
i ] =
nValue;
1541 if( !(nWwCols && pParamsTDelete) )
1545 if (nitcFirst >= nWwCols)
1548 if (nitcLim <= nitcFirst)
1555 int nShlCnt = nWwCols - nitcLim;
1559 WW8_TCell* pCurrentTC = pTCs + nitcFirst;
1561 while(
i < nShlCnt )
1564 nCenter[nitcFirst +
i] = nCenter[nitcLim +
i];
1567 *pCurrentTC = pTCs[ nitcLim +
i];
1573 nCenter[nitcFirst +
i] = nCenter[nitcLim +
i];
1576 short nCellsDeleted = nitcLim - nitcFirst;
1578 if (nCellsDeleted > nWwCols)
1579 nCellsDeleted = nWwCols;
1580 nWwCols -= nCellsDeleted;
1596 short nCount = nLen >> 1;
1603 pSHDs[
i].SetWWValue( *pShd );
1609 if (!nLen || nStart >= nWwCols)
1613 pNewSHDs =
new Color[nWwCols];
1615 short nCount = nLen / 10 + nStart;
1634 if (aRes.
pSprm ==
nullptr)
1650 sprmTDefTableNewShd, sprmTDefTableNewShd2nd, sprmTDefTableNewShd3rd,
1651 sprmTCellPadding, sprmTCellPaddingDefault
1664 return sprmTTableWidth;
1666 return sprmTTextFlow;
1694 return sprmTDefTableNewShd;
1696 return sprmTDefTableNewShd2nd;
1698 return sprmTDefTableNewShd3rd;
1700 return sprmTTableBorders90;
1704 return sprmTSetBrc90;
1706 return sprmTCellPadding;
1708 return sprmTCellPaddingDefault;
1773 m_pFirstBand(nullptr),
1774 m_pActBand(nullptr),
1775 m_pTableNd(nullptr),
1776 m_pTabLines(nullptr),
1777 m_pTabLine(nullptr),
1778 m_pTabBoxes(nullptr),
1780 m_pCurrentWWCell(nullptr),
1782 m_nDefaultSwCols(0),
1787 m_nPreferredWidth(0),
1790 m_bClaimLineFormat(false),
1791 m_eOri(
text::HoriOrientation::
LEFT),
1794 m_nCurrentBandRow(0),
1798 m_pParentPos(nullptr),
1799 m_pFlyFormat(nullptr),
1804 static const sal_Int16 aOriArr[] =
1806 text::HoriOrientation::LEFT, text::HoriOrientation::CENTER, text::HoriOrientation::RIGHT, text::HoriOrientation::CENTER
1821 std::set<std::pair<WW8_CP, WW8_CP>> aPrevRes;
1826 short nTabeDxaNew = SHRT_MAX;
1827 bool bTabRowJustRead =
false;
1829 const sal_uInt8* pNewShadeSprm[3] = {
nullptr,
nullptr,
nullptr};
1830 const sal_uInt8* pTableBorders =
nullptr;
1831 sal_uInt16 nTableBordersLen = 0;
1832 const sal_uInt8* pTableBorders90 =
nullptr;
1833 sal_uInt16 nTableBorders90Len = 0;
1835 std::vector<std::pair<const sal_uInt8*, sal_uInt16>> aTSetBrcs, aTSetBrc90s;
1851 for (
int nLoop = 0; nLoop < 2; ++nLoop)
1859 sal_Int32 nLen = nL - nFixedLen;
1863 case sprmTTableWidth:
1889 pTableBorders = pParams;
1890 nTableBordersLen = nLen;
1892 case sprmTTableBorders90:
1893 pTableBorders90 = pParams;
1894 nTableBorders90Len = nLen;
1904 m_eOri = aOriArr[*pParams & 0x3];
1907 m_bIsBiDi = SVBT16ToUInt16(pParams) != 0;
1910 pNewBand->
nGapHalf =
static_cast<sal_Int16
>(SVBT16ToUInt16( pParams ));
1913 pNewBand->
nLineHeight =
static_cast<sal_Int16
>(SVBT16ToUInt16( pParams ));
1917 pNewBand->
ReadDef(bOldVer, pParams, nLen);
1918 bTabRowJustRead =
true;
1921 pShadeSprm = pParams;
1923 case sprmTDefTableNewShd:
1924 pNewShadeSprm[0] = pParams;
1926 case sprmTDefTableNewShd2nd:
1927 pNewShadeSprm[1] = pParams;
1929 case sprmTDefTableNewShd3rd:
1930 pNewShadeSprm[2] = pParams;
1938 short nDxaNew =
static_cast<sal_Int16
>(SVBT16ToUInt16( pParams ));
1939 if( nDxaNew < nTabeDxaNew )
1940 nTabeDxaNew = nDxaNew;
1944 aTSetBrcs.emplace_back(pParams, nLen);
1947 aTSetBrc90s.emplace_back(pParams, nLen);
1958 case sprmTCellPaddingDefault:
1961 case sprmTCellPadding:
1982 if (bTabRowJustRead)
1987 pNewBand->
ReadShd(pShadeSprm);
1988 if (pNewShadeSprm[0])
1989 pNewBand->
ReadNewShd(pNewShadeSprm[0], bOldVer, 0);
1990 if (pNewShadeSprm[1])
1991 pNewBand->
ReadNewShd(pNewShadeSprm[1], bOldVer, 22);
1992 if (pNewShadeSprm[2])
1993 pNewBand->
ReadNewShd(pNewShadeSprm[2], bOldVer, 44);
1994 if (pTableBorders90)
1996 else if (pTableBorders)
1998 pTableBorders, nTableBordersLen);
1999 for (
const auto&
a : aTSetBrcs)
2001 for (
const auto&
a : aTSetBrc90s)
2005 if( nTabeDxaNew < SHRT_MAX )
2007 short* pCenter = pNewBand->
nCenter;
2008 short firstDxaCenter = *pCenter;
2009 for(
int i = 0;
i < pNewBand->
nWwCols;
i++, ++pCenter )
2014 (nTabeDxaNew - (firstDxaCenter + pNewBand->
nGapHalf));
2056 SprmResult aParamsRes = HasTabCellSprm(pPap, bOldVer);
2061 if (!pParams || aParamsRes.
nRemainingData < 1 || (1 != *pParams) ||
2062 (pLevel && aLevelRes.
nRemainingData >= 1 && (*pLevel <= m_pIo->m_nInTable)))
2068 WW8_CP nMyStartCp=nStartCp;
2109 if (!aPrevRes.insert(aBounds).second)
2111 SAL_WARN(
"sw.ww8",
"WW8TabDesc, loop in paragraph property chain");
2126 pNewBand->
nRows = 1;
2153 short nMinCols = SHRT_MAX;
2185 short nOrigWidth[
MAX_COL + 1];
2205 if (nOrigWidth[
i] == 0)
2209 else if ((
nCellWidth <= 0) && (nOrigWidth[
i] > 0))
2227 if(
m_eOri == text::HoriOrientation::RIGHT)
2252 for (
int k = 0; k < pR->
nWwCols; ++k)
2255 for (
int i = 0;
i < 4; ++
i)
2277 j = (k == pR->
nWwCols - 1) ? 3 : 5;
2311 OSL_ENSURE(
i,
"no columns in row ?");
2321 while (k && !pR->
bExist[k])
2323 for (sal_uInt16
n=k+1;
n<
i;
n++)
2337 m_eOri = text::HoriOrientation::LEFT_AND_WIDTH;
2352 OSL_ENSURE(pApply,
"No frame");
2368 "should not be possible, must be at least one segment");
2381 bool bSetMinHeight =
false;
2392 const SwNode* pAnchorNode =
2394 if (pAnchorNode && *pAnchorNode == pPoint->
GetNode())
2397 bSetMinHeight =
true;
2429 if ( bIsInsideMargin && bAdjustMargin )
2430 m_eOri = text::HoriOrientation::LEFT_AND_WIDTH;
2433 if (
m_eOri == text::HoriOrientation::LEFT_AND_WIDTH )
2459 OSL_ENSURE(pTableNode,
"no table node!");
2472 if (
const SfxItemSet* pSet = pNd->GetpSwAttrSet())
2474 std::unique_ptr<SfxPoolItem> pSetAttr;
2502 m_bIsBiDi ? SvxFrameDirection::Horizontal_RL_TB : SvxFrameDirection::Horizontal_LR_TB,
RES_FRAMEDIR );
2505 if (text::HoriOrientation::LEFT_AND_WIDTH ==
m_eOri)
2516 (eHori == text::HoriOrientation::LEFT_AND_WIDTH))
2559 GetSttNd()->FindTableNode());
2560 OSL_ENSURE(
m_pTableNd,
"Where is my table node" );
2599 "Too few lines, table ended early");
2608 OSL_ENSURE(nCol < m_pTabBoxes->
size(),
2609 "Too few columns, table ended early");
2616 bool bMerge =
false;
2698 p->m_bGroupLocked =
true;
2702 m_MergeGroups.push_back(std::unique_ptr<WW8SelBoxInfo>(pActMGroup));
2726 pTabBox2 = rBoxes.empty() ? nullptr : rBoxes.front();
2730 if (!pTabBox2 || !pTabBox2->
GetSttNd())
2754 OSL_ENSURE(
m_xTmpPos &&
m_pIo,
"I've forgotten where the table is anchored");
2772 if (xLastAnchorCursor)
2789 throw std::runtime_error(
"table unexpectedly destroyed by applying redlines");
2800 if((1 < groupIt->size()) && groupIt->row(0)[0])
2802 SwFrameFormat* pNewFormat = groupIt->row(0)[0]->ClaimFrameFormat();
2804 const sal_uInt16 nRowSpan = groupIt->rowsCount();
2805 for (sal_uInt16
n = 0;
n < nRowSpan; ++
n)
2807 auto& rRow = groupIt->row(
n);
2808 for (
size_t i = 0;
i<rRow.size(); ++
i)
2810 const sal_Int32 nRowSpanSet = (
n == 0) && (
i == 0) ?
2812 (-1 * (nRowSpan -
n));
2843 const short nTolerance = 4;
2845 short nX2 = nX1 + nWidth;
2864 if( ( nX1 > nGrX1 ) && ( nX2 < nGrX2 ) )
2874 if( ( ( nX1 > nGrX1 )
2875 && ( nX1 < nGrX2 - 2*nTolerance ) )
2876 || ( ( nX2 > nGrX1 + 2*nTolerance )
2877 && ( nX2 < nGrX2 ) )
2879 || ( ( nX1 <=nGrX1 )
2880 && ( nX2 >=nGrX2 ) ) )
2903 OSL_FAIL(
"Problem with table");
2923 OSL_ENSURE(
false,
"Actual row bigger than expected." );
3006 if(!rSnapToGrid.GetValue())
3010 aGridItem.SetValue(
false);
3048 SvxBoxItemLine::TOP);
3056 SvxBoxItemLine::BOTTOM);
3070 SvxBoxItemLine::LEFT);
3073 aFormatBox.
SetDistance(nLeftDist, SvxBoxItemLine::LEFT);
3078 SvxBoxItemLine::RIGHT);
3081 aFormatBox.
SetDistance(nRightDist,SvxBoxItemLine::RIGHT);
3121 OSL_ENSURE(eDir == SvxFrameDirection::Environment,
"unknown direction code, maybe it's a bitfield");
3124 eDir = SvxFrameDirection::Vertical_LR_BT;
3127 eDir = SvxFrameDirection::Vertical_RL_TB;
3130 eDir = SvxFrameDirection::Vertical_RL_TB;
3133 eDir = bIsBiDi ? SvxFrameDirection::Horizontal_RL_TB : SvxFrameDirection::Horizontal_LR_TB;
3152 sal_Int16 eVertOri=text::VertOrientation::TOP;
3161 eVertOri = text::VertOrientation::TOP;
3164 eVertOri = text::VertOrientation::CENTER;
3167 eVertOri = text::VertOrientation::BOTTOM;
3182 "Wrong column count in table" );
3232 if( j < m_pActBand->nWwCols )
3341 pTheMergeGroup = pActGroup;
3348 if( pTheMergeGroup )
3357 sal_uInt16 nCol = 0;
3381 for (sal_uInt16 nSize =
static_cast< sal_uInt16
>(
m_aNumRuleNames.size()); nSize <= nCol; ++nSize)
3399 std::unique_ptr<WW8FlyPara> pTableWFlyPara;
3404 RndStdIds eAnchor( RndStdIds::FLY_AS_CHAR );
3412 WW8_CP nMyStartCp = nStartCp;
3416 pNestedTabPos = &aNestedTabPos;
3419 if ( pNestedTabPos )
3423 if ( pTableWFlyPara )
3433 eAnchor = RndStdIds::FLY_AT_CHAR;
3441 if( pStyleFormat && pStyleFormat->
GetBreak().
GetBreak() == SvxBreak::PageBefore )
3451 if ((eAnchor == RndStdIds::FLY_AT_CHAR)
3460 aItemSet.Put( aAnchor );
3463 OSL_ENSURE(
m_xTableDesc->m_pFlyFormat->GetAnchor().GetAnchorId() == eAnchor,
3464 "Not the anchor type requested!" );
3473 if ( pTableWFlyPara && pTableSFlyPara )
3475 WW8FlySet aFlySet( *
this, pTableWFlyPara.get(), pTableSFlyPara,
false );
3478 aFlySet.
Put( aAnchor );
3484 m_xTableDesc->m_pTable->GetFrameFormat()->GetHoriOrient();
3500 delete pTableSFlyPara;
3516 if( ( nLen > 0 ) && ( *
pData == 1 ) )
3522 if( ( nLen > 0 ) && ( *
pData == 1 ) )
3543 OSL_ENSURE(
m_xTableDesc,
"Panic, stop table with no table!");
3578 sal_uInt16 nRes = USHRT_MAX;
3581 for(sal_uInt16 nI = 0; nI <
m_xStyles->GetCount(); nI++ )
3583 && (nLFOIndex ==
m_vColl[ nI ].m_nLFOIndex) )
3594 for(sal_uInt16 nI = 0; nI <
m_xStyles->GetCount(); nI++ )
3596 && (rName ==
m_vColl[ nI ].GetOrgWWName()) )
3598 pRet =
m_vColl[ nI ].m_pFormat;
3628#ifdef DEBUGSPRMREADER
3629 fprintf(stderr,
"id is %x\n", aIter.GetCurrentId());
3646 std::unique_ptr<sal_uInt8[]> pSprms(
new sal_uInt8[nLen] );
3654 if ( pSt->
Tell() & 0x1 )
3664 if (!(pSt->
Tell() & 0x1))
3689 if( (1 < cbUPX) || ( (0 < cbUPX) && !bPAP ) )
3709 nLen = nLen - cbUPX;
3731 :
WW8Style(*pI->m_pTableStream, _rFib)
3732 , maSprmParser(_rFib)
3734 , mpStStrm(pI->m_pTableStream)
3735 , mpStyRule(nullptr)
3736 , mpParaSprms(nullptr)
3739 , mbTextColChanged(false)
3740 , mbFontChanged(false)
3741 , mbCJKFontChanged(false)
3742 , mbCTLFontChanged(false)
3743 , mbFSizeChanged(false)
3744 , mbFCTLSizeChanged(false)
3745 , mbWidowsChanged(false)
3746 , mbBidiChanged(false)
3804 sal_uInt16 nNextStyle,
3805 std::map<OUString, sal_Int32>& rParaCollisions,
3806 std::map<OUString, sal_Int32>& rCharCollisions)
3816 pColl = aResult.first;
3817 bStyExist = aResult.second;
3824 pColl = aResult.first;
3825 bStyExist = aResult.second;
3831 if (bImport && bStyExist && rSI.
GetOrgWWName().startsWith(
"WW8Num"))
3853 if (j != nThisStyle && j <
m_cstd )
3913 std::map<OUString, sal_Int32>& rParaCollisions,
3914 std::map<OUString, sal_Int32>& rCharCollisions)
3943 if ( !xStd ||
sName.isEmpty() || ((1 != xStd->sgc) && (2 != xStd->sgc)) )
3951 nNr, xStd->istdNext,
3952 rParaCollisions, rCharCollisions);
4032 std::unique_ptr<WW8_STD> xStd(
Read1Style(nSkip,
nullptr));
4050 std::vector<sal_uInt8> aRet
4077 ShortToSVBT16(rChpx.
ftc,
a);
4078 aRet.push_back(
a[1]);
4079 aRet.push_back(
a[0]);
4085 aRet.push_back(rChpx.
kul);
4092 ShortToSVBT16(rChpx.
lid,
a);
4093 aRet.push_back(
a[1]);
4094 aRet.push_back(
a[0]);
4100 aRet.push_back(rChpx.
ico);
4108 ShortToSVBT16(rChpx.
hps,
a);
4109 aRet.push_back(
a[0]);
4115 aRet.push_back(rChpx.
hpsPos);
4129 aRet.push_back(
a[1]);
4130 aRet.push_back(
a[0]);
4137 ShortToSVBT16(rChpx.
lidBi,
a);
4138 aRet.push_back(
a[1]);
4139 aRet.push_back(
a[0]);
4145 aRet.push_back(rChpx.
icoBi);
4152 ShortToSVBT16(rChpx.
hpsBi,
a);
4153 aRet.push_back(
a[1]);
4154 aRet.push_back(
a[0]);
4171 if (nSize > nMaxByteCount)
4173 SAL_WARN(
"sw.ww8",
"ReadWord2Chpx: truncating out of range "
4174 << nSize <<
" to " << nMaxByteCount);
4175 nSize = nMaxByteCount;
4189 aChpx.
fBold = nFlags8 & 0x01;
4190 aChpx.
fItalic = (nFlags8 & 0x02) >> 1;
4191 aChpx.
fRMarkDel = (nFlags8 & 0x04) >> 2;
4192 aChpx.
fOutline = (nFlags8 & 0x08) >> 3;
4195 aChpx.
fCaps = (nFlags8 & 0x40) >> 6;
4196 aChpx.
fVanish = (nFlags8 & 0x80) >> 7;
4198 if (
nCount >= nSize)
break;
4205 aChpx.
fRMark = nFlags8 & 0x01;
4206 aChpx.
fSpec = (nFlags8 & 0x02) >> 1;
4207 aChpx.
fStrike = (nFlags8 & 0x04) >> 2;
4208 aChpx.
fObj = (nFlags8 & 0x08) >> 3;
4209 aChpx.
fBoldBi = (nFlags8 & 0x10) >> 4;
4210 aChpx.
fItalicBi = (nFlags8 & 0x20) >> 5;
4211 aChpx.
fBiDi = (nFlags8 & 0x40) >> 6;
4214 if (
nCount >= nSize)
break;
4221 aChpx.
fsIco = nFlags8 & 0x01;
4222 aChpx.
fsFtc = (nFlags8 & 0x02) >> 1;
4223 aChpx.
fsHps = (nFlags8 & 0x04) >> 2;
4224 aChpx.
fsKul = (nFlags8 & 0x08) >> 3;
4225 aChpx.
fsPos = (nFlags8 & 0x10) >> 4;
4226 aChpx.
fsSpace = (nFlags8 & 0x20) >> 5;
4227 aChpx.
fsLid = (nFlags8 & 0x40) >> 6;
4228 aChpx.
fsIcoBi = (nFlags8 & 0x80) >> 7;
4230 if (
nCount >= nSize)
break;
4237 aChpx.
fsFtcBi = nFlags8 & 0x01;
4238 aChpx.
fsHpsBi = (nFlags8 & 0x02) >> 1;
4239 aChpx.
fsLidBi = (nFlags8 & 0x04) >> 2;
4241 if (
nCount >= nSize)
break;
4245 if (
nCount >= nSize)
break;
4249 if (
nCount >= nSize)
break;
4258 aChpx.
fNumRun = (nFlags8 & 0x80) >> 7;
4260 if (
nCount >= nSize)
break;
4267 aChpx.
ico = nFlags8 & 0x1F;
4268 aChpx.
kul = (nFlags8 & 0xE0) >> 5;
4270 if (
nCount >= nSize)
break;
4274 if (
nCount >= nSize)
break;
4278 if (
nCount >= nSize)
break;
4282 if (
nCount >= nSize)
break;
4286 if (
nCount >= nSize)
break;
4290 if (
nCount >= nSize)
break;
4294 if (
nCount >= nSize)
break;
4322 sal_uInt16 cstcStd(0);
4326 sal_uInt16 cbName(0);
4328 if (cbName > nMaxByteCount)
4330 SAL_WARN(
"sw.ww8",
"WW8RStyle::ImportOldFormatStyles: truncating out of range "
4331 << cbName <<
" to " << nMaxByteCount);
4332 cbName = nMaxByteCount;
4334 sal_uInt16 nByteCount = 2;
4336 while (nByteCount < cbName)
4354 nByteCount += aTmp.getLength();
4355 sName = OStringToOUString(aTmp, eStructChrSet);
4360 if (
sName.isEmpty())
4364 sName = OUString(pStr, strlen(pStr), RTL_TEXTENCODING_ASCII_US);
4367 if (
sName.isEmpty())
4368 sName =
"Unknown Style: " + OUString::number(stc);
4374 sal_uInt16 nStyles=stcp;
4376 std::vector<pxoffset> aCHPXOffsets(stcp);
4378 sal_uInt16 cbChpx(0);
4380 if (cbChpx > nMaxByteCount)
4382 SAL_WARN(
"sw.ww8",
"WW8RStyle::ImportOldFormatStyles: truncating out of range "
4383 << cbChpx <<
" to " << nMaxByteCount);
4384 cbChpx = nMaxByteCount;
4388 std::vector< std::vector<sal_uInt8> > aConvertedChpx;
4389 while (nByteCount < cbChpx)
4391 if (stcp == aCHPXOffsets.size())
4402 aCHPXOffsets[stcp].mnSize = 0;
4409 aCHPXOffsets[stcp].mnSize = nRemainder;
4412 aCHPXOffsets[stcp].
mnSize);
4415 nByteCount += nRemainder;
4418 aConvertedChpx.emplace_back( );
4423 std::vector<pxoffset> aPAPXOffsets(stcp);
4425 sal_uInt16 cbPapx(0);
4427 if (cbPapx > nMaxByteCount)
4429 SAL_WARN(
"sw.ww8",
"WW8RStyle::ImportOldFormatStyles: truncating out of range "
4430 << cbPapx <<
" to " << nMaxByteCount);
4431 cbPapx = nMaxByteCount;
4435 while (nByteCount < cbPapx)
4437 if (stcp == aPAPXOffsets.size())
4447 aPAPXOffsets[stcp].mnSize = 0;
4458 aPAPXOffsets[stcp].mnSize = nRemainder;
4461 nByteCount += nRemainder;
4470 if (iMac > nStyles) iMac = nStyles;
4472 std::map<OUString, sal_Int32> aParaCollisions;
4473 std::map<OUString, sal_Int32> aCharCollisions;
4475 for (stcp = 0; stcp < iMac; ++stcp)
4498 if (stcp >= aPAPXOffsets.size())
4513 if (!aConvertedChpx[stcp].empty())
4515 static_cast< short >(aConvertedChpx[stcp].
size()),
4526 std::map<OUString, sal_Int32> aParaCollisions;
4527 std::map<OUString, sal_Int32> aCharCollisions;
const OUString & GetValue() const
virtual void DeleteRange(SwPaM &)=0
Delete a range SwFlyFrameFormat.
virtual SwTextFormatColl * GetTextCollFromPool(sal_uInt16 nId, bool bRegardLanguage=true)=0
Return "Auto-Collection with ID.
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
SvStream & ReadInt16(sal_Int16 &rInt16)
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
sal_uInt64 Seek(sal_uInt64 nPos)
std::size_t ReadBytes(void *pData, std::size_t nSize)
sal_uInt64 SeekRel(sal_Int64 nPos)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
sal_uInt64 remainingSize()
SvStream & ReadUChar(unsigned char &rChar)
void SetDistance(sal_Int16 nNew, SvxBoxItemLine nLine)
sal_uInt8 & GetMaxHyphens()
sal_uInt8 & GetMinTrail()
short GetTextFirstLineOffset() const
void SetLeft(const tools::Long nL, const sal_uInt16 nProp=100)
void SetNumberingType(SvxNumType nSet)
SvxNumType GetNumberingType() const
void SetHeight(tools::Long n)
void SetWidth(tools::Long n)
SwFlyFrameFormat * MakeFlySection(RndStdIds eAnchorType, const SwPosition *pAnchorPos, const SfxItemSet *pSet=nullptr, SwFrameFormat *pParent=nullptr, bool bCalledFromShell=false)
OUString GetUniqueNumRuleName(const OUString *pChkStr=nullptr, bool bAutoNum=true) const
SwNumRule * FindNumRulePtr(const OUString &rName) const
const SwTable * InsertTable(const SwInsertTableOptions &rInsTableOpts, const SwPosition &rPos, sal_uInt16 nRows, sal_uInt16 nCols, sal_Int16 eAdjust, const SwTableAutoFormat *pTAFormat=nullptr, const std::vector< sal_uInt16 > *pColArr=nullptr, bool bCalledFromShell=false, bool bNewModel=true)
Insert new table at position.
const SwNumRuleTable & GetNumRuleTable() const
SwNumRule * GetOutlineNumRule() const
IDocumentContentOperations const & getIDocumentContentOperations() const
SwFootnoteIdxs & GetFootnoteIdxs()
void InsertRow(const SwCursor &rCursor, sal_uInt16 nCnt=1, bool bBehind=true)
IDocumentStylePoolAccess const & getIDocumentStylePoolAccess() const
const SwTextFormatColl * GetDfltTextFormatColl() const
std::shared_ptr< SwUnoCursor > CreateUnoCursor(const SwPosition &rPos, bool bTableCursor=false)
const SwAttrPool & GetAttrPool() const
bool SetTextFormatColl(const SwPaM &rRg, SwTextFormatColl *pFormat, const bool bReset=true, const bool bResetListAttrs=false, SwRootFrame const *pLayout=nullptr)
Add 4th optional parameter <bResetListAttrs>.
sal_uInt16 MakeNumRule(const OUString &rName, const SwNumRule *pCpy=nullptr, bool bBroadcast=false, const SvxNumberFormat::SvxNumPositionAndSpaceMode eDefaultNumberFormatPositionAndSpaceMode=SvxNumberFormat::LABEL_WIDTH_AND_POSITION)
void SetOutlineNumRule(const SwNumRule &rRule)
Marks a node in the document model.
SwNodeOffset GetIndex() const
Base class of the Writer document model elements.
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
SwNodeOffset EndOfSectionIndex() const
SwNodeType GetNodeType() const
SwNode & GetEndOfExtras() const
This is the last EndNode of a special section.
bool InsBoxen(SwTableNode *, SwTableLine *, SwTableBoxFormat *, SwTextFormatColl *, const SfxItemSet *pAutoAttr, sal_uInt16 nInsPos, sal_uInt16 nCnt=1)
Insert a new box in the line before InsPos.
const SwNumFormat * GetNumFormat(sal_uInt16 i) const
void Set(sal_uInt16 i, const SwNumFormat *)
const OUString & GetName() const
PaM is Point and Mark: a selection of the document model.
SwNode & GetPointNode() const
const SwPosition * GetPoint() const
SwTableBox is one table cell in the document model.
SwNodeOffset GetSttIdx() const
void setRowSpan(sal_Int32 nNewRowSpan)
SwFrameFormat * GetFrameFormat()
const SwStartNode * GetSttNd() const
void ChgFrameFormat(SwTableBoxFormat *pNewFormat, bool bNeedToReregister=true)
SwFrameFormat * ClaimFrameFormat()
SwTableLine is one table row in the document model.
SwFrameFormat * GetFrameFormat()
SwFrameFormat * ClaimFrameFormat()
SwTableBoxes & GetTabBoxes()
const SwTable & GetTable() const
SwTableNode * GetTableNode() const
void SetRowsToRepeat(sal_uInt16 nNumOfRows)
SwTableLines & GetTabLines()
SwTableFormat * GetFrameFormat()
static SwSelBoxes & SelLineFromBox(const SwTableBox *pBox, SwSelBoxes &rBoxes, bool bToTop=true)
const SfxPoolItem & GetAttr() const
Represents the style of a paragraph.
SwTextNode is a paragraph in the document model.
void SetAttrListLevel(int nLevel)
Sets the list level of this text node.
SwTextAttr * InsertItem(SfxPoolItem &rAttr, const sal_Int32 nStart, const sal_Int32 nEnd, const SetAttrMode nMode=SetAttrMode::DEFAULT)
create new text attribute from rAttr and insert it
const SfxPoolItem & GetAttr(sal_uInt16 nWhich, bool bInParent=true) const
End: Data collected during idle time.
void SetCountedInList(bool bCounted)
const OUString & GetText() const
std::optional< SwPosition > m_oLastAnchorPos
sal_uInt16 m_nLFOPosition
sal_uInt16 End_Footnote()
const WW8Fib & GetFib() const
friend struct WW8SwFlyPara
std::vector< SwWW8StyInf > m_vColl
bool m_bCurrentAND_fNumberAcross
const SwTextFormatColl * m_pDfltTextFormatColl
void Read_TabRowEnd(sal_uInt16, const sal_uInt8 *pData, short nLen)
void Read_ANLevelNo(sal_uInt16, const sal_uInt8 *pData, short nLen)
static Color ExtractColour(const sal_uInt8 *&rpData, bool bVer67)
bool SetUpperSpacing(SwPaM &pMyPam, int nSpace)
std::unique_ptr< SwWW8FltControlStack > m_xCtrlStck
std::unique_ptr< WW8SwFlyPara > m_xSFlyPara
void Read_TabCellEnd(sal_uInt16, const sal_uInt8 *pData, short nLen)
bool ParseTabPos(WW8_TablePos *aTabPos, WW8PLCFx_Cp_FKP *pPap)
SwTwips MoveOutsideFly(SwFrameFormat *pFlyFormat, const SwPosition &rPos, bool bTableJoin=true)
std::shared_ptr< WW8Fib > m_xWwFib
wwSectionManager m_aSectionManager
void StopAnlToRestart(sal_uInt8 nType, bool bGoBack=true)
bool SetNewFontAttr(sal_uInt16 nFCode, bool bSetEnums, sal_uInt16 nWhich)
sal_uInt16 m_nCurrentColl
sw::util::InsertedTablesManager m_aInsertedTables
void SetNCurrentColl(sal_uInt16 nColl)
sw::util::CharStyleMapper m_aCharStyleMapper
std::unique_ptr< WW8Dop > m_xWDop