Class 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 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.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 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.
    • 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.