mirror of
https://github.com/zeux/pugixml.git
synced 2024-12-27 13:33:17 +08:00
Merge pull request #263 from Yanpas/fix_char_esc
format_skip_control_chars
This commit is contained in:
commit
b9a0d7ff23
@ -1704,6 +1704,8 @@ These flags control the resulting tree contents:
|
||||
|
||||
* [[format_no_empty_element_tags]]`format_no_empty_element_tags` determines if start/end tags should be output instead of empty element tags for empty elements (that is, elements with no children). This flag is *off* by default.
|
||||
|
||||
* [[format_skip_control_chars]]`format_skip_control_chars` enables skipping characters belonging to range [0; 32) instead of "&#xNN;" encoding. This flag is *off* by default.
|
||||
|
||||
These flags control the additional output information:
|
||||
|
||||
* [[format_no_declaration]]`format_no_declaration` disables default node declaration output. By default, if the document is saved via `save` or `save_file` function, and it does not have any document declaration, a default declaration is output before the document contents. Enabling this flag disables this declaration. This flag has no effect in `xml_node::print` functions: they never output the default declaration. This flag is *off* by default.
|
||||
@ -2659,6 +2661,7 @@ const unsigned int +++<a href="#format_no_empty_element_tags">format_no_empty_el
|
||||
const unsigned int +++<a href="#format_no_escapes">format_no_escapes</a>+++
|
||||
const unsigned int +++<a href="#format_raw">format_raw</a>+++
|
||||
const unsigned int +++<a href="#format_save_file_text">format_save_file_text</a>+++
|
||||
const unsigned int +++<a href="#format_skip_control_chars">format_skip_control_chars</a>+++
|
||||
const unsigned int +++<a href="#format_write_bom">format_write_bom</a>+++
|
||||
|
||||
// Parsing options bit flags:
|
||||
|
@ -3903,7 +3903,7 @@ PUGI__NS_BEGIN
|
||||
xml_encoding encoding;
|
||||
};
|
||||
|
||||
PUGI__FN void text_output_escaped(xml_buffered_writer& writer, const char_t* s, chartypex_t type)
|
||||
PUGI__FN void text_output_escaped(xml_buffered_writer& writer, const char_t* s, chartypex_t type, unsigned int flags)
|
||||
{
|
||||
while (*s)
|
||||
{
|
||||
@ -3938,7 +3938,8 @@ PUGI__NS_BEGIN
|
||||
unsigned int ch = static_cast<unsigned int>(*s++);
|
||||
assert(ch < 32);
|
||||
|
||||
writer.write('&', '#', static_cast<char_t>((ch / 10) + '0'), static_cast<char_t>((ch % 10) + '0'), ';');
|
||||
if (!(flags & format_skip_control_chars))
|
||||
writer.write('&', '#', static_cast<char_t>((ch / 10) + '0'), static_cast<char_t>((ch % 10) + '0'), ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3949,7 +3950,7 @@ PUGI__NS_BEGIN
|
||||
if (flags & format_no_escapes)
|
||||
writer.write_string(s);
|
||||
else
|
||||
text_output_escaped(writer, s, type);
|
||||
text_output_escaped(writer, s, type, flags);
|
||||
}
|
||||
|
||||
PUGI__FN void text_output_cdata(xml_buffered_writer& writer, const char_t* s)
|
||||
|
@ -252,6 +252,9 @@ namespace pugi
|
||||
// Don't output empty element tags, instead writing an explicit start and end tag even if there are no children. This flag is off by default.
|
||||
const unsigned int format_no_empty_element_tags = 0x80;
|
||||
|
||||
// Skip characters belonging to range [0; 32) instead of "&#xNN;" encoding. This flag is off by default.
|
||||
const unsigned int format_skip_control_chars = 0x100;
|
||||
|
||||
// The default set of formatting flags.
|
||||
// Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none.
|
||||
const unsigned int format_default = format_indent;
|
||||
|
9
tests/test_control_chars.cpp
Normal file
9
tests/test_control_chars.cpp
Normal file
@ -0,0 +1,9 @@
|
||||
#include "test.hpp"
|
||||
|
||||
TEST_XML(control_chars_skip, "<a>\f\t\n\x0F\x19</a>") {
|
||||
CHECK_NODE_EX(doc.first_child(), STR("<a>\t\n</a>\n"), STR(""), pugi::format_default | pugi::format_skip_control_chars);
|
||||
}
|
||||
|
||||
TEST_XML(control_chars_keep, "<a>\f\t\n\x0F\x19</a>") {
|
||||
CHECK_NODE_EX(doc.first_child(), STR("<a>\t\n</a>\n"), STR(""), pugi::format_default);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user