Back to index

nux  3.0.0
Public Member Functions | Private Member Functions | Private Attributes
TiXmlPrinter Class Reference

Print to memory functionality. More...

#include <tinyxml.h>

Inheritance diagram for TiXmlPrinter:
Inheritance graph
[legend]
Collaboration diagram for TiXmlPrinter:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TiXmlPrinter ()
virtual bool VisitEnter (const TiXmlDocument &doc)
 Visit a document.
virtual bool VisitExit (const TiXmlDocument &doc)
 Visit a document.
virtual bool VisitEnter (const TiXmlElement &element, const TiXmlAttribute *firstAttribute)
 Visit an element.
virtual bool VisitExit (const TiXmlElement &element)
 Visit an element.
virtual bool Visit (const TiXmlDeclaration &declaration)
 Visit a declaration.
virtual bool Visit (const TiXmlText &text)
 Visit a text node.
virtual bool Visit (const TiXmlComment &comment)
 Visit a comment node.
virtual bool Visit (const TiXmlUnknown &unknown)
 Visit an unknow node.
void SetIndent (const char *_indent)
 Set the indent characters for printing.
const char * Indent ()
 Query the indention string.
void SetLineBreak (const char *_lineBreak)
 Set the line breaking string.
const char * LineBreak ()
 Query the current line breaking string.
void SetStreamPrinting ()
 Switch over to "stream printing" which is the most dense formatting without linebreaks.
const char * CStr ()
 Return the result.
size_t Size ()
 Return the length of the result string.

Private Member Functions

void DoIndent ()
void DoLineBreak ()

Private Attributes

int depth
bool simpleTextPrint
TIXML_STRING buffer
TIXML_STRING indent
TIXML_STRING lineBreak

Detailed Description

Print to memory functionality.

The TiXmlPrinter is useful when you need to:

  -# Print to memory (especially in non-STL mode)
  -# Control formatting (line endings, etc.)

  When constructed, the TiXmlPrinter is in its default "pretty printing" mode.
  Before calling Accept() you can call methods to control the printing
  of the XML document. After TiXmlNode::Accept() is called, the printed document can
  be accessed via the CStr(), Str(), and Size() methods.

  TiXmlPrinter uses the Visitor API.
       TiXmlPrinter printer;
       printer.SetIndent( "\t" );

       doc.Accept( &printer );
       fprintf( stdout, "%s", printer.CStr() );

Definition at line 2170 of file tinyxml.h.


Constructor & Destructor Documentation

Definition at line 2173 of file tinyxml.h.

                 : depth ( 0 ), simpleTextPrint ( false ),
    buffer(), indent ( "    " ), lineBreak ( "\n" ) {}

Member Function Documentation

const char* TiXmlPrinter::CStr ( ) [inline]

Return the result.

Definition at line 2222 of file tinyxml.h.

  {
    return buffer.c_str();
  }
void TiXmlPrinter::DoIndent ( ) [inline, private]

Definition at line 2241 of file tinyxml.h.

  {
    for ( int i = 0; i < depth; ++i )
      buffer += indent;
  }

Here is the caller graph for this function:

void TiXmlPrinter::DoLineBreak ( ) [inline, private]

Definition at line 2246 of file tinyxml.h.

  {
    buffer += lineBreak;
  }

Here is the caller graph for this function:

const char* TiXmlPrinter::Indent ( ) [inline]

Query the indention string.

Definition at line 2195 of file tinyxml.h.

  {
    return indent.c_str();
  }
const char* TiXmlPrinter::LineBreak ( ) [inline]

Query the current line breaking string.

Definition at line 2208 of file tinyxml.h.

  {
    return lineBreak.c_str();
  }
void TiXmlPrinter::SetIndent ( const char *  _indent) [inline]

Set the indent characters for printing.

By default 4 spaces but tab () is also useful, or null/empty string for no indentation.

Definition at line 2190 of file tinyxml.h.

  {
    indent = _indent ? _indent : "" ;
  }
void TiXmlPrinter::SetLineBreak ( const char *  _lineBreak) [inline]

Set the line breaking string.

By default set to newline (
). Some operating systems prefer other characters, or can be set to the null/empty string for no indenation.

Definition at line 2203 of file tinyxml.h.

  {
    lineBreak = _lineBreak ? _lineBreak : "";
  }

Switch over to "stream printing" which is the most dense formatting without linebreaks.

Common when the XML is needed for network transmission.

Definition at line 2216 of file tinyxml.h.

  {
    indent = "";
    lineBreak = "";
  }
