Forked from
Alchemy Viewer / Alchemy Viewer
11463 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
llsd-lsl-syntax.rng 8.68 KiB
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="llsd">
<element name="map">
<group>
<element name="key">
<value>constants</value>
</element>
<element name="map">
<oneOrMore>
<group>
<ref name="keyString"/>
<element name="map">
<ref name="Deprecated" />
<ref name="constantTypeValue" />
<ref name="Tooltip" />
</element>
</group>
</oneOrMore>
</element>
</group>
<group>
<element name="key">
<value>controls</value>
</element>
<element name="map">
<oneOrMore>
<group>
<ref name="keyString"/>
<ref name="mapTooltip"/>
</group>
</oneOrMore>
</element>
</group>
<group>
<element name="key">
<value>events</value>
</element>
<element name="map">
<oneOrMore>
<group>
<ref name="keyString"/>
<element name="map">
<ref name="Deprecated" />
<ref name="Arguments"/>
<ref name="Tooltip"/>
</element>
</group>
</oneOrMore>
</element>
</group>
<group>
<element name="key">
<value>functions</value>
</element>
<element name="map">
<oneOrMore>
<group>
<ref name="keyString"/>
<element name="map">
<ref name="Arguments"/>
<ref name="Deprecated" />
<element name="key">
<value>energy</value>
</element>
<ref name="float"/>
<optional>
<group>
<element name="key">
<value>god-mode</value>
</element>
<element name="boolean">
<data type="boolean"/>
</element>
</group>
</optional>
<ref name="Return"/>
<element name="key">
<value>sleep</value>
</element>
<ref name="float"/>
<ref name="Tooltip"/>
</element>
</group>
</oneOrMore>
</element>
</group>
<group>
<element name="key">
<value>llsd-lsl-syntax-version</value>
</element>
<element name="integer">
<data type="integer" />
</element>
</group>
<group>
<element name="key">
<value>types</value>
</element>
<element name="map">
<oneOrMore>
<group>
<ref name="keyString"/>
<ref name="mapTooltip"/>
</group>
</oneOrMore>
</element>
</group>
</element>
</element>
</start>
<define name="Deprecated">
<optional>
<group>
<element name="key">
<value>deprecated</value>
</element>
<element name="boolean">
<data type="boolean"/>
</element>
</group>
</optional>
</define>
<define name="keyName">
<element name="key"><value>name</value></element>
<element name="string"><data type="string" /></element>
</define>
<define name="keyString">
<element name="key"><data type="string"/></element>
</define>
<define name="keyType">
<element name="key"><value>type</value></element>
</define>
<define name="typeList">
<ref name="keyType" />
<element name="string">
<choice>
<value>float</value>
<value>integer</value>
<value>key</value>
<value>list</value>
<value>rotation</value>
<value>string</value>
<value>vector</value>
</choice>
</element>
</define>
<define name="keyValue">
<element name="key"><value>value</value></element>
</define>
<define name="constantTypeValue">
<choice>
<group>
<ref name="keyType"/>
<element name="string"><value>float</value></element>
<ref name="keyValue"/>
<element name="real"><data type="float"/></element>
</group>
<group>
<ref name="keyType"/>
<element name="string"><value>integer</value></element>
<ref name="keyValue"/>
<choice>
<element name="integer"><data type="integer"/></element>
<element name="integer"><data type="string"><param name="pattern">0x[0-9A-Fa-f]+</param></data></element>
</choice>
</group>
<group>
<ref name="keyType"/>
<element name="string"><value>key</value></element>
<ref name="keyValue"/>
<element name="uuid"><data type="string"><param name="pattern">[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}</param></data></element>
</group>
<group>
<ref name="keyType"/>
<element name="string"><value>rotation</value></element>
<ref name="keyValue"/>
<element name="array">
<element name="map">
<element name="key">
<value>x</value>
</element>
<ref name="realFromMinusOneToOne"/>
</element>
<element name="map">
<element name="key">
<value>y</value>
</element>
<ref name="realFromMinusOneToOne"/>
</element>
<element name="map">
<element name="key">
<value>z</value>
</element>
<ref name="realFromMinusOneToOne"/>
</element>
<element name="map">
<element name="key"><value>w</value></element>
<ref name="realFromMinusOneToOne"/>
</element>
</element>
</group>
<group>
<ref name="keyType"/>
<element name="string"><value>string</value></element>
<ref name="keyValue"/>
<element name="string">
<data type="string"/>
</element>
</group>
<group>
<ref name="keyType"/>
<element name="string">
<value>vector</value>
</element>
<ref name="keyValue"/>
<element name="array">
<ref name="vector"/>
</element>
</group>
</choice>
</define>
<define name="nameType">
<ref name="keyName" />
<ref name="keyType" />
</define>
<define name="realFromMinusOneToOne">
<element name="real">
<data type="float">
<param name="pattern">([\-+]|)(1|0)\.\d+</param>
</data>
</element>
</define>
<define name="float">
<choice>
<element name="real">
<data type="float"/>
</element>
<element name="real">
<empty/>
</element>
</choice>
</define>
<define name="vector">
<element name="map">
<element name="key">
<value>x</value>
</element>
<ref name="realFromMinusOneToOne"/>
</element>
<element name="map">
<element name="key">
<value>y</value>
</element>
<ref name="realFromMinusOneToOne"/>
</element>
<element name="map">
<element name="key">
<value>z</value>
</element>
<ref name="realFromMinusOneToOne"/>
</element>
</define>
<define name="mapTooltip">
<element name="map">
<ref name="Tooltip" />
</element>
</define>
<define name="Tooltip">
<element name="key">
<value>tooltip</value>
</element>
<element name="string">
<data type="string" />
</element>
</define>
<define name="Arguments">
<element name="key"><value>arguments</value></element>
<choice>
<element name="array">
<oneOrMore>
<element name="map">
<element name="key"><data type="string"><param name="pattern">[A-Z][A-Za-z0-9_]*|[a-z]</param></data></element>
<element name="map">
<!--ref name="keyName" /-->
<ref name="Tooltip" />
<ref name="typeList" />
</element>
</element>
</oneOrMore>
<!--choice>
<oneOrMore>
<element name="map">
<ref name="Argument"/>
</element>
</oneOrMore>
<element name="undef">
<empty/>
</element>
</choice-->
</element>
<element name="undef"><empty/></element>
</choice>
</define>
<define name="Argument">
<ref name="keyType"/>
<choice>
<element name="string">
<value>float</value>
</element>
<element name="string">
<value>integer</value>
</element>
<element name="string">
<value>key</value>
</element>
<element name="string">
<value>list</value>
</element>
<element name="string">
<value>rotation</value>
</element>
<element name="string">
<value>string</value>
</element>
<element name="string">
<value>vector</value>
</element>
</choice>
<ref name="Tooltip"/>
</define>
<define name="Return">
<element name="key">
<value>return</value>
</element>
<choice>
<element name="string">
<value>float</value>
</element>
<element name="string">
<value>integer</value>
</element>
<element name="string">
<value>key</value>
</element>
<element name="string">
<value>list</value>
</element>
<element name="string">
<value>rotation</value>
</element>
<element name="string">
<value>string</value>
</element>
<element name="string">
<value>vector</value>
</element>
<element name="string">
<value>void</value>
</element>
</choice>
</define>
</grammar>