diff options
| author | halex2005 <halex2005@e1.ru> | 2015-04-14 00:56:23 +0500 | 
|---|---|---|
| committer | halex2005 <halex2005@e1.ru> | 2015-04-14 00:56:23 +0500 | 
| commit | 6766f35338fafca445faf3c8a271ef558d6ec963 (patch) | |
| tree | e99fce83ca7275213bcb23886cf6484a0197856f /src | |
| parent | 9539c488c29e7c2c06afa63abce70785cb5d15c5 (diff) | |
add align each attribute on new line support with format_indent_attribute
Diffstat (limited to 'src')
| -rw-r--r-- | src/pugixml.cpp | 33 | ||||
| -rw-r--r-- | src/pugixml.hpp | 3 | 
2 files changed, 25 insertions, 11 deletions
| diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 7c463cc..bf5835f 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -3480,13 +3480,26 @@ PUGI__NS_BEGIN  		}  	} -	PUGI__FN void node_output_attributes(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) +	PUGI__FN void node_output_attributes(xml_buffered_writer &writer, xml_node_struct *node, const char_t *indent, size_t indent_length, unsigned int flags, unsigned int depth)  	{  		const char_t* default_name = PUGIXML_TEXT(":anonymous"); +		bool eachAttributeOnNewLine = PUGI__NODETYPE(node) != node_declaration +			&& (flags & format_indent) +			&& (flags & format_each_attribute_on_new_line) +			&& (flags & format_raw) == 0; +  		for (xml_attribute_struct* a = node->first_attribute; a; a = a->next_attribute)  		{ -			writer.write(' '); +			if (eachAttributeOnNewLine) +			{ +				writer.write('\n'); +				text_output_indent(writer, indent, indent_length, depth + 1); +			} +			else +			{ +				writer.write(' '); +			}  			writer.write_string(a->name ? a->name : default_name);  			writer.write('=', '"'); @@ -3497,7 +3510,7 @@ PUGI__NS_BEGIN  		}  	} -	PUGI__FN bool node_output_start(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) +	PUGI__FN bool node_output_start(xml_buffered_writer &writer, xml_node_struct *node, const char_t *indent, size_t indent_length, unsigned int flags, unsigned int depth)  	{  		const char_t* default_name = PUGIXML_TEXT(":anonymous");  		const char_t* name = node->name ? node->name : default_name; @@ -3506,18 +3519,16 @@ PUGI__NS_BEGIN  		writer.write_string(name);  		if (node->first_attribute) -			node_output_attributes(writer, node, flags); +			node_output_attributes(writer, node, indent, indent_length, flags, depth);  		if (!node->first_child)  		{  			writer.write(' ', '/', '>'); -  			return false;  		}  		else  		{  			writer.write('>'); -  			return true;  		}  	} @@ -3532,7 +3543,7 @@ PUGI__NS_BEGIN  		writer.write('>');  	} -	PUGI__FN void node_output_simple(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) +	PUGI__FN void node_output_simple(xml_buffered_writer &writer, xml_node_struct *node, const char_t *indent, size_t indent_length, unsigned int flags, unsigned int depth)  	{  		const char_t* default_name = PUGIXML_TEXT(":anonymous"); @@ -3566,7 +3577,7 @@ PUGI__NS_BEGIN  			case node_declaration:  				writer.write('<', '?');  				writer.write_string(node->name ? node->name : default_name); -				node_output_attributes(writer, node, flags); +				node_output_attributes(writer, node, indent, indent_length, flags, depth);  				writer.write('?', '>');  				break; @@ -3608,7 +3619,7 @@ PUGI__NS_BEGIN  			// begin writing current node  			if (PUGI__NODETYPE(node) == node_pcdata || PUGI__NODETYPE(node) == node_cdata)  			{ -				node_output_simple(writer, node, flags); +				node_output_simple(writer, node, indent, indent_length, flags, depth);  				indent_flags = 0;  			} @@ -3624,7 +3635,7 @@ PUGI__NS_BEGIN  				{  					indent_flags = indent_newline | indent_indent; -					if (node_output_start(writer, node, flags)) +					if (node_output_start(writer, node, indent, indent_length, flags, depth))  					{  						node = node->first_child;  						depth++; @@ -3643,7 +3654,7 @@ PUGI__NS_BEGIN  				}  				else  				{ -					node_output_simple(writer, node, flags); +					node_output_simple(writer, node, indent, indent_length, flags, depth);  					indent_flags = indent_newline | indent_indent;  				} diff --git a/src/pugixml.hpp b/src/pugixml.hpp index d59f864..36ed955 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -203,9 +203,12 @@ namespace pugi  	// Open file using text mode in xml_document::save_file. This enables special character (i.e. new-line) conversions on some systems. This flag is off by default.  	const unsigned int format_save_file_text = 0x20; +	// Set each attribute to new line +	const unsigned int format_each_attribute_on_new_line = 0x40;  	// 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; +	const unsigned int format_indent_attributes = format_indent | format_each_attribute_on_new_line;  	// Forward declarations  	struct xml_attribute_struct; | 
