class ConstructingParser extends ConstructingHandler with ExternalSources with MarkupParser

An xml parser. parses XML and invokes callback methods of a MarkupHandler. Don't forget to call next.ch on a freshly instantiated parser in order to initialize it. If you get the parser from the object method, initialization is already done for you.

object parseFromURL {
  def main(args: Array[String]) {
    val url = args(0)
    val src = scala.io.Source.fromURL(url)
    val cpa = scala.xml.parsing.ConstructingParser.fromSource(src, false) // fromSource initializes automatically
    val doc = cpa.document()

    // let's see what it is
    val ppr = new scala.xml.PrettyPrinter(80, 5)
    val ele = doc.docElem
    println("finished parsing")
    val out = ppr.format(ele)
    println(out)
  }
}
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ConstructingParser
  2. MarkupParser
  3. MarkupParserCommon
  4. TokenTests
  5. ExternalSources
  6. ConstructingHandler
  7. MarkupHandler
  8. AnyRef
  9. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ConstructingParser(input: Source, preserveWS: Boolean)

Type Members

  1. type AttributesType = (MetaData, NamespaceBinding)
    Definition Classes
    MarkupParser → MarkupParserCommon
  2. type ElementType = NodeSeq
    Definition Classes
    MarkupParser → MarkupParserCommon
  3. type InputType = Source
    Definition Classes
    MarkupParser → MarkupParserCommon
  4. type NamespaceType = NamespaceBinding
    Definition Classes
    MarkupParser → MarkupParserCommon
  5. type PositionType = Int
    Definition Classes
    MarkupParser → MarkupParserCommon

