diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pugiconfig.hpp | 6 | ||||
-rw-r--r-- | src/pugixml.cpp | 130 | ||||
-rw-r--r-- | src/pugixml.hpp | 8 |
3 files changed, 69 insertions, 75 deletions
diff --git a/src/pugiconfig.hpp b/src/pugiconfig.hpp index 6219dbe..5ee5131 100644 --- a/src/pugiconfig.hpp +++ b/src/pugiconfig.hpp @@ -1,7 +1,7 @@ /** - * pugixml parser - version 1.5 + * pugixml parser - version 1.6 * -------------------------------------------------------- - * Copyright (C) 2006-2014, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Copyright (C) 2006-2015, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) * Report bugs and download new versions at http://pugixml.org/ * * This library is distributed under the MIT License. See notice at the end @@ -46,7 +46,7 @@ #endif /** - * Copyright (c) 2006-2014 Arseny Kapoulkine + * Copyright (c) 2006-2015 Arseny Kapoulkine * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 41175ad..251ba7f 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -1,7 +1,7 @@ /** - * pugixml parser - version 1.5 + * pugixml parser - version 1.6 * -------------------------------------------------------- - * Copyright (C) 2006-2014, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Copyright (C) 2006-2015, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) * Report bugs and download new versions at http://pugixml.org/ * * This library is distributed under the MIT License. See notice at the end @@ -4059,61 +4059,28 @@ PUGI__NS_BEGIN if (node->first_attribute) node_output_attributes(writer, node, flags); - if (flags & format_raw) + if (!node->first_child) { - if (!node->first_child) - writer.write(' ', '/', '>'); - else - { - writer.write('>'); + writer.write(' ', '/', '>'); - return true; - } + return false; } else { - xml_node_struct* first = node->first_child; - - if (!first) - writer.write(' ', '/', '>', '\n'); - else if (!first->next_sibling && (PUGI__NODETYPE(first) == node_pcdata || PUGI__NODETYPE(first) == node_cdata)) - { - writer.write('>'); - - const char_t* value = first->contents ? first->contents + 0 : PUGIXML_TEXT(""); - - if (PUGI__NODETYPE(first) == node_pcdata) - text_output(writer, value, ctx_special_pcdata, flags); - else - text_output_cdata(writer, value); - - writer.write('<', '/'); - writer.write_string(name); - writer.write('>', '\n'); - } - else - { - writer.write('>', '\n'); + writer.write('>'); - return true; - } + return true; } - - return false; } - PUGI__FN void node_output_end(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) + PUGI__FN void node_output_end(xml_buffered_writer& writer, xml_node_struct* node) { const char_t* default_name = PUGIXML_TEXT(":anonymous"); const char_t* name = node->contents ? node->contents : default_name; writer.write('<', '/'); writer.write_string(name); - - if (flags & format_raw) - writer.write('>'); - else - writer.write('>', '\n'); + writer.write('>'); } PUGI__FN void node_output_simple(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) @@ -4124,17 +4091,14 @@ PUGI__NS_BEGIN { case node_pcdata: text_output(writer, node->contents ? node->contents + 0 : PUGIXML_TEXT(""), ctx_special_pcdata, flags); - if ((flags & format_raw) == 0) writer.write('\n'); break; case node_cdata: text_output_cdata(writer, node->contents ? node->contents + 0 : PUGIXML_TEXT("")); - if ((flags & format_raw) == 0) writer.write('\n'); break; case node_comment: node_output_comment(writer, node->contents ? node->contents + 0 : PUGIXML_TEXT("")); - if ((flags & format_raw) == 0) writer.write('\n'); break; case node_pi: @@ -4148,7 +4112,6 @@ PUGI__NS_BEGIN } writer.write('?', '>'); - if ((flags & format_raw) == 0) writer.write('\n'); break; case node_declaration: @@ -4156,7 +4119,6 @@ PUGI__NS_BEGIN writer.write_string(node->contents ? node->contents : default_name); node_output_attributes(writer, node, flags); writer.write('?', '>'); - if ((flags & format_raw) == 0) writer.write('\n'); break; case node_doctype: @@ -4170,7 +4132,6 @@ PUGI__NS_BEGIN } writer.write('>'); - if ((flags & format_raw) == 0) writer.write('\n'); break; default: @@ -4178,9 +4139,16 @@ PUGI__NS_BEGIN } } + enum indent_flags_t + { + indent_newline = 1, + indent_indent = 2 + }; + PUGI__FN void node_output(xml_buffered_writer& writer, xml_node_struct* root, const char_t* indent, unsigned int flags, unsigned int depth) { size_t indent_length = ((flags & (format_indent | format_raw)) == format_indent) ? strlength(indent) : 0; + unsigned int indent_flags = indent_indent; xml_node_struct* node = root; @@ -4189,29 +4157,47 @@ PUGI__NS_BEGIN assert(node); // begin writing current node - if (indent_length) - text_output_indent(writer, indent, indent_length, depth); + if (PUGI__NODETYPE(node) == node_pcdata || PUGI__NODETYPE(node) == node_cdata) + { + node_output_simple(writer, node, flags); - if (PUGI__NODETYPE(node) == node_element) + indent_flags = 0; + } + else { - if (node_output_start(writer, node, flags)) + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + + if ((indent_flags & indent_indent) && indent_length) + text_output_indent(writer, indent, indent_length, depth); + + if (PUGI__NODETYPE(node) == node_element) { - node = node->first_child; - depth++; - continue; + indent_flags = indent_newline | indent_indent; + + if (node_output_start(writer, node, flags)) + { + node = node->first_child; + depth++; + continue; + } } - } - else if (PUGI__NODETYPE(node) == node_document) - { - if (node->first_child) + else if (PUGI__NODETYPE(node) == node_document) { - node = node->first_child; - continue; + indent_flags = indent_indent; + + if (node->first_child) + { + node = node->first_child; + continue; + } + } + else + { + node_output_simple(writer, node, flags); + + indent_flags = indent_newline | indent_indent; } - } - else - { - node_output_simple(writer, node, flags); } // continue to the next node @@ -4230,14 +4216,22 @@ PUGI__NS_BEGIN { depth--; - if (indent_length) + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + + if ((indent_flags & indent_indent) && indent_length) text_output_indent(writer, indent, indent_length, depth); - node_output_end(writer, node, flags); + node_output_end(writer, node); + + indent_flags = indent_newline | indent_indent; } } } while (node != root); + + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); } PUGI__FN bool has_declaration(xml_node_struct* node) @@ -12171,7 +12165,7 @@ namespace pugi #endif /** - * Copyright (c) 2006-2014 Arseny Kapoulkine + * Copyright (c) 2006-2015 Arseny Kapoulkine * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation diff --git a/src/pugixml.hpp b/src/pugixml.hpp index 9798b46..d59f864 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -1,7 +1,7 @@ /** - * pugixml parser - version 1.5 + * pugixml parser - version 1.6 * -------------------------------------------------------- - * Copyright (C) 2006-2014, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Copyright (C) 2006-2015, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) * Report bugs and download new versions at http://pugixml.org/ * * This library is distributed under the MIT License. See notice at the end @@ -13,7 +13,7 @@ #ifndef PUGIXML_VERSION // Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons -# define PUGIXML_VERSION 150 +# define PUGIXML_VERSION 160 #endif // Include user configuration file (this can define various configuration macros) @@ -1341,7 +1341,7 @@ namespace std #endif /** - * Copyright (c) 2006-2014 Arseny Kapoulkine + * Copyright (c) 2006-2015 Arseny Kapoulkine * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation |