on the fly XML writer More...
Classes | |
class | StackEntry |
container for XMLWriter state information More... | |
Public Types | |
enum | WRITESTATE { NOTHING, ATTRIBUTES, PRE_CLOSED, POST } |
Public Member Functions | |
this (Stream o, in XMLFormat format=new XMLFormat) | |
this (in char[] path, in XMLFormat format=new XMLFormat) | |
~this () | |
void | close () |
void | create (in char[] name) |
create node and move to it | |
bool | back () |
go back to previous position | |
void | put (in char[] attr_name, in char[] value) |
attribute setting | |
void | opIndexAssign (in char[] attr_name, in char[] value) |
index operator write access to an attribute | |
void | set_content (in char[] s, bool cdata=false) |
Protected Types | |
typedef XMLNode.AttributeMap | AttrMap |
Protected Member Functions | |
stack (StackEntry) _stack | |
void | close_pre (StackEntry entry) |
void | write_pre (StackEntry entry) |
void | write_attributes (StackEntry entry) |
void | write_post (StackEntry entry) |
Protected Attributes | |
Stream | _own_stream |
Stream | _out |
XMLFormat | _format |
Private Member Functions | |
this (XMLFormat format, Stream o) |
on the fly XML writer
Definition at line 2283 of file xmlstorage.d.
typedef XMLNode.AttributeMap xmlstorage::XMLWriter::AttrMap [protected] |
Definition at line 2394 of file xmlstorage.d.
Definition at line 2385 of file xmlstorage.d.
{ NOTHING, /*PRE,*/ ATTRIBUTES, PRE_CLOSED, /*CONTENT,*/ POST };
xmlstorage::XMLWriter::this | ( | XMLFormat | format, |
Stream | o | ||
) | [inline, private] |
Definition at line 2286 of file xmlstorage.d.
References xmlstorage::stack().
{ _out = o; _format = format; _stack = new stack!(StackEntry); format.print_header(_out, false); // _format._endl is printed in write_pre() }
Definition at line 2296 of file xmlstorage.d.
{ _own_stream = null; this(format, o); }
Definition at line 2303 of file xmlstorage.d.
{ _format = format; _own_stream = new BufferedFile(new File(path, FileMode.Out)); this(format, _own_stream); }
xmlstorage::XMLWriter::~this | ( | ) | [inline] |
Definition at line 2312 of file xmlstorage.d.
{ close(); }
bool xmlstorage::XMLWriter::back | ( | ) | [inline] |
go back to previous position
Definition at line 2353 of file xmlstorage.d.
{ if (!_stack.empty()) { write_post(_stack.top()); _stack.pop(); return true; } else return false; }
void xmlstorage::XMLWriter::close | ( | ) | [inline] |
Definition at line 2317 of file xmlstorage.d.
{ if (_out) { _out.writeString(_format._endl); if (_own_stream) { _own_stream.close(); delete _own_stream; } _out = null; } }
void xmlstorage::XMLWriter::close_pre | ( | StackEntry | entry ) | [inline, protected] |
Definition at line 2414 of file xmlstorage.d.
References xmlstorage::XMLWriter::StackEntry::_state.
{ _out.writeString(">"); entry._state = WRITESTATE.PRE_CLOSED; }
void xmlstorage::XMLWriter::create | ( | in char[] | name ) | [inline] |
create node and move to it
Definition at line 2332 of file xmlstorage.d.
References xmlstorage::XMLWriter::StackEntry::_children, xmlstorage::XMLWriter::StackEntry::_node_name, and xmlstorage::XMLWriter::StackEntry::_state.
{ if (!_stack.empty()) { StackEntry last = _stack.top(); if (last._state < WRITESTATE.PRE_CLOSED) { write_attributes(last); close_pre(last); } last._children = true; } auto entry = new StackEntry; entry._node_name = name; _stack.push(entry); write_pre(entry); }
void xmlstorage::XMLWriter::opIndexAssign | ( | in char[] | attr_name, |
in char[] | value | ||
) | [inline] |
index operator write access to an attribute
Definition at line 2372 of file xmlstorage.d.
{
if (!_stack.empty())
_stack.top()._attributes[attr_name] = value;
}
void xmlstorage::XMLWriter::put | ( | in char[] | attr_name, |
in char[] | value | ||
) | [inline] |
attribute setting
Definition at line 2365 of file xmlstorage.d.
{
if (!_stack.empty())
_stack.top()._attributes[attr_name] = value;
}
void xmlstorage::XMLWriter::set_content | ( | in char[] | s, |
bool | cdata = false |
||
) | [inline] |
Definition at line 2378 of file xmlstorage.d.
References xmlstorage::EncodeXMLString().
{ if (!_stack.empty()) _stack.top()._content = EncodeXMLString(s, cdata); }
xmlstorage::XMLWriter::stack | ( | StackEntry | ) | [protected] |
void xmlstorage::XMLWriter::write_attributes | ( | StackEntry | entry ) | [inline, protected] |
Definition at line 2434 of file xmlstorage.d.
References xmlstorage::XMLWriter::StackEntry::_attributes, xmlstorage::XMLWriter::StackEntry::_state, and xmlstorage::EncodeXMLString().
{ foreach(key,value; entry._attributes) _out.writeString(' ' ~ EncodeXMLString(key) ~ "=\"" ~ EncodeXMLString(value) ~ "\""); entry._state = WRITESTATE.ATTRIBUTES; }
void xmlstorage::XMLWriter::write_post | ( | StackEntry | entry ) | [inline, protected] |
Definition at line 2442 of file xmlstorage.d.
References xmlstorage::XMLWriter::StackEntry::_children, xmlstorage::XMLWriter::StackEntry::_content, xmlstorage::XMLWriter::StackEntry::_node_name, xmlstorage::XMLWriter::StackEntry::_state, xmlstorage::EncodeXMLString(), and xmlstorage::XML_INDENT_SPACE.
{ if (entry._state < WRITESTATE.ATTRIBUTES) write_attributes(entry); if (entry._children || entry._content.length) { if (entry._state < WRITESTATE.PRE_CLOSED) close_pre(entry); _out.writeString(entry._content); //entry._state = CONTENT; if (_format._pretty>=PRETTY_FLAGS.PRETTY_LINEFEED && !entry._content.length) _out.writeString(_format._endl); if (_format._pretty==PRETTY_FLAGS.PRETTY_INDENT && !entry._content.length) for(size_t i=_stack.length(); --i>0; ) _out.writeString(XML_INDENT_SPACE); _out.writeString("</" ~ EncodeXMLString(entry._node_name) ~ ">"); } else { _out.writeString("/>"); } entry._state = WRITESTATE.POST; }
void xmlstorage::XMLWriter::write_pre | ( | StackEntry | entry ) | [inline, protected] |
Definition at line 2421 of file xmlstorage.d.
References xmlstorage::XMLWriter::StackEntry::_node_name, xmlstorage::EncodeXMLString(), and xmlstorage::XML_INDENT_SPACE.
{ if (_format._pretty >= PRETTY_FLAGS.PRETTY_LINEFEED) _out.writeString(_format._endl); if (_format._pretty == PRETTY_FLAGS.PRETTY_INDENT) for(size_t i=_stack.length(); --i>0; ) _out.writeString(XML_INDENT_SPACE); _out.writeString('<' ~ EncodeXMLString(entry._node_name)); //entry._state = PRE; }
XMLFormat xmlstorage::XMLWriter::_format [protected] |
Definition at line 2392 of file xmlstorage.d.
Stream xmlstorage::XMLWriter::_out [protected] |
Definition at line 2391 of file xmlstorage.d.
Stream xmlstorage::XMLWriter::_own_stream [protected] |
Definition at line 2387 of file xmlstorage.d.