Skip to content

Instantly share code, notes, and snippets.

@Arcnor
Created October 3, 2016 04:57
Show Gist options
  • Save Arcnor/722d452066fc3f0dd46255f99469b96d to your computer and use it in GitHub Desktop.
Save Arcnor/722d452066fc3f0dd46255f99469b96d to your computer and use it in GitHub Desktop.
Stencyl blocks.xml schema
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="paletteType">
<xs:sequence>
<xs:element type="blockType" name="block" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="palette" type="paletteType"/>
<xs:complexType name="blockType">
<xs:sequence>
<xs:element type="fieldsType" name="fields" minOccurs="0" maxOccurs="1"/>
<xs:element type="contextType" name="context" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute type="xs:ID" name="tag" use="required">
<xs:annotation>
<xs:documentation>Valid values for tags are characters and the underscore symbol (_). Spaces are NOT valid.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute type="xs:string" name="spec" use="required">
<xs:annotation>
<xs:documentation>Like what you see in our language files, use %0, %1, etc. to specify where the spaces go</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute type="xs:string" name="code" use="required">
<xs:annotation>
<xs:documentation>Output code, use <code>~</code> to specify the blanks. Must match the order in which fields are specified.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute type="validTypes" name="type" use="required"/>
<xs:attribute type="validReturnTypes" name="returns" use="required"/>
<xs:attribute type="validColors" name="color" use="optional"/>
<xs:attribute type="xs:boolean" name="hidden" use="optional">
<xs:annotation>
<xs:documentation>If <code>true</code>, the block will not display in the palette. Used in conjunction with <code>attached-block</code></xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute type="xs:string" name="help" use="optional">
<xs:annotation>
<xs:documentation>Displayed in the bottom bar when the mouse hovers over this block.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:simpleType name="tagType">
<xs:restriction>
<xs:pattern value="[-A-Za-z]">
<xs:annotation>
<xs:documentation>Valid values for tags are characters and the underscore symbol (_). Spaces are NOT valid.</xs:documentation>
</xs:annotation>
</xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="validTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="normal"/>
<xs:enumeration value="action"/>
<xs:enumeration value="wrapper"/>
<xs:enumeration value="event"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="validReturnTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="actor"/>
<xs:enumeration value="actortype"/>
<xs:enumeration value="animation"/>
<xs:enumeration value="anything"/>
<xs:enumeration value="boolean"/>
<xs:enumeration value="color"/>
<xs:enumeration value="control"/>
<xs:enumeration value="filter"/>
<xs:enumeration value="font"/>
<xs:enumeration value="group"/>
<xs:enumeration value="image"/>
<xs:enumeration value="image-instance"/>
<xs:enumeration value="joint"/>
<xs:enumeration value="list"/>
<xs:enumeration value="map"/>
<xs:enumeration value="number"/>
<xs:enumeration value="region"/>
<xs:enumeration value="scene"/>
<xs:enumeration value="shader"/>
<xs:enumeration value="sound"/>
<xs:enumeration value="text"/>
<xs:enumeration value="void"/>
<xs:enumeration value="dropdown"/>
<xs:enumeration value="code-block"/>
<xs:enumeration value="attached-block"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="validColors">
<xs:restriction base="xs:string">
<xs:enumeration value="blue"/>
<xs:enumeration value="cyan"/>
<xs:enumeration value="green"/>
<xs:enumeration value="lime"/>
<xs:enumeration value="purple"/>
<xs:enumeration value="red"/>
<xs:enumeration value="gray"/>
<xs:enumeration value="charcoal"/>
<xs:enumeration value="yellow"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="fieldsType">
<xs:sequence>
<xs:element type="baseFieldType" name="actor" minOccurs="0"/>
<xs:element type="baseFieldType" name="actortype" minOccurs="0"/>
<xs:element type="baseFieldType" name="animation" minOccurs="0"/>
<xs:element type="baseFieldType" name="anything" minOccurs="0"/>
<xs:element type="baseFieldType" name="boolean" minOccurs="0"/>
<xs:element type="baseFieldType" name="color" minOccurs="0"/>
<xs:element type="baseFieldType" name="control" minOccurs="0"/>
<xs:element type="baseFieldType" name="filter" minOccurs="0"/>
<xs:element type="baseFieldType" name="font" minOccurs="0"/>
<xs:element type="baseFieldType" name="group" minOccurs="0"/>
<xs:element type="baseFieldType" name="image" minOccurs="0"/>
<xs:element type="baseFieldType" name="image-instance" minOccurs="0"/>
<xs:element type="baseFieldType" name="joint" minOccurs="0"/>
<xs:element type="baseFieldType" name="list" minOccurs="0"/>
<xs:element type="baseFieldType" name="map" minOccurs="0"/>
<xs:element type="baseFieldType" name="number" minOccurs="0"/>
<xs:element type="baseFieldType" name="region" minOccurs="0"/>
<xs:element type="baseFieldType" name="scene" minOccurs="0"/>
<xs:element type="baseFieldType" name="shader" minOccurs="0"/>
<xs:element type="baseFieldType" name="sound" minOccurs="0"/>
<xs:element type="baseFieldType" name="text" minOccurs="0"/>
<xs:element type="dropdownType" name="dropdown" minOccurs="0"/>
<xs:element type="baseFieldType" name="code-block" minOccurs="0"/>
<xs:element type="attachedBlockType" name="attached-block" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="baseFieldType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:nonNegativeInteger" name="order" use="optional">
<xs:annotation>
<xs:documentation>Fields are ordered using order attribute, starting at zero and incremented by 1. Don't skip numbers.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="dropdownType">
<xs:simpleContent>
<xs:extension base="baseFieldType">
<xs:sequence>
<xs:element type="choicesType" name="choices"/>
</xs:sequence>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="attachedBlockType">
<xs:simpleContent>
<xs:extension base="baseFieldType">
<xs:attribute type="xs:IDREF" name="tag" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="choicesType">
<xs:sequence>
<xs:element type="cType" name="c" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="cType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="text" use="required"/>
<xs:attribute type="xs:string" name="code" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Contexts -->
<xs:complexType name="contextType">
<xs:sequence>
<xs:element type="immediateType" name="immediate" minOccurs="0" maxOccurs="1"/>
<xs:element type="requiredImmediateType" name="requiredImmediate" minOccurs="0" maxOccurs="1"/>
<xs:element type="xs:string" name="inner" minOccurs="0" maxOccurs="1"/>
<xs:element type="xs:string" name="required" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="requiredImmediateType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="validContextTypes" name="type" use="required"/>
<xs:attribute type="xs:string" name="value" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="immediateType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="validContextTypes" name="type" use="required"/>
<xs:attribute type="xs:string" name="value" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="validContextTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="keyword">
<xs:annotation>
<xs:documentation>Arbitrary string, useful for things like "if" and "continue"</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="class">
<xs:annotation>
<xs:documentation>Fully qualified Java class name</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="has">
<xs:annotation>
<xs:documentation>g:com.stencyl.graphics.G (like a variable declaration with identifier + fully qualified class name)</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="using">
<xs:annotation>
<xs:documentation>Fully qualified Java class name</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="staticimport">
<xs:annotation>
<xs:documentation>Fully qualified Java class name</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment