NumberLinesEmitter
Date: 2016-07-03

com.nwalsh.saxon

## Class NumberLinesEmitter

- java.lang.Object
- - com.icl.saxon.output.Emitter
  - - com.nwalsh.saxon.CopyEmitter
    - - com.nwalsh.saxon.NumberLinesEmitter

- All Implemented Interfaces:
    javax.xml.transform.Result

      public class NumberLinesEmitter
      extends CopyEmitter

  Saxon extension to decorate a result tree fragment with line numbers.

  $Id: NumberLinesEmitter.java 5907 2006-04-27 08:26:47Z xmldoc $

  Copyright (C) 2000 Norman Walsh.

  This class provides the guts of a Saxon 6.* implementation of line numbering for verbatim environments. (It is used by the Verbatim class.)

  The general design is this: the stylesheets construct a result tree fragment for some verbatim environment. The Verbatim class initializes a NumberLinesEmitter with information about what lines should be numbered and how. Then the result tree fragment is "replayed" through the NumberLinesEmitter; the NumberLinesEmitter builds a new result tree fragment from this event stream, decorated with line numbers, and that is returned.

  Change Log:

  1.0

    Initial release.

  See Also:
    `Verbatim`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.util.Stack` | `elementStack` A stack for the preserving information about open elements.
    `protected boolean` | `firstElement` Is the next element absolutely the first element in the fragment?
    `protected boolean` | `foStylesheet` Is the stylesheet currently running an FO stylesheet?
    `protected static java.lang.String` | `foURI` The FO namespace name.
    `protected int` | `lineNumber` The current line number.
    `protected int` | `modulus` Every `modulus` line will be numbered.
    `protected java.lang.String` | `separator` Line numbers are separated from the listing by `separator`.
    `protected int` | `startinglinenumber` The first line number will be `startinglinenumber`.
    `protected int` | `width` Line numbers are `width` characters wide.
    `protected static java.lang.String` | `xhURI` The XHTML namespace name.

    - ### Fields inherited from class com.nwalsh.saxon.CopyEmitter

      `namePool, rtf, rtfEmitter`

    - ### Fields inherited from class com.icl.saxon.output.Emitter

      `locator, outputProperties, outputStream, systemId, writer`

    - ### Fields inherited from interface javax.xml.transform.Result

      `PI_DISABLE_OUTPUT_ESCAPING, PI_ENABLE_OUTPUT_ESCAPING`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `NumberLinesEmitter(com.icl.saxon.Controller controller, com.icl.saxon.om.NamePool namePool, int startingLineNumber, int modulus, int width, java.lang.String separator, boolean foStylesheet)` Constructor for the NumberLinesEmitter.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `characters(char[] chars, int start, int len)` Process characters.
    `void` | `endElement(int nameCode)` Process end element events.
    `protected void` | `formatLineNumber(int lineNumber)` Add a formatted line number to the result tree fragment.
    `protected boolean` | `skipThisElement(int nameCode)` Protect the outer-most block wrapper.
    `void` | `startElement(int nameCode, org.xml.sax.Attributes attributes, int[] namespaces, int nscount)` Process start element events.

    - ### Methods inherited from class com.nwalsh.saxon.CopyEmitter

      `comment, endDocument, getResultTreeFragment, processingInstruction, setDocumentLocator, setEscaping, setNamePool, setUnparsedEntity, setWriter, startDocument`

    - ### Methods inherited from class com.icl.saxon.output.Emitter

      `getNamePool, getOutputProperties, getOutputStream, getSystemId, getWriter, makeEmitter, setOutputProperties, setOutputStream, setSystemId, usesWriter`

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

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

- - ### Field Detail

    - #### elementStack

          protected java.util.Stack elementStack

      A stack for the preserving information about open elements.

    - #### lineNumber

          protected int lineNumber

      The current line number.

    - #### firstElement

          protected boolean firstElement

      Is the next element absolutely the first element in the fragment?

    - #### foURI

          protected static java.lang.String foURI

      The FO namespace name.

    - #### xhURI

          protected static java.lang.String xhURI

      The XHTML namespace name.

    - #### startinglinenumber

          protected int startinglinenumber

      The first line number will be `startinglinenumber`.

    - #### modulus

          protected int modulus

      Every `modulus` line will be numbered.

    - #### width

          protected int width

      Line numbers are `width` characters wide.

    - #### separator

          protected java.lang.String separator

      Line numbers are separated from the listing by `separator`.

    - #### foStylesheet

          protected boolean foStylesheet

      Is the stylesheet currently running an FO stylesheet?

  - ### Constructor Detail

    - #### NumberLinesEmitter

          public NumberLinesEmitter(com.icl.saxon.Controller controller,
                            com.icl.saxon.om.NamePool namePool,
                            int startingLineNumber,
                            int modulus,
                            int width,
                            java.lang.String separator,
                            boolean foStylesheet)

      Constructor for the NumberLinesEmitter.

      Parameters:
        `namePool` - The name pool to use for constructing elements and attributes.
        `modulus` - The modulus to use for this listing.
        `width` - The width to use for line numbers in this listing.
        `separator` - The separator to use for this listing.
        `foStylesheet` - Is this an FO stylesheet?

  - ### Method Detail

    - #### characters

          public void characters(char[] chars,
                        int start,
                        int len)
                          throws javax.xml.transform.TransformerException

      Process characters.
      Overrides:
        `characters` in class `CopyEmitter`
      Throws:
        `javax.xml.transform.TransformerException`

    - #### formatLineNumber

          protected void formatLineNumber(int lineNumber)
                                   throws javax.xml.transform.TransformerException

      Add a formatted line number to the result tree fragment.

      Parameters:
        `lineNumber` - The number of the current line.
      Throws:
        `javax.xml.transform.TransformerException`

    - #### endElement

          public void endElement(int nameCode)
                          throws javax.xml.transform.TransformerException

      Process end element events.
      Overrides:
        `endElement` in class `CopyEmitter`
      Throws:
        `javax.xml.transform.TransformerException`

    - #### startElement

          public void startElement(int nameCode,
                          org.xml.sax.Attributes attributes,
                          int[] namespaces,
                          int nscount)
                            throws javax.xml.transform.TransformerException

      Process start element events.
      Overrides:
        `startElement` in class `CopyEmitter`
      Throws:
        `javax.xml.transform.TransformerException`

    - #### skipThisElement

          protected boolean skipThisElement(int nameCode)

      Protect the outer-most block wrapper.

      Open elements in the result tree fragment are closed and reopened around callouts (so that callouts don't appear inside links or other environments). But if the result tree fragment is a single block (a div or pre in HTML, an fo:block in FO), that outer-most block is treated specially.

      This method returns true if the element in question is that outermost block.

      Parameters:
        `nameCode` - The name code for the element
      Returns:
        True if the element is the outer-most block, false otherwise.