X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;ds=sidebyside;f=source%2Fxml%2FCompiler.cpp;h=a5e74353445e4fb22c7e67f056de49e6852abbce;hb=5a6cba5fde2b2f538a7515f8293cc0a8d9589dfa;hp=483e86ec5e6e2a1ac1a602d017be4d9760f09266;hpb=93366a0bda79e6fd6e7dad6316bfcf8cc82f5731;p=anna.git diff --git a/source/xml/Compiler.cpp b/source/xml/Compiler.cpp index 483e86e..a5e7435 100644 --- a/source/xml/Compiler.cpp +++ b/source/xml/Compiler.cpp @@ -7,6 +7,7 @@ #include +#include #include #include @@ -16,6 +17,10 @@ #include #include +#include +#include + + using namespace anna; using namespace anna::xml; @@ -24,7 +29,7 @@ Compiler::Compiler() { } const char* Compiler::apply(const Node* node, const int flags) -throw(RuntimeException) { +noexcept(false) { Guard guard(this, "xml::Compiler::apply"); a_result.clear(); @@ -37,7 +42,7 @@ throw(RuntimeException) { } const char* Compiler::apply(const Document& document, const Node* node, const int flags) -throw(RuntimeException) { +noexcept(false) { Guard guard(this, "xml::Compiler::apply"); a_result.clear(); const char* version = document.getVersion(); @@ -72,7 +77,7 @@ throw(RuntimeException) { // nodos + texto. //------------------------------------------------------------------------------------ void Compiler::apply(const Node* node, Result& result, const int level, const int flags) -throw(RuntimeException) { +noexcept(false) { const bool hasText(node->getText() != NULL); Node::const_child_iterator ii = node->child_begin(); Node::const_child_iterator maxii = node->child_end(); @@ -99,7 +104,7 @@ throw(RuntimeException) { // nodos + texto. //------------------------------------------------------------------------------------ void Compiler::apply(const Node* node, Result& result, const int flags) -throw(RuntimeException) { +noexcept(false) { static const int level = 0; const bool hasText(node->getText() != NULL); Node::const_child_iterator ii = node->child_begin(); @@ -128,12 +133,12 @@ throw(RuntimeException) { /*static*/ void Compiler::open(const Node* node, Result& result, const int level, const bool quickClose, const bool newline, const int flags) -throw(RuntimeException) { +noexcept(false) { const Attribute* attribute; const Namespace* ns; for(int i = 0; i < level; i ++) - result += ANNA_XML_COMPILER_TAB; + result += std::string(ANNA_XML_INDENTATION_SPACES, ' '); result += '<'; writeFullName(node, result, flags); @@ -150,6 +155,13 @@ throw(RuntimeException) { } } + // Sort node attributes (this is a compiler used for on-demand representation, this sorting is not permanent in the object which uses it): + if(flags & Mode::Sort) { + Node *nc_node = const_cast(node); + std::sort(nc_node->attribute_begin(), nc_node->attribute_end(), + [](Attribute *a, Attribute *b) { return (std::strcmp(a->getName(), b->getName()) < 0); }); // sort alphabetically by attribute name + } + for(Node::const_attribute_iterator ii = node->attribute_begin(), maxii = node->attribute_end(); ii != maxii; ii ++) { attribute = Node::attribute(ii); result += ' '; @@ -175,7 +187,7 @@ throw(RuntimeException) { /*static*/ void Compiler::writeFullName(const Node* node, Result& result, const int flags) -throw(RuntimeException) { +noexcept(false) { const Namespace* ns; if((flags & Mode::NoNamespaces) == 0 && (ns = node->getNamespace()) != NULL) { @@ -188,7 +200,7 @@ throw(RuntimeException) { /*static*/ void Compiler::writeFullName(const Attribute* attr, Result& result, const int flags) -throw(RuntimeException) { +noexcept(false) { const Namespace* ns; if((flags & Mode::NoNamespaces) == 0 && (ns = attr->getNamespace()) != NULL) { @@ -201,9 +213,9 @@ throw(RuntimeException) { /*static*/ void Compiler::close(const Node* node, Result& result, const int level, const int flags) -throw(RuntimeException) { +noexcept(false) { for(int i = 0; i < level; i ++) - result += ANNA_XML_COMPILER_TAB; + result += std::string(ANNA_XML_INDENTATION_SPACES, ' '); result += "= a_maxSize) { int newSize = ((a_size + nbytes) << 1) - ((a_size + nbytes) >> 1); char* newBuffer = new char [newSize];