22#include <libxml/xmlwriter.h>
28#include <osl/diagnose.h>
46#include <unoprnms.hxx>
49#include <com/sun/star/beans/PropertyValues.hpp>
56 : SimpleReferenceObject()
76 m_bSortByDocument(true),
87 return std::make_unique<SwAuthorityFieldType>(
m_pDoc);
92 for(SwAuthDataArr::size_type j = 0; j <
m_DataArr.size(); ++j)
105 assert(
false &&
"SwAuthorityFieldType::RemoveField: pEntry was not added previously");
118 if (*rpTemp == *pEntry)
132 std::vector<OUString>& rToFill )
const
141 std::u16string_view rIdentifier)
const
174 for( SwAuthDataArr::size_type nRet = 0; nRet <
m_DataArr.size(); ++nRet )
202 std::vector<std::unique_ptr<SwTOXSortTabBase>> aSortArr;
203 std::vector<std::unique_ptr<SwTOXSortTabBase>> aSortArrRLHidden;
204 std::vector<SwFormatField*> vFields;
208 const SwTextField* pTextField = pFormatField->GetTextField();
223 pTextNode = &rFieldTextNode;
224 if (pTextNode->
GetText().isEmpty()
230 auto const InsertImpl = [&pIntl, pTextNode, pFormatField]
231 (std::vector<std::unique_ptr<SwTOXSortTabBase>> & rSortArr)
233 std::unique_ptr<SwTOXAuthority> pNew(
236 for (
size_t i = 0;
i < rSortArr.size(); ++
i)
246 rSortArr.erase(rSortArr.begin() +
i);
255 while (j < rSortArr.size())
258 if (pNew->sort_lt(*pOld))
262 rSortArr.insert(rSortArr.begin() + j, std::move(pNew));
265 InsertImpl(aSortArr);
268 InsertImpl(aSortArrRLHidden);
272 for(
auto & pBase : aSortArr)
278 for (
auto & pBase : aSortArrRLHidden)
287 for (std::vector<sal_IntPtr>::size_type
i = 0;
i < rSequArr.size(); ++
i)
289 if (rSequArr[
i] == pAuthEntry)
307 sVal = OUString(uRet);
335 PropertyValue* pValue =
pValues[
i].getArray();
337 pValue[0].Value <<= sal_Int16(pKey->
eField);
358 const sal_Unicode uSet = !sTmp.isEmpty() ? sTmp[0] : 0;
381 css::lang::Locale aLocale;
382 if( rAny >>= aLocale )
389 Sequence<PropertyValues>
aSeq;
398 for(sal_Int32
i = 0;
i < nSize;
i++)
401 for(
const PropertyValue& rValue :
pValues[
i])
405 sal_Int16 nVal = -1; rValue.Value >>= nVal;
428 CallSwClientNotify(rHint);
440 OSL_FAIL(
"Sort key not found");
447 for(sal_uInt16
i = 0;
i < nKeyCount;
i++)
453 std::u16string_view rFieldContents )
455 , m_nTempSequencePos( -1 )
456 , m_nTempSequencePosRLHidden( -1 )
464 , m_xAuthEntry( pAuthEntry )
465 , m_nTempSequencePos( -1 )
466 , m_nTempSequencePosRLHidden( -1 )
490 sal_IntPtr & rnTempSequencePos(pLayout && pLayout->
IsHideRedlines()
494 if (0 <= rnTempSequencePos)
495 sRet += OUString::number(rnTempSequencePos);
511 sRet += OUStringChar(pAuthType->
GetSuffix());
523 sal_IntPtr & rnTempSequencePos(pLayout && pLayout->
IsHideRedlines()
527 if (0 <= rnTempSequencePos)
528 sRet += OUString::number(rnTempSequencePos);
542 return std::make_unique<SwAuthorityField>(pAuthType,
m_xAuthEntry.get());
559 return SwResId(STR_AUTHORITY_ENTRY);
574 SwTextField* pTextField = rFormatField.GetTextField();
582 std::unique_ptr<SwTOXInternational> pIntl(pFieldType->CreateTOXInternational());
584 sal_uInt16 nLevel = aAuthority.
GetLevel();
587 for (
const auto& rToken : aPattern)
589 switch (rToken.eTokenType)
593 aText += rToken.sText;
598 sal_uInt16
eField = rToken.nAuthorityField;
613 return !rURL.isEmpty();
628 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"SwAuthorityField"));
631 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_xAuthEntry"));
632 (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
m_xAuthEntry.get());
637 (void)xmlTextWriterEndElement(pWriter);
638 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_nTempSequencePos"));
639 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"value"),
641 (void)xmlTextWriterEndElement(pWriter);
642 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_nTempSequencePosRLHidden"));
643 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"value"),
645 (void)xmlTextWriterEndElement(pWriter);
647 (void)xmlTextWriterEndElement(pWriter);
653 "BibiliographicType",
688 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"SwAuthEntry"));
692 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_aAuthField"));
693 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"key"), BAD_CAST(
aFieldNames[
i]));
694 (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"value"), BAD_CAST(
m_aAuthFields[
i].toUtf8().getStr()));
695 (void)xmlTextWriterEndElement(pWriter);
698 (void)xmlTextWriterEndElement(pWriter);
708 PropertyValue*
pValues = aRet.getArray();
714 pValues[
i].Value <<= sal_Int16(sField.toInt32());
723static sal_Int32
lcl_Find(std::u16string_view rFieldName)
736 Sequence <PropertyValue> aParam;
737 if(!(rAny >>= aParam))
742 OUString sToSet(sBuf.makeStringAndClear());
743 for(
const PropertyValue& rParam : std::as_const(aParam))
745 const sal_Int32 nFound =
lcl_Find(rParam.Name);
752 rParam.Value >>= nVal;
753 sContent = OUString::number(nVal);
756 rParam.Value >>= sContent;
772 if( pSrcTyp != pDstTyp )
const PropertyValue * pValues
struct _xmlTextWriter * xmlTextWriterPtr
const char *const aFieldNames[]
static sal_Int32 lcl_Find(std::u16string_view rFieldName)
virtual bool IsExpFieldsLocked() const =0
virtual const SwRootFrame * GetCurrentLayout() const =0
static OUString GetAbsURL(std::u16string_view rTheBaseURIRef, OUString const &rTheRelURIRef, EncodeMechanism eEncodeMechanism=EncodeMechanism::WasEncoded, DecodeMechanism eDecodeMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
const css::lang::Locale & getLocale(bool bResolveSystem=true) const
static LanguageType convertToLanguageType(const css::lang::Locale &rLocale, bool bResolveSystem=true)
virtual OUString getDocumentBaseURL() const override
void dumpAsXml(xmlTextWriterPtr pWriter) const
OUString const & GetAuthorField(ToxAuthorityField ePos) const
OUString m_aAuthFields[AUTH_FIELD_END]
bool operator==(const SwAuthEntry &rComp) const
sal_uInt16 GetSequencePos(const SwAuthEntry *pAuthEntry, SwRootFrame const *pLayout)
std::vector< SwAuthEntry * > m_SequArrRLHidden
hidden redlines
std::vector< SwAuthEntry * > m_SequArr
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
const SwTOXSortKey * GetSortKey(sal_uInt16 nIdx) const
sal_Unicode GetPrefix() const
SwAuthEntry * AddField(std::u16string_view rFieldContents)
OUString m_sSortAlgorithm
sal_Unicode GetSuffix() const
void RemoveField(const SwAuthEntry *nHandle)
void SetLanguage(LanguageType nLang)
virtual std::unique_ptr< SwFieldType > Copy() const override
virtual ~SwAuthorityFieldType() override
virtual void PutValue(const css::uno::Any &rVal, sal_uInt16 nWhichId) override
std::unique_ptr< SwTOXInternational > CreateTOXInternational() const
SwAuthEntry * AppendField(const SwAuthEntry &rInsert)
appends a new entry (if new) and returns the copied entry
SwAuthorityFieldType(SwDoc *pDoc)
LanguageType GetLanguage() const
bool ChangeEntryContent(const SwAuthEntry *pNewEntry)
sal_uInt16 GetSortKeyCount() const
void SetSortKeys(sal_uInt16 nKeyCount, SwTOXSortKey const nKeys[])
virtual void QueryValue(css::uno::Any &rVal, sal_uInt16 nWhichId) const override
void GetAllEntryIdentifiers(std::vector< OUString > &rToFill) const
const OUString & GetSortAlgorithm() const
SwAuthEntry * GetEntryByIdentifier(std::u16string_view rIdentifier) const
void SetSortAlgorithm(const OUString &rSet)
invariant for SwAuthorityField is that it is always registered at its SwAuthorityFieldType via AddFie...
virtual bool PutValue(const css::uno::Any &rVal, sal_uInt16 nWhichId) override
OUString ExpandCitation(ToxAuthorityField eField, SwRootFrame const *pLayout) const
sal_IntPtr m_nTempSequencePos
virtual void SetPar1(const OUString &rStr) override
virtual std::unique_ptr< SwField > Copy() const override
OUString GetAuthority(const SwTextAttr *pTextAttr, const SwRootFrame *pLayout) const
Returns the line matching the source's default row in the ToX.
const OUString & GetFieldText(ToxAuthorityField eField) const
virtual bool QueryValue(css::uno::Any &rVal, sal_uInt16 nWhichId) const override
OUString ConditionalExpandAuthIdentifier(SwRootFrame const *pLayout) const
For internal use only, in general continue using ExpandField() instead.
virtual SwFieldType * ChgTyp(SwFieldType *) override
Set new type (used for copying among documents).
SwAuthorityField(SwAuthorityFieldType *pType, std::u16string_view rFieldContents)
OUString GetAbsoluteURL() const
virtual ~SwAuthorityField() override
void dumpAsXml(xmlTextWriterPtr pWriter) const override
virtual OUString GetDescription() const override
SwAuthEntry * GetAuthEntry() const
sal_IntPtr m_nTempSequencePosRLHidden
hidden redlines
virtual OUString ExpandImpl(SwRootFrame const *pLayout) const override
rtl::Reference< SwAuthEntry > m_xAuthEntry
SwContentFrame is the layout for content nodes: a common base class for text (paragraph) and non-text...
SwContentFrame * getLayoutFrame(const SwRootFrame *, const SwPosition *pPos=nullptr, std::pair< Point, bool > const *pViewPosAndCalcFrame=nullptr) const
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
SwDocShell * GetDocShell()
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.
virtual void dumpAsXml(xmlTextWriterPtr pWriter) const
virtual SwFieldType * ChgTyp(SwFieldType *)
Set new type (used for copying among documents).
SwFieldType * GetTyp() const
SwNodes & GetNodes()
Node is in which nodes-array/doc?
bool IsDocNodes() const
Is the NodesArray the regular one of Doc? (and not the UndoNds, ...) Implementation in doc....
The root element of a Writer document layout.
bool IsHideRedlines() const
Replacement for sw::DocumentRedlineManager::GetRedlineFlags() (this is layout-level redline hiding).
A wrapper around SfxPoolItem to store the start position of (usually) a text portion,...
const SwFormatField & GetFormatField() const
SwTextNode & GetTextNode() const
SwTextNode * GetpTextNode() const
SwTextNode is a paragraph in the document model.
const OUString & GetText() const
const SwTextNode * GetBodyTextNode(const SwDoc &rDoc, SwPosition &rPos, const SwFrame &rFrame)
Forward declaration: get "BodyTextNode" for exp.fld in Fly's headers/footers/footnotes.
LanguageType GetAppLanguage()
Sequence< sal_Int8 > aSeq
OUString setToken(const OUString &rIn, sal_Int32 nToken, sal_Unicode cTok, std::u16string_view rNewToken)
OStringBuffer & padToLength(OStringBuffer &rBuffer, sal_Int32 nLength, char cFill='\0')
std::map< sal_Int32, std::shared_ptr< SetItemPropertyStorage > > PropertyValues
bool equalsAscii(std::u16string_view s1, const char *s2)
constexpr bool starts_with(std::basic_string_view< charT, traits > sv, std::basic_string_view< charT, traits > x) noexcept
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
std::u16string_view trim(std::u16string_view str)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
bool IsFieldDeletedInModel(IDocumentRedlineAccess const &rIDRA, SwTextField const &rTextField)
Marks a position in the document model.
Represents one row in the bibliography table.
SwFormatField & GetFieldFormat()
OUString GetText(sal_uInt16 nAuthField, const SwRootFrame *pLayout) const
virtual sal_uInt16 GetLevel() const override
Class for sorting directories.
virtual bool sort_lt(const SwTOXSortTabBase &)
virtual bool equivalent(const SwTOXSortTabBase &)
void InitText(SwRootFrame const *const pLayout)
OUString SwResId(TranslateId aId)
#define TOX_STYLE_DELIMITER
std::vector< SwFormToken > SwFormTokens
Vector of tokens.
@ AUTH_FIELD_AUTHORITY_TYPE
#define FIELD_PROP_PROP_SEQ
#define FIELD_PROP_LOCALE
constexpr OUStringLiteral UNO_NAME_SORT_KEY
constexpr OUStringLiteral UNO_NAME_IS_SORT_ASCENDING