summaryrefslogtreecommitdiff
blob: 0097a979544c65d732458f4bed1f7c4161c842bb (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
124
125
126
127
128
129
130
131
# 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 = devbook

devbook = element devbook {
  (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 | contents | 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 }
}

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

p = element p { inline }

pre = element pre {
  attribute caption { text }?,
  text
}

codesample = element codesample {
  attribute lang { "c" | "ebuild" | "make" | "m4" | "sgml" },
  attribute numbering { "lines" }?,
  attribute caption { text }?,
  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 {
  attribute caption { text }?,
  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)
}