summaryrefslogtreecommitdiff
path: root/configmgr/source/xcuparser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/xcuparser.cxx')
-rwxr-xr-x[-rw-r--r--]configmgr/source/xcuparser.cxx231
1 files changed, 121 insertions, 110 deletions
diff --git a/configmgr/source/xcuparser.cxx b/configmgr/source/xcuparser.cxx
index 44eb4453332c..3a81ea4e3673 100644..100755
--- a/configmgr/source/xcuparser.cxx
+++ b/configmgr/source/xcuparser.cxx
@@ -42,6 +42,8 @@
#include "rtl/string.hxx"
#include "rtl/ustring.h"
#include "rtl/ustring.hxx"
+#include "xmlreader/span.hxx"
+#include "xmlreader/xmlreader.hxx"
#include "data.hxx"
#include "localizedpropertynode.hxx"
@@ -50,14 +52,13 @@
#include "modifications.hxx"
#include "node.hxx"
#include "nodemap.hxx"
+#include "parsemanager.hxx"
#include "partial.hxx"
#include "path.hxx"
#include "propertynode.hxx"
#include "setnode.hxx"
-#include "span.hxx"
#include "xcuparser.hxx"
#include "xmldata.hxx"
-#include "xmlreader.hxx"
namespace configmgr {
@@ -80,22 +81,22 @@ XcuParser::XcuParser(
XcuParser::~XcuParser() {}
-XmlReader::Text XcuParser::getTextMode() {
+xmlreader::XmlReader::Text XcuParser::getTextMode() {
return valueParser_.getTextMode();
}
bool XcuParser::startElement(
- XmlReader & reader, XmlReader::Namespace ns, Span const & name)
+ xmlreader::XmlReader & reader, int nsId, xmlreader::Span const & name)
{
- if (valueParser_.startElement(reader, ns, name)) {
+ if (valueParser_.startElement(reader, nsId, name)) {
return true;
}
if (state_.empty()) {
- if (ns == XmlReader::NAMESPACE_OOR &&
+ if (nsId == ParseManager::NAMESPACE_OOR &&
name.equals(RTL_CONSTASCII_STRINGPARAM("component-data")))
{
handleComponentData(reader);
- } else if (ns == XmlReader::NAMESPACE_OOR &&
+ } else if (nsId == ParseManager::NAMESPACE_OOR &&
name.equals(RTL_CONSTASCII_STRINGPARAM("items")))
{
state_.push(State(rtl::Reference< Node >(), false));
@@ -103,7 +104,7 @@ bool XcuParser::startElement(
throw css::uno::RuntimeException(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM("bad root element <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
@@ -111,7 +112,7 @@ bool XcuParser::startElement(
} else if (state_.top().ignore) {
state_.push(State(false));
} else if (!state_.top().node.is()) {
- if (ns == XmlReader::NAMESPACE_NONE &&
+ if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("item")))
{
handleItem(reader);
@@ -119,7 +120,7 @@ bool XcuParser::startElement(
throw css::uno::RuntimeException(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM("bad items node member <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
@@ -127,7 +128,7 @@ bool XcuParser::startElement(
} else {
switch (state_.top().node->kind()) {
case Node::KIND_PROPERTY:
- if (ns == XmlReader::NAMESPACE_NONE &&
+ if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("value")))
{
handlePropValue(
@@ -138,14 +139,14 @@ bool XcuParser::startElement(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"bad property node member <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
break;
case Node::KIND_LOCALIZED_PROPERTY:
- if (ns == XmlReader::NAMESPACE_NONE &&
+ if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("value")))
{
handleLocpropValue(
@@ -157,7 +158,7 @@ bool XcuParser::startElement(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"bad localized property node member <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
@@ -166,18 +167,18 @@ bool XcuParser::startElement(
case Node::KIND_LOCALIZED_VALUE:
throw css::uno::RuntimeException(
(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad member <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
case Node::KIND_GROUP:
- if (ns == XmlReader::NAMESPACE_NONE &&
+ if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("prop")))
{
handleGroupProp(
reader,
dynamic_cast< GroupNode * >(state_.top().node.get()));
- } else if (ns == XmlReader::NAMESPACE_NONE &&
+ } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("node")))
{
handleGroupNode(reader, state_.top().node);
@@ -186,19 +187,19 @@ bool XcuParser::startElement(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"bad group node member <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
break;
case Node::KIND_SET:
- if (ns == XmlReader::NAMESPACE_NONE &&
+ if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("node")))
{
handleSetNode(
reader, dynamic_cast< SetNode * >(state_.top().node.get()));
- } else if (ns == XmlReader::NAMESPACE_NONE &&
+ } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("prop")))
{
OSL_TRACE(
@@ -210,7 +211,7 @@ bool XcuParser::startElement(
throw css::uno::RuntimeException(
(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM("bad set node member <")) +
- xmldata::convertFromUtf8(name) +
+ name.convertFromUtf8() +
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
@@ -221,7 +222,7 @@ bool XcuParser::startElement(
return true;
}
-void XcuParser::endElement(XmlReader const &) {
+void XcuParser::endElement(xmlreader::XmlReader const &) {
if (valueParser_.endElement()) {
return;
}
@@ -246,11 +247,11 @@ void XcuParser::endElement(XmlReader const &) {
}
}
-void XcuParser::characters(Span const & text) {
+void XcuParser::characters(xmlreader::Span const & text) {
valueParser_.characters(text);
}
-XcuParser::Operation XcuParser::parseOperation(Span const & text) {
+XcuParser::Operation XcuParser::parseOperation(xmlreader::Span const & text) {
OSL_ASSERT(text.is());
if (text.equals(RTL_CONSTASCII_STRINGPARAM("modify"))) {
return OPERATION_MODIFY;
@@ -266,11 +267,11 @@ XcuParser::Operation XcuParser::parseOperation(Span const & text) {
}
throw css::uno::RuntimeException(
(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("invalid op ")) +
- xmldata::convertFromUtf8(text)),
+ text.convertFromUtf8()),
css::uno::Reference< css::uno::XInterface >());
}
-void XcuParser::handleComponentData(XmlReader & reader) {
+void XcuParser::handleComponentData(xmlreader::XmlReader & reader) {
rtl::OStringBuffer buf;
buf.append('.');
bool hasPackage = false;
@@ -278,12 +279,12 @@ void XcuParser::handleComponentData(XmlReader & reader) {
Operation op = OPERATION_MODIFY;
bool finalized = false;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_OOR &&
+ if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("package")))
{
if (hasPackage) {
@@ -296,9 +297,9 @@ void XcuParser::handleComponentData(XmlReader & reader) {
css::uno::Reference< css::uno::XInterface >());
}
hasPackage = true;
- Span s(reader.getAttributeValue(false));
+ xmlreader::Span s(reader.getAttributeValue(false));
buf.insert(0, s.begin, s.length);
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
{
if (hasName) {
@@ -310,13 +311,13 @@ void XcuParser::handleComponentData(XmlReader & reader) {
css::uno::Reference< css::uno::XInterface >());
}
hasName = true;
- Span s(reader.getAttributeValue(false));
+ xmlreader::Span s(reader.getAttributeValue(false));
buf.append(s.begin, s.length);
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
{
op = parseOperation(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
{
finalized = xmldata::parseBoolean(reader.getAttributeValue(true));
@@ -338,8 +339,8 @@ void XcuParser::handleComponentData(XmlReader & reader) {
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
- componentName_ = xmldata::convertFromUtf8(
- Span(buf.getStr(), buf.getLength()));
+ componentName_ = xmlreader::Span(buf.getStr(), buf.getLength()).
+ convertFromUtf8();
if (trackPath_) {
OSL_ASSERT(path_.empty());
path_.push_back(componentName_);
@@ -381,15 +382,15 @@ void XcuParser::handleComponentData(XmlReader & reader) {
state_.push(State(node, finalizedLayer < valueParser_.getLayer()));
}
-void XcuParser::handleItem(XmlReader & reader) {
- Span attrPath;
+void XcuParser::handleItem(xmlreader::XmlReader & reader) {
+ xmlreader::Span attrPath;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_OOR &&
+ if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("path")))
{
attrPath = reader.getAttributeValue(false);
@@ -402,7 +403,7 @@ void XcuParser::handleItem(XmlReader & reader) {
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
- rtl::OUString path(xmldata::convertFromUtf8(attrPath));
+ rtl::OUString path(attrPath.convertFromUtf8());
int finalizedLayer;
rtl::Reference< Node > node(
data_.resolvePathRepresentation(
@@ -447,21 +448,23 @@ void XcuParser::handleItem(XmlReader & reader) {
state_.push(State(node, finalizedLayer < valueParser_.getLayer()));
}
-void XcuParser::handlePropValue(XmlReader & reader, PropertyNode * prop) {
+void XcuParser::handlePropValue(
+ xmlreader::XmlReader & reader, PropertyNode * prop)
+ {
bool nil = false;
rtl::OString separator;
rtl::OUString external;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_XSI &&
+ if (attrNsId == ParseManager::NAMESPACE_XSI &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("nil")))
{
nil = xmldata::parseBoolean(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("type")))
{
Type type = xmldata::parseType(
@@ -474,10 +477,10 @@ void XcuParser::handlePropValue(XmlReader & reader, PropertyNode * prop) {
css::uno::Reference< css::uno::XInterface >());
}
valueParser_.type_ = type;
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("separator")))
{
- Span s(reader.getAttributeValue(false));
+ xmlreader::Span s(reader.getAttributeValue(false));
if (s.length == 0) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -487,10 +490,10 @@ void XcuParser::handlePropValue(XmlReader & reader, PropertyNode * prop) {
css::uno::Reference< css::uno::XInterface >());
}
separator = rtl::OString(s.begin, s.length);
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("external")))
{
- external = xmldata::convertFromUtf8(reader.getAttributeValue(true));
+ external = reader.getAttributeValue(true).convertFromUtf8();
if (external.getLength() == 0) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -530,27 +533,27 @@ void XcuParser::handlePropValue(XmlReader & reader, PropertyNode * prop) {
}
void XcuParser::handleLocpropValue(
- XmlReader & reader, LocalizedPropertyNode * locprop)
+ xmlreader::XmlReader & reader, LocalizedPropertyNode * locprop)
{
rtl::OUString name;
bool nil = false;
rtl::OString separator;
Operation op = OPERATION_FUSE;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_XML &&
+ if (attrNsId == xmlreader::XmlReader::NAMESPACE_XML &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("lang")))
{
- name = xmldata::convertFromUtf8(reader.getAttributeValue(false));
- } else if (attrNs == XmlReader::NAMESPACE_XSI &&
+ name = reader.getAttributeValue(false).convertFromUtf8();
+ } else if (attrNsId == ParseManager::NAMESPACE_XSI &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("nil")))
{
nil = xmldata::parseBoolean(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("type")))
{
Type type = xmldata::parseType(
@@ -563,10 +566,10 @@ void XcuParser::handleLocpropValue(
css::uno::Reference< css::uno::XInterface >());
}
valueParser_.type_ = type;
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("separator")))
{
- Span s(reader.getAttributeValue(false));
+ xmlreader::Span s(reader.getAttributeValue(false));
if (s.length == 0) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -576,7 +579,7 @@ void XcuParser::handleLocpropValue(
css::uno::Reference< css::uno::XInterface >());
}
separator = rtl::OString(s.begin, s.length);
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
{
op = parseOperation(reader.getAttributeValue(true));
@@ -652,32 +655,34 @@ void XcuParser::handleLocpropValue(
}
}
-void XcuParser::handleGroupProp(XmlReader & reader, GroupNode * group) {
+void XcuParser::handleGroupProp(
+ xmlreader::XmlReader & reader, GroupNode * group)
+{
bool hasName = false;
rtl::OUString name;
Type type = TYPE_ERROR;
Operation op = OPERATION_MODIFY;
bool finalized = false;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_OOR &&
+ if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
{
hasName = true;
- name = xmldata::convertFromUtf8(reader.getAttributeValue(false));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ name = reader.getAttributeValue(false).convertFromUtf8();
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("type")))
{
type = xmldata::parseType(reader, reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
{
op = parseOperation(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
{
finalized = xmldata::parseBoolean(reader.getAttributeValue(true));
@@ -727,8 +732,8 @@ void XcuParser::handleGroupProp(XmlReader & reader, GroupNode * group) {
}
void XcuParser::handleUnknownGroupProp(
- XmlReader const & reader, GroupNode * group, rtl::OUString const & name,
- Type type, Operation operation, bool finalized)
+ xmlreader::XmlReader const & reader, GroupNode * group,
+ rtl::OUString const & name, Type type, Operation operation, bool finalized)
{
switch (operation) {
case OPERATION_REPLACE:
@@ -768,7 +773,7 @@ void XcuParser::handleUnknownGroupProp(
}
void XcuParser::handlePlainGroupProp(
- XmlReader const & reader, GroupNode * group,
+ xmlreader::XmlReader const & reader, GroupNode * group,
NodeMap::iterator const & propertyIndex, rtl::OUString const & name,
Type type, Operation operation, bool finalized)
{
@@ -822,7 +827,7 @@ void XcuParser::handlePlainGroupProp(
}
void XcuParser::handleLocalizedGroupProp(
- XmlReader const & reader, LocalizedPropertyNode * property,
+ xmlreader::XmlReader const & reader, LocalizedPropertyNode * property,
rtl::OUString const & name, Type type, Operation operation, bool finalized)
{
if (property->getLayer() > valueParser_.getLayer()) {
@@ -880,28 +885,28 @@ void XcuParser::handleLocalizedGroupProp(
}
void XcuParser::handleGroupNode(
- XmlReader & reader, rtl::Reference< Node > const & group)
+ xmlreader::XmlReader & reader, rtl::Reference< Node > const & group)
{
bool hasName = false;
rtl::OUString name;
Operation op = OPERATION_MODIFY;
bool finalized = false;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_OOR &&
+ if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
{
hasName = true;
- name = xmldata::convertFromUtf8(reader.getAttributeValue(false));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ name = reader.getAttributeValue(false).convertFromUtf8();
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
{
op = parseOperation(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
{
finalized = xmldata::parseBoolean(reader.getAttributeValue(true));
@@ -951,7 +956,7 @@ void XcuParser::handleGroupNode(
state_.top().locked || finalizedLayer < valueParser_.getLayer()));
}
-void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
+void XcuParser::handleSetNode(xmlreader::XmlReader & reader, SetNode * set) {
bool hasName = false;
rtl::OUString name;
rtl::OUString component(componentName_);
@@ -961,36 +966,34 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
bool finalized = false;
bool mandatory = false;
for (;;) {
- XmlReader::Namespace attrNs;
- Span attrLn;
- if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ int attrNsId;
+ xmlreader::Span attrLn;
+ if (!reader.nextAttribute(&attrNsId, &attrLn)) {
break;
}
- if (attrNs == XmlReader::NAMESPACE_OOR &&
+ if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
{
hasName = true;
- name = xmldata::convertFromUtf8(reader.getAttributeValue(false));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ name = reader.getAttributeValue(false).convertFromUtf8();
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("component")))
{
- component = xmldata::convertFromUtf8(
- reader.getAttributeValue(false));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ component = reader.getAttributeValue(false).convertFromUtf8();
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("node-type")))
{
hasNodeType = true;
- nodeType = xmldata::convertFromUtf8(
- reader.getAttributeValue(false));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ nodeType = reader.getAttributeValue(false).convertFromUtf8();
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
{
op = parseOperation(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
{
finalized = xmldata::parseBoolean(reader.getAttributeValue(true));
- } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ } else if (attrNsId == ParseManager::NAMESPACE_OOR &&
attrLn.equals(RTL_CONSTASCII_STRINGPARAM("mandatory")))
{
mandatory = xmldata::parseBoolean(reader.getAttributeValue(true));
@@ -1097,17 +1100,25 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
}
break;
case OPERATION_REMOVE:
- // Ignore removal of unknown members, members finalized in a lower
- // layer, and members made mandatory in this or a lower layer:
- if (i != set->getMembers().end() && !state_.top().locked &&
- finalizedLayer >= valueParser_.getLayer() &&
- mandatoryLayer > valueParser_.getLayer())
{
- set->getMembers().erase(i);
+ // Ignore removal of unknown members, members finalized in a lower
+ // layer, and members made mandatory in this or a lower layer;
+ // forget about user-layer removals that no longer remove anything
+ // (so that paired additions/removals in the user layer do not grow
+ // registrymodifications.xcu unbounded):
+ bool known = i != set->getMembers().end();
+ if (known && !state_.top().locked &&
+ finalizedLayer >= valueParser_.getLayer() &&
+ mandatoryLayer > valueParser_.getLayer())
+ {
+ set->getMembers().erase(i);
+ }
+ state_.push(State(true));
+ if (known) {
+ recordModification(false);
+ }
+ break;
}
- state_.push(State(true));
- recordModification(false);
- break;
}
}