diff options
author | Burak Emir <emir@epfl.ch> | 2005-10-11 07:46:34 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2005-10-11 07:46:34 +0000 |
commit | 3632df227dcedb5f4b4dc84cbd0857ca5f194a7d (patch) | |
tree | 56866995b670826b55ad9c7d607925b22b9e9b59 /sources | |
parent | ecd89b556f04f0013bc0beeb5d9a6bbfd33c6ea0 (diff) | |
download | scala-3632df227dcedb5f4b4dc84cbd0857ca5f194a7d.tar.gz scala-3632df227dcedb5f4b4dc84cbd0857ca5f194a7d.tar.bz2 scala-3632df227dcedb5f4b4dc84cbd0857ca5f194a7d.zip |
added binder class to xml/fact
VS: ----------------------------------------------------------------------
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scala/xml/factory/Binder.scala | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/sources/scala/xml/factory/Binder.scala b/sources/scala/xml/factory/Binder.scala new file mode 100644 index 0000000000..a9af7af3d3 --- /dev/null +++ b/sources/scala/xml/factory/Binder.scala @@ -0,0 +1,43 @@ +package scala.xml.factory ; + +import scala.xml.parsing.ValidatingMarkupHandler; + +abstract class Binder(val preserveWS: Boolean) extends ValidatingMarkupHandler { + + var result: NodeBuffer = new NodeBuffer(); + + def reportSyntaxError(pos:Int, str:String) = {} + + final def procInstr(pos: Int, target: String, txt: String ) = + ProcInstr(target, txt); + + final def comment(pos: Int, txt: String ) = + Comment( txt ); + + final def entityRef(pos: Int, n: String) = + EntityRef( n ); + + final def text(pos: Int, txt:String) = + Text( txt ); + + final def traverse(n:Node): Unit = n match { + case x:ProcInstr => result + procInstr(0, x.target, x.text) + case x:Comment => result + comment(0, x.text) + case x:Text => result + text(0, x.data) + case x:EntityRef => result + entityRef(0, x.entityName) + case _ => + elemStart(0, n.prefix, n.label, n.attributes, n.scope); + val old = result; + result = new NodeBuffer(); + for(val m <- n.child) + traverse(m); + result = old + elem(0, n.prefix, n.label, n.attributes, n.scope, NodeSeq.fromSeq(result)).toList; + elemEnd(0, n.prefix, n.label); + } + + final def validate(n:Node): Node = { + this.rootLabel = n.label; + traverse(n); + result(0) + } +} |