diff options
author | Burak Emir <emir@epfl.ch> | 2005-11-30 15:16:06 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2005-11-30 15:16:06 +0000 |
commit | 81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b (patch) | |
tree | 6ed227c6d911a50525bdaf893bd128192e93d0c1 | |
parent | 06f66337c3d745164c845dfabbf17e7ec388d93d (diff) | |
download | scala-81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b.tar.gz scala-81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b.tar.bz2 scala-81592cfd532c1b857c3a3f4f6b8dd3d51a83cc0b.zip |
added xsd stuff
-rw-r--r-- | config/list/library.lst | 6 | ||||
-rw-r--r-- | sources/scala/xml/xsd/ContentModel.scala | 39 | ||||
-rw-r--r-- | sources/scala/xml/xsd/Decl.scala | 24 | ||||
-rw-r--r-- | sources/scala/xml/xsd/XsTypeSymbol.scala | 38 |
4 files changed, 104 insertions, 3 deletions
diff --git a/config/list/library.lst b/config/list/library.lst index 64e1cf4f65..e5b92dd561 100644 --- a/config/list/library.lst +++ b/config/list/library.lst @@ -393,8 +393,8 @@ xml/transform/BasicTransformer.scala xml/transform/RewriteRule.scala xml/transform/RuleTransformer.scala -#xml/xsd/Decl.scala -#xml/xsd/ContentModel.scala -#xml/xsd/XsTypeSymbol.scala +xml/xsd/Decl.scala +xml/xsd/ContentModel.scala +xml/xsd/XsTypeSymbol.scala ############################################################################## 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") {} |