diff options
author | Paul Phillips <paulp@improving.org> | 2010-09-17 00:16:18 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-09-17 00:16:18 +0000 |
commit | 4fe2d213ce613cf88d30b7ff1285cd74d4e32942 (patch) | |
tree | dae0ad3cd65583970b23c9a8bbd79956964e3da6 | |
parent | 003bd3adee88b177dd18594f03695afe7db21261 (diff) | |
download | scala-4fe2d213ce613cf88d30b7ff1285cd74d4e32942.tar.gz scala-4fe2d213ce613cf88d30b7ff1285cd74d4e32942.tar.bz2 scala-4fe2d213ce613cf88d30b7ff1285cd74d4e32942.zip |
Modified XMLEventReader to write dummy <ignore/...
Modified XMLEventReader to write dummy <ignore/> tag only once.
Contributed by Jean-Laurent Huynh, reviewed by extempore. Closes #3840.
-rwxr-xr-x[-rw-r--r--] | src/library/scala/xml/pull/XMLEventReader.scala | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/library/scala/xml/pull/XMLEventReader.scala b/src/library/scala/xml/pull/XMLEventReader.scala index fa428a440f..d51202f2d8 100644..100755 --- a/src/library/scala/xml/pull/XMLEventReader.scala +++ b/src/library/scala/xml/pull/XMLEventReader.scala @@ -57,6 +57,8 @@ class XMLEventReader(src: Source) extends ProducerConsumerIterator[XMLEvent] private class Parser(val input: Source) extends MarkupHandler with MarkupParser with ExternalSources with Runnable { val preserveWS = XMLEventReader.this.preserveWS + // track level for elem memory usage optimization + private var level = 0 // this is Parser's way to add to the queue - the odd return type // is to conform to MarkupHandler's interface @@ -66,14 +68,19 @@ class XMLEventReader(src: Source) extends ProducerConsumerIterator[XMLEvent] } override def elemStart(pos: Int, pre: String, label: String, attrs: MetaData, scope: NamespaceBinding) { + level += 1 setEvent(EvElemStart(pre, label, attrs, scope)) } override def elemEnd(pos: Int, pre: String, label: String) { setEvent(EvElemEnd(pre, label)) + level -= 1 } // this is a dummy to satisfy MarkupHandler's API - final def elem(pos: Int, pre: String, label: String, attrs: MetaData, pscope: NamespaceBinding, nodes: NodeSeq): NodeSeq = <ignore/> + // memory usage optimization return one <ignore/> for top level to satisfy MarkupParser.document() otherwise NodeSeq.Empty + private var ignoreWritten = false + final def elem(pos: Int, pre: String, label: String, attrs: MetaData, pscope: NamespaceBinding, nodes: NodeSeq): NodeSeq = + if (level == 1 && !ignoreWritten) {ignoreWritten = true; <ignore/> } else NodeSeq.Empty def procInstr(pos: Int, target: String, txt: String) = setEvent(EvProcInstr(target, txt)) def comment(pos: Int, txt: String) = setEvent(EvComment(txt)) |