summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2005-11-30 15:16:06 +0000
committerBurak Emir <emir@epfl.ch>2005-11-30 15:16:06 +0000
commit81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b (patch)
tree6ed227c6d911a50525bdaf893bd128192e93d0c1 /sources
parent06f66337c3d745164c845dfabbf17e7ec388d93d (diff)
downloadscala-81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b.tar.gz
scala-81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b.tar.bz2
scala-81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b.zip
added xsd stuff
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/xml/xsd/ContentModel.scala39
-rw-r--r--sources/scala/xml/xsd/Decl.scala24
-rw-r--r--sources/scala/xml/xsd/XsTypeSymbol.scala38
3 files changed, 101 insertions, 0 deletions
diff --git a/sources/scala/xml/xsd/ContentModel.scala b/sources/scala/xml/xsd/ContentModel.scala
new file mode 100644
index 0000000000..ae73162a44
--- /dev/null
+++ b/sources/scala/xml/xsd/ContentModel.scala
@@ -0,0 +1,39 @@
+package scala.xml.xsd ;
+
+import scala.util.regexp.WordExp;
+import scala.util.automata._;
+
+object ContentModel extends WordExp {
+
+ type _labelT = ElemRef;
+ type _regexpT = RegExp;
+
+ object Translator extends WordBerrySethi {
+ override val lang: ContentModel.this.type = ContentModel.this;
+ import lang._ ;
+ }
+
+ case class ElemRef(name: String) extends Label {
+ override def toString() = name;
+ }
+
+ def fromSchema(nodes:Seq[Node]): List[RegExp] =
+ nodes.foldLeft (Nil:List[RegExp]) { (list, n:Node) => fromSchema(n)::list }.reverse;
+
+ def fromSchema(node:Node): RegExp = node.label match {
+ case "sequence" => Sequ(fromSchema(node.child):_*);
+ case "choice" => Alt(fromSchema(node.child):_*);
+ case "group" => Sequ(fromSchema(node.child):_*);
+ case "element" =>
+ val name = node.attribute("name");
+ Letter(ElemRef(name)); // ouch, anonymous? references?
+ }
+}
+
+sealed abstract class ContentModel ;
+
+case class ELEMENTS(r:ContentModel.RegExp) extends ContentModel ;
+
+case class MIXED(r:ContentModel.RegExp) extends ContentModel ;
+
+case object SimpleContent extends ContentModel ;
diff --git a/sources/scala/xml/xsd/Decl.scala b/sources/scala/xml/xsd/Decl.scala
new file mode 100644
index 0000000000..42e64cdfd9
--- /dev/null
+++ b/sources/scala/xml/xsd/Decl.scala
@@ -0,0 +1,24 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2003-2005, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id$
+
+package scala.xml.xsd ;
+
+abstract class Decl ;
+
+/** name - label of the element
+ * typeName - reference to a (possibly generated) type name
+ */
+case class ElemDecl(name: String, tpe: TypeSymbol) ;
+
+case class ComplexTypeDecl(name: String, derivedFrom: DerivSym, contentModel: ContentModel) ;
+
+case class SimpleTypeDecl(name: String);
+
+abstract class xsdBuiltin(name: String) extends SimpleTypeDecl(name);
diff --git a/sources/scala/xml/xsd/XsTypeSymbol.scala b/sources/scala/xml/xsd/XsTypeSymbol.scala
new file mode 100644
index 0000000000..b553ad9f29
--- /dev/null
+++ b/sources/scala/xml/xsd/XsTypeSymbol.scala
@@ -0,0 +1,38 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2002-2005, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $id: $
+
+package scala.xml.xsd;
+
+trait XsTypeSymbol extends scala.xml.TypeSymbol ;
+
+object xsdAny extends XsTypeSymbol ;
+
+class SimpleTypeSymbol(val name: String) extends XsTypeSymbol {
+ var decl: SimpleTypeDecl = null;
+}
+
+class ComplexTypeSymbol(val name: String) extends XsTypeSymbol {
+ var decl: ComplexTypeDecl = null;
+}
+
+trait DerivSym;
+
+case class Extends(sym:XsTypeSymbol) extends DerivSym;
+
+case class Restricts(sym:XsTypeSymbol) extends DerivSym;
+
+object xsBoolean extends SimpleTypeSymbol("boolean") {}
+object xsDouble extends SimpleTypeSymbol("double") {}
+object xsFloat extends SimpleTypeSymbol("float") {}
+object xsInt extends SimpleTypeSymbol("int") {}
+object xsLong extends SimpleTypeSymbol("long") {}
+object xsShort extends SimpleTypeSymbol("short") {}
+object xsString extends SimpleTypeSymbol("string") {}
+object xsDate extends SimpleTypeSymbol("date") {}