summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-11-17 11:26:02 +0000
committerburaq <buraq@epfl.ch>2003-11-17 11:26:02 +0000
commit7318a7e03d040182098505f2f764c3e836bfe883 (patch)
treedba8e2d001898ac4632379eb644d4aa607855324
parent9a63043f7cea8f46324e65a020b1bb8f85b530d4 (diff)
downloadscala-7318a7e03d040182098505f2f764c3e836bfe883.tar.gz
scala-7318a7e03d040182098505f2f764c3e836bfe883.tar.bz2
scala-7318a7e03d040182098505f2f764c3e836bfe883.zip
api change
-rw-r--r--sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala42
1 files changed, 42 insertions, 0 deletions
diff --git a/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala b/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala
new file mode 100644
index 0000000000..4abb765b13
--- /dev/null
+++ b/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala
@@ -0,0 +1,42 @@
+package scala.xml.nobinding;
+
+import java.net.URL;
+import scala.collection.mutable.HashMap ;
+import scala.xml.{Node,Text,FactoryAdapter} ;
+
+/** nobinding adaptor providing callbacks to parser to create elements.
+* implements hash-consing
+*/
+class NoBindingFactoryAdapter extends FactoryAdapter {
+
+ def nodeContainsText( label:java.lang.String ):boolean = true;
+
+ /* default behaviour is hash-consing */
+ val cache = new HashMap[Element,Element];
+
+ def createNode( label: String,
+ attrs: HashMap[String,String],
+ children: List[Node] ):Element = {
+
+ val el = new Element( Symbol( label ), children ) {
+ override val attribHashCode = attrs.toList.hashCode(); /*set eagerly*/
+ override def attributes = attrs;
+ };
+
+ cache.get( el ).match{
+ case Some(cachedElem) =>
+ System.err.println("[using cached elem +"+cachedElem.toXML+" instead of "+el.toXML+"!]");
+ cachedElem
+ case None =>
+ cache.update( el, el );
+ el
+ }
+ }
+
+ def createText( text:String ) = Text( text );
+
+ override def loadXML( url:URL ):Element = loadXML( url.getFile() );
+
+ override def loadXML( filename:String ):Element =
+ super.loadXML( filename ).asInstanceOf[ Element ]
+ }