org.enhydra.xml.io
Class BaseDOMFormatter

java.lang.Object
  |
  +--org.enhydra.xml.io.BaseDOMFormatter
All Implemented Interfaces:
DOMTraversal.Handler, Formatter
Direct Known Subclasses:
HTMLFormatter, XMLFormatter

abstract class BaseDOMFormatter
extends Object
implements Formatter, DOMTraversal.Handler

Base class with common functionally XML and HTML DOM formatting functionality.


Field Summary
protected static char ATTR_QUOTE_CHAR
          Quote character to use for attribute values.
protected static String ATTR_QUOTE_CHAR_ENTITY_REF
          Entity reference for attribute value quote character.
protected  DocumentType fDocType
          DocumentType from document.
protected  Document fDocument
          Document being formatted.
protected  int fDynamicFormattedElementCount
          Count of element open tags that were written not using preformatted text.
protected  OutputOptions fOptions
          The output options.
protected  Writer fOut
          Output writer.
protected  boolean fPreFormatMode
          Are we doing pre-formatting?
protected  int fPreFormattedElementCount
          Count of preformatted element open tags that were written.
protected  boolean fPrettyPrinting
          Are we pretty-printing?
protected  String fPublicId
          Public id to use for DOCTYPE, or null if none.
protected  String fSystemId
          System id to use for DOCTYPE, or null if none.
protected  DOMTraversal fTraverser
          DOM traverser.
protected  boolean fUsePreFormattedAttrText
          Should pre-formatted text be use for descendents of attribute nodes.
protected  boolean fUsePreFormattedElements
          Should pre-formatted Elements be written.
protected  boolean fUsePreFormattedText
          Should pre-formatted text be written.
protected static int MAX_ENTITY_QUICK_CHECK_CHAR
          Maximum character value in an entity quick-check table.
 
Constructor Summary
protected BaseDOMFormatter(Node node, OutputOptions outputOptions, boolean forPreFormatting, String defaultEncoding, boolean[] entityQuickCheck)
          Constructor.
 
Method Summary
(package private) static void ()
          Static initializer.
protected abstract  String getCharacterEntity(char textChar)
          Get a character entity name for a character.
 int getDynamicFormattedElementCount()
          Get the count of element open tags that were written not using preformatted text.
 int getDynamicFormattedTextCount()
          Get the count of text nodes that were written not using preformatted text.
 String getMIMEEncoding()
          Get the MIME-preferred encoding, determined from the OutputOptions and the formatter type.
 int getPreFormattedElementCount()
          Get the count of preformatted element open tags that were written.
 int getPreFormattedTextCount()
          Get the count of preformatted text nodes that were written.
 void handleComment(Comment comment)
          Handler called for Comment nodes.
 void handleEntity(Entity entity)
          Handler called for Entity nodes; should never be called.
 void handleEntityReference(EntityReference entityRef)
          Handler called for EntityReference nodes.
 void handleNotation(Notation notation)
          Handler called for Notation nodes; should never be called.
 void handleText(Text text)
          Handler called for Text nodes.
 String preFormatNode(Node node)
          Format the contents of a node that can later be returned by a node implementing FormattedText.
protected  void printIndent()
          Print indentation to the current level.
 boolean usedPreFormattedElements()
          Determine if preformatted element open tags were used for the last document formatted.
 boolean usedPreFormattedText()
          Determine if preformatted text was used for the last document formatted.
 void write(Node node, Writer writer)
          Format a Node and children to the specified writer.
protected  void writeAttributeValue(Attr attr)
          Write an attribute value.
protected  void writeln()
          Write a newline
protected abstract  void writeOpenTag(Element element, String tagName, boolean hasChildren)
          Method to write an open tag, including attributes.
protected  void writeText(String text)
          Write a text string, encoding document type-specific character entities.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.enhydra.xml.dom.DOMTraversal.Handler
handleAttr, handleCDATASection, handleDocument, handleDocumentFragment, handleDocumentType, handleElement, handleProcessingInstruction
 

Field Detail

MAX_ENTITY_QUICK_CHECK_CHAR

protected static final int MAX_ENTITY_QUICK_CHECK_CHAR
Maximum character value in an entity quick-check table.

ATTR_QUOTE_CHAR

protected static final char ATTR_QUOTE_CHAR
Quote character to use for attribute values.

ATTR_QUOTE_CHAR_ENTITY_REF

protected static final String ATTR_QUOTE_CHAR_ENTITY_REF
Entity reference for attribute value quote character.

fOptions

protected final OutputOptions fOptions
The output options.

fOut

protected Writer fOut
Output writer.

fTraverser

protected final DOMTraversal fTraverser
DOM traverser.

fPreFormatMode

protected final boolean fPreFormatMode
Are we doing pre-formatting?

fUsePreFormattedText

protected final boolean fUsePreFormattedText
Should pre-formatted text be written. This is only enabled if the document implements PreFormattedTextDocument and the preformatted encoding matches the output encoding. This option only controls text nodes that are not children of attributes.

fUsePreFormattedAttrText

protected final boolean fUsePreFormattedAttrText
Should pre-formatted text be use for descendents of attribute nodes. A seperate flag is required to support the omitAttributeCharEntityRefs option.

fUsePreFormattedElements

protected final boolean fUsePreFormattedElements
Should pre-formatted Elements be written. This is the same as fUsePreFormattedText, unless a URLRewriter is present, in which case it's false since we need to check the attributes for URLs.

fPreFormattedElementCount

protected int fPreFormattedElementCount
Count of preformatted element open tags that were written.

fDynamicFormattedElementCount

protected int fDynamicFormattedElementCount
Count of element open tags that were written not using preformatted text.

