X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fxml%2FCompiler.cpp;h=a5e74353445e4fb22c7e67f056de49e6852abbce;hb=5a6cba5fde2b2f538a7515f8293cc0a8d9589dfa;hp=6bec79b5f7b6b424641c061f00859839168342a3;hpb=4e12ac57e93c052f716a6305ad8fc099c45899d1;p=anna.git diff --git a/source/xml/Compiler.cpp b/source/xml/Compiler.cpp index 6bec79b..a5e7435 100644 --- a/source/xml/Compiler.cpp +++ b/source/xml/Compiler.cpp @@ -1,40 +1,13 @@ -// ANNA - Anna is Not 'N' Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// https://bitbucket.org/testillano/anna -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: eduardo.ramos.testillano@gmail.com -// cisco.tierra@gmail.com +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // #include +#include #include #include @@ -44,6 +17,10 @@ #include #include +#include +#include + + using namespace anna; using namespace anna::xml; @@ -52,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(); @@ -65,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(); @@ -100,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(); @@ -127,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(); @@ -156,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); @@ -178,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 += ' '; @@ -203,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) { @@ -216,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) { @@ -229,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];