summaryrefslogtreecommitdiffstats
path: root/share/extensions/inkscape.extension.rng
diff options
context:
space:
mode:
Diffstat (limited to 'share/extensions/inkscape.extension.rng')
-rw-r--r--share/extensions/inkscape.extension.rng554
1 files changed, 554 insertions, 0 deletions
diff --git a/share/extensions/inkscape.extension.rng b/share/extensions/inkscape.extension.rng
new file mode 100644
index 0000000..b0c3704
--- /dev/null
+++ b/share/extensions/inkscape.extension.rng
@@ -0,0 +1,554 @@
+<?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>
+ <optional>
+ <attribute name="savecopyonly">
+ <ref name="data_type_boolean_strict"/>
+ </attribute>
+ </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 using these? -->
+ <element name="path-effect">
+ <empty/>
+ </element>
+ </define>
+
+ <define name="inx.print_extension">
+ <!-- TODO: Are we still using 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>