blob: 4197bc83a58b45097894de96df18a2beda136e22 [file] [log] [blame]
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +00001<?xml version="1.0" encoding="UTF-8"?>
2
3<grammar xmlns="http://relaxng.org/ns/structure/1.0"
4 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
5
6 <start>
7 <choice>
8 <!-- Everything else not explicitly mentioned below. -->
9 <ref name="Other" />
10
11 <ref name="Function" />
12 <ref name="Class" />
13 <ref name="Variable" />
14 <ref name="Namespace" />
15 <ref name="Typedef" />
Dmitri Gribenko168d2342012-08-07 18:59:04 +000016 <ref name="Enum" />
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +000017 </choice>
18 </start>
19
20 <define name="Other">
21 <element name="Other">
22 <ref name="attrSourceLocation" />
23 <ref name="Name" />
24 <optional>
25 <ref name="USR" />
26 </optional>
27 <optional>
28 <ref name="Abstract" />
29 </optional>
30 <optional>
31 <ref name="TemplateParameters" />
32 </optional>
33 <optional>
34 <ref name="Parameters" />
35 </optional>
36 <optional>
37 <ref name="ResultDiscussion" />
38 </optional>
39 <optional>
40 <ref name="Discussion" />
41 </optional>
42 </element>
43 </define>
44
45 <define name="Function">
46 <element name="Function">
47 <optional>
48 <attribute name="templateKind">
49 <choice>
50 <value>template</value>
51 <value>specialization</value>
52 </choice>
53 </attribute>
54 </optional>
55 <ref name="attrSourceLocation" />
56
57 <optional>
58 <attribute name="isInstanceMethod">
59 <data type="boolean" />
60 </attribute>
61 </optional>
62 <optional>
63 <attribute name="isClassMethod">
64 <data type="boolean" />
65 </attribute>
66 </optional>
67
68 <ref name="Name" />
69 <optional>
70 <ref name="USR" />
71 </optional>
72 <!-- TODO: Add exception specification. -->
73 <optional>
74 <ref name="Abstract" />
75 </optional>
76 <optional>
77 <ref name="TemplateParameters" />
78 </optional>
79 <optional>
80 <ref name="Parameters" />
81 </optional>
Fariborz Jahanian35760a82012-09-28 22:35:49 +000082 <zeroOrMore>
Fariborz Jahanianc491c3f2012-10-01 18:42:25 +000083 <ref name="Availability" />
Fariborz Jahanian35760a82012-09-28 22:35:49 +000084 </zeroOrMore>
Fariborz Jahaniande0ae1e2012-10-02 20:05:47 +000085 <zeroOrMore>
86 <ref name="Deprecated" />
87 </zeroOrMore>
88 <zeroOrMore>
89 <ref name="Unavailable" />
90 </zeroOrMore>
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +000091 <optional>
92 <ref name="ResultDiscussion" />
93 </optional>
94 <optional>
95 <ref name="Discussion" />
96 </optional>
97 </element>
98 </define>
99
100 <define name="Class">
101 <element name="Class">
102 <optional>
103 <attribute name="templateKind">
104 <choice>
105 <value>template</value>
106 <value>specialization</value>
107 <value>partialSpecialization</value>
108 </choice>
109 </attribute>
110 </optional>
111 <ref name="attrSourceLocation" />
112
113 <ref name="Name" />
114 <optional>
115 <ref name="USR" />
116 </optional>
117 <optional>
118 <ref name="Abstract" />
119 </optional>
120 <optional>
121 <ref name="TemplateParameters" />
122 </optional>
123
124 <!-- Parameters and results don't make sense for classes, but the user
125 can specify \param or \returns in a comment anyway. -->
126 <optional>
127 <ref name="Parameters" />
128 </optional>
129 <optional>
130 <ref name="ResultDiscussion" />
131 </optional>
132
133 <optional>
134 <ref name="Discussion" />
135 </optional>
136 </element>
137 </define>
138
139 <define name="Variable">
140 <element name="Variable">
141 <ref name="attrSourceLocation" />
142 <ref name="Name" />
143 <optional>
144 <ref name="USR" />
145 </optional>
146 <optional>
147 <ref name="Abstract" />
148 </optional>
149
150 <!-- Template parameters, parameters and results don't make sense for
151 variables, but the user can specify \tparam \param or \returns
152 in a comment anyway. -->
153 <optional>
154 <ref name="TemplateParameters" />
155 </optional>
156 <optional>
157 <ref name="Parameters" />
158 </optional>
159 <optional>
160 <ref name="ResultDiscussion" />
161 </optional>
162
163 <optional>
164 <ref name="Discussion" />
165 </optional>
166 </element>
167 </define>
168
169 <define name="Namespace">
170 <element name="Namespace">
171 <ref name="attrSourceLocation" />
172 <ref name="Name" />
173 <optional>
174 <ref name="USR" />
175 </optional>
176 <optional>
177 <ref name="Abstract" />
178 </optional>
179
180 <!-- Template parameters, parameters and results don't make sense for
181 namespaces, but the user can specify \tparam, \param or \returns
182 in a comment anyway. -->
183 <optional>
184 <ref name="TemplateParameters" />
185 </optional>
186 <optional>
187 <ref name="Parameters" />
188 </optional>
189 <optional>
190 <ref name="ResultDiscussion" />
191 </optional>
192
193 <optional>
194 <ref name="Discussion" />
195 </optional>
196 </element>
197 </define>
198
199 <define name="Typedef">
200 <element name="Typedef">
201 <ref name="attrSourceLocation" />
202 <ref name="Name" />
203 <optional>
204 <ref name="USR" />
205 </optional>
206 <optional>
207 <ref name="Abstract" />
208 </optional>
209
210 <optional>
211 <ref name="TemplateParameters" />
212 </optional>
213
214 <!-- Parameters and results might make sense for typedefs if the type is
215 a function pointer type. -->
216 <optional>
217 <ref name="Parameters" />
218 </optional>
219 <optional>
220 <ref name="ResultDiscussion" />
221 </optional>
222
223 <optional>
224 <ref name="Discussion" />
225 </optional>
226 </element>
227 </define>
228
Dmitri Gribenko168d2342012-08-07 18:59:04 +0000229 <define name="Enum">
230 <element name="Enum">
231 <ref name="attrSourceLocation" />
232 <ref name="Name" />
233 <optional>
234 <ref name="USR" />
235 </optional>
236 <optional>
237 <ref name="Abstract" />
238 </optional>
239
240 <!-- Template parameters, parameters and results don't make sense for
241 enums, but the user can specify \tparam \param or \returns in a
242 comment anyway. -->
243 <optional>
244 <ref name="TemplateParameters" />
245 </optional>
246 <optional>
247 <ref name="Parameters" />
248 </optional>
249 <optional>
250 <ref name="ResultDiscussion" />
251 </optional>
252
253 <optional>
254 <ref name="Discussion" />
255 </optional>
256 </element>
257 </define>
258
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +0000259 <define name="attrSourceLocation">
260 <optional>
261 <attribute name="file">
262 <!-- Non-empty text content. -->
263 <data type="string">
264 <param name="pattern">.*\S.*</param>
265 </data>
266 </attribute>
267 </optional>
268 <optional>
269 <attribute name="line">
270 <data type="positiveInteger" />
271 </attribute>
272 <attribute name="column">
273 <data type="positiveInteger" />
274 </attribute>
275 </optional>
276 </define>
277
278 <define name="Name">
279 <element name="Name">
280 <!-- Non-empty text content. -->
281 <data type="string">
282 <param name="pattern">.*\S.*</param>
283 </data>
284 </element>
285 </define>
286
287 <define name="USR">
288 <element name="USR">
289 <!-- Non-empty text content. -->
290 <data type="string">
291 <param name="pattern">.*\S.*</param>
292 </data>
293 </element>
294 </define>
295
Fariborz Jahanianc491c3f2012-10-01 18:42:25 +0000296 <define name="Availability">
Dmitri Gribenko261c9682012-09-29 08:27:37 +0000297 <element name="Availability">
Fariborz Jahanian35760a82012-09-28 22:35:49 +0000298 <attribute name="distribution">
299 <data type="string" />
300 </attribute>
301 <optional>
302 <element name="IntroducedInVersion">
303 <data type="float" />
304 </element>
305 </optional>
306 <optional>
307 <element name="DeprecatedInVersion">
308 <data type="float" />
309 </element>
310 </optional>
311 <optional>
312 <element name="RemovedAfterVersion">
313 <data type="float" />
314 </element>
315 </optional>
316 <optional>
317 <element name="DeprecationSummary">
318 <data type="string" />
319 </element>
320 </optional>
321 <optional>
Fariborz Jahaniande0ae1e2012-10-02 20:05:47 +0000322 <ref name="Unavailable" />
Fariborz Jahanian35760a82012-09-28 22:35:49 +0000323 </optional>
Dmitri Gribenko261c9682012-09-29 08:27:37 +0000324 </element>
Fariborz Jahanian35760a82012-09-28 22:35:49 +0000325 </define>
326
Fariborz Jahaniande0ae1e2012-10-02 20:05:47 +0000327 <define name="Deprecated">
328 <element name="Deprecated">
329 <data type="boolean" />
330 </element>
331 </define>
332
333 <define name="Unavailable">
334 <element name="Unavailable">
335 <data type="boolean" />
336 </element>
337 </define>
338
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +0000339 <define name="Abstract">
340 <element name="Abstract">
341 <zeroOrMore>
342 <ref name="TextBlockContent" />
343 </zeroOrMore>
344 </element>
345 </define>
346
347 <define name="Discussion">
348 <element name="Discussion">
Dmitri Gribenko0b1a96a2012-09-13 21:32:58 +0000349 <zeroOrMore>
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +0000350 <ref name="TextBlockContent" />
Dmitri Gribenko0b1a96a2012-09-13 21:32:58 +0000351 </zeroOrMore>
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +0000352 </element>
353 </define>
354
355 <define name="TemplateParameters">
356 <element name="TemplateParameters">
357 <!-- Parameter elements should be sorted according to position. -->
358 <oneOrMore>
359 <element name="Parameter">
360 <element name="Name">
361 <!-- Non-empty text content. -->
362 <data type="string">
363 <param name="pattern">.*\S.*</param>
364 </data>
365 </element>
366 <optional>
367 <!-- This is index at depth 0. libclang API can return more
368 information about position, but we expose only essential
369 information here, since "Parameter" elements are already
370 sorted.
371
372 "Position" element could be added in future if needed. -->
373 <element name="Index">
374 <data type="nonNegativeInteger" />
375 </element>
376 </optional>
377 <!-- In general, template parameters with whitespace discussion
378 should not be emitted. Schema might be more strict here. -->
379 <element name="Discussion">
380 <ref name="TextBlockContent" />
381 </element>
382 </element>
383 </oneOrMore>
384 </element>
385 </define>
386
387 <define name="Parameters">
388 <element name="Parameters">
389 <!-- Parameter elements should be sorted according to index. -->
390 <oneOrMore>
391 <element name="Parameter">
392 <element name="Name">
393 <!-- Non-empty text content. -->
394 <data type="string">
395 <param name="pattern">.*\S.*</param>
396 </data>
397 </element>
398 <optional>
399 <element name="Index">
400 <data type="nonNegativeInteger" />
401 </element>
402 </optional>
403 <element name="Direction">
404 <attribute name="isExplicit">
405 <data type="boolean" />
406 </attribute>
407 <choice>
408 <value>in</value>
409 <value>out</value>
410 <value>in,out</value>
411 </choice>
412 </element>
413 <!-- In general, template parameters with whitespace discussion
414 should not be emitted, unless direction is explicitly specified.
415 Schema might be more strict here. -->
416 <element name="Discussion">
417 <ref name="TextBlockContent" />
418 </element>
419 </element>
420 </oneOrMore>
421 </element>
422 </define>
423
424 <define name="ResultDiscussion">
425 <element name="ResultDiscussion">
426 <zeroOrMore>
427 <ref name="TextBlockContent" />
428 </zeroOrMore>
429 </element>
430 </define>
431
432 <define name="TextBlockContent">
433 <choice>
434 <element name="Para">
435 <zeroOrMore>
436 <ref name="TextInlineContent" />
437 </zeroOrMore>
438 </element>
439 <element name="Verbatim">
Dmitri Gribenko6cffc192012-08-08 22:10:24 +0000440 <attribute name="xml:space">
441 <value>preserve</value>
442 </attribute>
Dmitri Gribenko740c0fb2012-08-07 17:54:38 +0000443 <attribute name="kind">
444 <!-- TODO: add all Doxygen verbatim kinds -->
445 <choice>
446 <value>code</value>
447 <value>verbatim</value>
448 </choice>
449 </attribute>
450 <text />
451 </element>
452 </choice>
453 </define>
454
455 <define name="TextInlineContent">
456 <choice>
457 <text />
458 <element name="bold">
459 <!-- Non-empty text content. -->
460 <data type="string">
461 <param name="pattern">.*\S.*</param>
462 </data>
463 </element>
464 <element name="monospaced">
465 <!-- Non-empty text content. -->
466 <data type="string">
467 <param name="pattern">.*\S.*</param>
468 </data>
469 </element>
470 <element name="emphasized">
471 <!-- Non-empty text content. -->
472 <data type="string">
473 <param name="pattern">.*\S.*</param>
474 </data>
475 </element>
476 <element name="rawHTML">
477 <!-- Non-empty text content. -->
478 <data type="string">
479 <param name="pattern">.*\S.*</param>
480 </data>
481 </element>
482 </choice>
483 </define>
484
485</grammar>
486