1<?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" /> 16 <ref name="Enum" /> 17 </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="Headerfile" /> 29 </optional> 30 <optional> 31 <ref name="Declaration" /> 32 </optional> 33 <optional> 34 <ref name="Abstract" /> 35 </optional> 36 <optional> 37 <ref name="TemplateParameters" /> 38 </optional> 39 <optional> 40 <ref name="Parameters" /> 41 </optional> 42 <optional> 43 <ref name="ResultDiscussion" /> 44 </optional> 45 <optional> 46 <ref name="Discussion" /> 47 </optional> 48 </element> 49 </define> 50 51 <define name="Function"> 52 <element name="Function"> 53 <optional> 54 <attribute name="templateKind"> 55 <choice> 56 <value>template</value> 57 <value>specialization</value> 58 </choice> 59 </attribute> 60 </optional> 61 <ref name="attrSourceLocation" /> 62 63 <optional> 64 <attribute name="isInstanceMethod"> 65 <data type="boolean" /> 66 </attribute> 67 </optional> 68 <optional> 69 <attribute name="isClassMethod"> 70 <data type="boolean" /> 71 </attribute> 72 </optional> 73 74 <ref name="Name" /> 75 <optional> 76 <ref name="USR" /> 77 </optional> 78 <optional> 79 <ref name="Headerfile" /> 80 </optional> 81 <optional> 82 <ref name="Declaration" /> 83 </optional> 84 <optional> 85 <ref name="Abstract" /> 86 </optional> 87 <optional> 88 <ref name="TemplateParameters" /> 89 </optional> 90 <optional> 91 <ref name="Parameters" /> 92 </optional> 93 <optional> 94 <ref name="Exceptions" /> 95 </optional> 96 <zeroOrMore> 97 <ref name="Availability" /> 98 </zeroOrMore> 99 <zeroOrMore> 100 <ref name="Deprecated" /> 101 </zeroOrMore> 102 <zeroOrMore> 103 <ref name="Unavailable" /> 104 </zeroOrMore> 105 <optional> 106 <ref name="ResultDiscussion" /> 107 </optional> 108 <optional> 109 <ref name="Discussion" /> 110 </optional> 111 </element> 112 </define> 113 114 <define name="Class"> 115 <element name="Class"> 116 <optional> 117 <attribute name="templateKind"> 118 <choice> 119 <value>template</value> 120 <value>specialization</value> 121 <value>partialSpecialization</value> 122 </choice> 123 </attribute> 124 </optional> 125 <ref name="attrSourceLocation" /> 126 127 <ref name="Name" /> 128 <optional> 129 <ref name="USR" /> 130 </optional> 131 <optional> 132 <ref name="Headerfile" /> 133 </optional> 134 <optional> 135 <ref name="Declaration" /> 136 </optional> 137 <optional> 138 <ref name="Abstract" /> 139 </optional> 140 <optional> 141 <ref name="TemplateParameters" /> 142 </optional> 143 144 <!-- Parameters and results don't make sense for classes, but the user 145 can specify \param or \returns in a comment anyway. --> 146 <optional> 147 <ref name="Parameters" /> 148 </optional> 149 <optional> 150 <ref name="ResultDiscussion" /> 151 </optional> 152 153 <optional> 154 <ref name="Discussion" /> 155 </optional> 156 </element> 157 </define> 158 159 <define name="Variable"> 160 <element name="Variable"> 161 <ref name="attrSourceLocation" /> 162 <ref name="Name" /> 163 <optional> 164 <ref name="USR" /> 165 </optional> 166 <optional> 167 <ref name="Headerfile" /> 168 </optional> 169 <optional> 170 <ref name="Declaration" /> 171 </optional> 172 <optional> 173 <ref name="Abstract" /> 174 </optional> 175 176 <!-- Template parameters, parameters and results don't make sense for 177 variables, but the user can specify \tparam \param or \returns 178 in a comment anyway. --> 179 <optional> 180 <ref name="TemplateParameters" /> 181 </optional> 182 <optional> 183 <ref name="Parameters" /> 184 </optional> 185 <optional> 186 <ref name="ResultDiscussion" /> 187 </optional> 188 189 <optional> 190 <ref name="Discussion" /> 191 </optional> 192 </element> 193 </define> 194 195 <define name="Namespace"> 196 <element name="Namespace"> 197 <ref name="attrSourceLocation" /> 198 <ref name="Name" /> 199 <optional> 200 <ref name="USR" /> 201 </optional> 202 <optional> 203 <ref name="Headerfile" /> 204 </optional> 205 <optional> 206 <ref name="Declaration" /> 207 </optional> 208 <optional> 209 <ref name="Abstract" /> 210 </optional> 211 212 <!-- Template parameters, parameters and results don't make sense for 213 namespaces, but the user can specify \tparam, \param or \returns 214 in a comment anyway. --> 215 <optional> 216 <ref name="TemplateParameters" /> 217 </optional> 218 <optional> 219 <ref name="Parameters" /> 220 </optional> 221 <optional> 222 <ref name="ResultDiscussion" /> 223 </optional> 224 225 <optional> 226 <ref name="Discussion" /> 227 </optional> 228 </element> 229 </define> 230 231 <define name="Typedef"> 232 <element name="Typedef"> 233 <ref name="attrSourceLocation" /> 234 <ref name="Name" /> 235 <optional> 236 <ref name="USR" /> 237 </optional> 238 <optional> 239 <ref name="Headerfile" /> 240 </optional> 241 <optional> 242 <ref name="Declaration" /> 243 </optional> 244 <optional> 245 <ref name="Abstract" /> 246 </optional> 247 248 <optional> 249 <ref name="TemplateParameters" /> 250 </optional> 251 252 <!-- Parameters and results might make sense for typedefs if the type is 253 a function pointer type. --> 254 <optional> 255 <ref name="Parameters" /> 256 </optional> 257 <optional> 258 <ref name="ResultDiscussion" /> 259 </optional> 260 261 <optional> 262 <ref name="Discussion" /> 263 </optional> 264 </element> 265 </define> 266 267 <define name="Enum"> 268 <element name="Enum"> 269 <ref name="attrSourceLocation" /> 270 <ref name="Name" /> 271 <optional> 272 <ref name="USR" /> 273 </optional> 274 <optional> 275 <ref name="Headerfile" /> 276 </optional> 277 <optional> 278 <ref name="Declaration" /> 279 </optional> 280 <optional> 281 <ref name="Abstract" /> 282 </optional> 283 284 <!-- Template parameters, parameters and results don't make sense for 285 enums, but the user can specify \tparam \param or \returns in a 286 comment anyway. --> 287 <optional> 288 <ref name="TemplateParameters" /> 289 </optional> 290 <optional> 291 <ref name="Parameters" /> 292 </optional> 293 <optional> 294 <ref name="ResultDiscussion" /> 295 </optional> 296 297 <optional> 298 <ref name="Discussion" /> 299 </optional> 300 </element> 301 </define> 302 303 <define name="attrSourceLocation"> 304 <optional> 305 <attribute name="file"> 306 <!-- Non-empty text content. --> 307 <data type="string"> 308 <param name="pattern">.*\S.*</param> 309 </data> 310 </attribute> 311 </optional> 312 <optional> 313 <attribute name="line"> 314 <data type="positiveInteger" /> 315 </attribute> 316 <attribute name="column"> 317 <data type="positiveInteger" /> 318 </attribute> 319 </optional> 320 </define> 321 322 <define name="Name"> 323 <element name="Name"> 324 <!-- Non-empty text content. --> 325 <data type="string"> 326 <param name="pattern">.*\S.*</param> 327 </data> 328 </element> 329 </define> 330 331 <define name="USR"> 332 <element name="USR"> 333 <!-- Non-empty text content. --> 334 <data type="string"> 335 <param name="pattern">.*\S.*</param> 336 </data> 337 </element> 338 </define> 339 340 <define name="Abstract"> 341 <element name="Abstract"> 342 <zeroOrMore> 343 <ref name="TextBlockContent" /> 344 </zeroOrMore> 345 </element> 346 </define> 347 348 <define name="Declaration"> 349 <element name="Declaration"> 350 <!-- Non-empty text content. --> 351 <data type="string"/> 352 </element> 353 </define> 354 355 <define name="Headerfile"> 356 <element name="Headerfile"> 357 <oneOrMore> 358 <ref name="TextBlockContent" /> 359 </oneOrMore> 360 </element> 361 </define> 362 363 <define name="Discussion"> 364 <element name="Discussion"> 365 <zeroOrMore> 366 <ref name="TextBlockContent" /> 367 </zeroOrMore> 368 </element> 369 </define> 370 371 <define name="TemplateParameters"> 372 <element name="TemplateParameters"> 373 <!-- Parameter elements should be sorted according to position. --> 374 <oneOrMore> 375 <element name="Parameter"> 376 <element name="Name"> 377 <!-- Non-empty text content. --> 378 <data type="string"> 379 <param name="pattern">.*\S.*</param> 380 </data> 381 </element> 382 <optional> 383 <!-- This is index at depth 0. libclang API can return more 384 information about position, but we expose only essential 385 information here, since "Parameter" elements are already 386 sorted. 387 388 "Position" element could be added in future if needed. --> 389 <element name="Index"> 390 <data type="nonNegativeInteger" /> 391 </element> 392 </optional> 393 <!-- In general, template parameters with whitespace discussion 394 should not be emitted. Schema might be more strict here. --> 395 <element name="Discussion"> 396 <ref name="TextBlockContent" /> 397 </element> 398 </element> 399 </oneOrMore> 400 </element> 401 </define> 402 403 <define name="Parameters"> 404 <element name="Parameters"> 405 <!-- Parameter elements should be sorted according to index. --> 406 <oneOrMore> 407 <element name="Parameter"> 408 <element name="Name"> 409 <!-- Non-empty text content. --> 410 <data type="string"> 411 <param name="pattern">.*\S.*</param> 412 </data> 413 </element> 414 <optional> 415 <choice> 416 <element name="Index"> 417 <data type="nonNegativeInteger" /> 418 </element> 419 <element name="IsVarArg"> 420 <empty /> 421 </element> 422 </choice> 423 </optional> 424 <element name="Direction"> 425 <attribute name="isExplicit"> 426 <data type="boolean" /> 427 </attribute> 428 <choice> 429 <value>in</value> 430 <value>out</value> 431 <value>in,out</value> 432 </choice> 433 </element> 434 <!-- In general, template parameters with whitespace discussion 435 should not be emitted, unless direction is explicitly specified. 436 Schema might be more strict here. --> 437 <element name="Discussion"> 438 <ref name="TextBlockContent" /> 439 </element> 440 </element> 441 </oneOrMore> 442 </element> 443 </define> 444 445 <define name="Exceptions"> 446 <element name="Exceptions"> 447 <oneOrMore> 448 <ref name="TextBlockContent" /> 449 </oneOrMore> 450 </element> 451 </define> 452 453 <define name="Availability"> 454 <element name="Availability"> 455 <attribute name="distribution"> 456 <data type="string" /> 457 </attribute> 458 <optional> 459 <element name="IntroducedInVersion"> 460 <data type="string"> 461 <param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param> 462 </data> 463 </element> 464 </optional> 465 <optional> 466 <element name="DeprecatedInVersion"> 467 <data type="string"> 468 <param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param> 469 </data> 470 </element> 471 </optional> 472 <optional> 473 <element name="RemovedAfterVersion"> 474 <data type="string"> 475 <param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param> 476 </data> 477 </element> 478 </optional> 479 <optional> 480 <element name="DeprecationSummary"> 481 <data type="string" /> 482 </element> 483 </optional> 484 <optional> 485 <ref name="Unavailable" /> 486 </optional> 487 </element> 488 </define> 489 490 <define name="Deprecated"> 491 <element name="Deprecated"> 492 <optional> 493 <data type="string" /> 494 </optional> 495 </element> 496 </define> 497 498 <define name="Unavailable"> 499 <element name="Unavailable"> 500 <optional> 501 <data type="string" /> 502 </optional> 503 </element> 504 </define> 505 506 <define name="ResultDiscussion"> 507 <element name="ResultDiscussion"> 508 <zeroOrMore> 509 <ref name="TextBlockContent" /> 510 </zeroOrMore> 511 </element> 512 </define> 513 514 <define name="TextBlockContent"> 515 <choice> 516 <element name="Para"> 517 <optional> 518 <attribute name="kind"> 519 <choice> 520 <value>attention</value> 521 <value>author</value> 522 <value>authors</value> 523 <value>bug</value> 524 <value>copyright</value> 525 <value>date</value> 526 <value>invariant</value> 527 <value>note</value> 528 <value>post</value> 529 <value>pre</value> 530 <value>remark</value> 531 <value>remarks</value> 532 <value>sa</value> 533 <value>see</value> 534 <value>since</value> 535 <value>todo</value> 536 <value>version</value> 537 <value>warning</value> 538 </choice> 539 </attribute> 540 </optional> 541 <zeroOrMore> 542 <ref name="TextInlineContent" /> 543 </zeroOrMore> 544 </element> 545 <element name="Verbatim"> 546 <attribute name="xml:space"> 547 <value>preserve</value> 548 </attribute> 549 <attribute name="kind"> 550 <!-- TODO: add all Doxygen verbatim kinds --> 551 <choice> 552 <value>code</value> 553 <value>verbatim</value> 554 </choice> 555 </attribute> 556 <text /> 557 </element> 558 </choice> 559 </define> 560 561 <define name="TextInlineContent"> 562 <choice> 563 <text /> 564 <element name="bold"> 565 <!-- Non-empty text content. --> 566 <data type="string"> 567 <param name="pattern">.*\S.*</param> 568 </data> 569 </element> 570 <element name="monospaced"> 571 <!-- Non-empty text content. --> 572 <data type="string"> 573 <param name="pattern">.*\S.*</param> 574 </data> 575 </element> 576 <element name="emphasized"> 577 <!-- Non-empty text content. --> 578 <data type="string"> 579 <param name="pattern">.*\S.*</param> 580 </data> 581 </element> 582 <element name="rawHTML"> 583 <optional> 584 <!-- If not specified, the default value is 'false'. --> 585 <!-- The value 'false' or absence of the attribute does not imply 586 that the HTML is actually well-formed. --> 587 <attribute name="isMalformed"> 588 <data type="boolean" /> 589 </attribute> 590 </optional> 591 <!-- Non-empty text content. --> 592 <data type="string"> 593 <param name="pattern">.*\S.*</param> 594 </data> 595 </element> 596 </choice> 597 </define> 598 599</grammar> 600 601