This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/fablabchemnitz/inkscape.extension.rng
2021-07-23 02:36:56 +02:00

551 lines
14 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://www.inkscape.org/namespace/inkscape/extension">
<!-- START EXTENSION DESCRIPTION (uses defines below) -->
<start>
<element name="inkscape-extension">
<element name="name">
<text/>
</element>
<element name="id">
<text/>
</element>
<zeroOrMore>
<ref name="inx.dependency"/>
</zeroOrMore>
<zeroOrMore>
<ref name="inx.widget"/>
</zeroOrMore>
<choice>
<ref name="inx.input_extension"/>
<ref name="inx.output_extension"/>
<ref name="inx.effect_extension"/>
<ref name="inx.path-effect_extension"/>
<ref name="inx.print_extension"/>
</choice>
<optional>
<ref name="inx.templateinfo"/>
</optional>
<choice>
<ref name="inx.script"/>
<ref name="inx.xslt"/>
<ref name="inx.plugin"/>
</choice>
</element>
</start>
<!-- END EXTENSION DESCRIPTION (uses defines below) -->
<!-- TEMPLATEINFO FOR PROCEDURAL TEMPLATES -->
<define name="inx.templateinfo">
<element name="templateinfo" ns="http://www.inkscape.org/namespaces/inkscape">
<element name="name"><text/></element>
<element name="author"><text/></element>
<element name="shortdesc"><text/></element>
<element name="date"><text/></element>
<element name="keywords"><text/></element>
</element>
</define>
<!-- DEPENDENCIES (INCLDUING SCRIPTS, XSLT AND PLUGINS) -->
<define name="inx.dependency">
<element name="dependency">
<optional>
<attribute name="type">
<choice>
<value>file</value> <!-- default if missing -->
<value>executable</value>
<value>extension</value>
</choice>
</attribute>
</optional>
<ref name="inx.dependency.location_attribute"/>
<optional>
<attribute name="description"/>
</optional>
<text/>
</element>
</define>
<define name="inx.script">
<element name="script">
<group>
<element name="command">
<ref name="inx.dependency.location_attribute"/>
<optional>
<attribute name="interpreter">
<choice>
<value>python</value>
<value>perl</value>
</choice>
</attribute>
</optional>
<text/>
</element>
<optional>
<element name="helper_extension">
<data type="NMTOKEN"/>
</element>
</optional>
</group>
</element>
</define>
<define name="inx.xslt">
<element name="xslt">
<element name="file">
<ref name="inx.dependency.location_attribute"/>
<text/>
</element>
</element>
</define>
<define name="inx.plugin">
<!-- TODO: What's this? How/where is it used? -->
<element name="plugin">
<element name="name">
<text/>
</element>
</element>
</define>
<define name="inx.dependency.location_attribute">
<optional>
<attribute name="location">
<choice>
<value>path</value> <!-- default if missing -->
<value>extensions</value>
<value>inx</value>
<value>absolute</value>
</choice>
</attribute>
</optional>
</define>
<!-- EXTENSION TYPES -->
<define name="inx.input_extension">
<element name="input">
<ref name="inx.input_output_extension.common"/>
</element>
</define>
<define name="inx.output_extension">
<element name="output">
<ref name="inx.input_output_extension.common"/>
<optional>
<attribute name="raster">
<ref name="data_type_boolean_strict"/>
</attribute>
</optional>
<optional>
<element name="dataloss">
<ref name="data_type_boolean_strict"/>
</element>
</optional>
</element>
</define>
<define name="inx.input_output_extension.common">
<element name="extension">
<text/>
</element>
<element name="mimetype">
<text/>
</element>
<optional>
<element name="filetypename">
<text/>
</element>
</optional>
<optional>
<element name="filetypetooltip">
<text/>
</element>
</optional>
</define>
<define name="inx.effect_extension">
<element name="effect">
<optional>
<attribute name="needs-document">
<ref name="data_type_boolean_strict"/>
</attribute>
</optional>
<optional>
<attribute name="needs-live-preview">
<ref name="data_type_boolean_strict"/>
</attribute>
</optional>
<optional>
<attribute name="implements-custom-gui">
<ref name="data_type_boolean_strict"/>
</attribute>
</optional>
<element name="object-type">
<choice>
<value type="token">all</value>
<value type="token">g</value>
<value type="token">path</value>
<value type="token">rect</value>
<value type="token">text</value>
</choice>
</element>
<element name="effects-menu">
<choice>
<attribute name="hidden">
<ref name="data_type_boolean_strict"/>
</attribute>
<ref name="inx.effect_extension.submenu"/>
</choice>
</element>
<optional>
<element name="menu-tip">
<text/>
</element>
</optional>
</element>
</define>
<define name="inx.effect_extension.submenu">
<element name="submenu">
<attribute name="name"/>
<optional>
<!-- TODO: This allows arbitrarily deep menu nesting - could/should we limit this? -->
<ref name="inx.effect_extension.submenu"/>
</optional>
</element>
</define>
<define name="inx.path-effect_extension">
<!-- TODO: Are we still suing these? -->
<element name="path-effect">
<empty/>
</element>
</define>
<define name="inx.print_extension">
<!-- TODO: Are we still suing these? -->
<element name="print">
<empty/>
</element>
</define>
<!-- WIDGETS AND PARAMETERS -->
<define name="inx.widget">
<choice>
<element name="param">
<ref name="inx.widget.common_attributes"/>
<ref name="inx.parameter"/>
</element>
<element name="label">
<ref name="inx.widget.common_attributes"/>
<optional>
<attribute name="appearance">
<choice>
<value>header</value>
<value>url</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name="xml:space">
<choice>
<value>default</value>
<value>preserve</value>
</choice>
</attribute>
</optional>
<text/>
</element>
<element name="hbox">
<ref name="inx.widget.common_attributes"/>
<oneOrMore>
<ref name="inx.widget"/>
</oneOrMore>
</element>
<element name="vbox">
<ref name="inx.widget.common_attributes"/>
<oneOrMore>
<ref name="inx.widget"/>
</oneOrMore>
</element>
<element name="separator">
<ref name="inx.widget.common_attributes"/>
<empty/>
</element>
<element name="spacer">
<ref name="inx.widget.common_attributes"/>
<optional>
<attribute name="size">
<choice>
<data type="integer"/>
<value>expand</value>
</choice>
</attribute>
</optional>
<empty/>
</element>
<element name="image">
<ref name="inx.widget.common_attributes"/>
<optional>
<attribute name="width">
<data type="integer"/>
</attribute>
<attribute name="height">
<data type="integer"/>
</attribute>
</optional>
<text/>
</element>
</choice>
</define>
<define name="inx.parameter">
<ref name="inx.parameter.common_attributes"/>
<choice>
<group>
<attribute name="type">
<value>int</value>
</attribute>
<optional>
<attribute name="min">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="max">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="appearance">
<value>full</value>
</attribute>
</optional>
<choice>
<empty/>
<data type="integer"/>
</choice>
</group>
<group>
<attribute name="type">
<value>float</value>
</attribute>
<optional>
<attribute name="precision">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="min">
<data type="float"/>
</attribute>
</optional>
<optional>
<attribute name="max">
<data type="float"/>
</attribute>
</optional>
<optional>
<attribute name="appearance">
<value>full</value>
</attribute>
</optional>
<data type="float"/>
</group>
<group>
<attribute name="type">
<value>bool</value>
</attribute>
<ref name="data_type_boolean_strict"/>
</group>
<group>
<attribute name="type">
<value>color</value>
</attribute>
<optional>
<attribute name="appearance">
<choice>
<value>colorbutton</value>
</choice>
</attribute>
</optional>
<choice>
<empty/>
<data type="integer"/>
<data type="string"/> <!-- TODO: We want to support unsigned integers in hex notation (e.g. 0x12345678),
and possibly other representations valid for strtoul, not random strings -->
</choice>
</group>
<group>
<attribute name="type">
<value>string</value>
</attribute>
<optional>
<attribute name="max_length">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="appearance">
<choice>
<value>multiline</value>
</choice>
</attribute>
</optional>
<choice>
<empty/>
<text/>
</choice>
</group>
<group>
<attribute name="type">
<value>path</value>
</attribute>
<attribute name="mode">
<!-- Note: "mode" is actually optional and defaults to "file".
For semantic reasons it makes sense to always include, though. -->
<choice>
<value>file</value>
<value>files</value>
<value>folder</value>
<value>folders</value>
<value>file_new</value>
<value>folder_new</value>
</choice>
</attribute>
<optional>
<attribute name="filetypes"/>
</optional>
<choice>
<empty/>
<text/>
</choice>
</group>
<group>
<attribute name="type">
<value>optiongroup</value>
</attribute>
<attribute name="appearance">
<!-- Note: "appearance" is actually optional and defaults to "radio".
For semantic reasons it makes sense to always include, though. -->
<choice>
<value>combo</value>
<value>radio</value>
</choice>
</attribute>
<oneOrMore>
<choice>
<element name="option">
<optional>
<attribute name="value"/>
</optional>
<optional>
<attribute name="translatable">
<ref name="data_type_boolean_yes_no"/>
</attribute>
</optional>
<optional>
<attribute name="context"/>
</optional>
<text/>
</element>
</choice>
</oneOrMore>
</group>
<group>
<attribute name="type">
<value>notebook</value>
</attribute>
<oneOrMore>
<element name="page">
<attribute name="name"/>
<attribute name="gui-text"/>
<oneOrMore>
<ref name="inx.widget"/>
</oneOrMore>
</element>
</oneOrMore>
</group>
</choice>
</define>
<define name="inx.widget.common_attributes">
<optional>
<attribute name="gui-hidden">
<ref name="data_type_boolean_strict"/>
</attribute>
</optional>
<optional>
<attribute name="indent">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="translatable">
<ref name="data_type_boolean_yes_no"/>
</attribute>
</optional>
<optional>
<attribute name="context"/>
</optional>
</define>
<define name="inx.parameter.common_attributes">
<attribute name="name">
<data type="token"/>
</attribute>
<optional>
<!-- TODO: gui-text is mandatory for visible parameters -->
<attribute name="gui-text"/>
</optional>
<optional>
<attribute name="gui-description"/>
</optional>
</define>
<!-- GENERAL DEFINES -->
<define name="data_type_boolean_strict">
<data type="boolean">
<except>
<value>0</value>
<value>1</value>
</except>
</data>
</define>
<define name="data_type_boolean_yes_no">
<choice>
<value>yes</value>
<value>no</value>
</choice>
</define>
</grammar>