40#include <editeng/editids.hrc>
51#include <rtl/ustrbuf.hxx>
54#include <osl/diagnose.h>
58#include <com/sun/star/i18n/ScriptType.hpp>
59#include <libxml/xmlwriter.h>
75 sal_uInt16
nId = nItemId;
77 if ( ( nScriptType == SvtScriptType::ASIAN ) ||
78 ( nScriptType == SvtScriptType::COMPLEX ) )
110 bValid = nScriptType == i18n::ScriptType::LATIN;
113 bValid = nScriptType == i18n::ScriptType::ASIAN;
116 bValid = nScriptType == i18n::ScriptType::COMPLEX;
119 bValid = nScriptType == i18n::ScriptType::LATIN;
122 bValid = nScriptType == i18n::ScriptType::ASIAN;
125 bValid = nScriptType == i18n::ScriptType::COMPLEX;
128 bValid = nScriptType == i18n::ScriptType::LATIN;
131 bValid = nScriptType == i18n::ScriptType::ASIAN;
134 bValid = nScriptType == i18n::ScriptType::COMPLEX;
137 bValid = nScriptType == i18n::ScriptType::LATIN;
140 bValid = nScriptType == i18n::ScriptType::ASIAN;
143 bValid = nScriptType == i18n::ScriptType::COMPLEX;
146 bValid = nScriptType == i18n::ScriptType::LATIN;
149 bValid = nScriptType == i18n::ScriptType::ASIAN;
152 bValid = nScriptType == i18n::ScriptType::COMPLEX;
160 { SID_ATTR_FRAMEDIRECTION,
true },
162 { SID_ATTR_PARA_HANGPUNCTUATION,
true },
163 { SID_ATTR_PARA_FORBIDDEN_RULES,
true },
164 { SID_ATTR_PARA_SCRIPTSPACE,
true },
165 { SID_ATTR_NUMBERING_RULE,
true },
171 { SID_ATTR_PARA_OUTLLEVEL,
true },
172 { SID_ATTR_PARA_BULLET,
true },
173 { SID_ATTR_LRSPACE,
true },
174 { SID_ATTR_ULSPACE,
true },
175 { SID_ATTR_PARA_LINESPACE,
true },
176 { SID_ATTR_PARA_ADJUST,
true },
177 { SID_ATTR_TABSTOP,
true },
178 { SID_ATTR_ALIGN_HOR_JUSTIFY_METHOD,
true },
179 { SID_ATTR_ALIGN_VER_JUSTIFY,
true },
180 { SID_ATTR_CHAR_COLOR,
true },
181 { SID_ATTR_CHAR_FONT,
true },
182 { SID_ATTR_CHAR_FONTHEIGHT,
true },
183 { SID_ATTR_CHAR_SCALEWIDTH,
true },
184 { SID_ATTR_CHAR_WEIGHT,
true },
185 { SID_ATTR_CHAR_UNDERLINE,
true },
186 { SID_ATTR_CHAR_STRIKEOUT,
true },
187 { SID_ATTR_CHAR_POSTURE,
true },
188 { SID_ATTR_CHAR_CONTOUR,
true },
189 { SID_ATTR_CHAR_SHADOWED,
true },
190 { SID_ATTR_CHAR_ESCAPEMENT,
true },
191 { SID_ATTR_CHAR_AUTOKERN,
true },
192 { SID_ATTR_CHAR_KERNING,
true },
193 { SID_ATTR_CHAR_WORDLINEMODE,
true },
194 { SID_ATTR_CHAR_LANGUAGE,
true },
195 { SID_ATTR_CHAR_CJK_LANGUAGE,
true },
196 { SID_ATTR_CHAR_CTL_LANGUAGE,
true },
197 { SID_ATTR_CHAR_CJK_FONT,
true },
198 { SID_ATTR_CHAR_CTL_FONT,
true },
199 { SID_ATTR_CHAR_CJK_FONTHEIGHT,
true },
200 { SID_ATTR_CHAR_CTL_FONTHEIGHT,
true },
201 { SID_ATTR_CHAR_CJK_WEIGHT,
true },
202 { SID_ATTR_CHAR_CTL_WEIGHT,
true },
203 { SID_ATTR_CHAR_CJK_POSTURE,
true },
204 { SID_ATTR_CHAR_CTL_POSTURE,
true },
205 { SID_ATTR_CHAR_EMPHASISMARK,
true },
206 { SID_ATTR_CHAR_RELIEF,
true },
209 { SID_ATTR_CHAR_OVERLINE,
true },
210 { SID_ATTR_CHAR_CASEMAP,
true },
211 { SID_ATTR_CHAR_GRABBAG,
true },
212 { SID_ATTR_CHAR_BACK_COLOR,
true },
215 { SID_ATTR_CHAR_CHARSETCOLOR,
true },
216 { SID_FIELD,
false },
225 switch( rNew.
Which() )
364 OSL_FAIL(
"Invalid Attribute!" );
386 assert((nDelFrom <
static_cast<sal_Int32
>(
maPortions.size())) || ((nDelFrom == 0) &&
maPortions.empty()));
387 PortionsType::iterator it =
maPortions.begin();
388 std::advance(it, nDelFrom);
394 return static_cast<sal_Int32
>(
maPortions.size());
409 maPortions.push_back(std::unique_ptr<TextPortion>(
p));
424class FindTextPortionByAddress
428 explicit FindTextPortionByAddress(
const TextPortion* p) : mp(
p) {}
429 bool operator() (
const std::unique_ptr<TextPortion>& v)
const
431 return v.get() == mp;
439 PortionsType::const_iterator it =
443 return std::numeric_limits<sal_Int32>::max();
449 sal_Int32 nCharPos, sal_Int32& nPortionStart,
bool bPreferStartingPortion)
const
452 sal_Int32 nTmpPos = 0;
454 for (sal_Int32
i = 0;
i <
n; ++
i)
457 nTmpPos = nTmpPos + rPortion.
GetLen();
458 if ( nTmpPos >= nCharPos )
461 if ( ( nTmpPos != nCharPos ) || !bPreferStartingPortion || (
i ==
n-1 ) )
463 nPortionStart = nTmpPos - rPortion.
GetLen();
468 OSL_FAIL(
"FindPortion: Not found!" );
475 for (sal_Int32
i = 0;
i < nPortion; ++
i)
485, nWidthFullCompression(0)
487, nMaxCompression100thPercent(0)
489, bFirstCharIsRightPunktuation(false)
503 memcpy(
pOrgDXArray.get(), pDXArray, nLen *
sizeof(sal_Int32) );
552 DBG_ASSERT( ( nDiff >= 0 ) || ( (nStart+nDiff) >= 0 ),
"MarkInvalid: Diff out of Range" );
604 DBG_ASSERT( nLines,
"CorrectPortionNumbersFromLine: Empty Portion?" );
605 if ( nLastFormattedLine < ( nLines - 1 ) )
610 sal_Int32 nTextDiff = rUnformatted.
GetStart() - rLastFormatted.
GetEnd();
617 int nPDiff = -( nPortionDiff-1 );
618 int nTDiff = -( nTextDiff-1 );
619 if ( nPDiff || nTDiff )
621 for ( sal_Int32 nL = nLastFormattedLine+1; nL < nLines; nL++ )
642template<
typename Array,
typename Val>
643sal_Int32 FastGetPos(
const Array& rArray,
const Val* p, sal_Int32& rLastPos)
645 sal_Int32 nArrayLen = rArray.size();
650 if (rLastPos > 16 && nArrayLen > 16)
653 if (rLastPos > nArrayLen - 2)
658 for (sal_Int32 nIdx = rLastPos - 2; nIdx < nEnd; ++nIdx)
660 if (rArray.at(nIdx).get() == p)
668 for (sal_Int32 nIdx = 0; nIdx < nArrayLen; ++nIdx)
669 if (rArray.at(nIdx).get() == p)
708 SAL_WARN(
"editeng",
"ParaPortionList::Release - out of bounds pos " <<
nPos);
720 SAL_WARN(
"editeng",
"ParaPortionList::Remove - out of bounds pos " <<
nPos);
730 SAL_WARN(
"editeng",
"ParaPortionList::Insert - out of bounds pos " <<
nPos);
746 SAL_WARN(
"editeng",
"ParaPortionList::Count - overflow " << nSize);
763 if ( pTmpPortion == pPPortion )
767 OSL_FAIL(
"GetYOffset: Portion not found" );
778 return i <= SAL_MAX_INT32 ? static_cast<sal_Int32>(
i) :
SAL_MAX_INT32;
793#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
798 for (sal_Int32
i = 0;
i < rParas.
Count(); ++
i)
808 aPrevParaAttribs(
std::move( aParaAttribs))
815 rPool.
Remove(*rAttrib->GetItem());
825 DBG_ASSERT( eSourceUnit != eDestUnit,
"ConvertItem - Why?!" );
827 switch ( rPoolItem->Which() )
831 assert(
dynamic_cast<const SvxLRSpaceItem *
>(rPoolItem.get()) !=
nullptr);
840 assert(
dynamic_cast<const SvxULSpaceItem *
>(rPoolItem.get()) !=
nullptr);
857 assert(
dynamic_cast<const SvxTabStopItem *
>(rPoolItem.get()) !=
nullptr);
867 for ( sal_uInt16
i = 0;
i < rItem.
Count();
i++ )
871 pNewItem->
Insert( aNewStop );
873 rPoolItem.reset(pNewItem);
897 sal_uInt16 nSourceWhich = nWhich;
906 if ( rSource.
GetItemState( nSourceWhich,
false ) == SfxItemState::SET )
908 MapUnit eSourceUnit = pSourceUnit ? *pSourceUnit : pSourcePool->
GetMetric( nSourceWhich );
909 MapUnit eDestUnit = pDestUnit ? *pDestUnit : pDestPool->
GetMetric( nWhich );
910 if ( eSourceUnit != eDestUnit )
912 std::unique_ptr<SfxPoolItem> pItem(rSource.
Get( nSourceWhich ).
Clone());
914 pItem->SetWhich(nWhich);
915 rDest.
Put( std::move(pItem) );
936 bHangingPunctuation(false),
946 nStartPortion(r.nStartPortion),
947 nEndPortion(r.nEndPortion),
951 bHangingPunctuation(r.bHangingPunctuation),
1070 assert(nDelFrom <= (
static_cast<sal_Int32
>(
maLines.size()) - 1));
1071 LinesType::iterator it =
maLines.begin();
1072 std::advance(it, nDelFrom);
1079 for (sal_Int32
i = 0;
i <
n; ++
i)
1082 if ( (bInclEnd && (rLine.
GetEnd() >= nChar)) ||
1083 (rLine.
GetEnd() > nChar) )
1089 DBG_ASSERT( !bInclEnd,
"Line not found: FindLine" );
1110 maLines.push_back(std::unique_ptr<EditLine>(
p));
1144 aStartPaM(rStartAndAnd),
1145 aEndPaM(rStartAndAnd)
1170 sal_Int32 nStartNode = rNodes.
GetPos( pStartNode );
1171 sal_Int32 nEndNode = rNodes.
GetPos( pEndNode );
1176 const bool bSwap = ( nStartNode > nEndNode ) ||
1177 ( ( nStartNode == nEndNode ) &&
1196 return !( r1 == r2 );
1204 maString(rStr), aContentAttribs(rContentAttribs)
1217#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1226 bool bResort =
false;
1227 bool bExpandedEmptyAtIndexNull =
false;
1229 std::size_t nAttr = 0;
1242 else if ( pAttrib->
IsEmpty() )
1253 bExpandedEmptyAtIndexNull =
true;
1264 if ( !pAttrib->
IsEdge() )
1286 bool bExpand =
false;
1290 if( bExpandedEmptyAtIndexNull )
1294 for ( std::size_t nA = 0; nA < nAttr; nA++ )
1328 OSL_FAIL(
"Empty Attribute after ExpandAttribs?" );
1331 rAttribs.erase(rAttribs.begin()+nAttr);
1349#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1359#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1365 bool bResort =
false;
1366 sal_Int32 nEndChanges =
nIndex+nDeleted;
1368 std::size_t nAttr = 0;
1373 bool bDelAttr =
false;
1377 if ( pAttrib->
GetStart() >= nEndChanges )
1398 if ( pAttrib->
GetEnd() <= nEndChanges )
1422 DBG_ASSERT( ( pAttrib->
GetEnd() <=
Len()) || bDelAttr,
"Collapse: Attribute larger than paragraph!" );
1427 rAttribs.erase(rAttribs.begin()+nAttr);
1445#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1454#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1459 sal_Int32 nCut = pPrevNode->
Len();
1461 std::size_t nAttr = 0;
1466 if ( pAttrib->
GetEnd() < nCut )
1471 else if ( pAttrib->
GetEnd() == nCut )
1489 pAttrib->
GetEnd() = nCut;
1495 CharAttribList::AttribsType::iterator it = rPrevAttribs.begin() + nAttr;
1497 rPrevAttribs.erase(it);
1500 pAttrib =
GetAttrib(rPrevAttribs, nAttr);
1503#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1513 sal_Int32 nNewStart =
maString.getLength();
1515#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1520 std::size_t nAttr = 0;
1526 bool bMelted =
false;
1530 std::size_t nTmpAttr = 0;
1532 while ( !bMelted && pTmpAttrib )
1535 if ( pTmpAttrib->
GetEnd() == nNewStart )
1541 || (0 == pAttrib->
GetLen()))
1545 rNextAttribs.erase(rNextAttribs.begin()+nAttr);
1549 else if (0 == pTmpAttrib->
GetLen())
1564 CharAttribList::AttribsType::iterator it = rNextAttribs.begin() + nAttr;
1566 rNextAttribs.erase(it);
1568 pAttrib =
GetAttrib(rNextAttribs, nAttr);
1571 rNextAttribs.clear();
1573#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1622 sal_Int32 nLen =
maString.getLength();
1626 for (sal_Int32 nAttr = rAttrs.size(); nAttr; )
1641 if ( nEndPos < 0 || nEndPos >
Len() )
1644 DBG_ASSERT( nStartPos <= nEndPos,
"Start and End reversed?" );
1646 sal_Int32
nIndex = nStartPos;
1647 OUStringBuffer
aStr(256);
1649 while (
nIndex < nEndPos )
1651 sal_Int32 nEnd = nEndPos;
1652 if ( pNextFeature && ( pNextFeature->
GetStart() < nEnd ) )
1655 pNextFeature =
nullptr;
1673 default: OSL_FAIL(
"What feature?" );
1679 return aStr.makeStringAndClear();
1684 sal_Int32 nOffset = 0;
1687 for (
size_t nAttr = 0; nAttr < rAttrs.size(); ++nAttr )
1690 assert (!(nAttr < rAttrs.size() - 1) ||
1691 rAttrs[nAttr]->GetStart() <= rAttrs[nAttr + 1]->GetStart());
1695 if (nOffset >= rPos)
1700 sal_Int32 nChunk =
static_cast<const EditCharAttribField&
>(rAttr).GetFieldValue().getLength();
1703 if (nOffset + nChunk >= rPos)
1715 assert (rPos <=
Len());
1806 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"ContentNode"));
1807 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"maString"), BAD_CAST(
maString.toUtf8().getStr()));
1810 (void)xmlTextWriterEndElement(pWriter);
1816, aAttribSet( rPool )
1824 for ( sal_uInt16
i = 0;
i < rTabs.
Count();
i++ )
1837 const sal_Int32
x = nCurPos / nDefTab + 1;
1844 bool bStyleChanged = (
pStyle !=
pS );
1847 if ( !(
pStyle && bStyleChanged) )
1869 return pTakeFrom->
Get( nWhich );
1874 bool bHasItem =
false;
1885 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"ContentAttribs"));
1886 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"style"),
"%s",
pStyle->
GetName().toUtf8().getStr());
1888 (void)xmlTextWriterEndElement(pWriter);
1925 bIsFixedCellHeight(false),
1927 bDisableAttributeExpanding(false)
1939class RemoveEachItemFromPool
1943 explicit RemoveEachItemFromPool(
EditDoc& rDoc) : mrDoc(rDoc) {}
1944 void operator() (
const std::unique_ptr<ContentNode>& rNode)
1950struct ClearSpellErrorsHandler
1952 void operator() (std::unique_ptr<ContentNode>
const & rNode)
1954 rNode->DestroyWrongList();
1986 if ( bSearchInParent || (
rSet.
GetItemState( nWhich_FontInfo ) == SfxItemState::SET ) )
1994 if ( bSearchInParent || (
rSet.
GetItemState( nWhich_Language ) == SfxItemState::SET ) )
2004 if ( bSearchInParent || (
rSet.
GetItemState( nWhich_FontHeight ) == SfxItemState::SET ) )
2006 if ( bSearchInParent || (
rSet.
GetItemState( nWhich_Weight ) == SfxItemState::SET ) )
2016 if ( bSearchInParent || (
rSet.
GetItemState( nWhich_Italic ) == SfxItemState::SET ) )
2029 short nEsc = rEsc.
GetEsc();
2049 if ( rFont == aPrevFont )
2060 for ( sal_Int32 nNode = 0; nNode <
Count(); nNode++ )
2115 SAL_WARN(
"editeng",
"EditDoc::Insert - overflow pos " <<
nPos);
2125 SAL_WARN(
"editeng",
"EditDoc::Remove - out of bounds pos " <<
nPos);
2135 SAL_WARN(
"editeng",
"EditDoc::Release - out of bounds pos " <<
nPos);
2148 SAL_WARN(
"editeng",
"EditDoc::Count - overflow " << nSize);
2165 const sal_Int32 nNodes =
Count();
2170 const sal_Int32 nSepSize = aSep.getLength();
2171 const sal_Int32 nLen =
GetTextLen() + (nNodes - 1)*nSepSize;
2173 OUStringBuffer
aBuffer(nLen + 16);
2175 for ( sal_Int32 nNode = 0; nNode < nNodes; nNode++ )
2177 if ( nSepSize && nNode>0 )
2184 return aBuffer.makeStringAndClear();
2193 const ContentNode* pNode, sal_Int32 nStartPos, sal_Int32 nEndPos)
2207 return EditPaM( pLastNode, pLastNode->
Len() );
2213 for ( sal_Int32 nNode = 0; nNode <
Count(); nNode++ )
2273 DBG_ASSERT( rStr.find( 0x0A ) == std::u16string_view::npos,
"EditDoc::InsertText: Newlines prohibited in paragraph!" );
2274 DBG_ASSERT( rStr.find( 0x0D ) == std::u16string_view::npos,
"EditDoc::InsertText: Newlines prohibited in paragraph!" );
2275 DBG_ASSERT( rStr.find(
'\t' ) == std::u16string_view::npos,
"EditDoc::InsertText: Newlines prohibited in paragraph!" );
2309 OUString aFollow( pStyle->
GetFollow() );
2310 if ( !aFollow.isEmpty() && ( aFollow != pStyle->
GetName() ) )
2358 sal_Int32 nRight =
GetPos( pRight );
2378 DBG_ASSERT( nEnd <= pNode->Len(),
"InsertAttrib: Attribute too large!" );
2386 DBG_ASSERT( nStart <= nEnd,
"Small miscalculations in InsertAttribInSelection" );
2388 RemoveAttribs( pNode, nStart, nEnd, pStartingAttrib, pEndingAttrib, rPoolItem.
Which() );
2395 pStartingAttrib =
nullptr;
2396 pEndingAttrib =
nullptr;
2399 if ( pStartingAttrib && pEndingAttrib &&
2400 ( *(pStartingAttrib->
GetItem()) == rPoolItem ) &&
2401 ( *(pEndingAttrib->
GetItem()) == rPoolItem ) )
2408 else if ( pStartingAttrib && ( *(pStartingAttrib->
GetItem()) == rPoolItem ) )
2409 pStartingAttrib->
GetStart() = nStart;
2410 else if ( pEndingAttrib && ( *(pEndingAttrib->
GetItem()) == rPoolItem ) )
2411 pEndingAttrib->
GetEnd() = nEnd;
2415 if ( pStartingAttrib )
2425 return RemoveAttribs( pNode, nStart, nEnd, pStarting, pEnding, nWhich );
2432 DBG_ASSERT( nEnd <= pNode->Len(),
"InsertAttrib: Attribute too large!" );
2437 rpStarting =
nullptr;
2439 bool bChanged =
false;
2440 bool bNeedsSorting =
false;
2442 DBG_ASSERT( nStart <= nEnd,
"Small miscalculations in InsertAttribInSelection" );
2444#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2449 std::size_t nAttr = 0;
2454 bool bRemoveAttrib =
false;
2455 sal_uInt16 nAttrWhich = pAttr->
Which();
2456 if ( ( nAttrWhich <
EE_FEATURE_START ) && ( !nWhich || ( nAttrWhich == nWhich ) ) )
2462 if ( pAttr->
GetEnd() > nEnd )
2464 bNeedsSorting =
true;
2473 bRemoveAttrib =
true;
2478 else if ( ( pAttr->
GetEnd() >= nStart ) && ( pAttr->
GetEnd() <= nEnd ) )
2483 pAttr->
GetEnd() = nStart;
2489 bRemoveAttrib =
true;
2493 else if ( ( pAttr->
GetStart() <= nStart ) && ( pAttr->
GetEnd() >= nEnd ) )
2498 bNeedsSorting =
true;
2504 else if ( pAttr->
GetEnd() == nEnd )
2506 pAttr->
GetEnd() = nStart;
2513 bNeedsSorting =
true;
2514 sal_Int32 nOldEnd = pAttr->
GetEnd();
2515 pAttr->
GetEnd() = nStart;
2523 if ( bRemoveAttrib )
2525 DBG_ASSERT( ( pAttr != rpStarting ) && ( pAttr != rpEnding ),
"Delete and retain the same attribute?" );
2528 rAttribs.erase(rAttribs.begin()+nAttr);
2545#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2565 if ( nStart != nEnd )
2587 sal_Int32 nOldEnd = pAttr->
GetEnd();
2588 pAttr->
GetEnd() = nStart;
2592 else if ( pAttr->
GetEnd() == nStart )
2596 if ( *(pAttr->
GetItem()) == rPoolItem )
2609 DBG_ASSERT( nStartPos <= nEndPos,
"Invalid region!" );
2611 std::size_t nAttr = 0;
2614 if ( nStartPos == nEndPos )
2616 while ( pAttr && ( pAttr->
GetStart() <= nEndPos) )
2620 if ( ( pAttr->
GetStart() < nStartPos ) && ( pAttr->
GetEnd() > nStartPos ) )
2623 else if ( ( pAttr->
GetStart() < nStartPos ) && ( pAttr->
GetEnd() == nStartPos ) )
2629 else if ( ( pAttr->
GetStart() == nStartPos ) && ( pAttr->
GetEnd() == nStartPos ) )
2634 else if ( ( pAttr->
GetStart() == nStartPos ) && ( pAttr->
GetEnd() > nStartPos ) )
2636 if ( nStartPos == 0 )
2642 sal_uInt16 nWhich = pItem->
Which();
2643 if ( rCurSet.
GetItemState( nWhich ) == SfxItemState::DEFAULT )
2645 rCurSet.
Put( *pItem );
2647 else if ( rCurSet.
GetItemState( nWhich ) == SfxItemState::SET )
2650 if ( rItem != *pItem )
2662 while ( pAttr && ( pAttr->
GetStart() < nEndPos) )
2666 if ( ( pAttr->
GetStart() <= nStartPos ) && ( pAttr->
GetEnd() >= nEndPos ) )
2669 else if ( pAttr->
GetStart() >= nStartPos )
2685 else if ( pAttr->
GetEnd() > nStartPos )
2692 sal_uInt16 nWhich = pItem->
Which();
2693 if ( rCurSet.
GetItemState( nWhich ) == SfxItemState::DEFAULT )
2695 rCurSet.
Put( *pItem );
2697 else if ( rCurSet.
GetItemState( nWhich ) == SfxItemState::SET )
2700 if ( rItem != *pItem )
2717 pWriter = xmlNewTextWriterFilename(
"editdoc.xml", 0);
2718 xmlTextWriterSetIndent(pWriter,1);
2719 (void)xmlTextWriterSetIndentString(pWriter, BAD_CAST(
" "));
2720 (void)xmlTextWriterStartDocument(pWriter,
nullptr,
nullptr,
nullptr);
2724 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"EditDoc"));
2727 i->dumpAsXml(pWriter);
2729 (void)xmlTextWriterEndElement(pWriter);
2733 (void)xmlTextWriterEndDocument(pWriter);
2734 xmlFreeTextWriter(pWriter);
2743 bool operator() (
const std::unique_ptr<EditCharAttrib>& left,
const std::unique_ptr<EditCharAttrib>& right)
const
2745 return left->GetStart() <
right->GetStart();
2752: bHasEmptyAttribs(false)
2771 const sal_Int32 nStart = pAttrib->
GetStart();
2773#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2784 if (rCurAttrib.
GetStart() > nStart)
2792 if (bInsert)
aAttribs.push_back(std::unique_ptr<EditCharAttrib>(pAttrib));
2794#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2803#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2810#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2813 for (sal_Int32
i = 0; i < static_cast<sal_Int32>(
aAttribs.size()); ++
i)
2816 for (sal_Int32 nNext =
i+1; nNext < static_cast<sal_Int32>(
aAttribs.size()); ++nNext)
2835#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
2849 AttribsType::const_reverse_iterator it = std::find_if(
aAttribs.rbegin(),
aAttribs.rend(),
2850 [&nWhich, &
nPos](
const AttribsType::value_type& rxAttr) {
2851 return rxAttr->Which() == nWhich && rxAttr->IsIn(nPos); });
2864 AttribsType::reverse_iterator it = std::find_if(
aAttribs.rbegin(),
aAttribs.rend(),
2865 [&nWhich, &
nPos](AttribsType::value_type& rxAttr) {
2866 return rxAttr->Which() == nWhich && rxAttr->IsIn(nPos); });
2878 for (
auto const& attrib :
aAttribs)
2881 if (rAttr.
GetStart() >= nFromPos && rAttr.
Which() == nWhich)
2890 [&nStartPos, &nEndPos](
const AttribsType::value_type& rxAttr) {
2891 return rxAttr->GetStart() < nEndPos && rxAttr->GetEnd() > nStartPos; });
2902 bool operator() (
const std::unique_ptr<EditCharAttrib>& r)
const
2904 return r.get() == mpAttr;
2912 AttribsType::iterator it = std::find_if(
aAttribs.begin(),
aAttribs.end(), FindByAddress(
p));
2934 AttribsType::const_reverse_iterator it =
aAttribs.rbegin(), itEnd =
aAttribs.rend();
2935 for (; it != itEnd; ++it)
2938 if (rAttr.
GetEnd() < nBound)
2952 for (
const std::unique_ptr<EditCharAttrib>& rAttr :
aAttribs)
2954 if (rAttr->GetStart() ==
nPos && rAttr->GetEnd() ==
nPos && rAttr->Which() == nWhich)
2966 explicit FindByStartPos(sal_Int32 nPos) : mnPos(
nPos) {}
2967 bool operator() (
const std::unique_ptr<EditCharAttrib>& r)
const
2969 return r->GetStart() >= mnPos;
2978 AttribsType::const_iterator it =
2986 it = std::find_if(it,
aAttribs.end(), [](
const std::unique_ptr<EditCharAttrib>& aAttrib) { return aAttrib->IsFeature(); } );
2987 return it ==
aAttribs.end() ? nullptr : it->get();
2992class RemoveEmptyAttrItem
2996 explicit RemoveEmptyAttrItem(
SfxItemPool& rPool) : mrItemPool(rPool) {}
2997 void operator() (
const std::unique_ptr<EditCharAttrib>& r)
3000 mrItemPool.
Remove(*r->GetItem());
3008 std::for_each(
aAttribs.begin(),
aAttribs.end(), RemoveEmptyAttrItem(rItemPool));
3009 aAttribs.erase( std::remove_if(
aAttribs.begin(),
aAttribs.end(), [](
const std::unique_ptr<EditCharAttrib>& aAttrib) { return aAttrib->IsEmpty(); } ),
aAttribs.end() );
3013#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
3016 std::set<std::pair<sal_Int32, sal_uInt16>> zero_set;
3017 for (
const std::unique_ptr<EditCharAttrib>& rAttr : rAttribs.
aAttribs)
3019 assert(rAttr->GetStart() <= rAttr->GetEnd());
3020 assert(!rAttr->IsFeature() || rAttr->GetLen() == 1);
3021 if (0 == rAttr->GetLen())
3024 assert(zero_set.insert(std::make_pair(rAttr->GetStart(), rAttr->Which())).second &&
"duplicate 0-length attribute detected");
3033 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"CharAttribList"));
3035 i->dumpAsXml(pWriter);
3037 (void)xmlTextWriterEndElement(pWriter);
void dumpAsXml(xmlTextWriterPtr pWriter) const
AttribsType & GetAttribs()
const EditCharAttrib * FindFeature(sal_Int32 nPos) const
static void DbgCheckAttribs(CharAttribList const &rAttribs)
bool HasAttrib(sal_Int32 nStartPos, sal_Int32 nEndPos) const
bool HasBoundingAttrib(sal_Int32 nBound) const
EditCharAttrib * FindEmptyAttrib(sal_uInt16 nWhich, sal_Int32 nPos)
void InsertAttrib(EditCharAttrib *pAttrib)
void OptimizeRanges(SfxItemPool &rItemPool)
std::vector< std::unique_ptr< EditCharAttrib > > AttribsType
const EditCharAttrib * FindNextAttrib(sal_uInt16 nWhich, sal_Int32 nFromPos) const
void Remove(const EditCharAttrib *p)
void SetHasEmptyAttribs(bool b)
const EditCharAttrib * FindAttrib(sal_uInt16 nWhich, sal_Int32 nPos) const
void DeleteEmptyAttribs(SfxItemPool &rItemPool)
CharAttribsType aPrevCharAttribs
ContentAttribsInfo(SfxItemSet aParaAttribs)
void RemoveAllCharAttribsFromPool(SfxItemPool &rPool) const
void AppendCharAttrib(EditCharAttrib *pNew)
SfxItemSetFixed< EE_PARA_START, EE_CHAR_END > aAttribSet
SvxTabStop FindTabStop(sal_Int32 nCurPos, sal_uInt16 nDefTab)
bool HasItem(sal_uInt16 nWhich) const
const SfxPoolItem & GetItem(sal_uInt16 nWhich) const
const SfxStyleSheet * GetStyleSheet() const
void SetStyleSheet(SfxStyleSheet *pS)
void dumpAsXml(xmlTextWriterPtr pWriter) const
ContentAttribs(SfxItemPool &rItemPool)
ContentNode(SfxItemPool &rItemPool)
void CollapseAttribs(sal_Int32 nIndex, sal_Int32 nDelChars, SfxItemPool &rItemPool)
void SetChar(sal_Int32 nPos, sal_Unicode c)
void dumpAsXml(xmlTextWriterPtr pWriter) const
CharAttribList & GetCharAttribs()
sal_Unicode GetChar(sal_Int32 nPos) const
void UnExpandPosition(sal_Int32 &rStartPos, bool bBiasStart)
ContentAttribs aContentAttribs
bool IsFeature(sal_Int32 nPos) const
const OUString & GetString() const
ContentAttribs & GetContentAttribs()
WrongList * GetWrongList()
void CopyAndCutAttribs(ContentNode *pPrevNode, SfxItemPool &rPool, bool bKeepEndingAttribs)
void Insert(std::u16string_view rStr, sal_Int32 nPos)
void Erase(sal_Int32 nPos)
void UnExpandPositions(sal_Int32 &rStartPos, sal_Int32 &rEndPos)
re-write offsets in the expanded text to string offsets
void ExpandAttribs(sal_Int32 nIndex, sal_Int32 nNewChars, SfxItemPool &rItemPool)
void AppendAttribs(ContentNode *pNextNode)
void Append(std::u16string_view rStr)
OUString Copy(sal_Int32 nPos) const
CharAttribList aCharAttribList
OUString GetExpandedText(sal_Int32 nStartPos=0, sal_Int32 nEndPos=-1) const
return content including expanded fields
void SetWrongList(WrongList *p)
std::unique_ptr< WrongList > mpWrongList
sal_Int32 GetExpandedLen() const
return length including expanded fields
SfxStyleSheet * GetStyleSheet()
void SetStyleSheet(SfxStyleSheet *pS, bool bRecalcFont=true)
void MoveForward(sal_Int32 nDiff)
const SfxPoolItem * GetItem() const
void MoveBackward(sal_Int32 nDiff)
void Expand(sal_Int32 nDiff)
bool IsInside(sal_Int32 nIndex) const
void Collaps(sal_Int32 nDiff)
GlobalEditData * GetGlobalData() const
void ImplDestroyContents()
EditPaM GetEndPaM() const
void Insert(sal_Int32 nPos, ContentNode *p)
bool IsEffectivelyVertical() const
void InsertAttrib(const SfxPoolItem &rItem, ContentNode *pNode, sal_Int32 nStart, sal_Int32 nEnd)
void RemoveItemsFromPool(const ContentNode &rNode)
bool IsTopToBottom() const
sal_Int32 GetPos(const ContentNode *pNode) const
static void FindAttribs(ContentNode *pNode, sal_Int32 nStartPos, sal_Int32 nEndPos, SfxItemSet &rCurSet)
void RemoveChars(EditPaM aPaM, sal_Int32 nChars)
SfxItemPool & GetItemPool()
std::vector< std::unique_ptr< ContentNode > > maContents
void Remove(sal_Int32 nPos)
deletes
OUString GetParaAsString(sal_Int32 nNode) const
OUString GetText(LineEnd eEnd) const
const ContentNode * GetObject(sal_Int32 nPos) const
bool RemoveAttribs(ContentNode *pNode, sal_Int32 nStart, sal_Int32 nEnd, sal_uInt16 nWhich)
bool bDisableAttributeExpanding
void InsertAttribInSelection(ContentNode *pNode, sal_Int32 nStart, sal_Int32 nEnd, const SfxPoolItem &rPoolItem)
EditPaM ConnectParagraphs(ContentNode *pLeft, ContentNode *pRight)
static OUString GetSepStr(LineEnd eEnd)
void CreateDefFont(bool bUseStyles)
Link< LinkParamNone *, void > aModifyHdl
EditPaM InsertText(EditPaM aPaM, std::u16string_view rStr)
void Release(sal_Int32 nPos)
does not delete
EditPaM InsertParaBreak(EditPaM aPaM, bool bKeepEndingAttribs)
void dumpAsXml(xmlTextWriterPtr pWriter) const
EditPaM InsertFeature(EditPaM aPaM, const SfxPoolItem &rItem)
sal_Int32 GetTextLen() const
const ContentNode * operator[](sal_Int32 nPos) const
EditDoc(SfxItemPool *pItemPool)
EditPaM GetStartPaM() const
virtual ~EditEngineItemPool() override
std::shared_ptr< DefItems > m_xDefItems
sal_Int32 FindLine(sal_Int32 nChar, bool bInclEnd)
void DeleteFromLine(sal_Int32 nDelFrom)
void Insert(sal_Int32 nPos, EditLine *p)
const EditLine & operator[](sal_Int32 nPos) const
sal_Int32 GetStartPortion() const
sal_Int32 GetEndPortion() const
CharPosArrayType aPositions
void SetStartPosX(sal_Int32 start)
EditLine & operator=(const EditLine &rLine)
sal_Int32 GetStart() const
Size CalcTextSize(ParaPortion &rParaPortion)
void SetHeight(sal_uInt16 nH, sal_uInt16 nTxtH=0)
void SetIndex(sal_Int32 n)
void SetNode(ContentNode *p)
const ContentNode * GetNode() const
sal_Int32 GetIndex() const
bool DbgIsBuggy(EditDoc const &rDoc) const
EditSelection & operator=(const EditPaM &r)
bool DbgIsBuggy(EditDoc const &rDoc) const
void Adjust(const EditDoc &rNodes)
std::shared_ptr< DefItems > GetDefItems()
void Insert(const SfxPoolItem *pItem)
const SfxPoolItem * Next()
const SfxPoolItem * First()
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
sal_Int32 GetPos(const ParaPortion *p) const
std::vector< std::unique_ptr< ParaPortion > > maPortions
tools::Long GetYOffset(const ParaPortion *pPPortion) const
static void DbgCheck(ParaPortionList const &, EditDoc const &rDoc)
void Insert(sal_Int32 nPos, std::unique_ptr< ParaPortion > p)
void Append(std::unique_ptr< ParaPortion > p)
void Remove(sal_Int32 nPos)
std::unique_ptr< ParaPortion > Release(sal_Int32 nPos)
const ParaPortion * SafeGetObject(sal_Int32 nPos) const
ParaPortion * operator[](sal_Int32 nPos)
sal_Int32 FindParagraph(tools::Long nYOffset) const
WritingDirectionInfos aWritingDirectionInfos
ParaPortion(const ParaPortion &)=delete
TextPortionList & GetTextPortions()
void MarkInvalid(sal_Int32 nStart, sal_Int32 nDiff)
tools::Long GetHeight() const
sal_Int32 nInvalidPosStart
ScriptTypePosInfos aScriptInfos
sal_Int32 GetLineNumber(sal_Int32 nIndex) const
ContentNode * GetNode() const
void CorrectValuesBehindLastFormattedLine(sal_Int32 nLastFormattedLine)
void SetVisible(bool bVisible)
void MarkSelectionInvalid(sal_Int32 nStart)
sal_uInt16 GetTrueSlotId(sal_uInt16 nWhich) const
const T & Put(std::unique_ptr< T > xItem, sal_uInt16 nWhich=0)
void SetDefaults(std::vector< SfxPoolItem * > *pDefaults)
sal_uInt16 GetTrueWhich(sal_uInt16 nSlot, bool bDeep=true) const
void Remove(const SfxPoolItem &)
void SetSecondaryPool(SfxItemPool *pPool)
virtual MapUnit GetMetric(sal_uInt16 nWhich) const
SfxItemPool * GetPool() const
void dumpAsXml(xmlTextWriterPtr pWriter) const
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
bool Set(const SfxItemSet &, bool bDeep=true)
void InvalidateItem(sal_uInt16 nWhich)
std::unique_ptr< SfxPoolItem > CloneSetWhich(sal_uInt16 nNewWhich) const
virtual SfxPoolItem * Clone(SfxItemPool *pPool=nullptr) const=0
virtual SfxStyleSheetBase * Find(const OUString &, SfxStyleFamily eFam, SfxStyleSearchBits n=SfxStyleSearchBits::All)
const OUString & GetName() const
SfxStyleFamily GetFamily() const
virtual const OUString & GetFollow() const
virtual SfxItemSet & GetItemSet()
SfxStyleSheetBasePool * GetPool()
constexpr tools::Long Height() const
tools::Long AdjustWidth(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
SvxColorItem item describes a color.
sal_uInt8 & GetProportionalHeight()
This item stores a field (SvxFieldData).
sal_uInt32 GetHeight() const
void SetHeight(sal_uInt32 nNewHeight, const sal_uInt16 nNewProp=100, MapUnit eUnit=MapUnit::MapRelative)
This item describes a Font.
FontFamily GetFamily() const
FontPitch GetPitch() const
rtl_TextEncoding GetCharSet() const
const OUString & GetFamilyName() const
void SetPropr(const sal_uInt8 nNewPropr)
void SetNonAutoEscapement(short nNewEsc, const OutputDevice *pOutDev=nullptr)
void SetCaseMap(const SvxCaseMap eNew)
short GetTextFirstLineOffset() const
void SetRight(const tools::Long nR, const sal_uInt16 nProp=100)
tools::Long GetRight() const
void SetTextLeft(const tools::Long nL, const sal_uInt16 nProp=100)
tools::Long GetTextLeft() const
void SetTextFirstLineOffset(const short nF, const sal_uInt16 nProp=100)
LanguageType GetLanguage() const
SvxLineSpaceRule GetLineSpaceRule() const
sal_uInt16 GetLineHeight() const
void SetLineHeight(const sal_uInt16 nHeight)
FontItalic GetPosture() const
void SetDefaultDistance(sal_Int32 nDefaultDistancenDefTabSize)
bool Insert(const SvxTabStop &rTab)
sal_Int32 GetDefaultDistance() const
sal_Unicode & GetDecimal()
SvxTabAdjust & GetAdjustment()
void SetLower(const sal_uInt16 nL, const sal_uInt16 nProp=100)
sal_uInt16 GetUpper() const
void SetUpper(const sal_uInt16 nU, const sal_uInt16 nProp=100)
sal_uInt16 GetLower() const
FontWeight GetWeight() const
void Append(TextPortion *p)
sal_Int32 GetPos(const TextPortion *p) const
sal_Int32 GetStartPos(sal_Int32 nPortion)
void DeleteFromPortion(sal_Int32 nDelFrom)
const TextPortion & operator[](sal_Int32 nPos) const
void Remove(sal_Int32 nPos)
sal_Int32 FindPortion(sal_Int32 nCharPos, sal_Int32 &rPortionStart, bool bPreferStartingPortion=false) const
void Insert(sal_Int32 nPos, TextPortion *p)
PortionKind GetKind() const
const Size & GetSize() const
Keeps track of misspelled ranges in paragraph.
void SetFontSize(const Size &)
void SetOrientation(Degree10 nLineOrientation)
void SetVertical(bool bVertical)
void SetOutline(bool bOutline)
void SetWordLineMode(bool bWordLine)
void SetPitch(FontPitch ePitch)
void SetTransparent(bool bTransparent)
void SetFillColor(const Color &)
void SetColor(const Color &)
void SetItalic(FontItalic)
void SetWeight(FontWeight)
void SetFamily(FontFamily)
void SetUnderline(FontLineStyle)
void SetCharSet(rtl_TextEncoding)
const Size & GetFontSize() const
void SetKerning(FontKerning nKerning)
void SetAlignment(TextAlign)
void SetFixKerning(const short nSpacing)
void SetOverline(FontLineStyle)
void SetFamilyName(const OUString &rFamilyName)
void SetLanguage(LanguageType)
void SetShadow(bool bShadow)
void SetRelief(FontRelief)
void SetEmphasisMark(FontEmphasisMark)
void SetStrikeout(FontStrikeout)
#define DBG_ASSERT(sCon, aError)
#define EE_PARA_NOT_FOUND
void CheckOrderedList(const CharAttribList::AttribsType &rAttribs)
bool IsScriptItemValid(sal_uInt16 nItemId, short nScriptType)
bool operator!=(const EditPaM &r1, const EditPaM &r2)
EditCharAttrib * MakeCharAttrib(SfxItemPool &rPool, const SfxPoolItem &rAttr, sal_Int32 nS, sal_Int32 nE)
sal_uInt16 GetScriptItemId(sal_uInt16 nItemId, SvtScriptType nScriptType)
void ConvertItem(std::unique_ptr< SfxPoolItem > &rPoolItem, MapUnit eSourceUnit, MapUnit eDestUnit)
void CreateFont(SvxFont &rFont, const SfxItemSet &rSet, bool bSearchInParent, SvtScriptType nScriptType)
bool operator==(const EditLine &r1, const EditLine &r2)
const SfxItemInfo aItemInfos[EDITITEMCOUNT]
void ConvertAndPutItems(SfxItemSet &rDest, const SfxItemSet &rSource, const MapUnit *pSourceUnit, const MapUnit *pDestUnit)
EditCharAttrib * GetAttrib(CharAttribList::AttribsType &rAttribs, std::size_t nAttr)
constexpr TypedWhichId< SvxContourItem > EE_CHAR_OUTLINE(EE_CHAR_START+8)
constexpr TypedWhichId< SvxKerningItem > EE_CHAR_KERNING(EE_CHAR_START+12)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CJK(EE_CHAR_START+17)
constexpr TypedWhichId< SvxFieldItem > EE_FEATURE_FIELD(EE_FEATURE_NOTCONV+1)
constexpr TypedWhichId< SfxBoolItem > EE_PARA_BULLETSTATE(EE_PARA_START+9)
constexpr TypedWhichId< SvxTabStopItem > EE_PARA_TABS(EE_PARA_START+17)
constexpr sal_uInt16 EDITITEMCOUNT(EE_ITEMS_END - EE_ITEMS_START+1)
constexpr TypedWhichId< SvxUnderlineItem > EE_CHAR_UNDERLINE(EE_CHAR_START+5)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT(EE_CHAR_START+2)
constexpr TypedWhichId< SvxAutoKernItem > EE_CHAR_PAIRKERNING(EE_CHAR_START+11)
constexpr TypedWhichId< SvxShadowedItem > EE_CHAR_SHADOW(EE_CHAR_START+9)
constexpr TypedWhichId< SvxULSpaceItem > EE_PARA_ULSPACE(EE_PARA_START+14)
constexpr TypedWhichId< SvxOverlineItem > EE_CHAR_OVERLINE(EE_CHAR_START+29)
constexpr sal_uInt16 EE_PARA_START(EE_ITEMS_START+0)
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE_CTL(EE_CHAR_START+16)
constexpr sal_uInt16 EE_FEATURE_LINEBR(EE_FEATURE_TAB+1)
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT(EE_CHAR_START+4)
constexpr TypedWhichId< SvxLRSpaceItem > EE_PARA_LRSPACE(EE_PARA_START+13)
constexpr sal_uInt16 EE_ITEMS_END(EE_FEATURE_END)
constexpr TypedWhichId< SvxColorItem > EE_CHAR_COLOR(EE_CHAR_START+0)
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT_CTL(EE_CHAR_START+22)
constexpr TypedWhichId< SvxCrossedOutItem > EE_CHAR_STRIKEOUT(EE_CHAR_START+6)
constexpr TypedWhichId< SvxPostureItem > EE_CHAR_ITALIC(EE_CHAR_START+7)
constexpr TypedWhichId< SfxGrabBagItem > EE_CHAR_GRABBAG(EE_CHAR_START+31)
constexpr TypedWhichId< SvxLineSpacingItem > EE_PARA_SBL(EE_PARA_START+15)
constexpr TypedWhichId< SvxEmphasisMarkItem > EE_CHAR_EMPHASISMARK(EE_CHAR_START+25)
constexpr TypedWhichId< SvxEscapementItem > EE_CHAR_ESCAPEMENT(EE_CHAR_START+10)
constexpr sal_uInt16 EE_FEATURE_START(EE_CHAR_END+1)
constexpr sal_uInt16 EE_CHAR_END(EE_CHAR_START+32)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT_CTL(EE_CHAR_START+20)
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT_CJK(EE_CHAR_START+21)
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE_CJK(EE_CHAR_START+15)
constexpr sal_uInt16 EE_FEATURE_TAB(EE_FEATURE_START+0)
constexpr TypedWhichId< SvxPostureItem > EE_CHAR_ITALIC_CJK(EE_CHAR_START+23)
constexpr TypedWhichId< SvxCaseMapItem > EE_CHAR_CASEMAP(EE_CHAR_START+30)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CTL(EE_CHAR_START+18)
constexpr TypedWhichId< SvxColorItem > EE_CHAR_BKGCOLOR(EE_CHAR_START+32)
constexpr TypedWhichId< SvxPostureItem > EE_CHAR_ITALIC_CTL(EE_CHAR_START+24)
constexpr TypedWhichId< SvxCharScaleWidthItem > EE_CHAR_FONTWIDTH(EE_CHAR_START+3)
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE(EE_CHAR_START+14)
constexpr TypedWhichId< SvXMLAttrContainerItem > EE_CHAR_XMLATTRIBS(EE_CHAR_START+28)
constexpr sal_uInt16 EE_ITEMS_START(OWN_ATTR_VALUE_END+1)
constexpr TypedWhichId< SvxWordLineModeItem > EE_CHAR_WLM(EE_CHAR_START+13)
constexpr TypedWhichId< SvxCharReliefItem > EE_CHAR_RELIEF(EE_CHAR_START+26)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT_CJK(EE_CHAR_START+19)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO(EE_CHAR_START+1)
struct _xmlTextWriter * xmlTextWriterPtr
sal_Int32 nFirstLineOffset
#define SAL_WARN_IF(condition, area, stream)
#define SAL_WARN(area, stream)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
std::unique_ptr< char[]> aBuffer