<?xml version="1.0" encoding="UTF-8" ?> | |
<!-- | |
TODO docs | |
--> | |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" | |
elementFormDefault="qualified"> | |
<xs:element name="tokenAutomaton" type="tokenAutomatonElementType"/> | |
<xs:simpleType name="cppIdentifierType"> | |
<xs:restriction base="xs:string"> | |
<xs:pattern value="[a-zA-Z_][a-zA-Z0-9_]*"/> | |
</xs:restriction> | |
</xs:simpleType> | |
<xs:simpleType name="filenameType"> | |
<xs:restriction base="xs:string"> | |
<!-- At least one character. --> | |
<xs:pattern value=".+"/> | |
</xs:restriction> | |
</xs:simpleType> | |
<xs:simpleType name="scopeType"> | |
<xs:restriction base="xs:string"> | |
<xs:enumeration value="protected"/> | |
<xs:enumeration value="public"/> | |
</xs:restriction> | |
</xs:simpleType> | |
<xs:complexType name="tokenAutomatonElementType"> | |
<xs:sequence> | |
<xs:element name="tokens" minOccurs="1" maxOccurs="1" type="tokensElementType"> | |
<!-- Each token name (the enum name), must be unique. --> | |
<xs:unique name="tokenNames"> | |
<xs:selector xpath="token"/> | |
<xs:field xpath="@name"/> | |
</xs:unique> | |
<!-- Each string must be unique, otherwise one string can map to two or | |
more enums. --> | |
<xs:unique name="tokenValues"> | |
<xs:selector xpath="token"/> | |
<xs:field xpath="."/> | |
</xs:unique> | |
</xs:element> | |
<xs:element name="boilerplate" minOccurs="0" maxOccurs="1" type="boilerplateElementType"/> | |
</xs:sequence> | |
<xs:attribute name="className" type="cppIdentifierType"/> | |
<xs:attribute name="includeGuardName" type="cppIdentifierType"/> | |
<xs:attribute name="headerFile" type="filenameType" use="required"/> | |
<xs:attribute name="namespace" type="cppIdentifierType" use="optional"/> | |
<xs:attribute name="sourceFile" type="filenameType" use="required"/> | |
<xs:attribute name="scope" type="scopeType" use="required"/> | |
<xs:attribute name="defaultToken" type="cppIdentifierType" use="required"/> | |
<xs:attribute name="hasToString" type="xs:boolean" use="required"/> | |
<xs:attribute name="tokenEnum" type="cppIdentifierType" use="required"/> | |
</xs:complexType> | |
<xs:complexType name="tokensElementType"> | |
<xs:sequence> | |
<xs:element name="token" maxOccurs="unbounded" type="tokenElementType" minOccurs="1"/> | |
</xs:sequence> | |
</xs:complexType> | |
<xs:complexType name="tokenElementType"> | |
<xs:simpleContent> | |
<xs:extension base="xs:string"> | |
<xs:attribute name="name" use="optional" type="cppIdentifierType"/> | |
</xs:extension> | |
</xs:simpleContent> | |
</xs:complexType> | |
<xs:complexType name="boilerplateElementType"> | |
<xs:sequence> | |
<xs:element name="prolog" maxOccurs="1" type="prologElementType" minOccurs="1"/> | |
</xs:sequence> | |
</xs:complexType> | |
<xs:complexType name="prologElementType"> | |
<xs:simpleContent> | |
<xs:extension base="xs:string"/> | |
</xs:simpleContent> | |
</xs:complexType> | |
</xs:schema> | |
<!-- | |
vim: et:ts=4:sw=4:sts=4 | |
--> |