22#include <libxml/tree.h>
26#include <rtl/string.hxx>
27#include <rtl/ustring.hxx>
33#include <com/sun/star/uno/Reference.h>
34#include <com/sun/star/uno/Sequence.h>
35#include <com/sun/star/xml/dom/XNode.hpp>
36#include <com/sun/star/xml/dom/XNodeList.hpp>
37#include <com/sun/star/xml/dom/XNamedNodeMap.hpp>
38#include <com/sun/star/xml/dom/NodeType.hpp>
39#include <com/sun/star/xml/dom/events/XEventTarget.hpp>
40#include <com/sun/star/xml/dom/events/XEvent.hpp>
41#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
42#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
44#include <unordered_map>
50 Context(
const css::uno::Reference< css::xml::sax::XFastDocumentHandler >& i_xHandler,
76 css::uno::Reference<css::xml::sax::XFastDocumentHandler>
mxDocHandler;
92 :
public cppu::WeakImplHelper< css::xml::dom::XNode, css::xml::dom::events::XEventTarget >
102 css::xml::dom::NodeType
const m_aNodeType;
104 xmlNodePtr m_aNodePtr;
110 CNode(
CDocument const& rDocument, ::osl::Mutex
const& rMutex,
111 css::xml::dom::NodeType
const& reNodeType, xmlNodePtr
const& rpNode);
114 void dispatchSubtreeModified();
116 void checkNoParent(css::uno::Reference< css::xml::dom::XNode >
const& xNode);
118 static void checkNoParent(
const xmlNodePtr pNode);
120 void checkSameOwner(css::uno::Reference< css::xml::dom::XNode >
const& xNode);
124 virtual ~CNode()
override;
126 xmlNodePtr GetNodePtr() {
return m_aNodePtr; }
128 virtual CDocument & GetOwnerDocument();
131 virtual void saxify(
const css::uno::Reference< css::xml::sax::XDocumentHandler >& i_xHandler);
134 virtual void fastSaxify( Context& io_rContext );
137 virtual bool IsChildTypeAllowed(css::xml::dom::NodeType nodeType,
138 css::xml::dom::NodeType
const* pReplacedNodeType);
145 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
146 appendChild(css::uno::Reference< css::xml::dom::XNode >
const& xNewChild)
override;
152 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL cloneNode(
sal_Bool deep)
override;
158 virtual css::uno::Reference< css::xml::dom::XNamedNodeMap > SAL_CALL getAttributes()
override;
163 virtual css::uno::Reference< css::xml::dom::XNodeList > SAL_CALL getChildNodes()
override;
168 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getFirstChild()
override;
173 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getLastChild()
override;
178 virtual OUString SAL_CALL getLocalName()
override;
183 virtual OUString SAL_CALL getNamespaceURI()
override;
188 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getNextSibling()
override;
194 virtual OUString SAL_CALL getNodeName()
override;
199 virtual css::xml::dom::NodeType SAL_CALL getNodeType()
override;
205 virtual OUString SAL_CALL getNodeValue()
override;
210 virtual css::uno::Reference< css::xml::dom::XDocument > SAL_CALL getOwnerDocument()
override;
215 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getParentNode()
override;
220 virtual OUString SAL_CALL getPrefix()
override;
225 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL getPreviousSibling()
override;
230 virtual sal_Bool SAL_CALL hasAttributes()
override;
235 virtual sal_Bool SAL_CALL hasChildNodes()
override;
240 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL insertBefore(
241 const css::uno::Reference< css::xml::dom::XNode >& newChild,
const css::uno::Reference< css::xml::dom::XNode >& refChild)
override;
247 virtual sal_Bool SAL_CALL isSupported(
const OUString& feature,
const OUString& ver)
override;
256 virtual void SAL_CALL
normalize()
override;
262 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL removeChild(
const css::uno::Reference< css::xml::dom::XNode >& oldChild)
override;
268 virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL replaceChild(
269 const css::uno::Reference< css::xml::dom::XNode >& newChild,
const css::uno::Reference< css::xml::dom::XNode >& oldChild)
override;
274 virtual void SAL_CALL setNodeValue(
const OUString& nodeValue)
override;
279 virtual void SAL_CALL setPrefix(
const OUString& prefix)
override;
283 virtual void SAL_CALL addEventListener(
const OUString& eventType,
284 const css::uno::Reference< css::xml::dom::events::XEventListener >& listener,
287 virtual void SAL_CALL removeEventListener(
const OUString& eventType,
288 const css::uno::Reference< css::xml::dom::events::XEventListener >& listener,
291 virtual sal_Bool SAL_CALL dispatchEvent(
const css::uno::Reference< css::xml::dom::events::XEvent >& evt)
override;
295 void nscleanup(
const xmlNodePtr aNode,
const xmlNodePtr aParent);
class SAL_WARN_UNUSED SAL_LOPLUGIN_ANNOTATE("crosscast") SwContentIndexReg
Reference< XOfficeDatabaseDocument > m_xDocument
void nscleanup(const xmlNodePtr aNode, const xmlNodePtr aParent)
eliminate redundant namespace declarations
void popContext(Context &io_rContext)
void pushContext(Context &io_rContext)
sal_Int32 getTokenWithPrefix(const Context &rContext, const char *pPrefix, const char *pName)
sal_Int32 getToken(const Context &rContext, const char *pToken)
void addNamespaces(Context &io_rContext, xmlNodePtr pNode)
add namespaces on this node to context
bool normalize(sal_uInt16 &rDay, sal_uInt16 &rMonth, sal_Int16 &rYear)
const OString & getPrefix() const
rtl::Reference< sax_fastparser::FastTokenHandlerBase > mxTokenHandler
NamespaceVectorType maNamespaces
outer vector: xml context; inner vector: current NS
std::unordered_map< OUString, sal_Int32 > NamespaceMapType
css::uno::Reference< css::xml::sax::XFastContextHandler > mxCurrentHandler
Context(const css::uno::Reference< css::xml::sax::XFastDocumentHandler > &i_xHandler, sax_fastparser::FastTokenHandlerBase *pTokenHandler)
std::vector< std::vector< Namespace > > NamespaceVectorType
css::uno::Reference< css::xml::sax::XFastDocumentHandler > mxDocHandler
NamespaceMapType maNamespaceMap
::rtl::Reference< sax_fastparser::FastAttributeList > mxAttribList