size_t TiXmlPrinter::Size ( ) [inline]

Return the length of the result string.

Definition at line 2227 of file tinyxml.h.

  {
    return buffer.size();
  }
bool TiXmlPrinter::Visit ( const TiXmlDeclaration ) [virtual]

Visit a declaration.

Reimplemented from TiXmlVisitor.

Definition at line 2074 of file tinyxml.cpp.

{
  DoIndent();
  declaration.Print ( 0, 0, &buffer );
  DoLineBreak();
  return true;
}

Here is the call graph for this function:

bool TiXmlPrinter::Visit ( const TiXmlText ) [virtual]

Visit a text node.

Reimplemented from TiXmlVisitor.

Definition at line 2045 of file tinyxml.cpp.

{
  if ( text.CDATA() )
  {
    DoIndent();
    buffer += "<![CDATA[";
    buffer += text.Value();
    buffer += "]]>";
    DoLineBreak();
  }
  else if ( simpleTextPrint )
  {
    TIXML_STRING str;
    TiXmlBase::EncodeString ( text.ValueTStr(), &str );
    buffer += str;
  }
  else
  {
    DoIndent();
    TIXML_STRING str;
    TiXmlBase::EncodeString ( text.ValueTStr(), &str );
    buffer += str;
    DoLineBreak();
  }

  return true;
}

Here is the call graph for this function:

bool TiXmlPrinter::Visit ( const TiXmlComment ) [virtual]

Visit a comment node.

Reimplemented from TiXmlVisitor.

Definition at line 2083 of file tinyxml.cpp.

{
  DoIndent();
  buffer += "<!--";
  buffer += comment.Value();
  buffer += "-->";
  DoLineBreak();
  return true;
}

Here is the call graph for this function:

bool TiXmlPrinter::Visit ( const TiXmlUnknown ) [virtual]

Visit an unknow node.

Reimplemented from TiXmlVisitor.

Definition at line 2094 of file tinyxml.cpp.

{
  DoIndent();
  buffer += "<";
  buffer += unknown.Value();
  buffer += ">";
  DoLineBreak();
  return true;
}

Here is the call graph for this function:

bool TiXmlPrinter::VisitEnter ( const TiXmlDocument ) [virtual]

Visit a document.

Reimplemented from TiXmlVisitor.

Definition at line 1967 of file tinyxml.cpp.

{
  return true;
}
bool TiXmlPrinter::VisitEnter ( const TiXmlElement ,
const TiXmlAttribute  
) [virtual]

Visit an element.

Reimplemented from TiXmlVisitor.

Definition at line 1977 of file tinyxml.cpp.

{
  DoIndent();
  buffer += "<";
  buffer += element.Value();

  for ( const TiXmlAttribute *attrib = firstAttribute; attrib; attrib = attrib->Next() )
  {
    buffer += " ";
    attrib->Print ( 0, 0, &buffer );
  }

  if ( !element.FirstChild() )
  {
    buffer += " />";
    DoLineBreak();
  }
  else
  {
    buffer += ">";

    if (    element.FirstChild()->ToText()
            && element.LastChild() == element.FirstChild()
            && element.FirstChild()->ToText()->CDATA() == false )
    {
      simpleTextPrint = true;
      // no DoLineBreak()!
    }
    else
    {
      DoLineBreak();
    }
  }

  ++depth;
  return true;
}

Here is the call graph for this function:

bool TiXmlPrinter::VisitExit ( const TiXmlDocument ) [virtual]

Visit a document.

Reimplemented from TiXmlVisitor.

Definition at line 1972 of file tinyxml.cpp.

{
  return true;
}
bool TiXmlPrinter::VisitExit ( const TiXmlElement ) [virtual]

Visit an element.

Reimplemented from TiXmlVisitor.

Definition at line 2016 of file tinyxml.cpp.

{
  --depth;

  if ( !element.FirstChild() )
  {
    // nothing.
  }
  else
  {
    if ( simpleTextPrint )
    {
      simpleTextPrint = false;
    }
    else
    {
      DoIndent();
    }

    buffer += "</";
    buffer += element.Value();
    buffer += ">";
    DoLineBreak();
  }

  return true;
}

Here is the call graph for this function:


Member Data Documentation

Definition at line 2253 of file tinyxml.h.

int TiXmlPrinter::depth [private]

Definition at line 2251 of file tinyxml.h.

Definition at line 2254 of file tinyxml.h.

Definition at line 2255 of file tinyxml.h.

Definition at line 2252 of file tinyxml.h.


The documentation for this class was generated from the following files: