HTMLTagBalancer (NekoHTML 1.9.20 Implementation)
Date: 2014-02-13

org.cyberneko.html

## Class HTMLTagBalancer

- java.lang.Object
- - org.cyberneko.html.HTMLTagBalancer

- All Implemented Interfaces:
    HTMLComponent

      public class HTMLTagBalancer
      extends java.lang.Object
      implements HTMLComponent

  Balances tags in an HTML document. This component receives document events and tries to correct many common mistakes that human (and computer) HTML document authors make. This tag balancer can:
  - add missing parent elements;
  - automatically close elements with optional end tags; and
  - handle mis-matched inline element tags.

  This component recognizes the following features:

  - http://cyberneko.org/html/features/augmentations
  - http://cyberneko.org/html/features/report-errors
  - http://cyberneko.org/html/features/balance-tags/document-fragment
  - http://cyberneko.org/html/features/balance-tags/ignore-outside-content

  This component recognizes the following properties:

  - http://cyberneko.org/html/properties/names/elems
  - http://cyberneko.org/html/properties/names/attrs
  - http://cyberneko.org/html/properties/error-reporter
  - http://cyberneko.org/html/properties/balance-tags/current-stack
  Version:
    $Id: HTMLTagBalancer.java,v 1.20 2005/02/14 04:06:22 andyc Exp $
  Author:
    Andy Clark, Marc Guillemot
  See Also:
    `HTMLElements`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `HTMLTagBalancer.Info` Element info for each start element.
    `static class` | `HTMLTagBalancer.InfoStack` Unsynchronized stack of element information.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static java.lang.String` | `AUGMENTATIONS` Include infoset augmentations.
    `protected static java.lang.String` | `DOCUMENT_FRAGMENT` Document fragment balancing only.
    `protected static java.lang.String` | `DOCUMENT_FRAGMENT_DEPRECATED` Document fragment balancing only (deprecated).
    `protected static java.lang.String` | `ERROR_REPORTER` Error reporter.
    `protected boolean` | `fAllowSelfclosingIframe` Allows self closing iframe tags.
    `protected boolean` | `fAllowSelfclosingTags` Allows self closing tags.
    `protected boolean` | `fAugmentations` Include infoset augmentations.
    `protected boolean` | `fDocumentFragment` Document fragment balancing only.
    `protected XMLDocumentHandler` | `fDocumentHandler` The document handler.
    `protected XMLDocumentSource` | `fDocumentSource` The document source.
    `protected HTMLTagBalancer.InfoStack` | `fElementStack` The element stack.
    `protected HTMLErrorReporter` | `fErrorReporter` Error reporter.
    `protected boolean` | `fIgnoreOutsideContent` Ignore outside content.
    `protected HTMLTagBalancer.InfoStack` | `fInlineStack` The inline stack.
    `protected short` | `fNamesAttrs` Modify HTML attribute names.
    `protected short` | `fNamesElems` Modify HTML element names.
    `protected boolean` | `fNamespaces` Namespaces.
    `protected boolean` | `fOpenedForm` True if a form is in the stack (allow to discard opening of nested forms)
    `static java.lang.String` | `FRAGMENT_CONTEXT_STACK` EXPERIMENTAL: may change in next release Name of the property holding the stack of elements in which context a document fragment should be parsed.
    `protected boolean` | `fReportErrors` Report errors.
    `protected boolean` | `fSeenAnything` True if seen anything.
    `protected boolean` | `fSeenBodyElement` True if seen <body< element.
    `protected boolean` | `fSeenDoctype` True if root element has been seen.
    `protected boolean` | `fSeenHeadElement` True if seen <head< element.
    `protected boolean` | `fSeenRootElement` True if root element has been seen.
    `protected boolean` | `fSeenRootElementEnd` True if seen the end of the document element.
    `protected static java.lang.String` | `IGNORE_OUTSIDE_CONTENT` Ignore outside content.
    `protected static java.lang.String` | `NAMES_ATTRS` Modify HTML attribute names: { "upper", "lower", "default" }.
    `protected static java.lang.String` | `NAMES_ELEMS` Modify HTML element names: { "upper", "lower", "default" }.
    `protected static short` | `NAMES_LOWERCASE` Lowercase HTML names.
    `protected static short` | `NAMES_MATCH` Match HTML element names.
    `protected static short` | `NAMES_NO_CHANGE` Don't modify HTML names.
    `protected static short` | `NAMES_UPPERCASE` Uppercase HTML names.
    `protected static java.lang.String` | `NAMESPACES` Namespaces.
    `protected static java.lang.String` | `REPORT_ERRORS` Report errors.
    `protected static HTMLEventInfo` | `SYNTHESIZED_ITEM` Synthesized event info item.
    `protected HTMLTagBalancingListener` | `tagBalancingListener`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HTMLTagBalancer()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `callEndElement(QName element, Augmentations augs)` Call document handler end element.
    `protected void` | `callStartElement(QName element, XMLAttributes attrs, Augmentations augs)` Call document handler start element.
    `void` | `characters(XMLString text, Augmentations augs)` Characters.
    `void` | `comment(XMLString text, Augmentations augs)` Comment.
    `void` | `doctypeDecl(java.lang.String rootElementName, java.lang.String publicId, java.lang.String systemId, Augmentations augs)` Doctype declaration.
    `protected XMLAttributes` | `emptyAttributes()` Returns a set of empty attributes.
    `void` | `emptyElement(QName element, XMLAttributes attrs, Augmentations augs)` Empty element.
    `void` | `endCDATA(Augmentations augs)` End CDATA section.
    `void` | `endDocument(Augmentations augs)` End document.
    `void` | `endElement(QName element, Augmentations augs)` End element.
    `void` | `endGeneralEntity(java.lang.String name, Augmentations augs)` End entity.
    `void` | `endPrefixMapping(java.lang.String prefix, Augmentations augs)` End prefix mapping.
    `XMLDocumentHandler` | `getDocumentHandler()` Returns the document handler.
    `XMLDocumentSource` | `getDocumentSource()` Returns the document source.
    `protected HTMLElements.Element` | `getElement(QName elementName)` Returns an HTML element.
    `protected int` | `getElementDepth(HTMLElements.Element element)` Returns the depth of the open tag associated with the specified element name or -1 if no matching element is found.
    `java.lang.Boolean` | `getFeatureDefault(java.lang.String featureId)` Returns the default state for a feature.
    `protected static short` | `getNamesValue(java.lang.String value)` Converts HTML names string value to constant value.
    `protected int` | `getParentDepth(HTMLElements.Element[] parents, short bounds)` Returns the depth of the open tag associated with the specified element parent names or -1 if no matching element is found.
    `java.lang.Object` | `getPropertyDefault(java.lang.String propertyId)` Returns the default state for a property.
    `java.lang.String[]` | `getRecognizedFeatures()` Returns recognized features.
    `java.lang.String[]` | `getRecognizedProperties()` Returns recognized properties.
    `void` | `ignorableWhitespace(XMLString text, Augmentations augs)` Ignorable whitespace.
    `protected static java.lang.String` | `modifyName(java.lang.String name, short mode)` Modifies the given name based on the specified mode.
    `void` | `processingInstruction(java.lang.String target, XMLString data, Augmentations augs)` Processing instruction.
    `void` | `reset(XMLComponentManager manager)` Resets the component.
    `void` | `setDocumentHandler(XMLDocumentHandler handler)` Sets the document handler.
    `void` | `setDocumentSource(XMLDocumentSource source)` Sets the document source.
    `void` | `setFeature(java.lang.String featureId, boolean state)` Sets a feature.
    `void` | `setProperty(java.lang.String propertyId, java.lang.Object value)` Sets a property.
    `void` | `startCDATA(Augmentations augs)` Start CDATA section.
    `void` | `startDocument(XMLLocator locator, java.lang.String encoding, Augmentations augs)` Start document.
    `void` | `startDocument(XMLLocator locator, java.lang.String encoding, NamespaceContext nscontext, Augmentations augs)` Start document.
    `void` | `startElement(QName elem, XMLAttributes attrs, Augmentations augs)` Start element.
    `void` | `startGeneralEntity(java.lang.String name, XMLResourceIdentifier id, java.lang.String encoding, Augmentations augs)` Start entity.
    `void` | `startPrefixMapping(java.lang.String prefix, java.lang.String uri, Augmentations augs)` Start prefix mapping.
    `protected Augmentations` | `synthesizedAugs()` Returns an augmentations object with a synthesized item added.
    `void` | `textDecl(java.lang.String version, java.lang.String encoding, Augmentations augs)` Text declaration.
    `void` | `xmlDecl(java.lang.String version, java.lang.String encoding, java.lang.String standalone, Augmentations augs)` XML declaration.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### NAMESPACES

          protected static final java.lang.String NAMESPACES

      Namespaces.
      See Also:
        Constant Field Values

    - #### AUGMENTATIONS

          protected static final java.lang.String AUGMENTATIONS

      Include infoset augmentations.
      See Also:
        Constant Field Values

    - #### REPORT_ERRORS

          protected static final java.lang.String REPORT_ERRORS

      Report errors.
      See Also:
        Constant Field Values

    - #### DOCUMENT_FRAGMENT_DEPRECATED

          protected static final java.lang.String DOCUMENT_FRAGMENT_DEPRECATED

      Document fragment balancing only (deprecated).
      See Also:
        Constant Field Values

    - #### DOCUMENT_FRAGMENT

          protected static final java.lang.String DOCUMENT_FRAGMENT

      Document fragment balancing only.
      See Also:
        Constant Field Values

    - #### IGNORE_OUTSIDE_CONTENT

          protected static final java.lang.String IGNORE_OUTSIDE_CONTENT

      Ignore outside content.
      See Also:
        Constant Field Values

    - #### NAMES_ELEMS

          protected static final java.lang.String NAMES_ELEMS

      Modify HTML element names: { "upper", "lower", "default" }.
      See Also:
        Constant Field Values

    - #### NAMES_ATTRS

          protected static final java.lang.String NAMES_ATTRS

      Modify HTML attribute names: { "upper", "lower", "default" }.
      See Also:
        Constant Field Values

    - #### ERROR_REPORTER

          protected static final java.lang.String ERROR_REPORTER

      Error reporter.
      See Also:
        Constant Field Values

    - #### FRAGMENT_CONTEXT_STACK

          public static final java.lang.String FRAGMENT_CONTEXT_STACK

      EXPERIMENTAL: may change in next release
      Name of the property holding the stack of elements in which context a document fragment should be parsed.
      See Also:
        Constant Field Values

    - #### NAMES_NO_CHANGE

          protected static final short NAMES_NO_CHANGE

      Don't modify HTML names.
      See Also:
        Constant Field Values

    - #### NAMES_MATCH

          protected static final short NAMES_MATCH

      Match HTML element names.
      See Also:
        Constant Field Values

    - #### NAMES_UPPERCASE

          protected static final short NAMES_UPPERCASE

      Uppercase HTML names.
      See Also:
        Constant Field Values

    - #### NAMES_LOWERCASE

          protected static final short NAMES_LOWERCASE

      Lowercase HTML names.
      See Also:
        Constant Field Values

    - #### SYNTHESIZED_ITEM

          protected static final HTMLEventInfo SYNTHESIZED_ITEM

      Synthesized event info item.

    - #### fNamespaces

          protected boolean fNamespaces

      Namespaces.

    - #### fAugmentations

          protected boolean fAugmentations

      Include infoset augmentations.

    - #### fReportErrors

          protected boolean fReportErrors

      Report errors.

    - #### fDocumentFragment

          protected boolean fDocumentFragment

      Document fragment balancing only.

    - #### fIgnoreOutsideContent

          protected boolean fIgnoreOutsideContent

      Ignore outside content.

    - #### fAllowSelfclosingIframe

          protected boolean fAllowSelfclosingIframe

      Allows self closing iframe tags.

    - #### fAllowSelfclosingTags

          protected boolean fAllowSelfclosingTags

      Allows self closing tags.

    - #### fNamesElems

          protected short fNamesElems

      Modify HTML element names.

    - #### fNamesAttrs

          protected short fNamesAttrs

      Modify HTML attribute names.

    - #### fErrorReporter

          protected HTMLErrorReporter fErrorReporter

      Error reporter.

    - #### fDocumentSource

          protected XMLDocumentSource fDocumentSource

      The document source.

    - #### fDocumentHandler

          protected XMLDocumentHandler fDocumentHandler

      The document handler.

    - #### fElementStack

          protected final HTMLTagBalancer.InfoStack fElementStack

      The element stack.

    - #### fInlineStack

          protected final HTMLTagBalancer.InfoStack fInlineStack

      The inline stack.

    - #### fSeenAnything

          protected boolean fSeenAnything

      True if seen anything. Important for xml declaration.

    - #### fSeenDoctype

          protected boolean fSeenDoctype

      True if root element has been seen.

    - #### fSeenRootElement

          protected boolean fSeenRootElement

      True if root element has been seen.

    - #### fSeenRootElementEnd

          protected boolean fSeenRootElementEnd

      True if seen the end of the document element. In other words, this variable is set to false until the end </HTML> tag is seen (or synthesized). This is used to ensure that extraneous events after the end of the document element do not make the document stream ill-formed.

    - #### fSeenHeadElement

          protected boolean fSeenHeadElement

      True if seen <head< element.

    - #### fSeenBodyElement

          protected boolean fSeenBodyElement

      True if seen <body< element.

    - #### fOpenedForm

          protected boolean fOpenedForm

      True if a form is in the stack (allow to discard opening of nested forms)

    - #### tagBalancingListener

          protected HTMLTagBalancingListener tagBalancingListener

  - ### Constructor Detail

    - #### HTMLTagBalancer

          public HTMLTagBalancer()

  - ### Method Detail

    - #### getFeatureDefault

          public java.lang.Boolean getFeatureDefault(java.lang.String featureId)

      Returns the default state for a feature.
      Specified by:
        `getFeatureDefault` in interface `HTMLComponent`

    - #### getPropertyDefault

          public java.lang.Object getPropertyDefault(java.lang.String propertyId)

      Returns the default state for a property.
      Specified by:
        `getPropertyDefault` in interface `HTMLComponent`

    - #### getRecognizedFeatures

          public java.lang.String[] getRecognizedFeatures()

      Returns recognized features.

    - #### getRecognizedProperties

          public java.lang.String[] getRecognizedProperties()

      Returns recognized properties.

    - #### reset

          public void reset(XMLComponentManager manager)
                     throws XMLConfigurationException

      Resets the component.
      Throws:
        `XMLConfigurationException`

    - #### setFeature

          public void setFeature(java.lang.String featureId,
                        boolean state)
                          throws XMLConfigurationException

      Sets a feature.
      Throws:
        `XMLConfigurationException`

    - #### setProperty

          public void setProperty(java.lang.String propertyId,
                         java.lang.Object value)
                           throws XMLConfigurationException

      Sets a property.
      Throws:
        `XMLConfigurationException`

    - #### setDocumentHandler

          public void setDocumentHandler(XMLDocumentHandler handler)

      Sets the document handler.

    - #### getDocumentHandler

          public XMLDocumentHandler getDocumentHandler()

      Returns the document handler.

    - #### startDocument

          public void startDocument(XMLLocator locator,
                           java.lang.String encoding,
                           NamespaceContext nscontext,
                           Augmentations augs)
                             throws XNIException

      Start document.
      Throws:
        `XNIException`

    - #### xmlDecl

          public void xmlDecl(java.lang.String version,
                     java.lang.String encoding,
                     java.lang.String standalone,
                     Augmentations augs)
                       throws XNIException

      XML declaration.
      Throws:
        `XNIException`

    - #### doctypeDecl

          public void doctypeDecl(java.lang.String rootElementName,
                         java.lang.String publicId,
                         java.lang.String systemId,
                         Augmentations augs)
                           throws XNIException

      Doctype declaration.
      Throws:
        `XNIException`

    - #### endDocument

          public void endDocument(Augmentations augs)
                           throws XNIException

      End document.
      Throws:
        `XNIException`

    - #### comment

          public void comment(XMLString text,
                     Augmentations augs)
                       throws XNIException

      Comment.
      Throws:
        `XNIException`

    - #### processingInstruction

          public void processingInstruction(java.lang.String target,
                                   XMLString data,
                                   Augmentations augs)
                                     throws XNIException

      Processing instruction.
      Throws:
        `XNIException`

    - #### startElement

          public void startElement(QName elem,
                          XMLAttributes attrs,
                          Augmentations augs)
                            throws XNIException

      Start element.
      Throws:
        `XNIException`

    - #### emptyElement

          public void emptyElement(QName element,
                          XMLAttributes attrs,
                          Augmentations augs)
                            throws XNIException

      Empty element.
      Throws:
        `XNIException`

    - #### startGeneralEntity

          public void startGeneralEntity(java.lang.String name,
                                XMLResourceIdentifier id,
                                java.lang.String encoding,
                                Augmentations augs)
                                  throws XNIException

      Start entity.
      Throws:
        `XNIException`

    - #### textDecl

          public void textDecl(java.lang.String version,
                      java.lang.String encoding,
                      Augmentations augs)
                        throws XNIException

      Text declaration.
      Throws:
        `XNIException`

    - #### endGeneralEntity

          public void endGeneralEntity(java.lang.String name,
                              Augmentations augs)
                                throws XNIException

      End entity.
      Throws:
        `XNIException`

    - #### startCDATA

          public void startCDATA(Augmentations augs)
                          throws XNIException

      Start CDATA section.
      Throws:
        `XNIException`

    - #### endCDATA

          public void endCDATA(Augmentations augs)
                        throws XNIException

      End CDATA section.
      Throws:
        `XNIException`

    - #### characters

          public void characters(XMLString text,
                        Augmentations augs)
                          throws XNIException

      Characters.
      Throws:
        `XNIException`

    - #### ignorableWhitespace

          public void ignorableWhitespace(XMLString text,
                                 Augmentations augs)
                                   throws XNIException

      Ignorable whitespace.
      Throws:
        `XNIException`

    - #### endElement

          public void endElement(QName element,
                        Augmentations augs)
                          throws XNIException

      End element.
      Throws:
        `XNIException`

    - #### setDocumentSource

          public void setDocumentSource(XMLDocumentSource source)

      Sets the document source.

    - #### getDocumentSource

          public XMLDocumentSource getDocumentSource()

      Returns the document source.

    - #### startDocument

          public void startDocument(XMLLocator locator,
                           java.lang.String encoding,
                           Augmentations augs)
                             throws XNIException

      Start document.
      Throws:
        `XNIException`

    - #### startPrefixMapping

          public void startPrefixMapping(java.lang.String prefix,
                                java.lang.String uri,
                                Augmentations augs)
                                  throws XNIException

      Start prefix mapping.
      Throws:
        `XNIException`

    - #### endPrefixMapping

          public void endPrefixMapping(java.lang.String prefix,
                              Augmentations augs)
                                throws XNIException

      End prefix mapping.
      Throws:
        `XNIException`

    - #### getElement

          protected HTMLElements.Element getElement(QName elementName)

      Returns an HTML element.

    - #### callStartElement

          protected final void callStartElement(QName element,
                              XMLAttributes attrs,
                              Augmentations augs)
                                         throws XNIException

      Call document handler start element.
      Throws:
        `XNIException`

    - #### callEndElement

          protected final void callEndElement(QName element,
                            Augmentations augs)
                                       throws XNIException

      Call document handler end element.
      Throws:
        `XNIException`

    - #### getElementDepth

          protected final int getElementDepth(HTMLElements.Element element)

      Returns the depth of the open tag associated with the specified element name or -1 if no matching element is found.
      Parameters:
        `element` - The element.

    - #### getParentDepth

          protected int getParentDepth(HTMLElements.Element[] parents,
                           short bounds)

      Returns the depth of the open tag associated with the specified element parent names or -1 if no matching element is found.
      Parameters:
        `parents` - The parent elements.

    - #### emptyAttributes

          protected final XMLAttributes emptyAttributes()

      Returns a set of empty attributes.

    - #### synthesizedAugs

          protected final Augmentations synthesizedAugs()

      Returns an augmentations object with a synthesized item added.

    - #### modifyName

          protected static final java.lang.String modifyName(java.lang.String name,
                                    short mode)

      Modifies the given name based on the specified mode.

    - #### getNamesValue

          protected static final short getNamesValue(java.lang.String value)

      Converts HTML names string value to constant value.
      See Also:
        `NAMES_NO_CHANGE`, `NAMES_LOWERCASE`, `NAMES_UPPERCASE`

(C) Copyright 2002-2014, Andy Clark, Marc Guillemot. All rights reserved.