1 <?xml version="1.0" encoding="UTF-8"?>
3 <grammar xmlns="http://relaxng.org/ns/structure/1.0"
4 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
8 <!-- Everything else not explicitly mentioned below. -->
11 <ref name="Function" />
13 <ref name="Variable" />
14 <ref name="Namespace" />
15 <ref name="Typedef" />
21 <element name="Other">
22 <ref name="attrSourceLocation" />
28 <ref name="Abstract" />
31 <ref name="TemplateParameters" />
34 <ref name="Parameters" />
37 <ref name="ResultDiscussion" />
40 <ref name="Discussion" />
45 <define name="Function">
46 <element name="Function">
48 <attribute name="templateKind">
50 <value>template</value>
51 <value>specialization</value>
55 <ref name="attrSourceLocation" />
58 <attribute name="isInstanceMethod">
59 <data type="boolean" />
63 <attribute name="isClassMethod">
64 <data type="boolean" />
72 <!-- TODO: Add exception specification. -->
74 <ref name="Abstract" />
77 <ref name="TemplateParameters" />
80 <ref name="Parameters" />
83 <ref name="Availability" />
86 <ref name="ResultDiscussion" />
89 <ref name="Discussion" />
95 <element name="Class">
97 <attribute name="templateKind">
99 <value>template</value>
100 <value>specialization</value>
101 <value>partialSpecialization</value>
105 <ref name="attrSourceLocation" />
112 <ref name="Abstract" />
115 <ref name="TemplateParameters" />
118 <!-- Parameters and results don't make sense for classes, but the user
119 can specify \param or \returns in a comment anyway. -->
121 <ref name="Parameters" />
124 <ref name="ResultDiscussion" />
128 <ref name="Discussion" />
133 <define name="Variable">
134 <element name="Variable">
135 <ref name="attrSourceLocation" />
141 <ref name="Abstract" />
144 <!-- Template parameters, parameters and results don't make sense for
145 variables, but the user can specify \tparam \param or \returns
146 in a comment anyway. -->
148 <ref name="TemplateParameters" />
151 <ref name="Parameters" />
154 <ref name="ResultDiscussion" />
158 <ref name="Discussion" />
163 <define name="Namespace">
164 <element name="Namespace">
165 <ref name="attrSourceLocation" />
171 <ref name="Abstract" />
174 <!-- Template parameters, parameters and results don't make sense for
175 namespaces, but the user can specify \tparam, \param or \returns
176 in a comment anyway. -->
178 <ref name="TemplateParameters" />
181 <ref name="Parameters" />
184 <ref name="ResultDiscussion" />
188 <ref name="Discussion" />
193 <define name="Typedef">
194 <element name="Typedef">
195 <ref name="attrSourceLocation" />
201 <ref name="Abstract" />
205 <ref name="TemplateParameters" />
208 <!-- Parameters and results might make sense for typedefs if the type is
209 a function pointer type. -->
211 <ref name="Parameters" />
214 <ref name="ResultDiscussion" />
218 <ref name="Discussion" />
224 <element name="Enum">
225 <ref name="attrSourceLocation" />
231 <ref name="Abstract" />
234 <!-- Template parameters, parameters and results don't make sense for
235 enums, but the user can specify \tparam \param or \returns in a
238 <ref name="TemplateParameters" />
241 <ref name="Parameters" />
244 <ref name="ResultDiscussion" />
248 <ref name="Discussion" />
253 <define name="attrSourceLocation">
255 <attribute name="file">
256 <!-- Non-empty text content. -->
258 <param name="pattern">.*\S.*</param>
263 <attribute name="line">
264 <data type="positiveInteger" />
266 <attribute name="column">
267 <data type="positiveInteger" />
273 <element name="Name">
274 <!-- Non-empty text content. -->
276 <param name="pattern">.*\S.*</param>
283 <!-- Non-empty text content. -->
285 <param name="pattern">.*\S.*</param>
290 <define name="Availability">
291 <element name="Availability">
292 <attribute name="distribution">
293 <data type="string" />
296 <element name="IntroducedInVersion">
297 <data type="float" />
301 <element name="DeprecatedInVersion">
302 <data type="float" />
306 <element name="RemovedAfterVersion">
307 <data type="float" />
311 <element name="DeprecationSummary">
312 <data type="string" />
316 <element name="Unavailable">
317 <data type="boolean" />
323 <define name="Abstract">
324 <element name="Abstract">
326 <ref name="TextBlockContent" />
331 <define name="Discussion">
332 <element name="Discussion">
334 <ref name="TextBlockContent" />
339 <define name="TemplateParameters">
340 <element name="TemplateParameters">
341 <!-- Parameter elements should be sorted according to position. -->
343 <element name="Parameter">
344 <element name="Name">
345 <!-- Non-empty text content. -->
347 <param name="pattern">.*\S.*</param>
351 <!-- This is index at depth 0. libclang API can return more
352 information about position, but we expose only essential
353 information here, since "Parameter" elements are already
356 "Position" element could be added in future if needed. -->
357 <element name="Index">
358 <data type="nonNegativeInteger" />
361 <!-- In general, template parameters with whitespace discussion
362 should not be emitted. Schema might be more strict here. -->
363 <element name="Discussion">
364 <ref name="TextBlockContent" />
371 <define name="Parameters">
372 <element name="Parameters">
373 <!-- Parameter elements should be sorted according to index. -->
375 <element name="Parameter">
376 <element name="Name">
377 <!-- Non-empty text content. -->
379 <param name="pattern">.*\S.*</param>
383 <element name="Index">
384 <data type="nonNegativeInteger" />
387 <element name="Direction">
388 <attribute name="isExplicit">
389 <data type="boolean" />
394 <value>in,out</value>
397 <!-- In general, template parameters with whitespace discussion
398 should not be emitted, unless direction is explicitly specified.
399 Schema might be more strict here. -->
400 <element name="Discussion">
401 <ref name="TextBlockContent" />
408 <define name="ResultDiscussion">
409 <element name="ResultDiscussion">
411 <ref name="TextBlockContent" />
416 <define name="TextBlockContent">
418 <element name="Para">
420 <ref name="TextInlineContent" />
423 <element name="Verbatim">
424 <attribute name="xml:space">
425 <value>preserve</value>
427 <attribute name="kind">
428 <!-- TODO: add all Doxygen verbatim kinds -->
431 <value>verbatim</value>
439 <define name="TextInlineContent">
442 <element name="bold">
443 <!-- Non-empty text content. -->
445 <param name="pattern">.*\S.*</param>
448 <element name="monospaced">
449 <!-- Non-empty text content. -->
451 <param name="pattern">.*\S.*</param>
454 <element name="emphasized">
455 <!-- Non-empty text content. -->
457 <param name="pattern">.*\S.*</param>
460 <element name="rawHTML">
461 <!-- Non-empty text content. -->
463 <param name="pattern">.*\S.*</param>