20#ifndef INCLUDED_SAX_FSHELPER_HXX
21#define INCLUDED_SAX_FSHELPER_HXX
23#include <com/sun/star/xml/sax/XFastAttributeList.hpp>
24#include <com/sun/star/uno/Reference.hxx>
25#include <com/sun/star/uno/Sequence.hxx>
26#include <rtl/ustring.hxx>
37constexpr sal_Int32
FSNS(sal_Int32 namespc, sal_Int32 element) {
return (namespc << 16) | element; }
43class FastSaxSerializer;
49 FastSerializerHelper(
const css::uno::Reference< css::io::XOutputStream >& xOutputStream,
bool bWriteHeader );
57 template<
typename... Args>
58 void startElement(sal_Int32 elementTokenId, sal_Int32 attribute,
const char* value, Args &&... args)
62 startElement(elementTokenId, std::forward<Args>(
args)...);
64 template<
typename... Args>
66 const std::optional<OString>& value, Args&&... args)
70 startElement(elementTokenId, std::forward<Args>(
args)...);
72 template<
typename... Args>
74 const std::optional<OUString>& value, Args&&... args)
76 std::optional<OString> opt;
78 opt =
value->toUtf8();
79 startElement(elementTokenId,
attribute, opt, std::forward<Args>(
args)...);
81 void startElement(sal_Int32 elementTokenId);
84 template<
typename... Args>
85 void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, Args &&... args)
87 startElement(
FSNS(namespaceTokenId, elementTokenId), std::forward<Args>(
args)...);
91 template<
typename... Args>
92 void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute,
const char* value, Args &&... args)
96 singleElement(elementTokenId, std::forward<Args>(
args)...);
98 template<
typename... Args>
100 const std::optional<OString>& value, Args&&... args)
104 singleElement(elementTokenId, std::forward<Args>(
args)...);
106 template<
typename... Args>
108 const std::optional<OUString>& value, Args&&... args)
110 std::optional<OString> opt;
112 opt =
value->toUtf8();
113 singleElement(elementTokenId,
attribute, opt, std::forward<Args>(
args)...);
115 void singleElement(sal_Int32 elementTokenId);
118 template<
typename... Args>
119 void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, Args &&... args)
121 singleElement(
FSNS(namespaceTokenId, elementTokenId), std::forward<Args>(
args)...);
124 void endElement(sal_Int32 elementTokenId);
125 void endElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId)
126 { endElement(
FSNS( namespaceTokenId, elementTokenId ) ); }
144 css::uno::Reference< css::io::XOutputStream >
const &
getOutputStream()
const;
148 void mark(sal_Int32 nTag,
149 const css::uno::Sequence< sal_Int32 >& rOrder =
150 css::uno::Sequence< sal_Int32 >() );
151 void mergeTopMarks(sal_Int32 nTag,
154 void setAllowXEscape(
bool bSet);
157 void pushAttributeValue( sal_Int32 attribute,
const char* value );
158 void pushAttributeValue( sal_Int32 attribute,
const OString& value );
167inline const char*
UseIf(
const char* s,
bool bUse) {
return bUse ? s :
nullptr; }
169template<
class TString>
170std::optional<TString>
UseIf(
const TString& s,
bool bUse)
172 return bUse ? std::optional<TString>(s) : std::optional<TString>();
void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, Args &&... args)
Start an element. After the first two arguments there can be a number of (attribute,...
void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, Args &&... args)
Create a single element. After the first two arguments there can be a number of (attribute,...
void endElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId)
void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute, const std::optional< OString > &value, Args &&... args)
void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute, const char *value, Args &&... args)
Create a single element. After the first argument there can be a number of (attribute,...
std::unique_ptr< FastSaxSerializer > mpSerializer
void startElement(sal_Int32 elementTokenId, sal_Int32 attribute, const char *value, Args &&... args)
Start an element. After the first argument there can be a number of (attribute, value) pairs.
void startElement(sal_Int32 elementTokenId, sal_Int32 attribute, const std::optional< OString > &value, Args &&... args)
void singleElement(sal_Int32 elementTokenId, sal_Int32 attribute, const std::optional< OUString > &value, Args &&... args)
void startElement(sal_Int32 elementTokenId, sal_Int32 attribute, const std::optional< OUString > &value, Args &&... args)
constexpr sal_Int32 FSNS(sal_Int32 namespc, sal_Int32 element)
const char * UseIf(const char *s, bool bUse)
std::shared_ptr< FastSerializerHelper > FSHelperPtr
bool getOutputStream(ProgramOptions const &options, OString const &extension, std::ostream **ppOutputStream, OString &targetSourceFileName, OString &tmpSourceFileName)