22 #include <libxml/xmlwriter.h>
27 #include <osl/diagnose.h>
29 #include <strings.hrc>
44 #include <unoprnms.hxx>
46 #include <com/sun/star/beans/PropertyValues.hpp>
53 : SimpleReferenceObject()
73 m_bSortByDocument(true),
84 return std::make_unique<SwAuthorityFieldType>(
m_pDoc);
89 for(SwAuthDataArr::size_type j = 0; j <
m_DataArr.size(); ++j)
103 OSL_FAIL(
"Field unknown" );
111 pEntry->SetAuthorField( static_cast<ToxAuthorityField>(
i),
116 if (*rpTemp == *pEntry)
123 m_DataArr.push_back(std::move(pEntry));
126 return m_DataArr.back().get();
130 std::vector<OUString>& rToFill )
const
139 std::u16string_view rIdentifier)
const
160 rpTemp->SetAuthorField(static_cast<ToxAuthorityField>(
i),
172 for( SwAuthDataArr::size_type nRet = 0; nRet <
m_DataArr.size(); ++nRet )
200 std::vector<std::unique_ptr<SwTOXSortTabBase>> aSortArr;
201 std::vector<std::unique_ptr<SwTOXSortTabBase>> aSortArrRLHidden;
202 std::vector<SwFormatField*> vFields;
206 const SwTextField* pTextField = pFormatField->GetTextField();
221 pTextNode = &rFieldTextNode;
222 if (pTextNode->
GetText().isEmpty()
228 auto const InsertImpl = [&pIntl, pTextNode, pFormatField]
229 (std::vector<std::unique_ptr<SwTOXSortTabBase>> & rSortArr)
231 std::unique_ptr<SwTOXAuthority> pNew(
234 for (
size_t i = 0;
i < rSortArr.size(); ++
i)
244 rSortArr.erase(rSortArr.begin() +
i);
253 while (j < rSortArr.size())
256 if (pNew->sort_lt(*pOld))
260 rSortArr.insert(rSortArr.begin() + j, std::move(pNew));
263 InsertImpl(aSortArr);
266 InsertImpl(aSortArrRLHidden);
270 for(
auto & pBase : aSortArr)
276 for (
auto & pBase : aSortArrRLHidden)
285 for (std::vector<sal_IntPtr>::size_type
i = 0;
i < rSequArr.size(); ++
i)
287 if (rSequArr[
i] == pAuthEntry)
305 sVal = OUString(uRet);
332 pValues[
i].realloc(2);
333 PropertyValue* pValue = pValues[
i].getArray();
335 pValue[0].Value <<= sal_Int16(pKey->
eField);
356 const sal_Unicode uSet = !sTmp.isEmpty() ? sTmp[0] : 0;
379 css::lang::Locale aLocale;
380 if( rAny >>= aLocale )
387 Sequence<PropertyValues>
aSeq;
395 auto nSize = std::min<sal_Int32>(aSeq.getLength(),
SAL_MAX_UINT16);
396 for(sal_Int32
i = 0;
i < nSize;
i++)
399 for(
const PropertyValue&
rValue : pValues[
i])
403 sal_Int16 nVal = -1;
rValue.Value >>= nVal;
438 OSL_FAIL(
"Sort key not found");
445 for(sal_uInt16
i = 0;
i < nKeyCount;
i++)
451 const OUString& rFieldContents )
453 , m_nTempSequencePos( -1 )
454 , m_nTempSequencePosRLHidden( -1 )
462 , m_xAuthEntry( pAuthEntry )
463 , m_nTempSequencePos( -1 )
464 , m_nTempSequencePosRLHidden( -1 )
488 sal_IntPtr & rnTempSequencePos(pLayout && pLayout->
IsHideRedlines()
492 if (0 <= rnTempSequencePos)
493 sRet += OUString::number(rnTempSequencePos);
502 if (sIdentifier.trim().startsWith(
"CITATION"))
509 sRet += OUStringChar(pAuthType->
GetSuffix());
521 sal_IntPtr & rnTempSequencePos(pLayout && pLayout->
IsHideRedlines()
525 if (0 <= rnTempSequencePos)
526 sRet += OUString::number(rnTempSequencePos);
540 return std::make_unique<SwAuthorityField>(pAuthType,
m_xAuthEntry.get());
557 return SwResId(STR_AUTHORITY_ENTRY);
572 SwTextField* pTextField = rFormatField.GetTextField();
580 std::unique_ptr<SwTOXInternational> pIntl(pFieldType->CreateTOXInternational());
582 sal_uInt16 nLevel = aAuthority.GetLevel();
584 aAuthority.InitText(pLayout);
585 for (
const auto& rToken : aPattern)
587 switch (rToken.eTokenType)
591 aText += rToken.sText;
596 sal_uInt16
eField = rToken.nAuthorityField;
597 aText += aAuthority.GetText(eField, pLayout);
610 xmlTextWriterStartElement(pWriter, BAD_CAST(
"SwAuthorityField"));
613 xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_xAuthEntry"));
614 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
m_xAuthEntry.get());
615 xmlTextWriterEndElement(pWriter);
616 xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_nTempSequencePos"));
617 xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"value"),
619 xmlTextWriterEndElement(pWriter);
620 xmlTextWriterStartElement(pWriter, BAD_CAST(
"m_nTempSequencePosRLHidden"));
621 xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"value"),
623 xmlTextWriterEndElement(pWriter);
625 xmlTextWriterEndElement(pWriter);
631 "BibiliographicType",
670 PropertyValue*
pValues = aRet.getArray();
674 const OUString& sField =
m_xAuthEntry->GetAuthorField(static_cast<ToxAuthorityField>(i));
676 pValues[i].Value <<= sal_Int16(sField.toInt32());
678 pValues[i].Value <<= sField;
685 static sal_Int32
lcl_Find(
const OUString& rFieldName)
698 Sequence <PropertyValue> aParam;
699 if(!(rAny >>= aParam))
704 OUString sToSet(sBuf.makeStringAndClear());
705 for(
const PropertyValue& rParam : std::as_const(aParam))
707 const sal_Int32 nFound =
lcl_Find(rParam.Name);
714 rParam.Value >>= nVal;
715 sContent = OUString::number(nVal);
718 rParam.Value >>= sContent;
733 * pDstTyp = static_cast<SwAuthorityFieldType*>(pFieldTyp);
734 if( pSrcTyp != pDstTyp )
737 pDstTyp->AppendField( *pSrcEntry );
Instances of SwFields and those derived from it occur 0 to n times.
std::vector< SwFormToken > SwFormTokens
Vector of tokens.
OUString const & GetAuthorField(ToxAuthorityField ePos) const
OUString ConditionalExpandAuthIdentifier(SwRootFrame const *pLayout) const
For internal use only, in general continue using ExpandField() instead.
virtual OUString ExpandImpl(SwRootFrame const *pLayout) const override
virtual void dumpAsXml(xmlTextWriterPtr pWriter) const
Marks a position in the document model.
#define UNO_NAME_SORT_KEY
const OUString & GetText() const
virtual const SwRootFrame * GetCurrentLayout() const =0
virtual ~SwAuthorityFieldType() override
virtual void SetPar1(const OUString &rStr) override
static LanguageType convertToLanguageType(const css::lang::Locale &rLocale, bool bResolveSystem=true)
const SwTextNode * GetBodyTextNode(const SwDoc &rDoc, SwPosition &rPos, const SwFrame &rFrame)
Forward declaration: get "BodyTextNode" for exp.fld in Fly's headers/footers/footnotes.
void SetSortAlgorithm(const OUString &rSet)
Base class of all fields.
#define TOX_STYLE_DELIMITER
SwContentFrame * getLayoutFrame(const SwRootFrame *, const SwPosition *pPos=nullptr, std::pair< Point, bool > const *pViewPosAndCalcFrame=nullptr) const
virtual bool QueryValue(css::uno::Any &rVal, sal_uInt16 nWhichId) const override
virtual std::unique_ptr< SwField > Copy() const override
std::map< sal_Int32, std::shared_ptr< SetItemPropertyStorage > > PropertyValues
SwTextNode * GetpTextNode() const
The root element of a Writer document layout.
sal_uInt16 AppendField(const SwAuthEntry &rInsert)
appends a new entry (if new) and returns the array position
const css::lang::Locale & getLocale(bool bResolveSystem=true) const
void GatherFields(std::vector< SwFormatField * > &rvFormatFields, bool bCollectOnlyInDocNodes=true) const
OUString m_aAuthFields[AUTH_FIELD_END]
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
css::uno::Any const & rValue
OUString GetAuthority(const SwTextAttr *pTextAttr, const SwRootFrame *pLayout) const
Returns the line matching the source's default row in the ToX.
virtual bool PutValue(const css::uno::Any &rVal, sal_uInt16 nWhichId) override
const SwTOXSortKey * GetSortKey(sal_uInt16 nIdx) const
sal_Unicode GetPrefix() const
invariant for SwAuthorityField is that it is always registered at its SwAuthorityFieldType via AddFie...
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
A wrapper around SfxPoolItem to store the start position of (usually) a text portion, with an optional end.
virtual bool equivalent(const SwTOXSortTabBase &)
void dumpAsXml(xmlTextWriterPtr pWriter) const override
virtual bool IsExpFieldsLocked() const =0
virtual ~SwAuthorityField() override
virtual std::unique_ptr< SwFieldType > Copy() const override
const SwFormatField & GetFormatField() const
sal_IntPtr m_nTempSequencePos
SwAuthEntry * GetAuthEntry() const
virtual SwFieldType * ChgTyp(SwFieldType *)
Set new type (used for copying among documents).
rtl::Reference< SwAuthEntry > m_xAuthEntry
struct _xmlTextWriter * xmlTextWriterPtr
std::unique_ptr< SwTOXInternational > CreateTOXInternational() const
virtual void QueryValue(css::uno::Any &rVal, sal_uInt16 nWhichId) const override
SwAuthEntry * GetEntryByIdentifier(std::u16string_view rIdentifier) const
sal_uInt16 GetSequencePos(const SwAuthEntry *pAuthEntry, SwRootFrame const *pLayout)
#define FIELD_PROP_LOCALE
sal_Unicode GetSuffix() const
LanguageType GetLanguage() const
SwNodes & GetNodes()
Node is in which nodes-array/doc?
OUString SwResId(const char *pId)
#define UNO_NAME_IS_SORT_ASCENDING
void SetLanguage(LanguageType nLang)
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
SwFieldType * GetTyp() const
void GetAllEntryIdentifiers(std::vector< OUString > &rToFill) const
virtual SwFieldType * ChgTyp(SwFieldType *) override
Set new type (used for copying among documents).
const PropertyValue * pValues
SwTextNode is a paragraph in the document model.
std::vector< SwAuthEntry * > m_SequArrRLHidden
hidden redlines
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
bool operator==(const SwAuthEntry &rComp) const
SwAuthEntry * AddField(const OUString &rFieldContents)
SwAuthorityFieldType(SwDoc *pDoc)
bool ChangeEntryContent(const SwAuthEntry *pNewEntry)
bool IsFieldDeletedInModel(IDocumentRedlineAccess const &rIDRA, SwTextField const &rTextField)
SwFormatField & GetFieldFormat()
sal_IntPtr m_nTempSequencePosRLHidden
hidden redlines
#define FIELD_PROP_PROP_SEQ
LanguageType GetAppLanguage()
virtual void PutValue(const css::uno::Any &rVal, sal_uInt16 nWhichId) override
const OUString & GetSortAlgorithm() const
Sequence< sal_Int8 > aSeq
bool IsHideRedlines() const
Replacement for sw::DocumentRedlineManager::GetRedlineFlags() (this is layout-level redline hiding)...
void RemoveField(const SwAuthEntry *nHandle)
virtual void CallSwClientNotify(const SfxHint &rHint) const override
std::vector< SwAuthEntry * > m_SequArr
static sal_Int32 lcl_Find(const OUString &rFieldName)
bool IsDocNodes() const
Is the NodesArray the regular one of Doc? (and not the UndoNds, ...) Implementation in doc...
SwAuthorityField(SwAuthorityFieldType *pType, const OUString &rFieldContents)
const char *const aFieldNames[]
SwTextNode & GetTextNode() const
OUString setToken(const OUString &rIn, sal_Int32 nToken, sal_Unicode cTok, const OUString &rNewToken)
virtual bool sort_lt(const SwTOXSortTabBase &)
OUString ExpandCitation(ToxAuthorityField eField, SwRootFrame const *pLayout) const
Class for sorting directories.
const OUString & GetFieldText(ToxAuthorityField eField) const
virtual OUString GetDescription() const override
sal_uInt16 GetSortKeyCount() const
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
void SetSortKeys(sal_uInt16 nKeyCount, SwTOXSortKey const nKeys[])
Represents one row in the bibliography table.
OUString m_sSortAlgorithm
OStringBuffer & padToLength(OStringBuffer &rBuffer, sal_Int32 nLength, char cFill= '\0')