## net.htmlparser.jericho
Class HTMLElements

    java.lang.Object
      net.htmlparser.jericho.HTMLElements

    public final class HTMLElements

extends Object

Contains static methods which group HTML element names by the characteristics of their associated elements.

An HTML element is a normal element with a name that matches one of the HTML element names (ignoring case). This type of element spans the logical HTML element as described in the HTML 4.01 specification section 3.2.1, which may be implicitly terminated if it specifies an optional end tag.

The term Non-HTML element refers to a normal element with a name that does not match one of the HTML element names. This type of element must be either a single tag element or explicitly terminated.

All of the sets returned by the methods in this class may be modified to customise the behaviour of the parser. Care must be taken however to ensure that the sets only contain tag names in lower case.

Below is a table summarising the default characteristics of each HTML element. See also the index of elements in the HTML 4.01 specification for the official table containing similar information.

Name | Box Type | Start Tag | End Tag | Nest | Depr. | Description / Specification
--- | --- | --- | --- | --- | --- | ---
`A` | Inline |  | Required | NF |  | anchor
`ABBR` | Inline |  | Required |  |  | abbreviated form (e.g., WWW, HTTP, etc.)
`ACRONYM` | Inline |  | Required |  |  | acronym
`ADDRESS` | Block |  | Required | NF |  | information on author
`APPLET` | Inline |  | Required | NF | D | Java applet
`AREA` |  |  | Forbidden | NF |  | client-side image map area
`B` | Inline |  | Required |  |  | bold text style
`BASE` |  |  | Forbidden | NF |  | document base URI
`BASEFONT` | Inline |  | Forbidden | NF | D | base font size
`BDO` | Inline |  | Required |  |  | I18N BiDi over-ride
`BIG` | Inline |  | Required |  |  | large text style
`BLOCKQUOTE` | Block |  | Required |  |  | long quotation
`BODY` |  | Optional | Optional (details) | NF |  | document body
`BR` | Inline |  | Forbidden | NF |  | forced line break
`BUTTON` | Inline |  | Required | NF |  | push button
`CAPTION` |  |  | Required | NF |  | table caption
`CENTER` | Block |  | Required |  | D | shorthand for DIV align=center
`CITE` | Inline |  | Required |  |  | citation
`CODE` | Inline |  | Required |  |  | computer code fragment
`COL` |  |  | Forbidden | NF |  | table column
`COLGROUP` |  |  | Optional (details) | NF |  | table column group
`DD` |  |  | Optional (details) |  |  | definition description
`DEL` | Inline |  | Required |  |  | deleted text
`DFN` | Inline |  | Required |  |  | instance definition
`DIR` | Block |  | Required |  | D | directory list
`DIV` | Block |  | Required |  |  | generic language/style container
`DL` | Block |  | Required |  |  | definition list
`DT` |  |  | Optional (details) |  |  | definition term
`EM` | Inline |  | Required |  |  | emphasis
`FIELDSET` | Block |  | Required |  |  | form control group
`FONT` | Inline |  | Required |  | D | local change to font
`FORM` | Block |  | Required | NF |  | interactive form
`FRAME` |  |  | Forbidden | NF |  | subwindow
`FRAMESET` |  |  | Required |  |  | window subdivision
`H1` | Block |  | Required |  |  | heading
`H2` | Block |  | Required |  |  | heading
`H3` | Block |  | Required |  |  | heading
`H4` | Block |  | Required |  |  | heading
`H5` | Block |  | Required |  |  | heading
`H6` | Block |  | Required |  |  | heading
`HEAD` |  | Optional | Optional (details) | NF |  | document head
`HR` | Block |  | Forbidden | NF |  | horizontal rule
`HTML` |  | Optional | Optional (details) | NF |  | document root element
`I` | Inline |  | Required |  |  | italic text style
`IFRAME` | Inline |  | Required | NF |  | inline subwindow
`IMG` | Inline |  | Forbidden | NF |  | Embedded image
`INPUT` | Inline |  | Forbidden | NF |  | form control
`INS` | Inline |  | Required |  |  | inserted text
`ISINDEX` | Block |  | Forbidden | NF | D | single line prompt
`KBD` | Inline |  | Required |  |  | text to be entered by the user
`LABEL` | Inline |  | Required | NF |  | form field label text
`LEGEND` |  |  | Required | NF |  | fieldset legend
`LI` |  |  | Optional (details) |  |  | list item
`LINK` |  |  | Forbidden | NF |  | a media-independent link
`MAP` | Inline |  | Required |  |  | client-side image map
`MENU` | Block |  | Required |  | D | menu list
`META` |  |  | Forbidden | NF |  | generic metainformation
`NOFRAMES` | Block |  | Required |  |  | alternate content container for non frame-based rendering
`NOSCRIPT` | Block |  | Required |  |  | alternate content container for non script-based rendering
`OBJECT` | Inline |  | Required |  |  | generic embedded object
`OL` | Block |  | Required |  |  | ordered list
`OPTGROUP` |  |  | Required | NF |  | option group
`OPTION` |  |  | Optional (details) | NF |  | selectable choice
`P` | Block |  | Optional (details) | NF |  | paragraph
`PARAM` |  |  | Forbidden | NF |  | named property value
`PRE` | Block |  | Required |  |  | preformatted text
`Q` | Inline |  | Required |  |  | short inline quotation
`S` | Inline |  | Required |  | D | strike-through text style
`SAMP` | Inline |  | Required |  |  | sample program output, scripts, etc.
`SCRIPT` | Inline |  | Required | NF |  | script statements
`SELECT` | Inline |  | Required | NF |  | option selector
`SMALL` | Inline |  | Required |  |  | small text style
`SPAN` | Inline |  | Required |  |  | generic language/style container
`STRIKE` | Inline |  | Required |  | D | strike-through text
`STRONG` | Inline |  | Required |  |  | strong emphasis
`STYLE` |  |  | Required | NF |  | style info
`SUB` | Inline |  | Required |  |  | subscript
`SUP` | Inline |  | Required |  |  | superscript
`TABLE` | Block |  | Required |  |  | table
`TBODY` |  | Optional | Optional (details) |  |  | table body
`TD` |  |  | Optional (details) |  |  | table data cell
`TEXTAREA` | Inline |  | Required | NF |  | multi-line text field
`TFOOT` |  |  | Optional (details) |  |  | table footer
`TH` |  |  | Optional (details) |  |  | table header cell
`THEAD` |  |  | Optional (details) |  |  | table header
`TITLE` |  |  | Required | NF |  | document title
`TR` |  |  | Optional (details) |  |  | table row
`TT` | Inline |  | Required |  |  | teletype or monospaced text style
`U` | Inline |  | Required |  | D | underlined text style
`UL` | Block |  | Required |  |  | unordered list
`VAR` | Inline |  | Required |  |  | instance of a variable or program argument

