peterv%netscape.com 8a538c4480 Part of bug 88623 (Cleanup Transformiix code). Remove unnecesary comment lines, no code changes. r=Pike, rs=jst.
git-svn-id: svn://10.0.0.236/trunk@98504 18797224-902f-48f8-a5cc-f745e15eee43
2001-07-03 00:47:47 +00:00

376 lines
9.2 KiB
C++
Executable File

/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is TransforMiiX XSLT processor.
*
* The Initial Developer of the Original Code is The MITRE Corporation.
* Portions created by MITRE are Copyright (C) 1999 The MITRE Corporation.
*
* Portions created by Keith Visco as a Non MITRE employee,
* (C) 1999 Keith Visco. All Rights Reserved.
*
* Contributor(s):
* Keith Visco, kvisco@ziplink.net
* -- original author.
* Bob Miller, kbob@oblix.com
* -- plugged core leak.
*
*/
#ifndef TRANSFRMX_PRINTERS_H
#define TRANSFRMX_PRINTERS_H
#include "dom.h"
#include "TxString.h"
#include "baseutils.h"
#include "NamedMap.h"
#include <iostream.h>
/**
* A class for printing XML nodes.
* This class was ported from XSL:P Java source
**/
class XMLPrinter {
public:
/**
* The default indent size
**/
static const int DEFAULT_INDENT;
//---------------/
//- Contructors -/
//---------------/
/**
* Default constructor. Uses stdout as the default ostream
**/
XMLPrinter();
/**
* Destructor must be virtual so subclasses are destroyed.
**/
virtual ~XMLPrinter();
/**
* Creates a new XML Printer using the given PrintWriter
* for output
* @param writer the PrintWriter to use for output
**/
XMLPrinter(ostream& os);
/**
* Creates a new XML Printer using the given PrintWriter
* for output, and nodes are indenting using the specified
* indent size
* @param os the out stream to use for output
* @param indent the number of spaces to indent
**/
XMLPrinter (ostream& os, int indent);
/**
* Prints the given Node
* @param node the Node to print
**/
virtual void print(Node* node);
/**
* Sets the indent size
* @param indent the number of spaces to indent
**/
virtual void setIndentSize(int indent);
/**
* Sets whether or not to "unwrap" CDATA Sections
* when printing. By Default CDATA Sections are left as is.
* @param unescape the boolean indicating whether or not
* to unescape CDATA Sections
**/
virtual void setUnescapeCDATA(MBool unescape);
virtual void setUseEmptyElementShorthand(MBool useShorthand);
/**
* Sets whether or not this XMLPrinter should add whitespace
* to pretty print the XML tree
* @param useFormat a boolean to indicate whether to allow the
* XMLPrinter to add whitespace to the XML tree. (false by default)
**/
virtual void setUseFormat(MBool useFormat);
protected:
static const String CDATA_END;
static const String CDATA_START;
static const String COMMENT_START;
static const String COMMENT_END;
static const String DOCTYPE_START;
static const String DOCTYPE_END;
static const String DOUBLE_QUOTE;
static const String EQUALS;
static const String FORWARD_SLASH;
static const String L_ANGLE_BRACKET;
static const String PI_START;
static const String PI_END;
static const String PUBLIC;
static const String R_ANGLE_BRACKET;
static const String SEMICOLON;
static const String SPACE;
static const String SYSTEM;
static const String XML_DECL;
// chars
static const char AMPERSAND;
static const char GT;
static const char LT;
static const char DASH;
//---------------------/
//- Protected Methods -/
//---------------------/
/**
* prints the given node to this XMLPrinter's Writer. If the
* useFormat flag has been set, the node will be printed with
* indentation equal to currentIndent + indentSize
* @param node the Node to print
* @param currentIndent the current indent String
* @return true, if and only if a new line was printed at
* the end of printing the given node
**/
virtual MBool print(Node* node, String& currentIndent);
/**
* Prints the proper UTF8 character
**/
void printUTF8Char(DOM_CHAR ch) const;
/**
* Print the proper UTF8 characters
* based on code submitted by Majkel Kretschmar
**/
void printUTF8Chars(const String& data);
private:
static const char TX_CR;
static const char TX_LF;
static const String AMP_ENTITY;
static const String GT_ENTITY;
static const String LT_ENTITY;
static const String HEX_ENTITY;
String version;
String entityTokens;
/**
* The a string comprised of indentSize number of indentChar's
**/
String indent;
/**
* The character used for indentation
**/
char indentChar;
/**
* The size of the indentation
**/
int indentSize;
/**
* The out stream to print results to
**/
ostream* ostreamPtr;
/**
* A flag indicating whether or not to unescape CDATA sections
**/
MBool unescapeCDATA;
MBool useEmptyElementShorthand;
/**
* A flag indicating whether or not to add whitespace
* such as line breaks while printing
**/
MBool useFormat;
//-------------------/
//- Private Methods -/
//-------------------/
/**
* Called by Constructor to initialize Object instance
**/
void initialize(ostream& os, int indentSize);
/**
* Replaces any occurances of the special characters with their
* appropriate entity reference and prints the String
**/
void printWithXMLEntities(const String& data);
/**
* Replaces any occurances of -- inside comment data with - -
* and prints the String
* @param data the comment data (does not include start and end tags)
**/
void printComment(const String& data);
}; //-- XMLPrinter
/**
* A class for printing an XML node as non-well-formed HTML
* This class was ported from XSL:P Java source
**/
class HTMLPrinter : public XMLPrinter {
public:
//---------------/
//- Contructors -/
//---------------/
/**
* Default constructor uses cout as the default ostream
**/
HTMLPrinter();
/**
* Creates a new XML Printer using the given PrintWriter
* for output
* @param writer the PrintWriter to use for output
**/
HTMLPrinter(ostream& os);
/**
* Creates a new XML Printer using the given PrintWriter
* for output, and nodes are indenting using the specified
* indent size
* @param os the out stream to use for output
* @param indent the number of spaces to indent
**/
HTMLPrinter (ostream& os, int indent);
/**
* Sets whether or not this XMLPrinter should add whitespace
* to pretty print the XML tree
* @param useFormat a boolean to indicate whether to allow the
* XMLPrinter to add whitespace to the XML tree. (false by default)
**/
virtual void setUseFormat(MBool useFormat);
protected:
//---------------------/
//- Protected Methods -/
//---------------------/
/**
* prints the given node to this XMLPrinter's Writer. If the
* useFormat flag has been set, the node will be printed with
* indentation equal to currentIndent + indentSize
* @param node the Node to print
* @param currentIndent the current indent String
* @return true, if and only if a new line was printed at
* the end of printing the given node
**/
virtual MBool print(Node* node, String& currentIndent);
private:
NamedMap htmlEmptyTags;
MBool useFormat;
/**
* The out stream to print results to
**/
ostream* ostreamPtr;
//-------------------/
//- Private Methods -/
//-------------------/
/**
* Called by Constructor to initialize Object instance
**/
void initialize(ostream& os, int indentSize);
}; //-- HTMLPrinter
/**
* A class for printing an XML node as text
**/
class TEXTPrinter : public XMLPrinter {
public:
//---------------/
//- Contructors -/
//---------------/
/**
* Default constructor uses cout as the default ostream
**/
TEXTPrinter();
/**
* Creates a new XML Printer using the given PrintWriter
* for output
* @param writer the PrintWriter to use for output
**/
TEXTPrinter(ostream& os);
/**
* Creates a new XML Printer using the given PrintWriter
* for output, and nodes are indenting using the specified
* indent size
* @param os the out stream to use for output
* @param indent the number of spaces to indent
**/
TEXTPrinter (ostream& os, int indent);
/**
* Prints the given Node
* @param node the Node to print
**/
virtual void print(Node* node);
private:
/**
* The out stream to print results to
**/
ostream* ostreamPtr;
//-------------------/
//- Private Methods -/
//-------------------/
/**
* Called by Constructor to initialize Object instance
**/
void initialize(ostream& os);
}; //-- TEXTPrinter
#endif