summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-06-14 16:43:08 +0000
committerburaq <buraq@epfl.ch>2003-06-14 16:43:08 +0000
commit8cfce062de540c2ff849e9fa2463dd77d1b7ecde (patch)
treee0ab4ef0ccec3b0daf75b3e6d4868959ee0f5686 /sources
parent05deaeec7451b77a437d92c07a6e87441b1a68c5 (diff)
downloadscala-8cfce062de540c2ff849e9fa2463dd77d1b7ecde.tar.gz
scala-8cfce062de540c2ff849e9fa2463dd77d1b7ecde.tar.bz2
scala-8cfce062de540c2ff849e9fa2463dd77d1b7ecde.zip
comments, cleanup
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/xml/DeclToScala.java35
-rw-r--r--sources/scala/xml/dtd2scala.java179
2 files changed, 198 insertions, 16 deletions
diff --git a/sources/scala/xml/DeclToScala.java b/sources/scala/xml/DeclToScala.java
index 7eeb9538b1..07343ace6e 100644
--- a/sources/scala/xml/DeclToScala.java
+++ b/sources/scala/xml/DeclToScala.java
@@ -24,13 +24,13 @@ public class DeclToScala {
static final String ATTRIB_T = "scala.Map[String,String]";
static final String CHILDREN_VALDEF =
-"val _ch:SeqList[Element] = if( children == null ) { scala.SeqNil[Element] } else children ;";
+"val _ch:List[Element] = if( children == null ) { scala.Nil[Element] } else children ;";
static final String CHILDREN_SEQ = "children";
- static final String CHILDREN_T = "scala.SeqList[Element]";
+ static final String CHILDREN_T = "scala.List[Element]";
static final String RAW_NAME_DEF = "def getName:String = ";
- static final String GET_CHILDREN_DEF = "def getChildren:scala.SeqList[Element] = _ch ;";
+ static final String GET_CHILDREN_DEF = "def getChildren:scala.List[Element] = _ch ;";
static final String GET_ATTRIBS_DEF = "def getAttribs:scala.Map[String,String] = _at ;";
static final int IND_STEP = 5;
@@ -56,9 +56,9 @@ public class DeclToScala {
public void begin() {
fOut.println( "// this file is generated from a DTD");
- fOut.print( "module " );
+ fOut.print( "object " );
fOut.print( moduleName );
- fOut.println(" with {");
+ fOut.println(" {");
fIndent = IND_STEP;
printIndent();
fOut.println("import scala.xml ;");
@@ -92,24 +92,27 @@ public class DeclToScala {
printIndent();
+ /* // DISABLED
// convenience ! overloaded constructors, have to appear *before*
// the class def and need the "final" modifier
- fOut.println( "final def "+clazzName+"(ch:SeqList[Element]):"+clazzName+" = new "+clazzName+"( null[scala.Map[String,String]], ch ) ;" );
+ fOut.println( "final def "+clazzName+"(ch:List[Element]):"+clazzName+" = new "+clazzName+"( null[scala.Map[String,String]], ch ) ;" );
printIndent();
- fOut.println( "final def "+clazzName+"( el:Element ):"+clazzName+" = new "+clazzName+"( null[scala.Map[String,String]], el::SeqNil[Element] ) ;" );
+ fOut.println( "final def "+clazzName+"( el:Element ):"+clazzName+" = new "+clazzName+"( null[scala.Map[String,String]], el::Nil[Element] ) ;" );
printIndent();
// might contain text
if( decl.contentModel.indexOf("#PCDATA") != -1 ) {
- fOut.println( "final def "+clazzName+"( text:String ):"+clazzName+" = new "+clazzName+"( null[scala.Map[String,String]], PCDATA( text )::SeqNil[Element] ) ;" );
- printIndent();
+ fOut.println( "final def "+clazzName+"( text:String ):"+clazzName+" = new "+clazzName+"( null[scala.Map[String,String]], PCDATA( text )::Nil[Element] ) ;" );
+ printIndent();
}
+ */
+
fOut.print( "case class " );
fOut.print( clazzName );
@@ -120,7 +123,7 @@ public class DeclToScala {
fOut.print( CHILDREN_SEQ ); fOut.print(':'); fOut.print( CHILDREN_T );
fOut.print(')');
- fOut.println(" extends Element with {");
+ fOut.println(" extends Element {");
fIndent += IND_STEP ;
printIndent();
@@ -180,11 +183,11 @@ public class DeclToScala {
printIndent();
fOut.println(
-"val _factory: scala.Map[String, (scala.Map[String,String],scala.SeqList[Element])Element] = {");
+"val _factory: scala.Map[String, (scala.Map[String,String],scala.List[Element])=>Element] = {");
fIndent += IND_STEP;
printIndent();
fOut.println(
-"val res = new scala.HashMap[String,(scala.Map[String,String],scala.SeqList[Element])Element] ;");
+"val res = new scala.HashMap[String,(scala.Map[String,String],scala.List[Element])=>Element] ;");
for(Iterator it = elemMap.keySet().iterator(); it.hasNext(); ) {
ElemDecl decl = (ElemDecl) elemMap.get( it.next() );
printIndent();
@@ -217,9 +220,9 @@ public class DeclToScala {
fOut.print( "\",");
if( decl.contentModel.indexOf("#PCDATA") != -1 )
- fOut.print("True");
+ fOut.print("true");
else
- fOut.print("False");
+ fOut.print("false");
fOut.println(");");
}
@@ -245,7 +248,7 @@ public class DeclToScala {
fOut.println("def load( filename:String ):Element = {");
fIndent += IND_STEP;
printIndent();
- fOut.println("val fAdapter = new ScalaFactoryAdapter with {");
+ fOut.println("val fAdapter = new ScalaFactoryAdapter {");
fIndent += IND_STEP;
printIndent();
fOut.println("val f = _factory ;");
@@ -257,7 +260,7 @@ public class DeclToScala {
printIndent();
fOut.println("val b:scala.Object = fAdapter.loadXML( filename );");
printIndent();
- fOut.println("b.as[ Element ]");
+ fOut.println("b as Element");
printIndent();
fOut.println("};");
fIndent -= IND_STEP;
diff --git a/sources/scala/xml/dtd2scala.java b/sources/scala/xml/dtd2scala.java
new file mode 100644
index 0000000000..7f3f9e9841
--- /dev/null
+++ b/sources/scala/xml/dtd2scala.java
@@ -0,0 +1,179 @@
+package scala.xml ;
+
+import org.xml.sax.SAXParseException;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.XMLReaderFactory;
+import org.xml.sax.Attributes;
+import org.xml.sax.ext.DeclHandler;
+
+import java.util.Map ;
+import java.util.HashMap ;
+import java.util.TreeMap ;
+import java.util.Iterator ;
+
+import XMLDecl.* ;
+
+/** 2 do :
+ - use DTD Handler to get the name of the DTD, use this as module name
+ - handle modes of attributes (add #REQUIRED ones, fill in default of #IMPLIED)
+ - allow package prefix to be given !
+ - allow output directory to be given !
+*/
+
+public class dtd2scala extends DefaultHandler implements DeclHandler {
+
+ static final String
+ DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser" ;
+
+ public Map elemMap; // elementName -> elementDecl
+
+ public dtd2scala() {
+ elemMap = new HashMap();
+ }
+
+ // DTDHandler methods
+
+ /** encountered element declaration */
+ public void elementDecl(String name, String contentModel)
+ throws SAXException {
+
+ ElemDecl decl = (ElemDecl) elemMap.get( name );
+
+ if( decl == null )
+ elemMap.put( name, decl = new ElemDecl( name,
+ contentModel,
+ new HashMap() ));
+ else
+ decl.contentModel = contentModel;
+
+ } // elementDecl(String,String)
+
+ /** encountered attribute declaration. */
+ public void attributeDecl(String elementName,
+ String attributeName,
+ String type,
+ String valueDefault,
+ String value) throws SAXException {
+ Map attribs;
+
+ ElemDecl decl = (ElemDecl) elemMap.get( elementName );
+
+ if( decl == null )
+ {
+ attribs = new TreeMap();
+ elemMap.put( elementName,
+ decl = new ElemDecl( elementName,
+ null,
+ attribs ));
+ }
+ else
+ attribs = decl.attribs;
+
+
+ attribs.put( attributeName, new AttrDecl(attributeName,
+ type ));
+
+ } // attributeDecl(String,String,String,String,String)
+
+
+ /** Internal entity declaration. */
+ public void internalEntityDecl(String name, String text)
+ throws SAXException {
+ // ignore
+ }
+
+ /** External entity declaration. */
+ public void externalEntityDecl(String name,
+ String publicId,
+ String systemId)
+ throws SAXException {
+ // ignore
+ }
+
+ /** main method. parses dtd of doc with <sysID> and translates to scala case class definitions.
+ * definitions are printed to stdout.
+ * @argv two parameters, sysID and object name
+ */
+
+ public static void main(String[] argv) throws Exception {
+
+ if( argv.length != 2 )
+ {
+ usage();
+ }
+ else
+ {
+ String sysID = argv[ 0 ];
+ dtd2scala myH = new dtd2scala();
+
+ XMLReader parser =
+ XMLReaderFactory.createXMLReader( DEFAULT_PARSER_NAME );
+
+ try {
+ parser.setProperty("http://xml.org/sax/properties/declaration-handler", myH);
+ }
+ catch (SAXException e) {
+ e.printStackTrace(System.err);
+ }
+
+ try {
+ parser.parse( sysID ); // parse doc
+ }
+ catch (SAXParseException e) {
+
+ System.err.println("SaxParseEx");
+ e.printStackTrace( System.err );
+
+ }
+ catch (Exception e) {
+ System.err.println("error: Parse error occurred - "+e.getMessage());
+ if (e instanceof SAXException) {
+ e = ((SAXException)e).getException();
+ }
+ e.printStackTrace(System.err);
+ }
+
+ // myH.print(); // DEBUG
+
+ // instantiate translator
+ DeclToScala translate = new DeclToScala( argv[ 1 ] );
+
+ // translate
+ translate.toScala( myH.elemMap );
+ }
+
+ } // main
+
+ public static void usage() {
+ System.out.println("usage: dtd2scala <sysID> <object name>");
+ System.out.println("<sysID> is a system ID of an XML document which has a DTD.");
+ System.out.println("<object name> is the name of the resulting SCALA object that contains the class definitions.");
+
+ }
+ /*
+
+ // for debugging
+
+ public void print() {
+ for(Iterator it = elemMap.keySet().iterator(); it.hasNext(); ) {
+ ElemDecl decl = (ElemDecl) elemMap.get( it.next() );
+ System.out.print(decl.name);
+ AttrDecl adecl = null;
+ System.out.print("{");
+ for(Iterator it2 = decl.attribs.keySet().iterator();
+ it2.hasNext(); ) {
+ if(adecl != null)
+ System.out.print(",");
+ adecl = (AttrDecl) decl.attribs.get( it2.next() );
+ System.out.print(adecl.name+":"+adecl.type);
+ }
+ System.out.println("}");
+ }
+
+
+ }
+ */
+
+} // class MyDTDHandler