27 #include <com/sun/star/i18n/ScriptType.hpp>
45 const OUString
sPrefix(
"WW8TempExport" + OUString::number( m_nUniqueList++ ));
49 m_pUsedNumTable->push_back( pMyNumRule );
54 pMyNumRule->
Set(
i, rSubRule );
64 auto const it(m_Lists.find(rListId));
65 if (it != m_Lists.end())
71 auto const pNewAbstractRule = DuplicateNumRuleImpl(&rAbstractRule);
72 assert(GetNumberingId(*pNewAbstractRule) == m_pUsedNumTable->size() - 1);
73 (
void) pNewAbstractRule;
74 m_Lists.insert(std::make_pair(rListId, m_pUsedNumTable->size() - 1));
75 return m_pUsedNumTable->size() - 1;
86 OUString
const& rListId,
89 const sal_uInt16 numdef = GetNumberingId(rExistingRule);
92 ? GetNumberingId(rAbstractRule)
93 : DuplicateAbsNum(rListId, rAbstractRule);
96 auto const mapping = std::make_pair(numdef, absnumdef);
98 auto it = m_OverridingNums.insert(std::make_pair(m_pUsedNumTable->size(), mapping));
100 m_pUsedNumTable->push_back(
nullptr);
103 return it.first->first;
107 sal_uInt16 nLevelNum,
110 m_ListLevelOverrides[nListId][nLevelNum] = nStartAt;
115 if ( !m_pUsedNumTable )
121 bool bOutlineRuleAdded(
false );
122 for ( sal_uInt16
n = m_pUsedNumTable->size();
n; )
124 const SwNumRule& rRule = *(*m_pUsedNumTable)[ --
n ];
127 m_pUsedNumTable->erase( m_pUsedNumTable->begin() +
n );
131 bOutlineRuleAdded =
true;
135 if ( !bOutlineRuleAdded )
139 m_pUsedNumTable->push_back( pR );
143 sal_uInt16 nRet =
static_cast<sal_uInt16
>(m_pUsedNumTable->GetPos(p));
153 "<GetWordFirstLineOffset> - misusage: position-and-space-mode does not equal LABEL_WIDTH_AND_POSITION" );
160 return nFirstLineOffset;
165 if ( !m_pUsedNumTable )
169 pFib->m_fcPlcfLst = pTableStrm->Tell();
171 NumberingDefinitions();
173 pFib->m_lcbPlcfLst = pTableStrm->Tell() - pFib->m_fcPlcfLst;
176 AbstractNumberingDefinitions();
179 OutOverrideListTab();
198 m_rWW8Export.pTableStrm->WriteUChar( nFlags ).WriteUChar( 0 );
203 if ( !m_pUsedNumTable )
206 sal_uInt16
nCount = m_pUsedNumTable->size();
209 for ( sal_uInt16
n = 0;
n < nCount; ++
n )
211 const SwNumRule * pRule = (*m_pUsedNumTable)[
n ];
214 AttrOutput().NumberingDefinition(
n + 1, *pRule);
218 auto it = m_OverridingNums.find(
n);
219 assert(it != m_OverridingNums.end());
220 pRule = (*m_pUsedNumTable)[it->second.first];
222 AttrOutput().OverrideNumberingDefinition(*pRule,
n + 1, it->second.second + 1, m_ListLevelOverrides[
n]);
267 case style::NumberingType::HANGUL_SYLLABLE_KO: nRet = 24;
break;
268 case style::NumberingType::HANGUL_JAMO_KO: nRet = 25;
break;
269 case style::NumberingType::HANGUL_CIRCLED_SYLLABLE_KO: nRet = 24;
break;
270 case style::NumberingType::HANGUL_CIRCLED_JAMO_KO: nRet = 25;
break;
271 case style::NumberingType::NUMBER_HANGUL_KO: nRet = 41;
break;
272 case style::NumberingType::NUMBER_UPPER_KO: nRet = 44;
break;
286 sal_uInt16 nNumberingType,
293 sal_Int16 nFirstLineIndex,
294 sal_Int16 nListTabPos,
295 const OUString &rNumberingString,
303 m_rWW8Export.pTableStrm->WriteUChar(
GetLevelNFC( nNumberingType ,pOutSet) );
309 case SvxAdjust::Center:
312 case SvxAdjust::Right:
319 m_rWW8Export.pTableStrm->WriteUChar( nAlign );
326 m_rWW8Export.pTableStrm->WriteUChar( nFollow );
333 std::unique_ptr<ww::bytes> pCharAtrs;
336 std::unique_ptr<ww::bytes> pOldpO = std::move(m_rWW8Export.pO);
340 sal_uInt16 nFontID = m_rWW8Export.m_aFontHelper.GetId( *pFont );
343 m_rWW8Export.InsUInt16( nFontID );
345 m_rWW8Export.InsUInt16( nFontID );
348 m_rWW8Export.OutputItemSet( *pOutSet,
false,
true, i18n::ScriptType::LATIN, m_rWW8Export.m_bExportModeRTF );
352 int nIndex = m_rWW8Export.GetGrfIndex(*pBrush);
356 m_rWW8Export.InsUInt32(nIndex);
358 m_rWW8Export.InsUInt16(1);
362 pCharAtrs = std::move(m_rWW8Export.pO);
363 m_rWW8Export.pO = std::move(pOldpO);
365 m_rWW8Export.pTableStrm->WriteUChar(
sal_uInt8(pCharAtrs ? pCharAtrs->size() : 0));
371 0x15, 0xc6, 0x05, 0x00, 0x01, 0, 0, 0x06
373 m_rWW8Export.pTableStrm->WriteUChar(
sal_uInt8(
sizeof( aPapSprms ) ) );
386 m_rWW8Export.pTableStrm->WriteBytes(aPapSprms,
sizeof(aPapSprms));
389 if (pCharAtrs && !pCharAtrs->empty())
390 m_rWW8Export.pTableStrm->WriteBytes(pCharAtrs->data(), pCharAtrs->size());
399 sal_uInt16
nCount = m_pUsedNumTable->size();
402 for( n = 0; n < nCount; ++n )
404 if (
nullptr == (*m_pUsedNumTable)[ n ])
409 AttrOutput().StartAbstractNumbering( n + 1 );
411 const SwNumRule& rRule = *(*m_pUsedNumTable)[ n ];
415 for( nLvl = 0; nLvl < nLevels; ++nLvl )
417 NumberingLevel(rRule, nLvl);
420 AttrOutput().EndAbstractNumbering();
430 std::iota(vec.begin(), vec.end(), 0);
473 OSL_FAIL(
"unknown GetLabelFollowedBy() return value" );
481 bool bWriteBullet =
false;
483 rtl_TextEncoding eChrSet=0;
490 sNumStr = OUString(&cBullet, 1);
502 sNumStr = rRule.
MakeNumString(aNumVector,
false,
true, nLvl);
507 OUString sSrch(OUString::number(
i));
508 sal_Int32 nFnd = sNumStr.indexOf(sSrch);
513 sNumStr = sNumStr.replaceAt(nFnd, 1, OUString(static_cast<char>(
i)));
542 SubstituteBullet(sNumStr, eChrSet, sFontName);
546 std::unique_ptr<wwFont> pPseudoFont;
563 if (sFontName.isEmpty())
573 sal_Int16 nIndentAt = 0;
574 sal_Int16 nFirstLineIndex = 0;
575 sal_Int16 nListTabPos = -1;
585 nIndentAt =
static_cast<sal_Int16
>(rFormat.
GetIndentAt());
591 AttrOutput().NumberingLevel( nLvl,
597 pPseudoFont.get(), pOutSet,
598 nIndentAt, nFirstLineIndex, nListTabPos,
605 if( !m_pUsedNumTable )
609 sal_uInt16
nCount = m_pUsedNumTable->size();
612 pFib->m_fcPlfLfo = pTableStrm->Tell();
615 for( n = 0; n < nCount; ++n )
620 for( n = 0; n < nCount; ++n )
624 pFib->m_lcbPlfLfo = pTableStrm->Tell() - pFib->m_fcPlfLfo;
629 if( !m_pUsedNumTable )
633 sal_uInt16 nNms = 0,
nCount = m_pUsedNumTable->size();
635 pFib->m_fcSttbListNames = pTableStrm->Tell();
639 for( ; nNms <
nCount; ++nNms )
641 const SwNumRule& rRule = *(*m_pUsedNumTable)[ nNms ];
653 pFib->m_lcbSttbListNames = pTableStrm->Tell() - pFib->m_fcSttbListNames;
657 rtl_TextEncoding& rChrSet, OUString& rFontName )
const
659 if (!m_bSubstituteBullets)
661 OUString sFontName = rFontName;
664 if (rNumStr[0] !=
u'\0')
666 rNumStr = rNumStr.replaceAt(0, 1, OUString(
670 rFontName = sFontName;
SvxNumType GetNumberingType() const
SVX_NUM_CHARS_UPPER_LETTER_N
bool IsUsed(const sw::BroadcastingModify &) const
const OUString & GetFamilyName() const
sal_Unicode bestFitOpenSymbolToMSFont(sal_Unicode cBullet, rtl_TextEncoding &r_ioChrSet, OUString &r_ioFontName)
OUString MakeNumString(const SwNodeNum &, bool bInclStrings=true) const
SVX_NUM_FULL_WIDTH_ARABIC
std::unique_ptr< ContentProperties > pData
void AddListLevelOverride(sal_uInt16 nListId, sal_uInt16 nLevelNum, sal_uInt16 nStartAt)
Store list level overrides (restart of list)
std::vector< sal_uInt8 > bytes
SVX_NUM_CHARS_UPPER_LETTER
const OUString & GetDefaultListId() const
virtual void WriteNumbering() override
Output the numbering table.
const OUString & GetName() const
OUString GetUniqueNumRuleName(const OUString *pChkStr=nullptr, bool bAutoNum=true) const
static constexpr sal_uInt16 val
sal_Int32 nFirstLineOffset
virtual void NumberingDefinition(sal_uInt16 nId, const SwNumRule &rRule) override
Definition of a numbering instance.
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_FONT(7)
FontFamily GetFamilyType()
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
SVX_NUM_IROHA_FULLWIDTH_JA
void Set_UInt16(sal_uInt8 *&p, sal_uInt16 n)
Collects and outputs fonts.
sal_uInt16 DuplicateAbsNum(OUString const &rListId, SwNumRule const &rAbstractRule)
check if a new abstractNum is needed for this list
bool IsContinusNum() const
static void WriteString16(SvStream &rStrm, const OUString &rStr, bool bAddZero)
SwNumRule * DuplicateNumRuleImpl(const SwNumRule *pRule)
In case of numbering restart.
SVX_NUM_IROHA_HALFWIDTH_JA
SVX_NUM_CHARS_LOWER_LETTER
void SubstituteBullet(OUString &rNumStr, rtl_TextEncoding &rChrSet, OUString &rFontName) const
const vcl::Font & GetDefBulletFont()
retrieve font used for the default bullet list characters
static void WriteShort(SvStream &rStrm, sal_Int16 nVal)
static sal_uInt8 GetLevelNFC(sal_uInt16 eNumType, const SfxItemSet *pOutSet)
Converts the SVX numbering type to MSONFC.
#define LANGUAGE_CHINESE_SIMPLIFIED
SVX_NUM_CHARS_LOWER_LETTER_N
sal_Int16 GetWordFirstLineOffset(const SwNumFormat &rFormat)
std::vector< tSwNumTreeNumber > tNumberVector
SVX_NUM_NUMBER_UPPER_ZH_TW
const SwNumFormat & Get(sal_uInt16 i) const
sal_uInt16 GetNumberingId(const SwNumRule &rNumRule)
Return the numeric id of the numbering rule.
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
LanguageType GetLanguage() const
void Set(sal_uInt16 i, const SwNumFormat *)
constexpr sal_uInt16 RES_CHRATR_BEGIN(HINT_BEGIN)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
SVX_NUM_NUMBER_TRADITIONAL_JA
const o3tl::enumarray< SvxAdjust, unsigned short > aSvxToUnoAdjust USHRT_MAX
const SwNumRuleTable & GetNumRuleTable() const
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_CJK_FONT(22)
void NumberingDefinitions()
Write static data of SwNumRule - LSTF.
sal_uInt16 OverrideNumRule(SwNumRule const &rExistingRule, OUString const &rListId, SwNumRule const &rAbstractRule)
Create a overriding numbering definition (if it does not yet exist)
constexpr sal_uInt16 RES_CHRATR_END(46)
void OutOverrideListTab()
bool IsStarSymbol(const OUString &rFontName)
static void WriteLong(SvStream &rStrm, sal_Int32 nVal)
static void FillCount(SvStream &rStrm, sal_uLong nCount)
constexpr TypedWhichId< SvxLanguageItem > RES_CHRATR_CJK_LANGUAGE(24)
virtual void NumberingLevel(sal_uInt8 nLevel, sal_uInt16 nStart, sal_uInt16 nNumberingType, SvxAdjust eAdjust, const sal_uInt8 *pNumLvlPos, sal_uInt8 nFollow, const wwFont *pFont, const SfxItemSet *pOutSet, sal_Int16 nIndentAt, sal_Int16 nFirstLineIndex, sal_Int16 nListTabPos, const OUString &rNumberingString, const SvxBrushItem *pBrush) override
All the numbering level information.
rtl_TextEncoding GetCharSet() const
const SwAttrPool & GetAttrPool() const
void AbstractNumberingDefinitions()
Write all Levels for all SwNumRules - LVLF.
SwNumRule * GetOutlineNumRule() const
void NumberingLevel(SwNumRule const &rRule, sal_uInt8 nLvl)
Write one numbering level.