See Also:
  `HTMLElementName`, `Element`

Method Summary
`static Set<String>` `getBlockLevelElementNames()` Returns a set containing the names of all the block-level elements.
`static Set<String>` `getDeprecatedElementNames()` Returns a set containing the names of all deprecated elements in HTML 4.01.
`static List<String>` `getElementNames()` Returns a list containing all of the HTML element names.
`static Set<String>` `getEndTagForbiddenElementNames()` Returns a set containing the names of all of the HTML elements for which the end tag is forbidden.
`static Set<String>` `getEndTagOptionalElementNames()` Returns a set containing the names of all of the HTML elements for which the end tag is optional.
`static Set<String>` `getEndTagRequiredElementNames()` Returns a set containing the names of all of the HTML elements for which the end tag is required.
`static Set<String>` `getInlineLevelElementNames()` Returns a set containing the names of all the inline-level elements.
`static Set<String>` `getNestingForbiddenElementNames()` Returns a set containing the names of all of the HTML elements which should never contain elements of the same name, either as direct or indirect descendants.
`static Set<String>` `getNonterminatingElementNames(String endTagOptionalElementName)` Returns the names of elements that do NOT implicitly terminate an HTML element with the specified name.
`static Set<String>` `getStartTagOptionalElementNames()` Returns a set containing the names of all of the HTML elements for which the start tag is optional.
`static Set<String>` `getTerminatingEndTagNames(String endTagOptionalElementName)` Returns the names of end tags that implicitly terminate an HTML element with the specified name.
`static Set<String>` `getTerminatingStartTagNames(String endTagOptionalElementName)` Returns the names of start tags that implicitly terminate an HTML element with the specified name.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Method Detail