fPrettyPrinting

protected final boolean fPrettyPrinting
Are we pretty-printing?

fDocument

protected final Document fDocument
Document being formatted.

fDocType

protected final DocumentType fDocType
DocumentType from document.

fPublicId

protected final String fPublicId
Public id to use for DOCTYPE, or null if none.

fSystemId

protected final String fSystemId
System id to use for DOCTYPE, or null if none.
Constructor Detail

BaseDOMFormatter

protected BaseDOMFormatter(Node node,
                           OutputOptions outputOptions,
                           boolean forPreFormatting,
                           String defaultEncoding,
                           boolean[] entityQuickCheck)
Constructor.
Parameters:
node - Any node of the document that this formatter will be associated with. This can also be an XMLC Document object (XMLObject).
options - The output options.
defaultEncoding - The default encoding for this format.
forPreFormatting - Is this going to be used for preformatting?
entityQuickCheck - Document-type specific table that provides a quick check of the need to encode that character as a character entity reference. This table MUST include the double-quote character, as it it used to quote attribute values.
Method Detail

static void ()
Static initializer.

getMIMEEncoding

public final String getMIMEEncoding()
Description copied from interface: Formatter
Get the MIME-preferred encoding, determined from the OutputOptions and the formatter type.
Specified by:
getMIMEEncoding in interface Formatter
See Also:
Formatter.getMIMEEncoding()

usedPreFormattedText

public boolean usedPreFormattedText()
Description copied from interface: Formatter
Determine if preformatted text was used for the last document formatted. The results are only meaninful if called after a call to write().
Specified by:
usedPreFormattedText in interface Formatter
See Also:
Formatter.usedPreFormattedText()

getPreFormattedTextCount

public final int getPreFormattedTextCount()
Get the count of preformatted text nodes that were written.
Specified by:
getPreFormattedTextCount in interface Formatter

getDynamicFormattedTextCount

public final int getDynamicFormattedTextCount()
Get the count of text nodes that were written not using preformatted text.
Specified by:
getDynamicFormattedTextCount in interface Formatter

usedPreFormattedElements

public final boolean usedPreFormattedElements()
Description copied from interface: Formatter
Determine if preformatted element open tags were used for the last document formatted. The results are only meaninful if called after a call to write().
Specified by:
usedPreFormattedElements in interface Formatter
See Also:
Formatter.usedPreFormattedElements()

getPreFormattedElementCount

public final int getPreFormattedElementCount()
Get the count of preformatted element open tags that were written.
Specified by:
getPreFormattedElementCount in interface Formatter

getDynamicFormattedElementCount

public final int getDynamicFormattedElementCount()
Get the count of element open tags that were written not using preformatted text.
Specified by:
getDynamicFormattedElementCount in interface Formatter

writeln

protected final void writeln()
                      throws IOException
Write a newline

printIndent

protected final void printIndent()
                          throws IOException
Print indentation to the current level.

getCharacterEntity

protected abstract String getCharacterEntity(char textChar)
Get a character entity name for a character. This is the slow-path, so its ok this is an abstract method call.
Returns:
The character entity name, or null if this character doesn't have one.

writeText

protected final void writeText(String text)
                        throws IOException
Write a text string, encoding document type-specific character entities. This is an expensive procedure and has been carefully hand optimized.

handleEntity

public final void handleEntity(Entity entity)
Handler called for Entity nodes; should never be called.
Specified by:
handleEntity in interface DOMTraversal.Handler
See Also:
DOMTraversal.Handler.handleEntity(org.w3c.dom.Entity)

handleNotation

public final void handleNotation(Notation notation)
Handler called for Notation nodes; should never be called.
Specified by:
handleNotation in interface DOMTraversal.Handler
See Also:
DOMTraversal.Handler.handleNotation(org.w3c.dom.Notation)

handleEntityReference

public final void handleEntityReference(EntityReference entityRef)
                                 throws IOException
Handler called for EntityReference nodes.
Specified by:
handleEntityReference in interface DOMTraversal.Handler
See Also:
DOMTraversal.Handler.handleEntityReference(org.w3c.dom.EntityReference)

handleComment

public final void handleComment(Comment comment)
                         throws IOException
Handler called for Comment nodes.
Specified by:
handleComment in interface DOMTraversal.Handler
See Also:
DOMTraversal.Handler.handleComment(org.w3c.dom.Comment)

handleText

public void handleText(Text text)
                throws IOException
Handler called for Text nodes.
Specified by:
handleText in interface DOMTraversal.Handler
See Also:
DOMTraversal.Handler.handleText(org.w3c.dom.Text)

writeAttributeValue

protected final void writeAttributeValue(Attr attr)
                                  throws IOException
Write an attribute value. Convert characters to character entity references as needed.

writeOpenTag

protected abstract void writeOpenTag(Element element,
                                     String tagName,
                                     boolean hasChildren)
                              throws IOException
Method to write an open tag, including attributes. Children are not processed. This is normally called by the derived class handleElement method, but its hear to allow for use by preformatter.

preFormatNode

public final String preFormatNode(Node node)
Description copied from interface: Formatter
Format the contents of a node that can later be returned by a node implementing FormattedText. Not all node types will return formatted text.
Specified by:
preFormatNode in interface Formatter
See Also:
Formatter.preFormatNode(org.w3c.dom.Node)

write

public final void write(Node node,
                        Writer writer)
                 throws IOException
Format a Node and children to the specified writer.
Specified by:
write in interface Formatter
See Also:
Formatter.write(org.w3c.dom.Node, java.io.Writer)


Copyright © 1999-2002 enhydra.org (Mark Diekhans, David Li, Richard Kunze). All Rights reserved.