diff options
| -rw-r--r-- | src/pugixml.cpp | 53 | 
1 files changed, 46 insertions, 7 deletions
| diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 767fb48..cc19c10 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -3269,10 +3269,47 @@ PUGI__NS_BEGIN  		while (*s);  	} -	PUGI__FN void text_output_indent(xml_buffered_writer& writer, const char_t* indent, unsigned int depth) +	PUGI__FN void text_output_indent(xml_buffered_writer& writer, const char_t* indent, size_t indent_length, unsigned int depth)  	{ -		for (unsigned int i = 0; i < depth; ++i) -			writer.write(indent); +		switch (indent_length) +		{ +		case 0: +			break; + +		case 1: +		{ +			for (unsigned int i = 0; i < depth; ++i) +				writer.write(indent[0]); +			break; +		} + +		case 2: +		{ +			for (unsigned int i = 0; i < depth; ++i) +				writer.write(indent[0], indent[1]); +			break; +		} + +		case 3: +		{ +			for (unsigned int i = 0; i < depth; ++i) +				writer.write(indent[0], indent[1], indent[2]); +			break; +		} + +		case 4: +		{ +			for (unsigned int i = 0; i < depth; ++i) +				writer.write(indent[0], indent[1], indent[2], indent[3]); +			break; +		} + +		default: +		{ +			for (unsigned int i = 0; i < depth; ++i) +				writer.write(indent, indent_length); +		} +		}  	}  	PUGI__FN void node_output_attributes(xml_buffered_writer& writer, const xml_node& node, unsigned int flags) @@ -3413,6 +3450,8 @@ PUGI__NS_BEGIN  	PUGI__FN void node_output(xml_buffered_writer& writer, const xml_node& 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; +  		xml_node node = root;  		do @@ -3420,8 +3459,8 @@ PUGI__NS_BEGIN  			assert(node);  			// begin writing current node -			if ((flags & (format_indent | format_raw)) == format_indent) -				text_output_indent(writer, indent, depth); +			if (indent_length) +				text_output_indent(writer, indent, indent_length, depth);  			if (node.type() == node_element)  			{ @@ -3460,8 +3499,8 @@ PUGI__NS_BEGIN  				// write closing node  				if (node.type() == node_element)  				{ -					if ((flags & (format_indent | format_raw)) == format_indent) -						text_output_indent(writer, indent, depth); +					if (indent_length) +						text_output_indent(writer, indent, indent_length, depth);  					node_output_end(writer, node, flags);  				} | 
