summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2005-10-11 07:46:34 +0000
committerBurak Emir <emir@epfl.ch>2005-10-11 07:46:34 +0000
commit3632df227dcedb5f4b4dc84cbd0857ca5f194a7d (patch)
tree56866995b670826b55ad9c7d607925b22b9e9b59
parentecd89b556f04f0013bc0beeb5d9a6bbfd33c6ea0 (diff)
downloadscala-3632df227dcedb5f4b4dc84cbd0857ca5f194a7d.tar.gz
scala-3632df227dcedb5f4b4dc84cbd0857ca5f194a7d.tar.bz2
scala-3632df227dcedb5f4b4dc84cbd0857ca5f194a7d.zip
added binder class to xml/fact
VS: ----------------------------------------------------------------------
-rw-r--r--config/list/library.lst1
-rw-r--r--sources/scala/xml/factory/Binder.scala43
2 files changed, 44 insertions, 0 deletions
diff --git a/config/list/library.lst b/config/list/library.lst
index 8a492433e5..b9c6e3c8b8 100644
--- a/config/list/library.lst
+++ b/config/list/library.lst
@@ -302,6 +302,7 @@ xml/dtd/DtdTypeSymbol.scala
#xml/dtd/Validation.scala
xml/dtd/ValidationException.scala
+xml/factory/Binder.scala
xml/factory/NodeFactory.scala
xml/factory/LoggedNodeFactory.scala
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)
+ }
+}