### getElementNames

    public static final List<String> getElementNames()

  Returns a list containing all of the HTML element names.

  The returned list is in alphabetical order.

  Returns:
    a list containing of all the HTML element names.

### getBlockLevelElementNames

    public static Set<String> getBlockLevelElementNames()

  Returns a set containing the names of all the block-level elements.

  The element names contained in this set are:
  `ADDRESS`, `BLOCKQUOTE`, `CENTER`, `DIR`, `DIV`, `DL`, `FIELDSET`, `FORM`, `H1`, `H2`, `H3`, `H4`, `H5`, `H6`, `HR`, `ISINDEX`, `MENU`, `NOFRAMES`, `NOSCRIPT`, `OL`, `P`, `PRE`, `TABLE`, `UL`

  This set is defined in the HTML 4.01 Transitional DTD, but more detailed information can be found in the HTML 4.01 specification section 7.5.3 - Block-level and inline elements and the CSS2 specification section 9.2.1 - Block-level elements and block boxes.

  The CSS2 display property can be used to override the normal box type of an element.

  Returns:
    a set containing the names of all the block-level elements.
  See Also:
    `getInlineLevelElementNames()`

### getInlineLevelElementNames

    public static Set<String> getInlineLevelElementNames()

  Returns a set containing the names of all the inline-level elements.

  The element names contained in this set are:
  `A`, `ABBR`, `ACRONYM`, `APPLET`, `B`, `BASEFONT`, `BDO`, `BIG`, `BR`, `BUTTON`, `CITE`, `CODE`, `DEL`, `DFN`, `EM`, `FONT`, `I`, `IFRAME`, `IMG`, `INPUT`, `INS`, `KBD`, `LABEL`, `MAP`, `OBJECT`, `Q`, `S`, `SAMP`, `SCRIPT`, `SELECT`, `SMALL`, `SPAN`, `STRIKE`, `STRONG`, `SUB`, `SUP`, `TEXTAREA`, `TT`, `U`, `VAR`

  This set is defined in the HTML 4.01 Transitional DTD, but more detailed information can be found in the HTML 4.01 specification section 7.5.3 - Block-level and inline elements and the CSS2 specification section 9.2.2 - Inline-level elements and inline boxes.

  The CSS2 display property can be used to override the normal box type of an element.

  The HTML Document Type Definitions forbid the presence of block-level elements inside inline-level elements, but it is tolerated by all popular browsers in various situations, even in XHTML documents. The most notorious example of this is the common inclusion of block-level elements inside `FONT` elements.

  Returns:
    a set containing the names of all the inline-level elements.
  See Also:
    `getBlockLevelElementNames()`

### getDeprecatedElementNames

    public static Set<String> getDeprecatedElementNames()

  Returns a set containing the names of all deprecated elements in HTML 4.01.

  Returns:
    a set containing the names of all deprecated elements in HTML 4.01.

### getEndTagForbiddenElementNames

    public static Set<String> getEndTagForbiddenElementNames()

  Returns a set containing the names of all of the HTML elements for which the end tag is forbidden.

  See the element parsing rules for HTML elements with forbidden end tags for more information.

  The index of elements in the HTML 4.01 specification includes the letter 'F' in the "End Tag" column for elements whose end tag is forbidden.

  Returns:
    a set containing the names of all of the HTML elements for which the end tag is forbidden.
  See Also:
    `getEndTagOptionalElementNames()`, `getEndTagRequiredElementNames()`

### getEndTagOptionalElementNames

    public static Set<String> getEndTagOptionalElementNames()

  Returns a set containing the names of all of the HTML elements for which the end tag is optional.

  Elements with these names may be implicitly terminated by a subsequent terminating start tag or terminating end tag. A list of the these terminating tags, and the names of non-terminating elements that can be nested within the element, can be found in the documentation of each relevant element in the `HTMLElementName` class.

  See the element parsing rules for HTML elements with optional end tags for more information.

  The index of elements in the HTML 4.01 specification includes the letter 'O' in the "End Tag" column for elements whose end tag is optional.

  Returns:
    a set containing the names of all of the HTML elements for which the end tag is optional.
  See Also:
    `getEndTagForbiddenElementNames()`, `getEndTagRequiredElementNames()`

