1 <?xml version="1.0" encoding="UTF-8"?>
2 <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">
3 <start>
4 <element name="inkscape-extension">
5 <element name="_name">
6 <text/>
7 </element>
8 <element name="id">
9 <text/>
10 </element>
11 <zeroOrMore>
12 <element name="dependency">
13 <attribute name="type">
14 <ref name="inx.dependency-type.values"/>
15 </attribute>
16 <optional>
17 <attribute name="location">
18 <ref name="inx.location.values"/>
19 </attribute>
20 </optional>
21 <optional>
22 <attribute name="_description">
23 <text/>
24 </attribute>
25 </optional>
26 <text/>
27 </element>
28 </zeroOrMore>
29 <zeroOrMore>
30 <choice>
31 <ref name="inx.parameters"/>
32 <element name="param">
33 <attribute name="name"/>
34 <attribute name="type">
35 <value>notebook</value>
36 </attribute>
37 <oneOrMore>
38 <element name="page">
39 <attribute name="name"/>
40 <attribute name="_gui-text"/>
41 <oneOrMore>
42 <ref name="inx.parameters"/>
43 </oneOrMore>
44 </element>
45 </oneOrMore>
46 </element>
47 </choice>
48 </zeroOrMore>
49 <choice>
50 <element name="input">
51 <ref name="inx.io.common"/>
52 <optional>
53 <element name="output_extension">
54 <text/>
55 </element>
56 </optional>
57 </element>
58 <element name="output">
59 <ref name="inx.io.common"/>
60 <optional>
61 <element name="dataloss">
62 <data type="boolean"/>
63 </element>
64 </optional>
65 </element>
66 <element name="effect">
67 <optional>
68 <attribute name="needs-document">
69 <data type="boolean"/>
70 </attribute>
71 </optional>
72 <optional>
73 <attribute name="needs-live-preview">
74 <data type="boolean"/>
75 </attribute>
76 </optional>
77 <element name="object-type">
78 <choice>
79 <value type="token">all</value>
80 <value type="token">path</value>
81 <value type="token">rect</value>
82 </choice>
83 </element>
84 <element name="effects-menu">
85 <choice>
86 <attribute name="hidden">
87 <value type="boolean">true</value>
88 </attribute>
89 <group>
90 <element name="submenu">
91 <attribute name="_name">
92 <text/>
93 </attribute>
94 <empty/>
95 </element>
96 </group>
97 </choice>
98 </element>
99 </element>
100 <element name="path-effect">
101 <empty/>
102 </element>
103 <element name="print">
104 <empty/>
105 </element>
106 </choice>
107 <choice>
108 <element name="script">
109 <group>
110 <element name="command">
111 <ref name="inx.reldir.attr"/>
112 <optional>
113 <attribute name="interpreter">
114 <choice>
115 <value>python</value>
116 <value>perl</value>
117 </choice>
118 </attribute>
119 </optional>
120 <text/>
121 </element>
122 <optional>
123 <element name="helper_extension">
124 <data type="NMTOKEN"/>
125 </element>
126 </optional>
127 <zeroOrMore>
128 <element name="check">
129 <ref name="inx.reldir.attr"/>
130 <text/>
131 </element>
132 </zeroOrMore>
133 </group>
134 </element>
135 <element name="xslt">
136 <element name="file">
137 <ref name="inx.reldir.attr"/>
138 <text/>
139 </element>
140 </element>
141 <element name="plugin">
142 <element name="name">
143 <text/>
144 </element>
145 </element>
146 </choice>
147 </element>
148 </start>
149 <define name="inx.reldir.attr">
150 <attribute name="reldir">
151 <ref name="inx.location.values"/>
152 </attribute>
153 </define>
154 <define name="inx.location.values">
155 <choice>
156 <value>extensions</value>
157 <value>path</value>
158 <value>plugins</value>
159 </choice>
160 </define>
161 <define name="inx.dependency-type.values">
162 <choice>
163 <value>extension</value>
164 <value>executable</value>
165 <value>plugin</value>
166 </choice>
167 </define>
168 <define name="inx.io.common">
169 <element name="extension">
170 <text/>
171 </element>
172 <element name="mimetype">
173 <text/>
174 </element>
175 <optional>
176 <element name="_filetypename">
177 <text/>
178 </element>
179 </optional>
180 <optional>
181 <element name="_filetypetooltip">
182 <text/>
183 </element>
184 </optional>
185 </define>
186 <define name="inx.parameter">
187 <attribute name="name">
188 <data type="token"/>
189 </attribute>
190 <optional>
191 <attribute name="gui-hidden">
192 <data type="boolean"/>
193 </attribute>
194 </optional>
195 <optional>
196 <attribute name="_gui-text"/>
197 </optional>
198 <choice>
199 <group>
200 <attribute name="type">
201 <value>int</value>
202 </attribute>
203 <optional>
204 <attribute name="min">
205 <data type="integer"/>
206 </attribute>
207 </optional>
208 <optional>
209 <attribute name="max">
210 <data type="integer"/>
211 </attribute>
212 </optional>
213 <choice>
214 <empty/>
215 <data type="integer"/>
216 </choice>
217 </group>
218 <group>
219 <attribute name="type">
220 <value>float</value>
221 </attribute>
222 <optional>
223 <attribute name="precision">
224 <data type="integer"/>
225 </attribute>
226 </optional>
227 <optional>
228 <attribute name="min">
229 <data type="float"/>
230 </attribute>
231 </optional>
232 <optional>
233 <attribute name="max">
234 <data type="float"/>
235 </attribute>
236 </optional>
237 <data type="float"/>
238 </group>
239 <group>
240 <attribute name="type">
241 <value>boolean</value>
242 </attribute>
243 <data type="boolean"/>
244 </group>
245 <group>
246 <attribute name="type">
247 <value>string</value>
248 </attribute>
249 <optional>
250 <attribute name="max_length">
251 <data type="integer"/>
252 </attribute>
253 </optional>
254 <choice>
255 <empty/>
256 <text/>
257 </choice>
258 </group>
259 <group>
260 <attribute name="type">
261 <value>description</value>
262 </attribute>
263 <text/>
264 </group>
265 <group>
266 <attribute name="type">
267 <value>enum</value>
268 </attribute>
269 <oneOrMore>
270 <choice>
271 <element name="_item">
272 <ref name="inx.parameter.enum.item"/>
273 </element>
274 <element name="item">
275 <ref name="inx.parameter.enum.item"/>
276 </element>
277 </choice>
278 </oneOrMore>
279 </group>
280 <group>
281 <attribute name="type">
282 <value>optiongroup</value>
283 </attribute>
284 <optional>
285 <attribute name="appearance">
286 <value>minimal</value>
287 </attribute>
288 </optional>
289 <oneOrMore>
290 <choice>
291 <element name="option">
292 <ref name="inx.parameter.optiongroup.option"/>
293 </element>
294 <element name="_option">
295 <ref name="inx.parameter.optiongroup.option"/>
296 </element>
297 </choice>
298 </oneOrMore>
299 </group>
300 </choice>
301 </define>
302 <define name="inx.parameters">
303 <choice>
304 <element name="param">
305 <ref name="inx.parameter"/>
306 </element>
307 <element name="_param">
308 <ref name="inx.parameter"/>
309 </element>
310 </choice>
311 </define>
312 <define name="inx.parameter.enum.item">
313 <attribute name="value"/>
314 <data type="token"/>
315 </define>
316 <define name="inx.parameter.optiongroup.option">
317 <optional>
318 <attribute name="value">
319 <text/>
320 </attribute>
321 </optional>
322 <text/>
323 </define>
324 </grammar>