summaryrefslogtreecommitdiff
blob: 22f7c09626e7426f4621bcfe783d4308bf9e9762 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# Copyright 2022-2024 Gentoo Authors
# Distributed under the terms of the MIT license
# or the CC-BY-SA-4.0 license (dual-licensed)

# RELAX NG schema for the Gentoo Devmanual
# Based on common.dtd from GuideXML

block.class = p | pre | codesample | note | important | warning | todo
| figure | table | ul | ol | dl
attrib.class = text | b | c | e | sub | sup
inline.class = attrib.class | d | uri

attrib = attrib.class*
inline = inline.class*
all = (block.class | inline.class)*

start = guide

guide = element guide {
  (attribute root { "true" } | attribute self { text }),
  chapter,
  \include*
}

\include = element include { attribute href { text } }

chapter = element chapter { title, (body | section), section* }
section = element section { title, (body | subsection), subsection* }
subsection =
  element subsection { title, (body | subsubsection), subsubsection* }
subsubsection = element subsubsection { title, body }

# Title texts are used as anchors, so allow only text attributes
title = element title { attrib }

body = element body { (authors | contentsTree | block.class)+ }

authors = element authors { author+ | authorlist+ }

author = element author {
  attribute name { text },
  attribute email { text }?,
  inline
}

authorlist = element authorlist {
  attribute title { text },
  attribute href { text }
}

contentsTree = element contentsTree {
  attribute maxdepth { xsd:unsignedInt }?,
  attribute root { text }?,
  attribute extraction { text }?
}

p = element p { inline }

pre = element pre { text }

codesample = element codesample {
  attribute lang { "c" | "ebuild" | "make" | "m4" | "sgml" },
  attribute numbering { "lines" }?,
  text
}

note = element note { inline }
important = element important { inline }
warning = element warning { inline }
todo = element todo { inline }

figure = element figure {
  attribute link { text },
  attribute short { text }?,
  attribute caption { text }?
}

table = element table { tr+ }
tr = element tr { (th | ti)+ }

th = element th {
  attribute colspan { xsd:unsignedInt }?,
  attribute rowspan { xsd:unsignedInt }?,
  attribute align { "left" | "center" | "right" }?,
  inline
}

ti = element ti {
  attribute colspan { xsd:unsignedInt }?,
  attribute rowspan { xsd:unsignedInt }?,
  attribute nowrap { "nowrap" }?,
  attribute align { "left" | "center" | "right" }?,
  all
}

ul = element ul {
  attribute class { "list-group" }?,
  li+
}

ol = element ol {
  attribute type { "1" | "A" | "a" | "I" | "i" }?,
  li+
}

li = element li { all }

dl = element dl { (dt | dd)+ }
dt = element dt { inline }
dd = element dd { all }

b = element b { inline }
c = element c { inline }
e = element e { inline }
sub = element sub { inline }
sup = element sup { inline }
d = element d { empty }

uri = element uri {
  # uri can have either a URI in the body text or a link attribute
  xsd:anyURI
  | (attribute link { text }, inline)
}