26#include <osl/diagnose.h>
29#include <com/sun/star/xml/dom/events/XMutationEvent.hpp>
33using namespace css::uno;
34using namespace css::xml::dom;
35using namespace css::xml::dom::events;
40 xmlAttrPtr
const pAttr)
42 NodeType_ATTRIBUTE_NODE, reinterpret_cast<xmlNodePtr>(pAttr))
53 xmlChar
const*
const pUri(
reinterpret_cast<xmlChar const*
>(
55 xmlChar
const*
const pPrefix(
reinterpret_cast<xmlChar const*
>(
57 xmlNsPtr pNs = xmlSearchNs(pNode->doc, pNode, pPrefix);
58 if (pNs && (0 != xmlStrcmp(pNs->href, pUri))) {
61 pNs = xmlNewNs(pNode, pUri, pPrefix);
65 pNs = xmlSearchNsByHref(pNode->doc, pNode, pUri);
68 SAL_WARN(
"unoxml",
"CAttr: cannot create namespace");
76 case NodeType_TEXT_NODE:
77 case NodeType_ENTITY_REFERENCE_NODE:
103 ::osl::MutexGuard
const g(
m_rMutex);
105 if ((
nullptr == m_aNodePtr) || (
nullptr ==
m_aAttrPtr)) {
109 strlen(
reinterpret_cast<char const *
>(
m_aAttrPtr->name)), RTL_TEXTENCODING_UTF8);
119 ::osl::MutexGuard
const g(
m_rMutex);
121 if ((
nullptr == m_aNodePtr) || (
nullptr ==
m_aAttrPtr)) {
127 Reference< XElement >
const xRet(
128 static_cast< XNode*
>(GetOwnerDocument().GetCNode(
150 ::osl::MutexGuard
const g(
m_rMutex);
152 if ((
nullptr == m_aNodePtr) || (
nullptr ==
m_aAttrPtr)) {
158 char const*
const pContent(
reinterpret_cast<char const*
>(
m_aAttrPtr->children->content));
159 return OUString(pContent, strlen(pContent), RTL_TEXTENCODING_UTF8);
167 ::osl::ClearableMutexGuard guard(
m_rMutex);
169 if ((
nullptr == m_aNodePtr) || (
nullptr ==
m_aAttrPtr)) {
177 xmlChar
const * pValue =
reinterpret_cast<xmlChar
const *
>(o1.getStr());
181 std::shared_ptr<xmlChar const>
const buffer(
182 xmlEncodeEntitiesReentrant(
m_aAttrPtr->doc, pValue), xmlFree);
185 xmlStringGetNodeList(
m_aAttrPtr->doc, buffer.get());
187 while (tmp !=
nullptr) {
188 tmp->parent = m_aNodePtr;
190 if (tmp->next ==
nullptr)
191 m_aNodePtr->last = tmp;
197 OUString sEventName(
"DOMAttrModified" );
199 Reference< XMutationEvent > event(docevent->createEvent(sEventName),UNO_QUERY);
200 event->initMutationEvent(
201 sEventName,
true,
false,
202 Reference<XNode>(
static_cast<XAttr*
>(
this ) ),
203 sOldValue,
value,
getName(), AttrChangeType_MODIFICATION );
207 dispatchEvent(event);
208 dispatchSubtreeModified();
213 ::osl::MutexGuard
const g(
m_rMutex);
215 if (!m_aNodePtr) {
return; }
219 OSL_ASSERT(!m_aNodePtr->parent);
231 ::osl::MutexGuard
const g(
m_rMutex);
233 if (!m_aNodePtr) {
return OUString(); }
237 OSL_ASSERT(!m_aNodePtr->parent);
238 OUString
const ret(OStringToOUString(
244 return CNode::getPrefix();
250 ::osl::MutexGuard
const g(
m_rMutex);
252 if (!m_aNodePtr) {
return OUString(); }
256 OSL_ASSERT(!m_aNodePtr->parent);
257 OUString
const ret(OStringToOUString(
263 return CNode::getNamespaceURI();
virtual css::uno::Reference< css::xml::dom::XDocument > SAL_CALL getOwnerDocument() override
CAttr(CDocument const &rDocument, ::osl::Mutex const &rMutex, xmlAttrPtr const pAttr)
virtual OUString SAL_CALL getValue() override
On retrieval, the value of the attribute is returned as a string.
virtual bool IsChildTypeAllowed(css::xml::dom::NodeType const nodeType, css::xml::dom::NodeType const *) override
virtual OUString SAL_CALL getPrefix() override
virtual OUString SAL_CALL getName() override
Returns the name of this attribute.
virtual OUString SAL_CALL getNodeName() override
virtual OUString SAL_CALL getNodeValue() override
virtual void SAL_CALL setPrefix(const OUString &prefix) override
virtual OUString SAL_CALL getLocalName() override
::std::optional< stringpair_t > m_oNamespace
xmlNsPtr GetNamespace(xmlNodePtr const pNode)
return the libxml namespace corresponding to m_pNamespace on pNode
virtual void SAL_CALL setValue(const OUString &value) override
Sets the value of the attribute from a string.
virtual css::uno::Reference< css::xml::dom::XElement > SAL_CALL getOwnerElement() override
The Element node this attribute is attached to or null if this attribute is not in use.
virtual OUString SAL_CALL getNamespaceURI() override
virtual sal_Bool SAL_CALL getSpecified() override
If this attribute was explicitly given a value in the original document, this is true; otherwise,...
#define SAL_WARN(area, stream)
::cppu::ImplInheritanceHelper< CNode, css::xml::dom::XAttr > CAttr_Base
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)