summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-11-17 11:11:39 +0000
committerburaq <buraq@epfl.ch>2003-11-17 11:11:39 +0000
commit012bb630428536e62cddc2f6f4da379cd4162d4c (patch)
tree83dcba17b8d60feccd8c2cba28eb324f3ddf6da4 /sources
parent4cf8078dabdf96dd47b512b928ef77ebac2d2a93 (diff)
downloadscala-012bb630428536e62cddc2f6f4da379cd4162d4c.tar.gz
scala-012bb630428536e62cddc2f6f4da379cd4162d4c.tar.bz2
scala-012bb630428536e62cddc2f6f4da379cd4162d4c.zip
param binding in dtd2scala with an xml object t...
param binding in dtd2scala with an xml object template
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/dtd2scala/DeclToScala.scala2
-rw-r--r--sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml85
2 files changed, 86 insertions, 1 deletions
diff --git a/sources/scala/tools/dtd2scala/DeclToScala.scala b/sources/scala/tools/dtd2scala/DeclToScala.scala
index f5c8191159..eb4972cc7b 100644
--- a/sources/scala/tools/dtd2scala/DeclToScala.scala
+++ b/sources/scala/tools/dtd2scala/DeclToScala.scala
@@ -21,7 +21,7 @@ class DeclToScala(fOut:PrintWriter,
val objectName : String = "myXML"; /* DEFAULT MODULE NAME */
val package_ : String = "";
val compress : boolean = true;
- final val tmplFile = "scala/tools/dtd2scala/template/CommentTemplate.scala.xml";
+ final val tmplFile = "scala/tools/dtd2scala/template/ObjectTemplate.scala.xml";
final val tmpl:Node = XML.load( ClassLoader.getSystemResource(tmplFile) );
val lookup : HashMap[String,String] = new HashMap[String,String]();
diff --git a/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml b/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml
new file mode 100644
index 0000000000..52a6ce567c
--- /dev/null
+++ b/sources/scala/tools/dtd2scala/template/ObjectTemplate.scala.xml
@@ -0,0 +1,85 @@
+<!DOCTYPE template [
+ <!ENTITY elementName '<string ref="elementName"/>'>
+ <!ENTITY qElementName '<qstring ref="elementName"/>'>
+ <!ENTITY ccElementName '<ccstring ref="elementName"/>'>
+ <!ENTITY elementContentModel '<string ref="elementContentModel"/>'>
+ <!ENTITY attributeName '<string ref="attributeName"/>'>
+ <!ENTITY qAttributeName '<qstring ref="attributeName"/>'>
+ <!ENTITY ccAttributeName '<ccstring ref="attributeName"/>'>
+ <!ENTITY space '<![CDATA[ ]]>'>
+ <!ENTITY br '<br/>'>
+]>
+<!-- generalize to abstract syntax instead of concrete ? -->
+<!-- the formatting should be done by a code beautifier -->
+<template>
+ /* this file is generated from a DTD using ObjectTemplate.scala.xml */
+ <br/>
+ <!-- package/ -->
+import scala.xml._ ;&br;
+import scala.collection.Map ;<br/>
+import scala.collection.mutable.HashMap ;<br/>
+ <br/>
+ /** the following elements are bound
+ <elementBinding>
+ * &elementName; : &elementContentModel; {
+ <attributeBinding>&attributeName;</attributeBinding>
+ }
+ </elementBinding>
+ **/
+ <br/>
+ object <string ref="objectName"/> {<inc/><br/>
+
+ type childrenT = scala.Seq[scala.xml.Node];
+ type attribMapT = HashMap[String,String];<br/>
+ type NodeConstructorType = (childrenT,attribMapT) =&gt; scala.xml.Node;<br/>
+
+ <elementBinding>
+ def constr_&ccElementName;( ch:childrenT, attrs:attribMapT ) =
+ new &ccElementName;(ch:_*) {
+ <attributeAssign>
+ override def attributes = attrs;
+ override val &ccAttributeName; = attrs.get(&qAttributeName;);
+ </attributeAssign>
+ };
+ case class &ccElementName;( ch:Node* ) extends scala.xml.Node {<inc/><br/>
+ def label = &qElementName;; <br/>
+ def children = ch;<br/>
+ def attributes : Map[String,String] = null; /*o'ridden at parse time */<br/>
+ val attribHashCode: int = 0 ; /* overridden at parse time */<br/>
+ <attributeBinding>
+ val &ccAttributeName; : scala.Option[String] = scala.None;
+ /* overridden at parse time */
+ </attributeBinding><dec/><br/>
+ }
+ </elementBinding>
+ <br/>
+
+ def load( filename:String ):Node =
+ load( filename, <string ref="compressDefault"/> );<br/>
+<br/>
+ def load( filename:String, _compress:boolean ):scala.xml.Node = {<inc/><br/>
+
+ val fAdapter = new BindingFactoryAdapter {<inc/><br/>
+
+ val f = { <inc/><br/>
+ val res = new HashMap[String, NodeConstructorType] ;<br/>
+ <elementBinding>
+ res.update( &qElementName;,
+ (x:childrenT,aMap:attribMapT) => constr_&ccElementName;(x,aMap));
+ </elementBinding><br/>
+ res;<dec/><br/>
+ }<br/>
+
+ val g = { <inc/><br/>
+ val res = new HashMap[scala.String, boolean] ;
+ <elementBinding>
+ res.update( &qElementName;, <string ref="elementContainsText"/>);<br/>
+ </elementBinding><br/>
+ res;<dec/><br/>
+ }<br/>
+ val compress = _compress ; <dec/><br/>
+ };<dec/><br/>
+ fAdapter.loadXML( filename );<br/>
+ };<dec/><br/>
+}
+</template>