### getEndTagRequiredElementNames

    public static Set<String> getEndTagRequiredElementNames()

  Returns a set containing the names of all of the HTML elements for which the end tag is required.

  See the element parsing rules for HTML elements with required end tags for more information.

  The index of elements in the HTML 4.01 specification leaves the "End Tag" column blank for elements whose end tag is required.

  Returns:
    a set containing the names of all of the HTML elements for which the end tag is required.
  See Also:
    `getEndTagForbiddenElementNames()`, `getEndTagOptionalElementNames()`

### getStartTagOptionalElementNames

    public static Set<String> getStartTagOptionalElementNames()

  Returns a set containing the names of all of the HTML elements for which the start tag is optional.

  Elements with optional start tags must be present in the document object model (DOM) in certain locations, either forming part of the structure of the HTML document as a whole (e.g. the `HTML`, `HEAD`, and `BODY` elements), or forming part of the structure of a `TABLE` element (e.g. the `TBODY` element). The location of an omitted start tag in the document's object model can be inferred from the surrounding elements.

  This library does not use this property in any way when parsing documents, and does not construct a document object model from the source, so no implied element is created where an optional start tag is omitted.

  When the start tag has been omitted in the document text, the corresponding end tag should also be omitted.

  The index of elements in the HTML 4.01 specification includes the letter 'O' in the "Start Tag" column for elements whose start tag is optional.

  Returns:
    a set containing the names of all of the HTML elements for which the start tag is optional.

### getTerminatingStartTagNames

    public static Set<String> getTerminatingStartTagNames(String endTagOptionalElementName)

  Returns the names of start tags that implicitly terminate an HTML element with the specified name.

  This method is only relevant to HTML elements for which the end tag is optional. It returns `null` if
  `getEndTagOptionalElementNames()``.contains(endTagOptionalElementName.toLowerCase())==null`.

  Parameters:
    `endTagOptionalElementName` - the name of an element for which the end tag is optional.
  Returns:
    the names of start tags that implicitly terminate an HTML element with the specified name, or `null` if the name does not identify an element for which the end tag is optional.
  See Also:
    `getTerminatingEndTagNames(String endTagOptionalElementName)`, `getNonterminatingElementNames(String endTagOptionalElementName)`

### getTerminatingEndTagNames

    public static Set<String> getTerminatingEndTagNames(String endTagOptionalElementName)

  Returns the names of end tags that implicitly terminate an HTML element with the specified name.

  This method is only relevant to HTML elements for which the end tag is optional. It returns `null` if
  `getEndTagOptionalElementNames()``.contains(endTagOptionalElementName.toLowerCase())==null`.

  Note that removing the tag name matching the specified element has no effect on the behaviour of the parser, as it is always assumed that a start tag is terminated by an end tag with a matching name.

  Parameters:
    `endTagOptionalElementName` - the name of an element for which the end tag is optional.
  Returns:
    the names of end tags that implicitly terminate an HTML element with the specified name, or `null` if the name does not identify an element for which the end tag is optional.
  See Also:
    `getTerminatingStartTagNames(String endTagOptionalElementName)`, `getNonterminatingElementNames(String endTagOptionalElementName)`

### getNonterminatingElementNames

    public static Set<String> getNonterminatingElementNames(String endTagOptionalElementName)

  Returns the names of elements that do NOT implicitly terminate an HTML element with the specified name. Neither can any tag nested inside any of these elements implicitly terminate the specified element, even if it is listed as one of the terminating start tags or terminating end tags.

  This method is only relevant to HTML elements for which the end tag is optional. It returns `null` if
  `getEndTagOptionalElementNames()``.contains(endTagOptionalElementName.toLowerCase())==null`.

  Parameters:
    `endTagOptionalElementName` - the name of an element for which the end tag is optional.
  Returns:
    the names of elements that do NOT implicitly terminate an HTML element with the specified name, or `null` if the name does not identify an element for which the end tag is optional.
  See Also:
    `getTerminatingStartTagNames(String endTagOptionalElementName)`, `getTerminatingEndTagNames(String endTagOptionalElementName)`

### getNestingForbiddenElementNames

    public static Set<String> getNestingForbiddenElementNames()

  Returns a set containing the names of all of the HTML elements which should never contain elements of the same name, either as direct or indirect descendants.

  Returns:
    a set containing the names of all of the HTML elements which should never contain elements of the same name.