diff options
author | buraq <buraq@epfl.ch> | 2004-07-27 15:51:44 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2004-07-27 15:51:44 +0000 |
commit | d2f969bff54a623defd1482c848aaae68ebfb765 (patch) | |
tree | 9cd443fe0828edd08865218dcd2253a4c80042be /sources | |
parent | 37742d3e76bf90be9e7f5d2d452cbfc2651e8e95 (diff) | |
download | scala-d2f969bff54a623defd1482c848aaae68ebfb765.tar.gz scala-d2f969bff54a623defd1482c848aaae68ebfb765.tar.bz2 scala-d2f969bff54a623defd1482c848aaae68ebfb765.zip |
fix
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scala/xml/parsing/MarkupParser.scala | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/sources/scala/xml/parsing/MarkupParser.scala b/sources/scala/xml/parsing/MarkupParser.scala index e5982a6930..bab7a5b67e 100644 --- a/sources/scala/xml/parsing/MarkupParser.scala +++ b/sources/scala/xml/parsing/MarkupParser.scala @@ -39,10 +39,10 @@ abstract class MarkupParser[MarkupType] { /** append Unicode character to name buffer*/ protected def putChar(c: Char) = cbuf.append(c); - protected var aMap: mutable.Map[String,AttribValue] = - new mutable.HashMap[String,AttribValue]; + protected var aMap: mutable.Map[String,AttribValue] = _; final val noChildren = new mutable.ListBuffer[MarkupType]; + final val noAttribs = new mutable.HashMap[String, AttribValue]; //var xEmbeddedBlock = false; @@ -84,7 +84,7 @@ abstract class MarkupParser[MarkupType] { * | `{` scalablock `}` */ def xAttributes = { - aMap.clear; + val aMap = new mutable.HashMap[String,AttribValue]; while( xml.Parsing.isNameStart( ch )) { val key = xName; xEQ; @@ -136,13 +136,17 @@ abstract class MarkupParser[MarkupType] { * [40] STag ::= '<' Name { S Attribute } [S] * [44] EmptyElemTag ::= '<' Name { S Attribute } [S] */ - protected def xTag: String = { + protected def xTag: Pair[String, mutable.Map[String,AttribValue]] = { val elemqName = xName; + xSpaceOpt; - if(xml.Parsing.isNameStart( ch )) { - xAttributes; - } - elemqName; + val aMap: mutable.Map[String,AttribValue] = + if(xml.Parsing.isNameStart( ch )) { + xAttributes; + } else { + noAttribs + }; + Pair(elemqName, aMap); } /** [42] '<' xmlEndTag ::= '<' '/' Name S? '>' @@ -264,7 +268,7 @@ abstract class MarkupParser[MarkupType] { nextch; ts.appendAll(xProcInstr); case _ => - ts.appendAll(element); // child + ts.appendAll(element1); // child } case '{' => @@ -298,15 +302,18 @@ abstract class MarkupParser[MarkupType] { ts } /* end content */ + def element: Iterable[MarkupType] = { + xToken('<'); + element1 + } + /** '<' element ::= xmlTag1 '>' { xmlExpr | '{' simpleExpr '}' } ETag * | xmlTag1 '/' '>' */ - def element: Iterable[MarkupType] = { - xSpaceOpt; // @todo: move this to init - xToken('<'); + def element1: Iterable[MarkupType] = { var pref: Map[String, String] = _; var pos1 = pos; - val qname = xTag; + val Pair(qname, aMap) = xTag; val ts: mutable.Buffer[MarkupType] = { if(ch == '/') { // empty element xToken('/'); |