Value Members

  1. def appendText(pos: Int, ts: NodeBuffer, txt: String): Unit
    Definition Classes
    MarkupParser
  2. def attListDecl(name: String, attList: List[AttrDecl]): Unit
    Definition Classes
    MarkupHandler
  3. def attrDecl(): Unit

    <! attlist := ATTLIST
    Definition Classes
    MarkupParser
  4. def ch: Char

    The library and compiler parsers had the interesting distinction of different behavior for nextch (a function for which there are a total of two plausible behaviors, so we know the design space was fully explored.) One of them returned the value of nextch before the increment and one of them the new value.

    The library and compiler parsers had the interesting distinction of different behavior for nextch (a function for which there are a total of two plausible behaviors, so we know the design space was fully explored.) One of them returned the value of nextch before the increment and one of them the new value. So to unify code we have to at least temporarily abstract over the nextchs.

    Definition Classes
    MarkupParser → MarkupParserCommon
  5. def checkPubID(s: String): Boolean
    Definition Classes
    TokenTests
  6. def checkSysID(s: String): Boolean
    Definition Classes
    TokenTests
  7. def comment(pos: Int, txt: String): Comment

    callback method invoked by MarkupParser after parsing comment.

    callback method invoked by MarkupParser after parsing comment.

    Definition Classes
    ConstructingHandlerMarkupHandler
  8. def content(pscope: NamespaceBinding): NodeSeq

    content1 ::=  '<' content1 | '&' charref ...
    Definition Classes
    MarkupParser
  9. def content1(pscope: NamespaceBinding, ts: NodeBuffer): Unit

    '<' content1 ::=  ...
    Definition Classes
    MarkupParser
  10. var decls: List[Decl]
    Definition Classes
    MarkupHandler
  11. def document(): Document

    [22]     prolog      ::= XMLDecl? Misc* (doctypedecl Misc*)?
    [23]     XMLDecl     ::= ' VersionInfo EncodingDecl? SDDecl? S? '?>'
    [24]     VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"')
    [25]     Eq          ::= S? '=' S?
    [26]     VersionNum  ::= '1.0'
    [27]     Misc        ::= Comment | PI | S
    Definition Classes
    MarkupParser
  12. val dtd: DTD
    Definition Classes
    MarkupParser
  13. def elem(pos: Int, pre: String, label: String, attrs: MetaData, pscope: NamespaceBinding, empty: Boolean, nodes: NodeSeq): NodeSeq

    callback method invoked by MarkupParser after parsing an element, between the elemStart and elemEnd callbacks

    callback method invoked by MarkupParser after parsing an element, between the elemStart and elemEnd callbacks

    pos

    the position in the source file

    pre

    the prefix

    label

    the local name

    attrs

    the attributes (metadata)

    empty

    true if the element was previously empty; false otherwise.

    Definition Classes
    ConstructingHandlerMarkupHandler
  14. def elemDecl(n: String, cmstr: String): Unit
    Definition Classes
    MarkupHandler
  15. def elemEnd(pos: Int, pre: String, label: String): Unit

    callback method invoked by MarkupParser after end-tag of element.

    callback method invoked by MarkupParser after end-tag of element.

    pos

    the position in the source file

    pre

    the prefix

    label

    the local name

    Definition Classes
    MarkupHandler
  16. def elemStart(pos: Int, pre: String, label: String, attrs: MetaData, scope: NamespaceBinding): Unit

    callback method invoked by MarkupParser after start-tag of element.

    callback method invoked by MarkupParser after start-tag of element.

    pos

    the position in the sourcefile

    pre

    the prefix

    label

    the local name

    attrs

    the attributes (metadata)

    Definition Classes
    MarkupHandler
  17. def element(pscope: NamespaceBinding): NodeSeq
    Definition Classes
    MarkupParser
  18. def element1(pscope: NamespaceBinding): NodeSeq

    '<' element ::= xmlTag1 '>'  { xmlExpr | '{' simpleExpr '}' } ETag
                 | xmlTag1 '/' '>'
    Definition Classes
    MarkupParser
  19. def elementDecl(): Unit

    <! element := ELEMENT

    <! element := ELEMENT

    Definition Classes
    MarkupParser
  20. def endDTD(n: String): Unit
    Definition Classes
    MarkupHandler
  21. var ent: Map[String, EntityDecl]
    Definition Classes
    MarkupHandler
  22. def entityDecl(): Unit

    <! element := ELEMENT
    Definition Classes
    MarkupParser
  23. def entityRef(pos: Int, n: String): EntityRef

    callback method invoked by MarkupParser after parsing entity ref.

    callback method invoked by MarkupParser after parsing entity ref.

    Definition Classes
    ConstructingHandlerMarkupHandler
    To do

    expanding entity references

  24. def eof: Boolean
    Definition Classes
    MarkupParser → MarkupParserCommon
  25. def errorNoEnd(tag: String): Nothing
    Definition Classes
    MarkupParser → MarkupParserCommon
  26. val extIndex: Int
    Definition Classes
    MarkupParser
  27. def extSubset(): Unit
    Definition Classes
    MarkupParser
  28. def externalID(): ExternalID

    externalID ::= SYSTEM S syslit
                   PUBLIC S pubid S syslit
    Definition Classes
    MarkupParser
  29. def externalSource(systemId: String): Source
    Definition Classes
    ExternalSources
  30. def initialize: ConstructingParser.this.type

    As the current code requires you to call nextch once manually after construction, this method formalizes that suboptimal reality.

    As the current code requires you to call nextch once manually after construction, this method formalizes that suboptimal reality.

    Definition Classes
    MarkupParser
  31. val inpStack: List[Source]

    stack of inputs

    stack of inputs

    Definition Classes
    MarkupParser
  32. val input: Source
    Definition Classes
    ConstructingParserMarkupParser
  33. def intSubset(): Unit

    "rec-xml/#ExtSubset" pe references may not occur within markup declarations

    "rec-xml/#ExtSubset" pe references may not occur within markup declarations

    Definition Classes
    MarkupParser
  34. def isAlpha(c: Char): Boolean

    These are 99% sure to be redundant but refactoring on the safe side.

    These are 99% sure to be redundant but refactoring on the safe side.

    Definition Classes
    TokenTests
  35. def isAlphaDigit(c: Char): Boolean
    Definition Classes
    TokenTests
  36. def isName(s: String): Boolean

    Name ::= ( Letter | '_' ) (NameChar)*

    See [5] of XML 1.0 specification.

    Definition Classes
    TokenTests
  37. def isNameChar(ch: Char): Boolean

    NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
               | CombiningChar | Extender

    See [4] and Appendix B of XML 1.0 specification.

    Definition Classes
    TokenTests
  38. def isNameStart(ch: Char): Boolean

    NameStart ::= ( Letter | '_' )

    where Letter means in one of the Unicode general categories { Ll, Lu, Lo, Lt, Nl }.

    We do not allow a name to start with :. See [3] and Appendix B of XML 1.0 specification

    Definition Classes
    TokenTests
  39. def isPubIDChar(ch: Char): Boolean
    Definition Classes
    TokenTests
  40. final def isSpace(cs: Seq[Char]): Boolean

    (#x20 | #x9 | #xD | #xA)+
    Definition Classes
    TokenTests
  41. final def isSpace(ch: Char): Boolean

    (#x20 | #x9 | #xD | #xA)
    Definition Classes
    TokenTests
  42. def isValidIANAEncoding(ianaEncoding: Seq[Char]): Boolean

    Returns true if the encoding name is a valid IANA encoding.

    Returns true if the encoding name is a valid IANA encoding. This method does not verify that there is a decoder available for this encoding, only that the characters are valid for an IANA encoding name.

    ianaEncoding

    The IANA encoding name.

    Definition Classes
    TokenTests
  43. val isValidating: Boolean

    returns true is this markup handler is validating

    returns true is this markup handler is validating

    Definition Classes
    MarkupHandler
  44. val lastChRead: Char
    Definition Classes
    MarkupParser
  45. def lookahead(): BufferedIterator[Char]

    Create a lookahead reader which does not influence the input

    Create a lookahead reader which does not influence the input

    Definition Classes
    MarkupParser → MarkupParserCommon
  46. def lookupElemDecl(Label: String): ElemDecl
    Definition Classes
    MarkupHandler
  47. def markupDecl(): Unit
    Definition Classes
    MarkupParser
  48. def markupDecl1(): Any
    Definition Classes
    MarkupParser
  49. def mkAttributes(name: String, pscope: NamespaceBinding): AttributesType
    Definition Classes
    MarkupParser → MarkupParserCommon
  50. def mkProcInstr(position: Int, name: String, text: String): ElementType
    Definition Classes
    MarkupParser → MarkupParserCommon
  51. val nextChNeeded: Boolean

    holds the next character

    holds the next character

    Definition Classes
    MarkupParser
  52. def nextch(): Unit

    this method tells ch to get the next character when next called

    this method tells ch to get the next character when next called

    Definition Classes
    MarkupParser → MarkupParserCommon
  53. def notationDecl(): Unit

    'N' notationDecl ::= "OTATION"
    Definition Classes
    MarkupParser
  54. def notationDecl(notat: String, extID: ExternalID): Unit
    Definition Classes
    MarkupHandler
  55. def parameterEntityDecl(name: String, edef: EntityDef): Unit
    Definition Classes
    MarkupHandler
  56. def parseDTD(): Unit

    parses document type declaration and assigns it to instance variable dtd.

    parses document type declaration and assigns it to instance variable dtd.

    <! parseDTD ::= DOCTYPE name ... >
    Definition Classes
    MarkupParser
  57. def parsedEntityDecl(name: String, edef: EntityDef): Unit
    Definition Classes
    MarkupHandler
  58. def peReference(name: String): Unit
    Definition Classes
    MarkupHandler
  59. def pop(): Unit
    Definition Classes
    MarkupParser
  60. val pos: Int

    holds the position in the source file

    holds the position in the source file

    Definition Classes
    MarkupParser
  61. val preserveWS: Boolean

    if true, does not remove surplus whitespace

    if true, does not remove surplus whitespace

    Definition Classes
    ConstructingParserMarkupParserConstructingHandler
  62. def procInstr(pos: Int, target: String, txt: String): ProcInstr

    callback method invoked by MarkupParser after parsing PI.

    callback method invoked by MarkupParser after parsing PI.

    Definition Classes
    ConstructingHandlerMarkupHandler
  63. def prolog(): (Option[String], Option[String], Option[Boolean])

    <? prolog ::= xml S?
    // this is a bit more lenient than necessary...
    Definition Classes
    MarkupParser
  64. def pubidLiteral(): String

    [12]       PubidLiteral ::=        '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
    Definition Classes
    MarkupParser
  65. def push(entityName: String): Unit
    Definition Classes
    MarkupParser
  66. def pushExternal(systemId: String): Unit
    Definition Classes
    MarkupParser
  67. val reachedEof: Boolean
    Definition Classes
    MarkupParser
  68. def replacementText(entityName: String): Source
    Definition Classes
    MarkupHandler
  69. def reportSyntaxError(str: String): Unit
    Definition Classes
    MarkupParser → MarkupParserCommon
  70. def reportSyntaxError(pos: Int, str: String): Unit
    Definition Classes
    MarkupParser → MarkupParserCommon
  71. def reportValidationError(pos: Int, str: String): Unit
    Definition Classes
    MarkupParser
  72. def returning[T](x: T)(f: (T) ⇒ Unit): T

    Apply a function and return the passed value

    Apply a function and return the passed value

    Definition Classes
    MarkupParserCommon
  73. def saving[A, B](getter: A, setter: (A) ⇒ Unit)(body: ⇒ B): B

    Execute body with a variable saved and restored after execution

    Execute body with a variable saved and restored after execution

    Definition Classes
    MarkupParserCommon
  74. def systemLiteral(): String

    attribute value, terminated by either ' or ".

    attribute value, terminated by either ' or ". value may not contain <.

    AttValue     ::= `'` { _ } `'`
                   | `"` { _ } `"`
    Definition Classes
    MarkupParser
  75. def text(pos: Int, txt: String): Text

    callback method invoked by MarkupParser after parsing text.

    callback method invoked by MarkupParser after parsing text.

    Definition Classes
    ConstructingHandlerMarkupHandler
  76. def textDecl(): (Option[String], Option[String])

    prolog, but without standalone

    prolog, but without standalone

    Definition Classes
    MarkupParser
  77. val tmppos: Int

    holds temporary values of pos

    holds temporary values of pos

    Definition Classes
    MarkupParser → MarkupParserCommon
  78. def truncatedError(msg: String): Nothing
    Definition Classes
    MarkupParser → MarkupParserCommon
  79. def unparsedEntityDecl(name: String, extID: ExternalID, notat: String): Unit
    Definition Classes
    MarkupHandler
  80. def xAttributeValue(): String
    Definition Classes
    MarkupParserCommon
  81. def xAttributeValue(endCh: Char): String

    attribute value, terminated by either ' or ".

    attribute value, terminated by either ' or ". value may not contain <.

    endCh

    either ' or "

    Definition Classes
    MarkupParserCommon
  82. def xAttributes(pscope: NamespaceBinding): (MetaData, NamespaceBinding)

    parse attribute and create namespace scope, metadata

    parse attribute and create namespace scope, metadata

    [41] Attributes    ::= { S Name Eq AttValue }
    Definition Classes
    MarkupParser
  83. def xCharData: NodeSeq

    '<! CharData ::= [CDATA[ ( {char} - {char}"]]>"{char} ) ']]>'
    
    see [15]
    Definition Classes
    MarkupParser
  84. def xCharRef: String
    Definition Classes
    MarkupParserCommon
  85. def xCharRef(it: Iterator[Char]): String
    Definition Classes
    MarkupParserCommon
  86. def xCharRef(ch: () ⇒ Char, nextch: () ⇒ Unit): String

    CharRef ::= "&#" '0'..'9' {'0'..'9'} ";" | "&#x" '0'..'9'|'A'..'F'|'a'..'f' { hexdigit } ";"

    CharRef ::= "&#" '0'..'9' {'0'..'9'} ";" | "&#x" '0'..'9'|'A'..'F'|'a'..'f' { hexdigit } ";"

    see [66]

    Definition Classes
    MarkupParserCommon
  87. def xComment: NodeSeq

     Comment ::= ''
    
    see [15]
    Definition Classes
    MarkupParser
  88. def xEQ(): Unit

    scan [S] '=' [S]

    scan [S] '=' [S]

    Definition Classes
    MarkupParserCommon
  89. def xEndTag(startName: String): Unit

    [42] '<' xmlEndTag ::= '<' '/' Name S? '>'

    [42] '<' xmlEndTag ::= '<' '/' Name S? '>'

    Definition Classes
    MarkupParserCommon
  90. def xEntityValue(): String

    entity value, terminated by either ' or ".

    entity value, terminated by either ' or ". value may not contain <.

    AttValue     ::= `'` { _  } `'`
                   | `"` { _ } `"`
    Definition Classes
    MarkupParser
  91. def xHandleError(that: Char, msg: String): Unit
    Definition Classes
    MarkupParser → MarkupParserCommon
  92. def xName: String

    actually, Name ::= (Letter | '_' | ':') (NameChar)* but starting with ':' cannot happen Name ::= (Letter | '_') (NameChar)*

    actually, Name ::= (Letter | '_' | ':') (NameChar)* but starting with ':' cannot happen Name ::= (Letter | '_') (NameChar)*

    see [5] of XML 1.0 specification

    pre-condition: ch != ':' // assured by definition of XMLSTART token post-condition: name does neither start, nor end in ':'

    Definition Classes
    MarkupParserCommon
  93. def xProcInstr: ElementType

    '<?' ProcInstr ::= Name [S ({Char} - ({Char}'>?' {Char})]'?>'

    '<?' ProcInstr ::= Name [S ({Char} - ({Char}'>?' {Char})]'?>'

    see [15]

    Definition Classes
    MarkupParserCommon
  94. def xSpace(): Unit

    scan [3] S ::= (#x20 | #x9 | #xD | #xA)+

    scan [3] S ::= (#x20 | #x9 | #xD | #xA)+

    Definition Classes
    MarkupParserCommon
  95. def xSpaceOpt(): Unit

    skip optional space S?

    skip optional space S?

    Definition Classes
    MarkupParserCommon
  96. def xToken(that: Seq[Char]): Unit
    Definition Classes
    MarkupParserCommon
  97. def xToken(that: Char): Unit
    Definition Classes
    MarkupParserCommon
  98. def xmlProcInstr(): MetaData

    <? prolog ::= xml S ... ?>
    Definition Classes
    MarkupParser

Deprecated Value Members

  1. def log(msg: String): Unit
    Definition Classes
    MarkupHandler
    Annotations
    @deprecated
    Deprecated

    (Since version 2.11) This method and its usages will be removed. Use a debugger to debug code.