summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--Cargo.lock553
-rw-r--r--Cargo.toml24
-rw-r--r--README.md54
-rw-r--r--res/.gitignore1
-rw-r--r--res/goal.md66
-rw-r--r--res/sample-doxygen-project-1/Doxyfile2536
-rw-r--r--res/sample-doxygen-project-1/main.cpp176
-rw-r--r--res/sample-markdown-project-1/Doxyfile2536
-rw-r--r--res/sample-markdown-project-1/main.cpp200
-rw-r--r--res/style.css329
-rw-r--r--shell.nix22
-rw-r--r--src/cli.rs18
-rw-r--r--src/doxygen.rs454
-rw-r--r--src/doxygen/builders.rs109
-rw-r--r--src/entities.rs134
-rw-r--r--src/generator.rs209
-rw-r--r--src/main.rs44
-rw-r--r--src/pandoc.rs246
-rw-r--r--src/pandoc/types.rs39
-rw-r--r--src/parsing.rs457
21 files changed, 8213 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cbe185d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
1/target
2**/*.rs.bk
3/doc
4/result
5/result-*
6/.ccls-cache
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..ad20d8e
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,553 @@
1# This file is automatically @generated by Cargo.
2# It is not intended for manual editing.
3[[package]]
4name = "aho-corasick"
5version = "0.7.6"
6source = "registry+https://github.com/rust-lang/crates.io-index"
7dependencies = [
8 "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
9]
10
11[[package]]
12name = "ansi_term"
13version = "0.11.0"
14source = "registry+https://github.com/rust-lang/crates.io-index"
15dependencies = [
16 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
17]
18
19[[package]]
20name = "anyhow"
21version = "1.0.12"
22source = "registry+https://github.com/rust-lang/crates.io-index"
23
24[[package]]
25name = "atty"
26version = "0.2.13"
27source = "registry+https://github.com/rust-lang/crates.io-index"
28dependencies = [
29 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
30 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
31]
32
33[[package]]
34name = "autocfg"
35version = "0.1.6"
36source = "registry+https://github.com/rust-lang/crates.io-index"
37
38[[package]]
39name = "bitflags"
40version = "1.2.0"
41source = "registry+https://github.com/rust-lang/crates.io-index"
42
43[[package]]
44name = "cfg-if"
45version = "0.1.9"
46source = "registry+https://github.com/rust-lang/crates.io-index"
47
48[[package]]
49name = "chrono"
50version = "0.4.9"
51source = "registry+https://github.com/rust-lang/crates.io-index"
52dependencies = [
53 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
54 "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
55 "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
56 "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
57]
58
59[[package]]
60name = "clang"
61version = "0.23.0"
62source = "registry+https://github.com/rust-lang/crates.io-index"
63dependencies = [
64 "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)",
65 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
66]
67
68[[package]]
69name = "clang-sys"
70version = "0.28.1"
71source = "registry+https://github.com/rust-lang/crates.io-index"
72dependencies = [
73 "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
74 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
75]
76
77[[package]]
78name = "clap"
79version = "2.33.0"
80source = "registry+https://github.com/rust-lang/crates.io-index"
81dependencies = [
82 "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
83 "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
84 "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
85 "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
86 "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
87 "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
88 "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
89]
90
91[[package]]
92name = "codemap"
93version = "0.1.2"
94source = "registry+https://github.com/rust-lang/crates.io-index"
95
96[[package]]
97name = "codemap-diagnostic"
98version = "0.1.1"
99source = "registry+https://github.com/rust-lang/crates.io-index"
100dependencies = [
101 "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
102 "codemap 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
103 "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
104]
105
106[[package]]
107name = "env_logger"
108version = "0.6.2"
109source = "registry+https://github.com/rust-lang/crates.io-index"
110dependencies = [
111 "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
112 "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
113 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
114 "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
115 "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
116]
117
118[[package]]
119name = "glob"
120version = "0.3.0"
121source = "registry+https://github.com/rust-lang/crates.io-index"
122
123[[package]]
124name = "heck"
125version = "0.3.1"
126source = "registry+https://github.com/rust-lang/crates.io-index"
127dependencies = [
128 "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
129]
130
131[[package]]
132name = "hermit-abi"
133version = "0.1.3"
134source = "registry+https://github.com/rust-lang/crates.io-index"
135dependencies = [
136 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
137]
138
139[[package]]
140name = "humantime"
141version = "1.3.0"
142source = "registry+https://github.com/rust-lang/crates.io-index"
143dependencies = [
144 "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
145]
146
147[[package]]
148name = "itoa"
149version = "0.4.4"
150source = "registry+https://github.com/rust-lang/crates.io-index"
151
152[[package]]
153name = "lazy_static"
154version = "1.4.0"
155source = "registry+https://github.com/rust-lang/crates.io-index"
156
157[[package]]
158name = "libc"
159version = "0.2.62"
160source = "registry+https://github.com/rust-lang/crates.io-index"
161
162[[package]]
163name = "log"
164version = "0.4.8"
165source = "registry+https://github.com/rust-lang/crates.io-index"
166dependencies = [
167 "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
168]
169
170[[package]]
171name = "memchr"
172version = "2.2.1"
173source = "registry+https://github.com/rust-lang/crates.io-index"
174
175[[package]]
176name = "num-integer"
177version = "0.1.41"
178source = "registry+https://github.com/rust-lang/crates.io-index"
179dependencies = [
180 "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
181 "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
182]
183
184[[package]]
185name = "num-traits"
186version = "0.2.8"
187source = "registry+https://github.com/rust-lang/crates.io-index"
188dependencies = [
189 "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
190]
191
192[[package]]
193name = "num_cpus"
194version = "1.11.0"
195source = "registry+https://github.com/rust-lang/crates.io-index"
196dependencies = [
197 "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
198 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
199]
200
201[[package]]
202name = "pandoc_types"
203version = "0.2.0"
204source = "registry+https://github.com/rust-lang/crates.io-index"
205dependencies = [
206 "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)",
207 "serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)",
208 "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
209]
210
211[[package]]
212name = "percent-encoding"
213version = "2.1.0"
214source = "registry+https://github.com/rust-lang/crates.io-index"
215
216[[package]]
217name = "poseidoc"
218version = "0.1.0"
219dependencies = [
220 "anyhow 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
221 "clang 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
222 "codemap 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
223 "codemap-diagnostic 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
224 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
225 "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
226 "pandoc_types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
227 "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
228 "pretty_env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
229 "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
230 "shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
231 "structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
232 "thiserror 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
233 "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
234 "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
235]
236
237[[package]]
238name = "pretty_env_logger"
239version = "0.3.1"
240source = "registry+https://github.com/rust-lang/crates.io-index"
241dependencies = [
242 "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
243 "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
244 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
245]
246
247[[package]]
248name = "proc-macro-error"
249version = "0.2.6"
250source = "registry+https://github.com/rust-lang/crates.io-index"
251dependencies = [
252 "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
253 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
254 "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
255]
256
257[[package]]
258name = "proc-macro2"
259version = "1.0.3"
260source = "registry+https://github.com/rust-lang/crates.io-index"
261dependencies = [
262 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
263]
264
265[[package]]
266name = "quick-error"
267version = "1.2.2"
268source = "registry+https://github.com/rust-lang/crates.io-index"
269
270[[package]]
271name = "quote"
272version = "1.0.2"
273source = "registry+https://github.com/rust-lang/crates.io-index"
274dependencies = [
275 "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
276]
277
278[[package]]
279name = "redox_syscall"
280version = "0.1.56"
281source = "registry+https://github.com/rust-lang/crates.io-index"
282
283[[package]]
284name = "regex"
285version = "1.3.1"
286source = "registry+https://github.com/rust-lang/crates.io-index"
287dependencies = [
288 "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
289 "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
290 "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
291 "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
292]
293
294[[package]]
295name = "regex-syntax"
296version = "0.6.12"
297source = "registry+https://github.com/rust-lang/crates.io-index"
298
299[[package]]
300name = "ryu"
301version = "1.0.0"
302source = "registry+https://github.com/rust-lang/crates.io-index"
303
304[[package]]
305name = "serde"
306version = "1.0.100"
307source = "registry+https://github.com/rust-lang/crates.io-index"
308
309[[package]]
310name = "serde_derive"
311version = "1.0.100"
312source = "registry+https://github.com/rust-lang/crates.io-index"
313dependencies = [
314 "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
315 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
316 "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
317]
318
319[[package]]
320name = "serde_json"
321version = "1.0.40"
322source = "registry+https://github.com/rust-lang/crates.io-index"
323dependencies = [
324 "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
325 "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
326 "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)",
327]
328
329[[package]]
330name = "shell-words"
331version = "0.1.0"
332source = "registry+https://github.com/rust-lang/crates.io-index"
333
334[[package]]
335name = "strsim"
336version = "0.8.0"
337source = "registry+https://github.com/rust-lang/crates.io-index"
338
339[[package]]
340name = "structopt"
341version = "0.3.3"
342source = "registry+https://github.com/rust-lang/crates.io-index"
343dependencies = [
344 "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
345 "structopt-derive 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
346]
347
348[[package]]
349name = "structopt-derive"
350version = "0.3.3"
351source = "registry+https://github.com/rust-lang/crates.io-index"
352dependencies = [
353 "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
354 "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
355 "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
356 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
357 "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
358]
359
360[[package]]
361name = "syn"
362version = "1.0.5"
363source = "registry+https://github.com/rust-lang/crates.io-index"
364dependencies = [
365 "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
366 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
367 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
368]
369
370[[package]]
371name = "termcolor"
372version = "1.0.5"
373source = "registry+https://github.com/rust-lang/crates.io-index"
374dependencies = [
375 "wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
376]
377
378[[package]]
379name = "textwrap"
380version = "0.11.0"
381source = "registry+https://github.com/rust-lang/crates.io-index"
382dependencies = [
383 "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
384]
385
386[[package]]
387name = "thiserror"
388version = "1.0.1"
389source = "registry+https://github.com/rust-lang/crates.io-index"
390dependencies = [
391 "thiserror-impl 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
392]
393
394[[package]]
395name = "thiserror-impl"
396version = "1.0.0"
397source = "registry+https://github.com/rust-lang/crates.io-index"
398dependencies = [
399 "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
400 "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
401 "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
402]
403
404[[package]]
405name = "thread_local"
406version = "0.3.6"
407source = "registry+https://github.com/rust-lang/crates.io-index"
408dependencies = [
409 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
410]
411
412[[package]]
413name = "threadpool"
414version = "1.7.1"
415source = "registry+https://github.com/rust-lang/crates.io-index"
416dependencies = [
417 "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
418]
419
420[[package]]
421name = "time"
422version = "0.1.42"
423source = "registry+https://github.com/rust-lang/crates.io-index"
424dependencies = [
425 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
426 "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
427 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
428]
429
430[[package]]
431name = "unicode-segmentation"
432version = "1.3.0"
433source = "registry+https://github.com/rust-lang/crates.io-index"
434
435[[package]]
436name = "unicode-width"
437version = "0.1.6"
438source = "registry+https://github.com/rust-lang/crates.io-index"
439
440[[package]]
441name = "unicode-xid"
442version = "0.2.0"
443source = "registry+https://github.com/rust-lang/crates.io-index"
444
445[[package]]
446name = "vec_map"
447version = "0.8.1"
448source = "registry+https://github.com/rust-lang/crates.io-index"
449
450[[package]]
451name = "winapi"
452version = "0.3.8"
453source = "registry+https://github.com/rust-lang/crates.io-index"
454dependencies = [
455 "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
456 "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
457]
458
459[[package]]
460name = "winapi-i686-pc-windows-gnu"
461version = "0.4.0"
462source = "registry+https://github.com/rust-lang/crates.io-index"
463
464[[package]]
465name = "winapi-util"
466version = "0.1.2"
467source = "registry+https://github.com/rust-lang/crates.io-index"
468dependencies = [
469 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
470]
471
472[[package]]
473name = "winapi-x86_64-pc-windows-gnu"
474version = "0.4.0"
475source = "registry+https://github.com/rust-lang/crates.io-index"
476
477[[package]]
478name = "wincolor"
479version = "1.0.2"
480source = "registry+https://github.com/rust-lang/crates.io-index"
481dependencies = [
482 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
483 "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
484]
485
486[[package]]
487name = "xml-rs"
488version = "0.8.0"
489source = "registry+https://github.com/rust-lang/crates.io-index"
490
491[metadata]
492"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
493"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
494"checksum anyhow 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "aaf594cde167a6a4e715d4c8c3a71eb07e6b2c48b28014f9425bc8f7d8bdec11"
495"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
496"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
497"checksum bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a606a02debe2813760609f57a64a2ffd27d9fdf5b2f133eaca0b248dd92cdd2"
498"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
499"checksum chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e8493056968583b0193c1bb04d6f7684586f3726992d6c573261941a895dbd68"
500"checksum clang 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "edaa418fdc81a329f3c8258a4e8776f7d2c31682147c5bda1c5c37ab8e818114"
501"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853"
502"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
503"checksum codemap 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa90095b7cbcca06055fed0e0bc0dcfc66a841bd9ea62bab2303a41e092ed72"
504"checksum codemap-diagnostic 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ba0e6be8e2774e750f9e90625b490249715bece38a12f9d09e82477caba5028"
505"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
506"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
507"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
508"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
509"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
510"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
511"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
512"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
513"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
514"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
515"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
516"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
517"checksum num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "155394f924cdddf08149da25bfb932d226b4a593ca7468b08191ff6335941af5"
518"checksum pandoc_types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29869c4f0ed84c2514105047415ff220679d7dbe566982c32f60a5c330cb77ed"
519"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
520"checksum pretty_env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "717ee476b1690853d222af4634056d830b5197ffd747726a9a1eee6da9f49074"
521"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
522"checksum proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e98a83a9f9b331f54b924e68a66acb1bb35cb01fb0a23645139967abefb697e8"
523"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
524"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
525"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
526"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
527"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
528"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
529"checksum serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)" = "f4473e8506b213730ff2061073b48fa51dcc66349219e2e7c5608f0296a1d95a"
530"checksum serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)" = "11e410fde43e157d789fc290d26bc940778ad0fdd47836426fbac36573710dbb"
531"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
532"checksum shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a"
533"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
534"checksum structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4f66a4c0ddf7aee4677995697366de0749b0139057342eccbb609b12d0affc"
535"checksum structopt-derive 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8fe0c13e476b4e21ff7f5c4ace3818b6d7bdc16897c31c73862471bc1663acae"
536"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
537"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
538"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
539"checksum thiserror 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76a6728729f99559e9ec7e39848ea39623849aa1d7d3bb99b30ec349a2ffc730"
540"checksum thiserror-impl 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e9d53f5a0d2bd66d1d841e69a4beb74a226216b3f158ff0c534578f76e7beac9"
541"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
542"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
543"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
544"checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
545"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
546"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
547"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
548"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
549"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
550"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
551"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
552"checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9"
553"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..17f23da
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,24 @@
1[package]
2name = "poseidoc"
3version = "0.1.0"
4authors = ["Minijackson <minijackson@riseup.net>"]
5edition = "2018"
6
7# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
9[dependencies]
10anyhow = "1"
11clang = "0.23"
12codemap = "0.1"
13codemap-diagnostic = "0.1"
14log = "0.4"
15num_cpus = "1"
16pandoc_types = "0.2"
17percent-encoding = "2"
18pretty_env_logger = "0.3"
19serde_json = "1"
20shell-words = "0.1"
21structopt = "0.3"
22thiserror = "1"
23threadpool = "1"
24xml-rs = "0.8"
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7a82d6b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
1Poseidoc
2========
3
4A documentation system built on Doxygen and Pandoc
5
6Overview
7--------
8
9## For now
10
11- Takes Doxygen-generated XML input
12- Outputs Pandoc's JSON AST
13
14## In the future
15
16- Will generate the Doxyfile and the XML files for you
17- Will generate the output directly
18 - HTML is a priority
19 - Then PDF / LaTeX
20 - If the project is well designed, other outputs should be supported out of
21 the box thanks to Pandoc
22- Per-project TOML configuration
23
24Quick Start
25-----------
26
27- Have a documented project
28- Generate a Doxyfile that outputs XML and **without** Markdown support (for
29 example with `doxywizard`)
30- `cargo run -- <xml file> | pandoc --from json --to html --standalone
31 --self-contained --toc --css <your css here> --output <output file>.html`
32
33Goals
34-----
35
36- It needs to be simple and very easy to setup
37- It needs to be configurable by project
38- It should encourage people to write documentation
39- It should encourage people to read documentation
40
41- Warnings? Maybe?
42
43### Interface design goals
44
45- It should be beautiful
46- It should be easy to get wanted information from a glance
47- It should be accessible
48
49### Technical goals
50
51- Little to no JavaScript
52- The generated markup must be simple and semantic
53- Sensible defaults for Doxygen and Pandoc
54- But both Doxygen and Pandoc must be completely configurable
diff --git a/res/.gitignore b/res/.gitignore
new file mode 100644
index 0000000..28c26ed
--- /dev/null
+++ b/res/.gitignore
@@ -0,0 +1 @@
/*/doc
diff --git a/res/goal.md b/res/goal.md
new file mode 100644
index 0000000..6c6ed24
--- /dev/null
+++ b/res/goal.md
@@ -0,0 +1,66 @@
1\<MyHeader\>
2============
3
4Variables
5---------
6
7:::::: {.variable}
8
9`int MY_VARIABLE`
10=================
11
12::: {.doc}
13Documentation of this variable
14:::
15
16::::::
17
18Classes
19-------
20
21::::::::: {.class}
22
23MyClass
24=======
25
26this is a description of the class
27
28Public Types
29============
30
31- `Ptr`
32 ~ `std::shared_ptr<MyClass>`
33
34Public Member Functions
35=======================
36
37:::::: {.member-functions}
38
39:::: {.member-function}
40
41MyFunction
42==========
43
44::: {.doc}
45Hello
46:::
47
48::::
49:::: {.member-function}
50
51MyOtherFunction
52===============
53
54::: {.doc}
55This is a description
56
57Panics
58======
59
60This never panics
61:::
62::::
63
64::::::
65
66:::::::::
diff --git a/res/sample-doxygen-project-1/Doxyfile b/res/sample-doxygen-project-1/Doxyfile
new file mode 100644
index 0000000..6055092
--- /dev/null
+++ b/res/sample-doxygen-project-1/Doxyfile
@@ -0,0 +1,2536 @@
1# Doxyfile 1.8.15
2
3# This file describes the settings to be used by the documentation system
4# doxygen (www.doxygen.org) for a project.
5#
6# All text after a double hash (##) is considered a comment and is placed in
7# front of the TAG it is preceding.
8#
9# All text after a single hash (#) is considered a comment and will be ignored.
10# The format is:
11# TAG = value [value, ...]
12# For lists, items can also be appended using:
13# TAG += value [value, ...]
14# Values that contain spaces should be placed between quotes (\" \").
15
16#---------------------------------------------------------------------------
17# Project related configuration options
18#---------------------------------------------------------------------------
19
20# This tag specifies the encoding used for all characters in the configuration
21# file that follow. The default is UTF-8 which is also the encoding used for all
22# text before the first occurrence of this tag. Doxygen uses libiconv (or the
23# iconv built into libc) for the transcoding. See
24# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
25# The default value is: UTF-8.
26
27DOXYFILE_ENCODING = UTF-8
28
29# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
30# double-quotes, unless you are using Doxywizard) that should identify the
31# project for which the documentation is generated. This name is used in the
32# title of most generated pages and in a few other places.
33# The default value is: My Project.
34
35PROJECT_NAME = "My Sample Project"
36
37# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
38# could be handy for archiving the generated documentation or if some version
39# control system is used.
40
41PROJECT_NUMBER =
42
43# Using the PROJECT_BRIEF tag one can provide an optional one line description
44# for a project that appears at the top of each page and should give viewer a
45# quick idea about the purpose of the project. Keep the description short.
46
47PROJECT_BRIEF =
48
49# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
50# in the documentation. The maximum height of the logo should not exceed 55
51# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
52# the logo to the output directory.
53
54PROJECT_LOGO =
55
56# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
57# into which the generated documentation will be written. If a relative path is
58# entered, it will be relative to the location where doxygen was started. If
59# left blank the current directory will be used.
60
61OUTPUT_DIRECTORY = doc
62
63# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
64# directories (in 2 levels) under the output directory of each output format and
65# will distribute the generated files over these directories. Enabling this
66# option can be useful when feeding doxygen a huge amount of source files, where
67# putting all generated files in the same directory would otherwise causes
68# performance problems for the file system.
69# The default value is: NO.
70
71CREATE_SUBDIRS = NO
72
73# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
74# characters to appear in the names of generated files. If set to NO, non-ASCII
75# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
76# U+3044.
77# The default value is: NO.
78
79ALLOW_UNICODE_NAMES = NO
80
81# The OUTPUT_LANGUAGE tag is used to specify the language in which all
82# documentation generated by doxygen is written. Doxygen will use this
83# information to generate all constant output in the proper language.
84# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
85# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
86# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
87# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
88# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
89# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
90# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
91# Ukrainian and Vietnamese.
92# The default value is: English.
93
94OUTPUT_LANGUAGE = English
95
96# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
97# documentation generated by doxygen is written. Doxygen will use this
98# information to generate all generated output in the proper direction.
99# Possible values are: None, LTR, RTL and Context.
100# The default value is: None.
101
102OUTPUT_TEXT_DIRECTION = None
103
104# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
105# descriptions after the members that are listed in the file and class
106# documentation (similar to Javadoc). Set to NO to disable this.
107# The default value is: YES.
108
109BRIEF_MEMBER_DESC = YES
110
111# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
112# description of a member or function before the detailed description
113#
114# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
115# brief descriptions will be completely suppressed.
116# The default value is: YES.
117
118REPEAT_BRIEF = YES
119
120# This tag implements a quasi-intelligent brief description abbreviator that is
121# used to form the text in various listings. Each string in this list, if found
122# as the leading text of the brief description, will be stripped from the text
123# and the result, after processing the whole list, is used as the annotated
124# text. Otherwise, the brief description is used as-is. If left blank, the
125# following values are used ($name is automatically replaced with the name of
126# the entity):The $name class, The $name widget, The $name file, is, provides,
127# specifies, contains, represents, a, an and the.
128
129ABBREVIATE_BRIEF = "The $name class" \
130 "The $name widget" \
131 "The $name file" \
132 is \
133 provides \
134 specifies \
135 contains \
136 represents \
137 a \
138 an \
139 the
140
141# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
142# doxygen will generate a detailed section even if there is only a brief
143# description.
144# The default value is: NO.
145
146ALWAYS_DETAILED_SEC = NO
147
148# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
149# inherited members of a class in the documentation of that class as if those
150# members were ordinary class members. Constructors, destructors and assignment
151# operators of the base classes will not be shown.
152# The default value is: NO.
153
154INLINE_INHERITED_MEMB = NO
155
156# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
157# before files name in the file list and in the header files. If set to NO the
158# shortest path that makes the file name unique will be used
159# The default value is: YES.
160
161FULL_PATH_NAMES = YES
162
163# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
164# Stripping is only done if one of the specified strings matches the left-hand
165# part of the path. The tag can be used to show relative paths in the file list.
166# If left blank the directory from which doxygen is run is used as the path to
167# strip.
168#
169# Note that you can specify absolute paths here, but also relative paths, which
170# will be relative from the directory where doxygen is started.
171# This tag requires that the tag FULL_PATH_NAMES is set to YES.
172
173STRIP_FROM_PATH =
174
175# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
176# path mentioned in the documentation of a class, which tells the reader which
177# header file to include in order to use a class. If left blank only the name of
178# the header file containing the class definition is used. Otherwise one should
179# specify the list of include paths that are normally passed to the compiler
180# using the -I flag.
181
182STRIP_FROM_INC_PATH =
183
184# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
185# less readable) file names. This can be useful is your file systems doesn't
186# support long names like on DOS, Mac, or CD-ROM.
187# The default value is: NO.
188
189SHORT_NAMES = NO
190
191# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
192# first line (until the first dot) of a Javadoc-style comment as the brief
193# description. If set to NO, the Javadoc-style will behave just like regular Qt-
194# style comments (thus requiring an explicit @brief command for a brief
195# description.)
196# The default value is: NO.
197
198JAVADOC_AUTOBRIEF = NO
199
200# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
201# line (until the first dot) of a Qt-style comment as the brief description. If
202# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
203# requiring an explicit \brief command for a brief description.)
204# The default value is: NO.
205
206QT_AUTOBRIEF = NO
207
208# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
209# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
210# a brief description. This used to be the default behavior. The new default is
211# to treat a multi-line C++ comment block as a detailed description. Set this
212# tag to YES if you prefer the old behavior instead.
213#
214# Note that setting this tag to YES also means that rational rose comments are
215# not recognized any more.
216# The default value is: NO.
217
218MULTILINE_CPP_IS_BRIEF = NO
219
220# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
221# documentation from any documented member that it re-implements.
222# The default value is: YES.
223
224INHERIT_DOCS = YES
225
226# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
227# page for each member. If set to NO, the documentation of a member will be part
228# of the file/class/namespace that contains it.
229# The default value is: NO.
230
231SEPARATE_MEMBER_PAGES = NO
232
233# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
234# uses this value to replace tabs by spaces in code fragments.
235# Minimum value: 1, maximum value: 16, default value: 4.
236
237TAB_SIZE = 4
238
239# This tag can be used to specify a number of aliases that act as commands in
240# the documentation. An alias has the form:
241# name=value
242# For example adding
243# "sideeffect=@par Side Effects:\n"
244# will allow you to put the command \sideeffect (or @sideeffect) in the
245# documentation, which will result in a user-defined paragraph with heading
246# "Side Effects:". You can put \n's in the value part of an alias to insert
247# newlines (in the resulting output). You can put ^^ in the value part of an
248# alias to insert a newline as if a physical newline was in the original file.
249# When you need a literal { or } or , in the value part of an alias you have to
250# escape them by means of a backslash (\), this can lead to conflicts with the
251# commands \{ and \} for these it is advised to use the version @{ and @} or use
252# a double escape (\\{ and \\})
253
254ALIASES =
255
256# This tag can be used to specify a number of word-keyword mappings (TCL only).
257# A mapping has the form "name=value". For example adding "class=itcl::class"
258# will allow you to use the command class in the itcl::class meaning.
259
260TCL_SUBST =
261
262# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
263# only. Doxygen will then generate output that is more tailored for C. For
264# instance, some of the names that are used will be different. The list of all
265# members will be omitted, etc.
266# The default value is: NO.
267
268OPTIMIZE_OUTPUT_FOR_C = NO
269
270# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
271# Python sources only. Doxygen will then generate output that is more tailored
272# for that language. For instance, namespaces will be presented as packages,
273# qualified scopes will look different, etc.
274# The default value is: NO.
275
276OPTIMIZE_OUTPUT_JAVA = NO
277
278# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
279# sources. Doxygen will then generate output that is tailored for Fortran.
280# The default value is: NO.
281
282OPTIMIZE_FOR_FORTRAN = NO
283
284# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
285# sources. Doxygen will then generate output that is tailored for VHDL.
286# The default value is: NO.
287
288OPTIMIZE_OUTPUT_VHDL = NO
289
290# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
291# sources only. Doxygen will then generate output that is more tailored for that
292# language. For instance, namespaces will be presented as modules, types will be
293# separated into more groups, etc.
294# The default value is: NO.
295
296OPTIMIZE_OUTPUT_SLICE = NO
297
298# Doxygen selects the parser to use depending on the extension of the files it
299# parses. With this tag you can assign which parser to use for a given
300# extension. Doxygen has a built-in mapping, but you can override or extend it
301# using this tag. The format is ext=language, where ext is a file extension, and
302# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
303# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
304# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
305# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
306# tries to guess whether the code is fixed or free formatted code, this is the
307# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
308# .inc files as Fortran files (default is PHP), and .f files as C (default is
309# Fortran), use: inc=Fortran f=C.
310#
311# Note: For files without extension you can use no_extension as a placeholder.
312#
313# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
314# the files are not read by doxygen.
315
316EXTENSION_MAPPING =
317
318# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
319# according to the Markdown format, which allows for more readable
320# documentation. See https://daringfireball.net/projects/markdown/ for details.
321# The output of markdown processing is further processed by doxygen, so you can
322# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
323# case of backward compatibilities issues.
324# The default value is: YES.
325
326MARKDOWN_SUPPORT = YES
327
328# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
329# to that level are automatically included in the table of contents, even if
330# they do not have an id attribute.
331# Note: This feature currently applies only to Markdown headings.
332# Minimum value: 0, maximum value: 99, default value: 0.
333# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
334
335TOC_INCLUDE_HEADINGS = 0
336
337# When enabled doxygen tries to link words that correspond to documented
338# classes, or namespaces to their corresponding documentation. Such a link can
339# be prevented in individual cases by putting a % sign in front of the word or
340# globally by setting AUTOLINK_SUPPORT to NO.
341# The default value is: YES.
342
343AUTOLINK_SUPPORT = YES
344
345# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
346# to include (a tag file for) the STL sources as input, then you should set this
347# tag to YES in order to let doxygen match functions declarations and
348# definitions whose arguments contain STL classes (e.g. func(std::string);
349# versus func(std::string) {}). This also make the inheritance and collaboration
350# diagrams that involve STL classes more complete and accurate.
351# The default value is: NO.
352
353BUILTIN_STL_SUPPORT = NO
354
355# If you use Microsoft's C++/CLI language, you should set this option to YES to
356# enable parsing support.
357# The default value is: NO.
358
359CPP_CLI_SUPPORT = NO
360
361# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
362# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
363# will parse them like normal C++ but will assume all classes use public instead
364# of private inheritance when no explicit protection keyword is present.
365# The default value is: NO.
366
367SIP_SUPPORT = NO
368
369# For Microsoft's IDL there are propget and propput attributes to indicate
370# getter and setter methods for a property. Setting this option to YES will make
371# doxygen to replace the get and set methods by a property in the documentation.
372# This will only work if the methods are indeed getting or setting a simple
373# type. If this is not the case, or you want to show the methods anyway, you
374# should set this option to NO.
375# The default value is: YES.
376
377IDL_PROPERTY_SUPPORT = YES
378
379# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
380# tag is set to YES then doxygen will reuse the documentation of the first
381# member in the group (if any) for the other members of the group. By default
382# all members of a group must be documented explicitly.
383# The default value is: NO.
384
385DISTRIBUTE_GROUP_DOC = NO
386
387# If one adds a struct or class to a group and this option is enabled, then also
388# any nested class or struct is added to the same group. By default this option
389# is disabled and one has to add nested compounds explicitly via \ingroup.
390# The default value is: NO.
391
392GROUP_NESTED_COMPOUNDS = NO
393
394# Set the SUBGROUPING tag to YES to allow class member groups of the same type
395# (for instance a group of public functions) to be put as a subgroup of that
396# type (e.g. under the Public Functions section). Set it to NO to prevent
397# subgrouping. Alternatively, this can be done per class using the
398# \nosubgrouping command.
399# The default value is: YES.
400
401SUBGROUPING = YES
402
403# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
404# are shown inside the group in which they are included (e.g. using \ingroup)
405# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
406# and RTF).
407#
408# Note that this feature does not work in combination with
409# SEPARATE_MEMBER_PAGES.
410# The default value is: NO.
411
412INLINE_GROUPED_CLASSES = NO
413
414# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
415# with only public data fields or simple typedef fields will be shown inline in
416# the documentation of the scope in which they are defined (i.e. file,
417# namespace, or group documentation), provided this scope is documented. If set
418# to NO, structs, classes, and unions are shown on a separate page (for HTML and
419# Man pages) or section (for LaTeX and RTF).
420# The default value is: NO.
421
422INLINE_SIMPLE_STRUCTS = NO
423
424# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
425# enum is documented as struct, union, or enum with the name of the typedef. So
426# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
427# with name TypeT. When disabled the typedef will appear as a member of a file,
428# namespace, or class. And the struct will be named TypeS. This can typically be
429# useful for C code in case the coding convention dictates that all compound
430# types are typedef'ed and only the typedef is referenced, never the tag name.
431# The default value is: NO.
432
433TYPEDEF_HIDES_STRUCT = NO
434
435# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
436# cache is used to resolve symbols given their name and scope. Since this can be
437# an expensive process and often the same symbol appears multiple times in the
438# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
439# doxygen will become slower. If the cache is too large, memory is wasted. The
440# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
441# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
442# symbols. At the end of a run doxygen will report the cache usage and suggest
443# the optimal cache size from a speed point of view.
444# Minimum value: 0, maximum value: 9, default value: 0.
445
446LOOKUP_CACHE_SIZE = 0
447
448#---------------------------------------------------------------------------
449# Build related configuration options
450#---------------------------------------------------------------------------
451
452# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
453# documentation are documented, even if no documentation was available. Private
454# class members and static file members will be hidden unless the
455# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
456# Note: This will also disable the warnings about undocumented members that are
457# normally produced when WARNINGS is set to YES.
458# The default value is: NO.
459
460EXTRACT_ALL = NO
461
462# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
463# be included in the documentation.
464# The default value is: NO.
465
466EXTRACT_PRIVATE = NO
467
468# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
469# scope will be included in the documentation.
470# The default value is: NO.
471
472EXTRACT_PACKAGE = NO
473
474# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
475# included in the documentation.
476# The default value is: NO.
477
478EXTRACT_STATIC = NO
479
480# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
481# locally in source files will be included in the documentation. If set to NO,
482# only classes defined in header files are included. Does not have any effect
483# for Java sources.
484# The default value is: YES.
485
486EXTRACT_LOCAL_CLASSES = YES
487
488# This flag is only useful for Objective-C code. If set to YES, local methods,
489# which are defined in the implementation section but not in the interface are
490# included in the documentation. If set to NO, only methods in the interface are
491# included.
492# The default value is: NO.
493
494EXTRACT_LOCAL_METHODS = NO
495
496# If this flag is set to YES, the members of anonymous namespaces will be
497# extracted and appear in the documentation as a namespace called
498# 'anonymous_namespace{file}', where file will be replaced with the base name of
499# the file that contains the anonymous namespace. By default anonymous namespace
500# are hidden.
501# The default value is: NO.
502
503EXTRACT_ANON_NSPACES = NO
504
505# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
506# undocumented members inside documented classes or files. If set to NO these
507# members will be included in the various overviews, but no documentation
508# section is generated. This option has no effect if EXTRACT_ALL is enabled.
509# The default value is: NO.
510
511HIDE_UNDOC_MEMBERS = NO
512
513# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
514# undocumented classes that are normally visible in the class hierarchy. If set
515# to NO, these classes will be included in the various overviews. This option
516# has no effect if EXTRACT_ALL is enabled.
517# The default value is: NO.
518
519HIDE_UNDOC_CLASSES = NO
520
521# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
522# (class|struct|union) declarations. If set to NO, these declarations will be
523# included in the documentation.
524# The default value is: NO.
525
526HIDE_FRIEND_COMPOUNDS = NO
527
528# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
529# documentation blocks found inside the body of a function. If set to NO, these
530# blocks will be appended to the function's detailed documentation block.
531# The default value is: NO.
532
533HIDE_IN_BODY_DOCS = NO
534
535# The INTERNAL_DOCS tag determines if documentation that is typed after a
536# \internal command is included. If the tag is set to NO then the documentation
537# will be excluded. Set it to YES to include the internal documentation.
538# The default value is: NO.
539
540INTERNAL_DOCS = NO
541
542# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
543# names in lower-case letters. If set to YES, upper-case letters are also
544# allowed. This is useful if you have classes or files whose names only differ
545# in case and if your file system supports case sensitive file names. Windows
546# and Mac users are advised to set this option to NO.
547# The default value is: system dependent.
548
549CASE_SENSE_NAMES = NO
550
551# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
552# their full class and namespace scopes in the documentation. If set to YES, the
553# scope will be hidden.
554# The default value is: NO.
555
556HIDE_SCOPE_NAMES = NO
557
558# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
559# append additional text to a page's title, such as Class Reference. If set to
560# YES the compound reference will be hidden.
561# The default value is: NO.
562
563HIDE_COMPOUND_REFERENCE= NO
564
565# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
566# the files that are included by a file in the documentation of that file.
567# The default value is: YES.
568
569SHOW_INCLUDE_FILES = YES
570
571# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
572# grouped member an include statement to the documentation, telling the reader
573# which file to include in order to use the member.
574# The default value is: NO.
575
576SHOW_GROUPED_MEMB_INC = NO
577
578# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
579# files with double quotes in the documentation rather than with sharp brackets.
580# The default value is: NO.
581
582FORCE_LOCAL_INCLUDES = NO
583
584# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
585# documentation for inline members.
586# The default value is: YES.
587
588INLINE_INFO = YES
589
590# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
591# (detailed) documentation of file and class members alphabetically by member
592# name. If set to NO, the members will appear in declaration order.
593# The default value is: YES.
594
595SORT_MEMBER_DOCS = YES
596
597# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
598# descriptions of file, namespace and class members alphabetically by member
599# name. If set to NO, the members will appear in declaration order. Note that
600# this will also influence the order of the classes in the class list.
601# The default value is: NO.
602
603SORT_BRIEF_DOCS = NO
604
605# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
606# (brief and detailed) documentation of class members so that constructors and
607# destructors are listed first. If set to NO the constructors will appear in the
608# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
609# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
610# member documentation.
611# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
612# detailed member documentation.
613# The default value is: NO.
614
615SORT_MEMBERS_CTORS_1ST = NO
616
617# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
618# of group names into alphabetical order. If set to NO the group names will
619# appear in their defined order.
620# The default value is: NO.
621
622SORT_GROUP_NAMES = NO
623
624# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
625# fully-qualified names, including namespaces. If set to NO, the class list will
626# be sorted only by class name, not including the namespace part.
627# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
628# Note: This option applies only to the class list, not to the alphabetical
629# list.
630# The default value is: NO.
631
632SORT_BY_SCOPE_NAME = NO
633
634# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
635# type resolution of all parameters of a function it will reject a match between
636# the prototype and the implementation of a member function even if there is
637# only one candidate or it is obvious which candidate to choose by doing a
638# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
639# accept a match between prototype and implementation in such cases.
640# The default value is: NO.
641
642STRICT_PROTO_MATCHING = NO
643
644# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
645# list. This list is created by putting \todo commands in the documentation.
646# The default value is: YES.
647
648GENERATE_TODOLIST = YES
649
650# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
651# list. This list is created by putting \test commands in the documentation.
652# The default value is: YES.
653
654GENERATE_TESTLIST = YES
655
656# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
657# list. This list is created by putting \bug commands in the documentation.
658# The default value is: YES.
659
660GENERATE_BUGLIST = YES
661
662# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
663# the deprecated list. This list is created by putting \deprecated commands in
664# the documentation.
665# The default value is: YES.
666
667GENERATE_DEPRECATEDLIST= YES
668
669# The ENABLED_SECTIONS tag can be used to enable conditional documentation
670# sections, marked by \if <section_label> ... \endif and \cond <section_label>
671# ... \endcond blocks.
672
673ENABLED_SECTIONS =
674
675# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
676# initial value of a variable or macro / define can have for it to appear in the
677# documentation. If the initializer consists of more lines than specified here
678# it will be hidden. Use a value of 0 to hide initializers completely. The
679# appearance of the value of individual variables and macros / defines can be
680# controlled using \showinitializer or \hideinitializer command in the
681# documentation regardless of this setting.
682# Minimum value: 0, maximum value: 10000, default value: 30.
683
684MAX_INITIALIZER_LINES = 30
685
686# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
687# the bottom of the documentation of classes and structs. If set to YES, the
688# list will mention the files that were used to generate the documentation.
689# The default value is: YES.
690
691SHOW_USED_FILES = YES
692
693# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
694# will remove the Files entry from the Quick Index and from the Folder Tree View
695# (if specified).
696# The default value is: YES.
697
698SHOW_FILES = YES
699
700# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
701# page. This will remove the Namespaces entry from the Quick Index and from the
702# Folder Tree View (if specified).
703# The default value is: YES.
704
705SHOW_NAMESPACES = YES
706
707# The FILE_VERSION_FILTER tag can be used to specify a program or script that
708# doxygen should invoke to get the current version for each file (typically from
709# the version control system). Doxygen will invoke the program by executing (via
710# popen()) the command command input-file, where command is the value of the
711# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
712# by doxygen. Whatever the program writes to standard output is used as the file
713# version. For an example see the documentation.
714
715FILE_VERSION_FILTER =
716
717# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
718# by doxygen. The layout file controls the global structure of the generated
719# output files in an output format independent way. To create the layout file
720# that represents doxygen's defaults, run doxygen with the -l option. You can
721# optionally specify a file name after the option, if omitted DoxygenLayout.xml
722# will be used as the name of the layout file.
723#
724# Note that if you run doxygen from a directory containing a file called
725# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
726# tag is left empty.
727
728LAYOUT_FILE =
729
730# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
731# the reference definitions. This must be a list of .bib files. The .bib
732# extension is automatically appended if omitted. This requires the bibtex tool
733# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
734# For LaTeX the style of the bibliography can be controlled using
735# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
736# search path. See also \cite for info how to create references.
737
738CITE_BIB_FILES =
739
740#---------------------------------------------------------------------------
741# Configuration options related to warning and progress messages
742#---------------------------------------------------------------------------
743
744# The QUIET tag can be used to turn on/off the messages that are generated to
745# standard output by doxygen. If QUIET is set to YES this implies that the
746# messages are off.
747# The default value is: NO.
748
749QUIET = NO
750
751# The WARNINGS tag can be used to turn on/off the warning messages that are
752# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
753# this implies that the warnings are on.
754#
755# Tip: Turn warnings on while writing the documentation.
756# The default value is: YES.
757
758WARNINGS = YES
759
760# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
761# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
762# will automatically be disabled.
763# The default value is: YES.
764
765WARN_IF_UNDOCUMENTED = YES
766
767# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
768# potential errors in the documentation, such as not documenting some parameters
769# in a documented function, or documenting parameters that don't exist or using
770# markup commands wrongly.
771# The default value is: YES.
772
773WARN_IF_DOC_ERROR = YES
774
775# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
776# are documented, but have no documentation for their parameters or return
777# value. If set to NO, doxygen will only warn about wrong or incomplete
778# parameter documentation, but not about the absence of documentation. If
779# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
780# The default value is: NO.
781
782WARN_NO_PARAMDOC = NO
783
784# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
785# a warning is encountered.
786# The default value is: NO.
787
788WARN_AS_ERROR = NO
789
790# The WARN_FORMAT tag determines the format of the warning messages that doxygen
791# can produce. The string should contain the $file, $line, and $text tags, which
792# will be replaced by the file and line number from which the warning originated
793# and the warning text. Optionally the format may contain $version, which will
794# be replaced by the version of the file (if it could be obtained via
795# FILE_VERSION_FILTER)
796# The default value is: $file:$line: $text.
797
798WARN_FORMAT = "$file:$line: $text"
799
800# The WARN_LOGFILE tag can be used to specify a file to which warning and error
801# messages should be written. If left blank the output is written to standard
802# error (stderr).
803
804WARN_LOGFILE =
805
806#---------------------------------------------------------------------------
807# Configuration options related to the input files
808#---------------------------------------------------------------------------
809
810# The INPUT tag is used to specify the files and/or directories that contain
811# documented source files. You may enter file names like myfile.cpp or
812# directories like /usr/src/myproject. Separate the files or directories with
813# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
814# Note: If this tag is empty the current directory is searched.
815
816INPUT = .
817
818# This tag can be used to specify the character encoding of the source files
819# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
820# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
821# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
822# possible encodings.
823# The default value is: UTF-8.
824
825INPUT_ENCODING = UTF-8
826
827# If the value of the INPUT tag contains directories, you can use the
828# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
829# *.h) to filter out the source-files in the directories.
830#
831# Note that for custom extensions or not directly supported extensions you also
832# need to set EXTENSION_MAPPING for the extension otherwise the files are not
833# read by doxygen.
834#
835# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
836# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
837# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
838# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
839# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
840
841FILE_PATTERNS = *.c \
842 *.cc \
843 *.cxx \
844 *.cpp \
845 *.c++ \
846 *.java \
847 *.ii \
848 *.ixx \
849 *.ipp \
850 *.i++ \
851 *.inl \
852 *.idl \
853 *.ddl \
854 *.odl \
855 *.h \
856 *.hh \
857 *.hxx \
858 *.hpp \
859 *.h++ \
860 *.cs \
861 *.d \
862 *.php \
863 *.php4 \
864 *.php5 \
865 *.phtml \
866 *.inc \
867 *.m \
868 *.markdown \
869 *.md \
870 *.mm \
871 *.dox \
872 *.py \
873 *.pyw \
874 *.f90 \
875 *.f95 \
876 *.f03 \
877 *.f08 \
878 *.f \
879 *.for \
880 *.tcl \
881 *.vhd \
882 *.vhdl \
883 *.ucf \
884 *.qsf \
885 *.ice
886
887# The RECURSIVE tag can be used to specify whether or not subdirectories should
888# be searched for input files as well.
889# The default value is: NO.
890
891RECURSIVE = YES
892
893# The EXCLUDE tag can be used to specify files and/or directories that should be
894# excluded from the INPUT source files. This way you can easily exclude a
895# subdirectory from a directory tree whose root is specified with the INPUT tag.
896#
897# Note that relative paths are relative to the directory from which doxygen is
898# run.
899
900EXCLUDE =
901
902# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
903# directories that are symbolic links (a Unix file system feature) are excluded
904# from the input.
905# The default value is: NO.
906
907EXCLUDE_SYMLINKS = NO
908
909# If the value of the INPUT tag contains directories, you can use the
910# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
911# certain files from those directories.
912#
913# Note that the wildcards are matched against the file with absolute path, so to
914# exclude all test directories for example use the pattern */test/*
915
916EXCLUDE_PATTERNS =
917
918# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
919# (namespaces, classes, functions, etc.) that should be excluded from the
920# output. The symbol name can be a fully qualified name, a word, or if the
921# wildcard * is used, a substring. Examples: ANamespace, AClass,
922# AClass::ANamespace, ANamespace::*Test
923#
924# Note that the wildcards are matched against the file with absolute path, so to
925# exclude all test directories use the pattern */test/*
926
927EXCLUDE_SYMBOLS =
928
929# The EXAMPLE_PATH tag can be used to specify one or more files or directories
930# that contain example code fragments that are included (see the \include
931# command).
932
933EXAMPLE_PATH =
934
935# If the value of the EXAMPLE_PATH tag contains directories, you can use the
936# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
937# *.h) to filter out the source-files in the directories. If left blank all
938# files are included.
939
940EXAMPLE_PATTERNS = *
941
942# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
943# searched for input files to be used with the \include or \dontinclude commands
944# irrespective of the value of the RECURSIVE tag.
945# The default value is: NO.
946
947EXAMPLE_RECURSIVE = NO
948
949# The IMAGE_PATH tag can be used to specify one or more files or directories
950# that contain images that are to be included in the documentation (see the
951# \image command).
952
953IMAGE_PATH =
954
955# The INPUT_FILTER tag can be used to specify a program that doxygen should
956# invoke to filter for each input file. Doxygen will invoke the filter program
957# by executing (via popen()) the command:
958#
959# <filter> <input-file>
960#
961# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
962# name of an input file. Doxygen will then use the output that the filter
963# program writes to standard output. If FILTER_PATTERNS is specified, this tag
964# will be ignored.
965#
966# Note that the filter must not add or remove lines; it is applied before the
967# code is scanned, but not when the output code is generated. If lines are added
968# or removed, the anchors will not be placed correctly.
969#
970# Note that for custom extensions or not directly supported extensions you also
971# need to set EXTENSION_MAPPING for the extension otherwise the files are not
972# properly processed by doxygen.
973
974INPUT_FILTER =
975
976# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
977# basis. Doxygen will compare the file name with each pattern and apply the
978# filter if there is a match. The filters are a list of the form: pattern=filter
979# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
980# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
981# patterns match the file name, INPUT_FILTER is applied.
982#
983# Note that for custom extensions or not directly supported extensions you also
984# need to set EXTENSION_MAPPING for the extension otherwise the files are not
985# properly processed by doxygen.
986
987FILTER_PATTERNS =
988
989# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
990# INPUT_FILTER) will also be used to filter the input files that are used for
991# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
992# The default value is: NO.
993
994FILTER_SOURCE_FILES = NO
995
996# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
997# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
998# it is also possible to disable source filtering for a specific pattern using
999# *.ext= (so without naming a filter).
1000# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
1001
1002FILTER_SOURCE_PATTERNS =
1003
1004# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
1005# is part of the input, its contents will be placed on the main page
1006# (index.html). This can be useful if you have a project on for instance GitHub
1007# and want to reuse the introduction page also for the doxygen output.
1008
1009USE_MDFILE_AS_MAINPAGE =
1010
1011#---------------------------------------------------------------------------
1012# Configuration options related to source browsing
1013#---------------------------------------------------------------------------
1014
1015# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
1016# generated. Documented entities will be cross-referenced with these sources.
1017#
1018# Note: To get rid of all source code in the generated output, make sure that
1019# also VERBATIM_HEADERS is set to NO.
1020# The default value is: NO.
1021
1022SOURCE_BROWSER = NO
1023
1024# Setting the INLINE_SOURCES tag to YES will include the body of functions,
1025# classes and enums directly into the documentation.
1026# The default value is: NO.
1027
1028INLINE_SOURCES = NO
1029
1030# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
1031# special comment blocks from generated source code fragments. Normal C, C++ and
1032# Fortran comments will always remain visible.
1033# The default value is: YES.
1034
1035STRIP_CODE_COMMENTS = YES
1036
1037# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
1038# entity all documented functions referencing it will be listed.
1039# The default value is: NO.
1040
1041REFERENCED_BY_RELATION = NO
1042
1043# If the REFERENCES_RELATION tag is set to YES then for each documented function
1044# all documented entities called/used by that function will be listed.
1045# The default value is: NO.
1046
1047REFERENCES_RELATION = NO
1048
1049# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
1050# to YES then the hyperlinks from functions in REFERENCES_RELATION and
1051# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
1052# link to the documentation.
1053# The default value is: YES.
1054
1055REFERENCES_LINK_SOURCE = YES
1056
1057# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
1058# source code will show a tooltip with additional information such as prototype,
1059# brief description and links to the definition and documentation. Since this
1060# will make the HTML file larger and loading of large files a bit slower, you
1061# can opt to disable this feature.
1062# The default value is: YES.
1063# This tag requires that the tag SOURCE_BROWSER is set to YES.
1064
1065SOURCE_TOOLTIPS = YES
1066
1067# If the USE_HTAGS tag is set to YES then the references to source code will
1068# point to the HTML generated by the htags(1) tool instead of doxygen built-in
1069# source browser. The htags tool is part of GNU's global source tagging system
1070# (see https://www.gnu.org/software/global/global.html). You will need version
1071# 4.8.6 or higher.
1072#
1073# To use it do the following:
1074# - Install the latest version of global
1075# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
1076# - Make sure the INPUT points to the root of the source tree
1077# - Run doxygen as normal
1078#
1079# Doxygen will invoke htags (and that will in turn invoke gtags), so these
1080# tools must be available from the command line (i.e. in the search path).
1081#
1082# The result: instead of the source browser generated by doxygen, the links to
1083# source code will now point to the output of htags.
1084# The default value is: NO.
1085# This tag requires that the tag SOURCE_BROWSER is set to YES.
1086
1087USE_HTAGS = NO
1088
1089# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
1090# verbatim copy of the header file for each class for which an include is
1091# specified. Set to NO to disable this.
1092# See also: Section \class.
1093# The default value is: YES.
1094
1095VERBATIM_HEADERS = YES
1096
1097#---------------------------------------------------------------------------
1098# Configuration options related to the alphabetical class index
1099#---------------------------------------------------------------------------
1100
1101# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
1102# compounds will be generated. Enable this if the project contains a lot of
1103# classes, structs, unions or interfaces.
1104# The default value is: YES.
1105
1106ALPHABETICAL_INDEX = YES
1107
1108# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
1109# which the alphabetical index list will be split.
1110# Minimum value: 1, maximum value: 20, default value: 5.
1111# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1112
1113COLS_IN_ALPHA_INDEX = 5
1114
1115# In case all classes in a project start with a common prefix, all classes will
1116# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1117# can be used to specify a prefix (or a list of prefixes) that should be ignored
1118# while generating the index headers.
1119# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1120
1121IGNORE_PREFIX =
1122
1123#---------------------------------------------------------------------------
1124# Configuration options related to the HTML output
1125#---------------------------------------------------------------------------
1126
1127# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
1128# The default value is: YES.
1129
1130GENERATE_HTML = YES
1131
1132# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1133# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1134# it.
1135# The default directory is: html.
1136# This tag requires that the tag GENERATE_HTML is set to YES.
1137
1138HTML_OUTPUT = html
1139
1140# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1141# generated HTML page (for example: .htm, .php, .asp).
1142# The default value is: .html.
1143# This tag requires that the tag GENERATE_HTML is set to YES.
1144
1145HTML_FILE_EXTENSION = .html
1146
1147# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1148# each generated HTML page. If the tag is left blank doxygen will generate a
1149# standard header.
1150#
1151# To get valid HTML the header file that includes any scripts and style sheets
1152# that doxygen needs, which is dependent on the configuration options used (e.g.
1153# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1154# default header using
1155# doxygen -w html new_header.html new_footer.html new_stylesheet.css
1156# YourConfigFile
1157# and then modify the file new_header.html. See also section "Doxygen usage"
1158# for information on how to generate the default header that doxygen normally
1159# uses.
1160# Note: The header is subject to change so you typically have to regenerate the
1161# default header when upgrading to a newer version of doxygen. For a description
1162# of the possible markers and block names see the documentation.
1163# This tag requires that the tag GENERATE_HTML is set to YES.
1164
1165HTML_HEADER =
1166
1167# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1168# generated HTML page. If the tag is left blank doxygen will generate a standard
1169# footer. See HTML_HEADER for more information on how to generate a default
1170# footer and what special commands can be used inside the footer. See also
1171# section "Doxygen usage" for information on how to generate the default footer
1172# that doxygen normally uses.
1173# This tag requires that the tag GENERATE_HTML is set to YES.
1174
1175HTML_FOOTER =
1176
1177# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1178# sheet that is used by each HTML page. It can be used to fine-tune the look of
1179# the HTML output. If left blank doxygen will generate a default style sheet.
1180# See also section "Doxygen usage" for information on how to generate the style
1181# sheet that doxygen normally uses.
1182# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1183# it is more robust and this tag (HTML_STYLESHEET) will in the future become
1184# obsolete.
1185# This tag requires that the tag GENERATE_HTML is set to YES.
1186
1187HTML_STYLESHEET =
1188
1189# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1190# cascading style sheets that are included after the standard style sheets
1191# created by doxygen. Using this option one can overrule certain style aspects.
1192# This is preferred over using HTML_STYLESHEET since it does not replace the
1193# standard style sheet and is therefore more robust against future updates.
1194# Doxygen will copy the style sheet files to the output directory.
1195# Note: The order of the extra style sheet files is of importance (e.g. the last
1196# style sheet in the list overrules the setting of the previous ones in the
1197# list). For an example see the documentation.
1198# This tag requires that the tag GENERATE_HTML is set to YES.
1199
1200HTML_EXTRA_STYLESHEET =
1201
1202# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1203# other source files which should be copied to the HTML output directory. Note
1204# that these files will be copied to the base HTML output directory. Use the
1205# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1206# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1207# files will be copied as-is; there are no commands or markers available.
1208# This tag requires that the tag GENERATE_HTML is set to YES.
1209
1210HTML_EXTRA_FILES =
1211
1212# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1213# will adjust the colors in the style sheet and background images according to
1214# this color. Hue is specified as an angle on a colorwheel, see
1215# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
1216# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1217# purple, and 360 is red again.
1218# Minimum value: 0, maximum value: 359, default value: 220.
1219# This tag requires that the tag GENERATE_HTML is set to YES.
1220
1221HTML_COLORSTYLE_HUE = 220
1222
1223# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1224# in the HTML output. For a value of 0 the output will use grayscales only. A
1225# value of 255 will produce the most vivid colors.
1226# Minimum value: 0, maximum value: 255, default value: 100.
1227# This tag requires that the tag GENERATE_HTML is set to YES.
1228
1229HTML_COLORSTYLE_SAT = 100
1230
1231# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1232# luminance component of the colors in the HTML output. Values below 100
1233# gradually make the output lighter, whereas values above 100 make the output
1234# darker. The value divided by 100 is the actual gamma applied, so 80 represents
1235# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1236# change the gamma.
1237# Minimum value: 40, maximum value: 240, default value: 80.
1238# This tag requires that the tag GENERATE_HTML is set to YES.
1239
1240HTML_COLORSTYLE_GAMMA = 80
1241
1242# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1243# page will contain the date and time when the page was generated. Setting this
1244# to YES can help to show when doxygen was last run and thus if the
1245# documentation is up to date.
1246# The default value is: NO.
1247# This tag requires that the tag GENERATE_HTML is set to YES.
1248
1249HTML_TIMESTAMP = NO
1250
1251# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
1252# documentation will contain a main index with vertical navigation menus that
1253# are dynamically created via Javascript. If disabled, the navigation index will
1254# consists of multiple levels of tabs that are statically embedded in every HTML
1255# page. Disable this option to support browsers that do not have Javascript,
1256# like the Qt help browser.
1257# The default value is: YES.
1258# This tag requires that the tag GENERATE_HTML is set to YES.
1259
1260HTML_DYNAMIC_MENUS = YES
1261
1262# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1263# documentation will contain sections that can be hidden and shown after the
1264# page has loaded.
1265# The default value is: NO.
1266# This tag requires that the tag GENERATE_HTML is set to YES.
1267
1268HTML_DYNAMIC_SECTIONS = NO
1269
1270# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1271# shown in the various tree structured indices initially; the user can expand
1272# and collapse entries dynamically later on. Doxygen will expand the tree to
1273# such a level that at most the specified number of entries are visible (unless
1274# a fully collapsed tree already exceeds this amount). So setting the number of
1275# entries 1 will produce a full collapsed tree by default. 0 is a special value
1276# representing an infinite number of entries and will result in a full expanded
1277# tree by default.
1278# Minimum value: 0, maximum value: 9999, default value: 100.
1279# This tag requires that the tag GENERATE_HTML is set to YES.
1280
1281HTML_INDEX_NUM_ENTRIES = 100
1282
1283# If the GENERATE_DOCSET tag is set to YES, additional index files will be
1284# generated that can be used as input for Apple's Xcode 3 integrated development
1285# environment (see: https://developer.apple.com/xcode/), introduced with OSX
1286# 10.5 (Leopard). To create a documentation set, doxygen will generate a
1287# Makefile in the HTML output directory. Running make will produce the docset in
1288# that directory and running make install will install the docset in
1289# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1290# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
1291# genXcode/_index.html for more information.
1292# The default value is: NO.
1293# This tag requires that the tag GENERATE_HTML is set to YES.
1294
1295GENERATE_DOCSET = NO
1296
1297# This tag determines the name of the docset feed. A documentation feed provides
1298# an umbrella under which multiple documentation sets from a single provider
1299# (such as a company or product suite) can be grouped.
1300# The default value is: Doxygen generated docs.
1301# This tag requires that the tag GENERATE_DOCSET is set to YES.
1302
1303DOCSET_FEEDNAME = "Doxygen generated docs"
1304
1305# This tag specifies a string that should uniquely identify the documentation
1306# set bundle. This should be a reverse domain-name style string, e.g.
1307# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1308# The default value is: org.doxygen.Project.
1309# This tag requires that the tag GENERATE_DOCSET is set to YES.
1310
1311DOCSET_BUNDLE_ID = org.doxygen.Project
1312
1313# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1314# the documentation publisher. This should be a reverse domain-name style
1315# string, e.g. com.mycompany.MyDocSet.documentation.
1316# The default value is: org.doxygen.Publisher.
1317# This tag requires that the tag GENERATE_DOCSET is set to YES.
1318
1319DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1320
1321# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1322# The default value is: Publisher.
1323# This tag requires that the tag GENERATE_DOCSET is set to YES.
1324
1325DOCSET_PUBLISHER_NAME = Publisher
1326
1327# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1328# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1329# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1330# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1331# Windows.
1332#
1333# The HTML Help Workshop contains a compiler that can convert all HTML output
1334# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1335# files are now used as the Windows 98 help format, and will replace the old
1336# Windows help format (.hlp) on all Windows platforms in the future. Compressed
1337# HTML files also contain an index, a table of contents, and you can search for
1338# words in the documentation. The HTML workshop also contains a viewer for
1339# compressed HTML files.
1340# The default value is: NO.
1341# This tag requires that the tag GENERATE_HTML is set to YES.
1342
1343GENERATE_HTMLHELP = NO
1344
1345# The CHM_FILE tag can be used to specify the file name of the resulting .chm
1346# file. You can add a path in front of the file if the result should not be
1347# written to the html output directory.
1348# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1349
1350CHM_FILE =
1351
1352# The HHC_LOCATION tag can be used to specify the location (absolute path
1353# including file name) of the HTML help compiler (hhc.exe). If non-empty,
1354# doxygen will try to run the HTML help compiler on the generated index.hhp.
1355# The file has to be specified with full path.
1356# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1357
1358HHC_LOCATION =
1359
1360# The GENERATE_CHI flag controls if a separate .chi index file is generated
1361# (YES) or that it should be included in the master .chm file (NO).
1362# The default value is: NO.
1363# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1364
1365GENERATE_CHI = NO
1366
1367# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
1368# and project file content.
1369# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1370
1371CHM_INDEX_ENCODING =
1372
1373# The BINARY_TOC flag controls whether a binary table of contents is generated
1374# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
1375# enables the Previous and Next buttons.
1376# The default value is: NO.
1377# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1378
1379BINARY_TOC = NO
1380
1381# The TOC_EXPAND flag can be set to YES to add extra items for group members to
1382# the table of contents of the HTML help documentation and to the tree view.
1383# The default value is: NO.
1384# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1385
1386TOC_EXPAND = NO
1387
1388# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1389# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1390# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1391# (.qch) of the generated HTML documentation.
1392# The default value is: NO.
1393# This tag requires that the tag GENERATE_HTML is set to YES.
1394
1395GENERATE_QHP = NO
1396
1397# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1398# the file name of the resulting .qch file. The path specified is relative to
1399# the HTML output folder.
1400# This tag requires that the tag GENERATE_QHP is set to YES.
1401
1402QCH_FILE =
1403
1404# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1405# Project output. For more information please see Qt Help Project / Namespace
1406# (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
1407# The default value is: org.doxygen.Project.
1408# This tag requires that the tag GENERATE_QHP is set to YES.
1409
1410QHP_NAMESPACE = org.doxygen.Project
1411
1412# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1413# Help Project output. For more information please see Qt Help Project / Virtual
1414# Folders (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
1415# folders).
1416# The default value is: doc.
1417# This tag requires that the tag GENERATE_QHP is set to YES.
1418
1419QHP_VIRTUAL_FOLDER = doc
1420
1421# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1422# filter to add. For more information please see Qt Help Project / Custom
1423# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
1424# filters).
1425# This tag requires that the tag GENERATE_QHP is set to YES.
1426
1427QHP_CUST_FILTER_NAME =
1428
1429# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1430# custom filter to add. For more information please see Qt Help Project / Custom
1431# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
1432# filters).
1433# This tag requires that the tag GENERATE_QHP is set to YES.
1434
1435QHP_CUST_FILTER_ATTRS =
1436
1437# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1438# project's filter section matches. Qt Help Project / Filter Attributes (see:
1439# http://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
1440# This tag requires that the tag GENERATE_QHP is set to YES.
1441
1442QHP_SECT_FILTER_ATTRS =
1443
1444# The QHG_LOCATION tag can be used to specify the location of Qt's
1445# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1446# generated .qhp file.
1447# This tag requires that the tag GENERATE_QHP is set to YES.
1448
1449QHG_LOCATION =
1450
1451# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1452# generated, together with the HTML files, they form an Eclipse help plugin. To
1453# install this plugin and make it available under the help contents menu in
1454# Eclipse, the contents of the directory containing the HTML and XML files needs
1455# to be copied into the plugins directory of eclipse. The name of the directory
1456# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1457# After copying Eclipse needs to be restarted before the help appears.
1458# The default value is: NO.
1459# This tag requires that the tag GENERATE_HTML is set to YES.
1460
1461GENERATE_ECLIPSEHELP = NO
1462
1463# A unique identifier for the Eclipse help plugin. When installing the plugin
1464# the directory name containing the HTML and XML files should also have this
1465# name. Each documentation set should have its own identifier.
1466# The default value is: org.doxygen.Project.
1467# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
1468
1469ECLIPSE_DOC_ID = org.doxygen.Project
1470
1471# If you want full control over the layout of the generated HTML pages it might
1472# be necessary to disable the index and replace it with your own. The
1473# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
1474# of each HTML page. A value of NO enables the index and the value YES disables
1475# it. Since the tabs in the index contain the same information as the navigation
1476# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
1477# The default value is: NO.
1478# This tag requires that the tag GENERATE_HTML is set to YES.
1479
1480DISABLE_INDEX = NO
1481
1482# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1483# structure should be generated to display hierarchical information. If the tag
1484# value is set to YES, a side panel will be generated containing a tree-like
1485# index structure (just like the one that is generated for HTML Help). For this
1486# to work a browser that supports JavaScript, DHTML, CSS and frames is required
1487# (i.e. any modern browser). Windows users are probably better off using the
1488# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
1489# further fine-tune the look of the index. As an example, the default style
1490# sheet generated by doxygen has an example that shows how to put an image at
1491# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
1492# the same information as the tab index, you could consider setting
1493# DISABLE_INDEX to YES when enabling this option.
1494# The default value is: NO.
1495# This tag requires that the tag GENERATE_HTML is set to YES.
1496
1497GENERATE_TREEVIEW = NO
1498
1499# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1500# doxygen will group on one line in the generated HTML documentation.
1501#
1502# Note that a value of 0 will completely suppress the enum values from appearing
1503# in the overview section.
1504# Minimum value: 0, maximum value: 20, default value: 4.
1505# This tag requires that the tag GENERATE_HTML is set to YES.
1506
1507ENUM_VALUES_PER_LINE = 4
1508
1509# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
1510# to set the initial width (in pixels) of the frame in which the tree is shown.
1511# Minimum value: 0, maximum value: 1500, default value: 250.
1512# This tag requires that the tag GENERATE_HTML is set to YES.
1513
1514TREEVIEW_WIDTH = 250
1515
1516# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
1517# external symbols imported via tag files in a separate window.
1518# The default value is: NO.
1519# This tag requires that the tag GENERATE_HTML is set to YES.
1520
1521EXT_LINKS_IN_WINDOW = NO
1522
1523# Use this tag to change the font size of LaTeX formulas included as images in
1524# the HTML documentation. When you change the font size after a successful
1525# doxygen run you need to manually remove any form_*.png images from the HTML
1526# output directory to force them to be regenerated.
1527# Minimum value: 8, maximum value: 50, default value: 10.
1528# This tag requires that the tag GENERATE_HTML is set to YES.
1529
1530FORMULA_FONTSIZE = 10
1531
1532# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
1533# generated for formulas are transparent PNGs. Transparent PNGs are not
1534# supported properly for IE 6.0, but are supported on all modern browsers.
1535#
1536# Note that when changing this option you need to delete any form_*.png files in
1537# the HTML output directory before the changes have effect.
1538# The default value is: YES.
1539# This tag requires that the tag GENERATE_HTML is set to YES.
1540
1541FORMULA_TRANSPARENT = YES
1542
1543# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1544# https://www.mathjax.org) which uses client side Javascript for the rendering
1545# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
1546# installed or if you want to formulas look prettier in the HTML output. When
1547# enabled you may also need to install MathJax separately and configure the path
1548# to it using the MATHJAX_RELPATH option.
1549# The default value is: NO.
1550# This tag requires that the tag GENERATE_HTML is set to YES.
1551
1552USE_MATHJAX = NO
1553
1554# When MathJax is enabled you can set the default output format to be used for
1555# the MathJax output. See the MathJax site (see:
1556# http://docs.mathjax.org/en/latest/output.html) for more details.
1557# Possible values are: HTML-CSS (which is slower, but has the best
1558# compatibility), NativeMML (i.e. MathML) and SVG.
1559# The default value is: HTML-CSS.
1560# This tag requires that the tag USE_MATHJAX is set to YES.
1561
1562MATHJAX_FORMAT = HTML-CSS
1563
1564# When MathJax is enabled you need to specify the location relative to the HTML
1565# output directory using the MATHJAX_RELPATH option. The destination directory
1566# should contain the MathJax.js script. For instance, if the mathjax directory
1567# is located at the same level as the HTML output directory, then
1568# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1569# Content Delivery Network so you can quickly see the result without installing
1570# MathJax. However, it is strongly recommended to install a local copy of
1571# MathJax from https://www.mathjax.org before deployment.
1572# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
1573# This tag requires that the tag USE_MATHJAX is set to YES.
1574
1575MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
1576
1577# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
1578# extension names that should be enabled during MathJax rendering. For example
1579# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1580# This tag requires that the tag USE_MATHJAX is set to YES.
1581
1582MATHJAX_EXTENSIONS =
1583
1584# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1585# of code that will be used on startup of the MathJax code. See the MathJax site
1586# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
1587# example see the documentation.
1588# This tag requires that the tag USE_MATHJAX is set to YES.
1589
1590MATHJAX_CODEFILE =
1591
1592# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1593# the HTML output. The underlying search engine uses javascript and DHTML and
1594# should work on any modern browser. Note that when using HTML help
1595# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
1596# there is already a search function so this one should typically be disabled.
1597# For large projects the javascript based search engine can be slow, then
1598# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
1599# search using the keyboard; to jump to the search box use <access key> + S
1600# (what the <access key> is depends on the OS and browser, but it is typically
1601# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
1602# key> to jump into the search results window, the results can be navigated
1603# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
1604# the search. The filter options can be selected when the cursor is inside the
1605# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
1606# to select a filter and <Enter> or <escape> to activate or cancel the filter
1607# option.
1608# The default value is: YES.
1609# This tag requires that the tag GENERATE_HTML is set to YES.
1610
1611SEARCHENGINE = YES
1612
1613# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1614# implemented using a web server instead of a web client using Javascript. There
1615# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
1616# setting. When disabled, doxygen will generate a PHP script for searching and
1617# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
1618# and searching needs to be provided by external tools. See the section
1619# "External Indexing and Searching" for details.
1620# The default value is: NO.
1621# This tag requires that the tag SEARCHENGINE is set to YES.
1622
1623SERVER_BASED_SEARCH = NO
1624
1625# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
1626# script for searching. Instead the search results are written to an XML file
1627# which needs to be processed by an external indexer. Doxygen will invoke an
1628# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
1629# search results.
1630#
1631# Doxygen ships with an example indexer (doxyindexer) and search engine
1632# (doxysearch.cgi) which are based on the open source search engine library
1633# Xapian (see: https://xapian.org/).
1634#
1635# See the section "External Indexing and Searching" for details.
1636# The default value is: NO.
1637# This tag requires that the tag SEARCHENGINE is set to YES.
1638
1639EXTERNAL_SEARCH = NO
1640
1641# The SEARCHENGINE_URL should point to a search engine hosted by a web server
1642# which will return the search results when EXTERNAL_SEARCH is enabled.
1643#
1644# Doxygen ships with an example indexer (doxyindexer) and search engine
1645# (doxysearch.cgi) which are based on the open source search engine library
1646# Xapian (see: https://xapian.org/). See the section "External Indexing and
1647# Searching" for details.
1648# This tag requires that the tag SEARCHENGINE is set to YES.
1649
1650SEARCHENGINE_URL =
1651
1652# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
1653# search data is written to a file for indexing by an external tool. With the
1654# SEARCHDATA_FILE tag the name of this file can be specified.
1655# The default file is: searchdata.xml.
1656# This tag requires that the tag SEARCHENGINE is set to YES.
1657
1658SEARCHDATA_FILE = searchdata.xml
1659
1660# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
1661# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
1662# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
1663# projects and redirect the results back to the right project.
1664# This tag requires that the tag SEARCHENGINE is set to YES.
1665
1666EXTERNAL_SEARCH_ID =
1667
1668# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
1669# projects other than the one defined by this configuration file, but that are
1670# all added to the same external search index. Each project needs to have a
1671# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
1672# to a relative location where the documentation can be found. The format is:
1673# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
1674# This tag requires that the tag SEARCHENGINE is set to YES.
1675
1676EXTRA_SEARCH_MAPPINGS =
1677
1678#---------------------------------------------------------------------------
1679# Configuration options related to the LaTeX output
1680#---------------------------------------------------------------------------
1681
1682# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
1683# The default value is: YES.
1684
1685GENERATE_LATEX = NO
1686
1687# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
1688# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1689# it.
1690# The default directory is: latex.
1691# This tag requires that the tag GENERATE_LATEX is set to YES.
1692
1693LATEX_OUTPUT = latex
1694
1695# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1696# invoked.
1697#
1698# Note that when not enabling USE_PDFLATEX the default is latex when enabling
1699# USE_PDFLATEX the default is pdflatex and when in the later case latex is
1700# chosen this is overwritten by pdflatex. For specific output languages the
1701# default can have been set differently, this depends on the implementation of
1702# the output language.
1703# This tag requires that the tag GENERATE_LATEX is set to YES.
1704
1705LATEX_CMD_NAME =
1706
1707# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
1708# index for LaTeX.
1709# Note: This tag is used in the Makefile / make.bat.
1710# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
1711# (.tex).
1712# The default file is: makeindex.
1713# This tag requires that the tag GENERATE_LATEX is set to YES.
1714
1715MAKEINDEX_CMD_NAME = makeindex
1716
1717# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
1718# generate index for LaTeX.
1719# Note: This tag is used in the generated output file (.tex).
1720# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
1721# The default value is: \makeindex.
1722# This tag requires that the tag GENERATE_LATEX is set to YES.
1723
1724LATEX_MAKEINDEX_CMD = \makeindex
1725
1726# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
1727# documents. This may be useful for small projects and may help to save some
1728# trees in general.
1729# The default value is: NO.
1730# This tag requires that the tag GENERATE_LATEX is set to YES.
1731
1732COMPACT_LATEX = NO
1733
1734# The PAPER_TYPE tag can be used to set the paper type that is used by the
1735# printer.
1736# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
1737# 14 inches) and executive (7.25 x 10.5 inches).
1738# The default value is: a4.
1739# This tag requires that the tag GENERATE_LATEX is set to YES.
1740
1741PAPER_TYPE = a4
1742
1743# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
1744# that should be included in the LaTeX output. The package can be specified just
1745# by its name or with the correct syntax as to be used with the LaTeX
1746# \usepackage command. To get the times font for instance you can specify :
1747# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
1748# To use the option intlimits with the amsmath package you can specify:
1749# EXTRA_PACKAGES=[intlimits]{amsmath}
1750# If left blank no extra packages will be included.
1751# This tag requires that the tag GENERATE_LATEX is set to YES.
1752
1753EXTRA_PACKAGES =
1754
1755# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
1756# generated LaTeX document. The header should contain everything until the first
1757# chapter. If it is left blank doxygen will generate a standard header. See
1758# section "Doxygen usage" for information on how to let doxygen write the
1759# default header to a separate file.
1760#
1761# Note: Only use a user-defined header if you know what you are doing! The
1762# following commands have a special meaning inside the header: $title,
1763# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
1764# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
1765# string, for the replacement values of the other commands the user is referred
1766# to HTML_HEADER.
1767# This tag requires that the tag GENERATE_LATEX is set to YES.
1768
1769LATEX_HEADER =
1770
1771# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
1772# generated LaTeX document. The footer should contain everything after the last
1773# chapter. If it is left blank doxygen will generate a standard footer. See
1774# LATEX_HEADER for more information on how to generate a default footer and what
1775# special commands can be used inside the footer.
1776#
1777# Note: Only use a user-defined footer if you know what you are doing!
1778# This tag requires that the tag GENERATE_LATEX is set to YES.
1779
1780LATEX_FOOTER =
1781
1782# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1783# LaTeX style sheets that are included after the standard style sheets created
1784# by doxygen. Using this option one can overrule certain style aspects. Doxygen
1785# will copy the style sheet files to the output directory.
1786# Note: The order of the extra style sheet files is of importance (e.g. the last
1787# style sheet in the list overrules the setting of the previous ones in the
1788# list).
1789# This tag requires that the tag GENERATE_LATEX is set to YES.
1790
1791LATEX_EXTRA_STYLESHEET =
1792
1793# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
1794# other source files which should be copied to the LATEX_OUTPUT output
1795# directory. Note that the files will be copied as-is; there are no commands or
1796# markers available.
1797# This tag requires that the tag GENERATE_LATEX is set to YES.
1798
1799LATEX_EXTRA_FILES =
1800
1801# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
1802# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
1803# contain links (just like the HTML output) instead of page references. This
1804# makes the output suitable for online browsing using a PDF viewer.
1805# The default value is: YES.
1806# This tag requires that the tag GENERATE_LATEX is set to YES.
1807
1808PDF_HYPERLINKS = YES
1809
1810# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1811# the PDF file directly from the LaTeX files. Set this option to YES, to get a
1812# higher quality PDF documentation.
1813# The default value is: YES.
1814# This tag requires that the tag GENERATE_LATEX is set to YES.
1815
1816USE_PDFLATEX = YES
1817
1818# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
1819# command to the generated LaTeX files. This will instruct LaTeX to keep running
1820# if errors occur, instead of asking the user for help. This option is also used
1821# when generating formulas in HTML.
1822# The default value is: NO.
1823# This tag requires that the tag GENERATE_LATEX is set to YES.
1824
1825LATEX_BATCHMODE = NO
1826
1827# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
1828# index chapters (such as File Index, Compound Index, etc.) in the output.
1829# The default value is: NO.
1830# This tag requires that the tag GENERATE_LATEX is set to YES.
1831
1832LATEX_HIDE_INDICES = NO
1833
1834# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
1835# code with syntax highlighting in the LaTeX output.
1836#
1837# Note that which sources are shown also depends on other settings such as
1838# SOURCE_BROWSER.
1839# The default value is: NO.
1840# This tag requires that the tag GENERATE_LATEX is set to YES.
1841
1842LATEX_SOURCE_CODE = NO
1843
1844# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
1845# bibliography, e.g. plainnat, or ieeetr. See
1846# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
1847# The default value is: plain.
1848# This tag requires that the tag GENERATE_LATEX is set to YES.
1849
1850LATEX_BIB_STYLE = plain
1851
1852# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
1853# page will contain the date and time when the page was generated. Setting this
1854# to NO can help when comparing the output of multiple runs.
1855# The default value is: NO.
1856# This tag requires that the tag GENERATE_LATEX is set to YES.
1857
1858LATEX_TIMESTAMP = NO
1859
1860# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
1861# path from which the emoji images will be read. If a relative path is entered,
1862# it will be relative to the LATEX_OUTPUT directory. If left blank the
1863# LATEX_OUTPUT directory will be used.
1864# This tag requires that the tag GENERATE_LATEX is set to YES.
1865
1866LATEX_EMOJI_DIRECTORY =
1867
1868#---------------------------------------------------------------------------
1869# Configuration options related to the RTF output
1870#---------------------------------------------------------------------------
1871
1872# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
1873# RTF output is optimized for Word 97 and may not look too pretty with other RTF
1874# readers/editors.
1875# The default value is: NO.
1876
1877GENERATE_RTF = NO
1878
1879# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
1880# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1881# it.
1882# The default directory is: rtf.
1883# This tag requires that the tag GENERATE_RTF is set to YES.
1884
1885RTF_OUTPUT = rtf
1886
1887# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
1888# documents. This may be useful for small projects and may help to save some
1889# trees in general.
1890# The default value is: NO.
1891# This tag requires that the tag GENERATE_RTF is set to YES.
1892
1893COMPACT_RTF = NO
1894
1895# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
1896# contain hyperlink fields. The RTF file will contain links (just like the HTML
1897# output) instead of page references. This makes the output suitable for online
1898# browsing using Word or some other Word compatible readers that support those
1899# fields.
1900#
1901# Note: WordPad (write) and others do not support links.
1902# The default value is: NO.
1903# This tag requires that the tag GENERATE_RTF is set to YES.
1904
1905RTF_HYPERLINKS = NO
1906
1907# Load stylesheet definitions from file. Syntax is similar to doxygen's
1908# configuration file, i.e. a series of assignments. You only have to provide
1909# replacements, missing definitions are set to their default value.
1910#
1911# See also section "Doxygen usage" for information on how to generate the
1912# default style sheet that doxygen normally uses.
1913# This tag requires that the tag GENERATE_RTF is set to YES.
1914
1915RTF_STYLESHEET_FILE =
1916
1917# Set optional variables used in the generation of an RTF document. Syntax is
1918# similar to doxygen's configuration file. A template extensions file can be
1919# generated using doxygen -e rtf extensionFile.
1920# This tag requires that the tag GENERATE_RTF is set to YES.
1921
1922RTF_EXTENSIONS_FILE =
1923
1924# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
1925# with syntax highlighting in the RTF output.
1926#
1927# Note that which sources are shown also depends on other settings such as
1928# SOURCE_BROWSER.
1929# The default value is: NO.
1930# This tag requires that the tag GENERATE_RTF is set to YES.
1931
1932RTF_SOURCE_CODE = NO
1933
1934#---------------------------------------------------------------------------
1935# Configuration options related to the man page output
1936#---------------------------------------------------------------------------
1937
1938# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
1939# classes and files.
1940# The default value is: NO.
1941
1942GENERATE_MAN = NO
1943
1944# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
1945# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1946# it. A directory man3 will be created inside the directory specified by
1947# MAN_OUTPUT.
1948# The default directory is: man.
1949# This tag requires that the tag GENERATE_MAN is set to YES.
1950
1951MAN_OUTPUT = man
1952
1953# The MAN_EXTENSION tag determines the extension that is added to the generated
1954# man pages. In case the manual section does not start with a number, the number
1955# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
1956# optional.
1957# The default value is: .3.
1958# This tag requires that the tag GENERATE_MAN is set to YES.
1959
1960MAN_EXTENSION = .3
1961
1962# The MAN_SUBDIR tag determines the name of the directory created within
1963# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
1964# MAN_EXTENSION with the initial . removed.
1965# This tag requires that the tag GENERATE_MAN is set to YES.
1966
1967MAN_SUBDIR =
1968
1969# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
1970# will generate one additional man file for each entity documented in the real
1971# man page(s). These additional files only source the real man page, but without
1972# them the man command would be unable to find the correct page.
1973# The default value is: NO.
1974# This tag requires that the tag GENERATE_MAN is set to YES.
1975
1976MAN_LINKS = NO
1977
1978#---------------------------------------------------------------------------
1979# Configuration options related to the XML output
1980#---------------------------------------------------------------------------
1981
1982# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
1983# captures the structure of the code including all documentation.
1984# The default value is: NO.
1985
1986GENERATE_XML = YES
1987
1988# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
1989# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1990# it.
1991# The default directory is: xml.
1992# This tag requires that the tag GENERATE_XML is set to YES.
1993
1994XML_OUTPUT = xml
1995
1996# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
1997# listings (including syntax highlighting and cross-referencing information) to
1998# the XML output. Note that enabling this will significantly increase the size
1999# of the XML output.
2000# The default value is: YES.
2001# This tag requires that the tag GENERATE_XML is set to YES.
2002
2003XML_PROGRAMLISTING = YES
2004
2005# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
2006# namespace members in file scope as well, matching the HTML output.
2007# The default value is: NO.
2008# This tag requires that the tag GENERATE_XML is set to YES.
2009
2010XML_NS_MEMB_FILE_SCOPE = NO
2011
2012#---------------------------------------------------------------------------
2013# Configuration options related to the DOCBOOK output
2014#---------------------------------------------------------------------------
2015
2016# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
2017# that can be used to generate PDF.
2018# The default value is: NO.
2019
2020GENERATE_DOCBOOK = NO
2021
2022# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
2023# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
2024# front of it.
2025# The default directory is: docbook.
2026# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
2027
2028DOCBOOK_OUTPUT = docbook
2029
2030# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
2031# program listings (including syntax highlighting and cross-referencing
2032# information) to the DOCBOOK output. Note that enabling this will significantly
2033# increase the size of the DOCBOOK output.
2034# The default value is: NO.
2035# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
2036
2037DOCBOOK_PROGRAMLISTING = NO
2038
2039#---------------------------------------------------------------------------
2040# Configuration options for the AutoGen Definitions output
2041#---------------------------------------------------------------------------
2042
2043# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
2044# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
2045# the structure of the code including all documentation. Note that this feature
2046# is still experimental and incomplete at the moment.
2047# The default value is: NO.
2048
2049GENERATE_AUTOGEN_DEF = NO
2050
2051#---------------------------------------------------------------------------
2052# Configuration options related to the Perl module output
2053#---------------------------------------------------------------------------
2054
2055# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
2056# file that captures the structure of the code including all documentation.
2057#
2058# Note that this feature is still experimental and incomplete at the moment.
2059# The default value is: NO.
2060
2061GENERATE_PERLMOD = NO
2062
2063# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
2064# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
2065# output from the Perl module output.
2066# The default value is: NO.
2067# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2068
2069PERLMOD_LATEX = NO
2070
2071# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
2072# formatted so it can be parsed by a human reader. This is useful if you want to
2073# understand what is going on. On the other hand, if this tag is set to NO, the
2074# size of the Perl module output will be much smaller and Perl will parse it
2075# just the same.
2076# The default value is: YES.
2077# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2078
2079PERLMOD_PRETTY = YES
2080
2081# The names of the make variables in the generated doxyrules.make file are
2082# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
2083# so different doxyrules.make files included by the same Makefile don't
2084# overwrite each other's variables.
2085# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2086
2087PERLMOD_MAKEVAR_PREFIX =
2088
2089#---------------------------------------------------------------------------
2090# Configuration options related to the preprocessor
2091#---------------------------------------------------------------------------
2092
2093# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
2094# C-preprocessor directives found in the sources and include files.
2095# The default value is: YES.
2096
2097ENABLE_PREPROCESSING = YES
2098
2099# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
2100# in the source code. If set to NO, only conditional compilation will be
2101# performed. Macro expansion can be done in a controlled way by setting
2102# EXPAND_ONLY_PREDEF to YES.
2103# The default value is: NO.
2104# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2105
2106MACRO_EXPANSION = NO
2107
2108# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
2109# the macro expansion is limited to the macros specified with the PREDEFINED and
2110# EXPAND_AS_DEFINED tags.
2111# The default value is: NO.
2112# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2113
2114EXPAND_ONLY_PREDEF = NO
2115
2116# If the SEARCH_INCLUDES tag is set to YES, the include files in the
2117# INCLUDE_PATH will be searched if a #include is found.
2118# The default value is: YES.
2119# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2120
2121SEARCH_INCLUDES = YES
2122
2123# The INCLUDE_PATH tag can be used to specify one or more directories that
2124# contain include files that are not input files but should be processed by the
2125# preprocessor.
2126# This tag requires that the tag SEARCH_INCLUDES is set to YES.
2127
2128INCLUDE_PATH =
2129
2130# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
2131# patterns (like *.h and *.hpp) to filter out the header-files in the
2132# directories. If left blank, the patterns specified with FILE_PATTERNS will be
2133# used.
2134# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2135
2136INCLUDE_FILE_PATTERNS =
2137
2138# The PREDEFINED tag can be used to specify one or more macro names that are
2139# defined before the preprocessor is started (similar to the -D option of e.g.
2140# gcc). The argument of the tag is a list of macros of the form: name or
2141# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
2142# is assumed. To prevent a macro definition from being undefined via #undef or
2143# recursively expanded use the := operator instead of the = operator.
2144# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2145
2146PREDEFINED =
2147
2148# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
2149# tag can be used to specify a list of macro names that should be expanded. The
2150# macro definition that is found in the sources will be used. Use the PREDEFINED
2151# tag if you want to use a different macro definition that overrules the
2152# definition found in the source code.
2153# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2154
2155EXPAND_AS_DEFINED =
2156
2157# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
2158# remove all references to function-like macros that are alone on a line, have
2159# an all uppercase name, and do not end with a semicolon. Such function macros
2160# are typically used for boiler-plate code, and will confuse the parser if not
2161# removed.
2162# The default value is: YES.
2163# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2164
2165SKIP_FUNCTION_MACROS = YES
2166
2167#---------------------------------------------------------------------------
2168# Configuration options related to external references
2169#---------------------------------------------------------------------------
2170
2171# The TAGFILES tag can be used to specify one or more tag files. For each tag
2172# file the location of the external documentation should be added. The format of
2173# a tag file without this location is as follows:
2174# TAGFILES = file1 file2 ...
2175# Adding location for the tag files is done as follows:
2176# TAGFILES = file1=loc1 "file2 = loc2" ...
2177# where loc1 and loc2 can be relative or absolute paths or URLs. See the
2178# section "Linking to external documentation" for more information about the use
2179# of tag files.
2180# Note: Each tag file must have a unique name (where the name does NOT include
2181# the path). If a tag file is not located in the directory in which doxygen is
2182# run, you must also specify the path to the tagfile here.
2183
2184TAGFILES =
2185
2186# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
2187# tag file that is based on the input files it reads. See section "Linking to
2188# external documentation" for more information about the usage of tag files.
2189
2190GENERATE_TAGFILE =
2191
2192# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
2193# the class index. If set to NO, only the inherited external classes will be
2194# listed.
2195# The default value is: NO.
2196
2197ALLEXTERNALS = NO
2198
2199# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
2200# in the modules index. If set to NO, only the current project's groups will be
2201# listed.
2202# The default value is: YES.
2203
2204EXTERNAL_GROUPS = YES
2205
2206# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
2207# the related pages index. If set to NO, only the current project's pages will
2208# be listed.
2209# The default value is: YES.
2210
2211EXTERNAL_PAGES = YES
2212
2213# The PERL_PATH should be the absolute path and name of the perl script
2214# interpreter (i.e. the result of 'which perl').
2215# The default file (with absolute path) is: /usr/bin/perl.
2216
2217PERL_PATH = /usr/bin/perl
2218
2219#---------------------------------------------------------------------------
2220# Configuration options related to the dot tool
2221#---------------------------------------------------------------------------
2222
2223# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
2224# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
2225# NO turns the diagrams off. Note that this option also works with HAVE_DOT
2226# disabled, but it is recommended to install and use dot, since it yields more
2227# powerful graphs.
2228# The default value is: YES.
2229
2230CLASS_DIAGRAMS = NO
2231
2232# You can define message sequence charts within doxygen comments using the \msc
2233# command. Doxygen will then run the mscgen tool (see:
2234# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
2235# documentation. The MSCGEN_PATH tag allows you to specify the directory where
2236# the mscgen tool resides. If left empty the tool is assumed to be found in the
2237# default search path.
2238
2239MSCGEN_PATH =
2240
2241# You can include diagrams made with dia in doxygen documentation. Doxygen will
2242# then run dia to produce the diagram and insert it in the documentation. The
2243# DIA_PATH tag allows you to specify the directory where the dia binary resides.
2244# If left empty dia is assumed to be found in the default search path.
2245
2246DIA_PATH =
2247
2248# If set to YES the inheritance and collaboration graphs will hide inheritance
2249# and usage relations if the target is undocumented or is not a class.
2250# The default value is: YES.
2251
2252HIDE_UNDOC_RELATIONS = YES
2253
2254# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
2255# available from the path. This tool is part of Graphviz (see:
2256# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
2257# Bell Labs. The other options in this section have no effect if this option is
2258# set to NO
2259# The default value is: NO.
2260
2261HAVE_DOT = NO
2262
2263# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
2264# to run in parallel. When set to 0 doxygen will base this on the number of
2265# processors available in the system. You can set it explicitly to a value
2266# larger than 0 to get control over the balance between CPU load and processing
2267# speed.
2268# Minimum value: 0, maximum value: 32, default value: 0.
2269# This tag requires that the tag HAVE_DOT is set to YES.
2270
2271DOT_NUM_THREADS = 0
2272
2273# When you want a differently looking font in the dot files that doxygen
2274# generates you can specify the font name using DOT_FONTNAME. You need to make
2275# sure dot is able to find the font, which can be done by putting it in a
2276# standard location or by setting the DOTFONTPATH environment variable or by
2277# setting DOT_FONTPATH to the directory containing the font.
2278# The default value is: Helvetica.
2279# This tag requires that the tag HAVE_DOT is set to YES.
2280
2281DOT_FONTNAME = Helvetica
2282
2283# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
2284# dot graphs.
2285# Minimum value: 4, maximum value: 24, default value: 10.
2286# This tag requires that the tag HAVE_DOT is set to YES.
2287
2288DOT_FONTSIZE = 10
2289
2290# By default doxygen will tell dot to use the default font as specified with
2291# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
2292# the path where dot can find it using this tag.
2293# This tag requires that the tag HAVE_DOT is set to YES.
2294
2295DOT_FONTPATH =
2296
2297# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
2298# each documented class showing the direct and indirect inheritance relations.
2299# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
2300# The default value is: YES.
2301# This tag requires that the tag HAVE_DOT is set to YES.
2302
2303CLASS_GRAPH = YES
2304
2305# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
2306# graph for each documented class showing the direct and indirect implementation
2307# dependencies (inheritance, containment, and class references variables) of the
2308# class with other documented classes.
2309# The default value is: YES.
2310# This tag requires that the tag HAVE_DOT is set to YES.
2311
2312COLLABORATION_GRAPH = YES
2313
2314# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
2315# groups, showing the direct groups dependencies.
2316# The default value is: YES.
2317# This tag requires that the tag HAVE_DOT is set to YES.
2318
2319GROUP_GRAPHS = YES
2320
2321# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
2322# collaboration diagrams in a style similar to the OMG's Unified Modeling
2323# Language.
2324# The default value is: NO.
2325# This tag requires that the tag HAVE_DOT is set to YES.
2326
2327UML_LOOK = NO
2328
2329# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
2330# class node. If there are many fields or methods and many nodes the graph may
2331# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
2332# number of items for each type to make the size more manageable. Set this to 0
2333# for no limit. Note that the threshold may be exceeded by 50% before the limit
2334# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
2335# but if the number exceeds 15, the total amount of fields shown is limited to
2336# 10.
2337# Minimum value: 0, maximum value: 100, default value: 10.
2338# This tag requires that the tag HAVE_DOT is set to YES.
2339
2340UML_LIMIT_NUM_FIELDS = 10
2341
2342# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
2343# collaboration graphs will show the relations between templates and their
2344# instances.
2345# The default value is: NO.
2346# This tag requires that the tag HAVE_DOT is set to YES.
2347
2348TEMPLATE_RELATIONS = NO
2349
2350# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
2351# YES then doxygen will generate a graph for each documented file showing the
2352# direct and indirect include dependencies of the file with other documented
2353# files.
2354# The default value is: YES.
2355# This tag requires that the tag HAVE_DOT is set to YES.
2356
2357INCLUDE_GRAPH = YES
2358
2359# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
2360# set to YES then doxygen will generate a graph for each documented file showing
2361# the direct and indirect include dependencies of the file with other documented
2362# files.
2363# The default value is: YES.
2364# This tag requires that the tag HAVE_DOT is set to YES.
2365
2366INCLUDED_BY_GRAPH = YES
2367
2368# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
2369# dependency graph for every global function or class method.
2370#
2371# Note that enabling this option will significantly increase the time of a run.
2372# So in most cases it will be better to enable call graphs for selected
2373# functions only using the \callgraph command. Disabling a call graph can be
2374# accomplished by means of the command \hidecallgraph.
2375# The default value is: NO.
2376# This tag requires that the tag HAVE_DOT is set to YES.
2377
2378CALL_GRAPH = NO
2379
2380# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
2381# dependency graph for every global function or class method.
2382#
2383# Note that enabling this option will significantly increase the time of a run.
2384# So in most cases it will be better to enable caller graphs for selected
2385# functions only using the \callergraph command. Disabling a caller graph can be
2386# accomplished by means of the command \hidecallergraph.
2387# The default value is: NO.
2388# This tag requires that the tag HAVE_DOT is set to YES.
2389
2390CALLER_GRAPH = NO
2391
2392# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
2393# hierarchy of all classes instead of a textual one.
2394# The default value is: YES.
2395# This tag requires that the tag HAVE_DOT is set to YES.
2396
2397GRAPHICAL_HIERARCHY = YES
2398
2399# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
2400# dependencies a directory has on other directories in a graphical way. The
2401# dependency relations are determined by the #include relations between the
2402# files in the directories.
2403# The default value is: YES.
2404# This tag requires that the tag HAVE_DOT is set to YES.
2405
2406DIRECTORY_GRAPH = YES
2407
2408# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
2409# generated by dot. For an explanation of the image formats see the section
2410# output formats in the documentation of the dot tool (Graphviz (see:
2411# http://www.graphviz.org/)).
2412# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
2413# to make the SVG files visible in IE 9+ (other browsers do not have this
2414# requirement).
2415# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
2416# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
2417# png:gdiplus:gdiplus.
2418# The default value is: png.
2419# This tag requires that the tag HAVE_DOT is set to YES.
2420
2421DOT_IMAGE_FORMAT = png
2422
2423# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
2424# enable generation of interactive SVG images that allow zooming and panning.
2425#
2426# Note that this requires a modern browser other than Internet Explorer. Tested
2427# and working are Firefox, Chrome, Safari, and Opera.
2428# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
2429# the SVG files visible. Older versions of IE do not have SVG support.
2430# The default value is: NO.
2431# This tag requires that the tag HAVE_DOT is set to YES.
2432
2433INTERACTIVE_SVG = NO
2434
2435# The DOT_PATH tag can be used to specify the path where the dot tool can be
2436# found. If left blank, it is assumed the dot tool can be found in the path.
2437# This tag requires that the tag HAVE_DOT is set to YES.
2438
2439DOT_PATH =
2440
2441# The DOTFILE_DIRS tag can be used to specify one or more directories that
2442# contain dot files that are included in the documentation (see the \dotfile
2443# command).
2444# This tag requires that the tag HAVE_DOT is set to YES.
2445
2446DOTFILE_DIRS =
2447
2448# The MSCFILE_DIRS tag can be used to specify one or more directories that
2449# contain msc files that are included in the documentation (see the \mscfile
2450# command).
2451
2452MSCFILE_DIRS =
2453
2454# The DIAFILE_DIRS tag can be used to specify one or more directories that
2455# contain dia files that are included in the documentation (see the \diafile
2456# command).
2457
2458DIAFILE_DIRS =
2459
2460# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
2461# path where java can find the plantuml.jar file. If left blank, it is assumed
2462# PlantUML is not used or called during a preprocessing step. Doxygen will
2463# generate a warning when it encounters a \startuml command in this case and
2464# will not generate output for the diagram.
2465
2466PLANTUML_JAR_PATH =
2467
2468# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
2469# configuration file for plantuml.
2470
2471PLANTUML_CFG_FILE =
2472
2473# When using plantuml, the specified paths are searched for files specified by
2474# the !include statement in a plantuml block.
2475
2476PLANTUML_INCLUDE_PATH =
2477
2478# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
2479# that will be shown in the graph. If the number of nodes in a graph becomes
2480# larger than this value, doxygen will truncate the graph, which is visualized
2481# by representing a node as a red box. Note that doxygen if the number of direct
2482# children of the root node in a graph is already larger than
2483# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
2484# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
2485# Minimum value: 0, maximum value: 10000, default value: 50.
2486# This tag requires that the tag HAVE_DOT is set to YES.
2487
2488DOT_GRAPH_MAX_NODES = 50
2489
2490# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
2491# generated by dot. A depth value of 3 means that only nodes reachable from the
2492# root by following a path via at most 3 edges will be shown. Nodes that lay
2493# further from the root node will be omitted. Note that setting this option to 1
2494# or 2 may greatly reduce the computation time needed for large code bases. Also
2495# note that the size of a graph can be further restricted by
2496# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
2497# Minimum value: 0, maximum value: 1000, default value: 0.
2498# This tag requires that the tag HAVE_DOT is set to YES.
2499
2500MAX_DOT_GRAPH_DEPTH = 0
2501
2502# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
2503# background. This is disabled by default, because dot on Windows does not seem
2504# to support this out of the box.
2505#
2506# Warning: Depending on the platform used, enabling this option may lead to
2507# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
2508# read).
2509# The default value is: NO.
2510# This tag requires that the tag HAVE_DOT is set to YES.
2511
2512DOT_TRANSPARENT = NO
2513
2514# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
2515# files in one run (i.e. multiple -o and -T options on the command line). This
2516# makes dot run faster, but since only newer versions of dot (>1.8.10) support
2517# this, this feature is disabled by default.
2518# The default value is: NO.
2519# This tag requires that the tag HAVE_DOT is set to YES.
2520
2521DOT_MULTI_TARGETS = NO
2522
2523# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
2524# explaining the meaning of the various boxes and arrows in the dot generated
2525# graphs.
2526# The default value is: YES.
2527# This tag requires that the tag HAVE_DOT is set to YES.
2528
2529GENERATE_LEGEND = YES
2530
2531# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
2532# files that are used to generate the various graphs.
2533# The default value is: YES.
2534# This tag requires that the tag HAVE_DOT is set to YES.
2535
2536DOT_CLEANUP = YES
diff --git a/res/sample-doxygen-project-1/main.cpp b/res/sample-doxygen-project-1/main.cpp
new file mode 100644
index 0000000..ba501d0
--- /dev/null
+++ b/res/sample-doxygen-project-1/main.cpp
@@ -0,0 +1,176 @@
1#include <iostream>
2
3/*! \brief A sample namespace
4 *
5 * This is an extended
6 * description \p of this
7 * sample namespace.
8 *
9 * ```cpp
10 * std::cout << "Example code" << std::endl;
11 * ```
12 */
13namespace sample_namespace {
14
15 /*! \brief A sample static variable
16 *
17 * This is an extended
18 * description of this
19 * static variable.
20 */
21 static int VARIABLE = 42;
22
23}
24
25/*! \brief A sample class
26 *
27 * This is an extended
28 * description of this
29 * sample class.
30 */
31class Sample {
32public:
33
34 /*! \brief A public type
35 *
36 * This is an extended description of this typedef.
37 */
38 using Blabla = int;
39
40 /*! \brief A sample inner class.
41 *
42 * This is an extended description of this sample inner class.
43 *
44 * We have a reference to the class Sample.
45 *
46 * Also a [link](#bla)
47 *
48 * And inline code:
49 *
50 * ```cpp
51 * auto a = int{};
52 * ```
53 */
54 class InnerClass {
55 /*! \brief A sample attribute.
56 *
57 * This is an extended description of this sample attribute.
58 */
59 void* sample_attribute;
60 };
61
62 /*! \brief A sample inner struct.
63 *
64 * This is an extended description of this sample inner struct.
65 */
66 struct InnerStruct {
67 /*! \brief A sample attribute.
68 *
69 * This is an extended description of this sample attribute.
70 */
71 void* sample_attribute;
72 };
73
74 /*! \brief A sample inner struct.
75 *
76 * This is an extended description of this sample inner struct.
77 */
78 enum InnerEnum {
79 /*! \brief A sample variant.
80 *
81 * This is an extended description of this sample variant.
82 */
83 SAMPLE_VARIANT1,
84
85 /*! \brief Another sample variant.
86 *
87 * This is an extended description of this sample variant.
88 */
89 SAMPLE_VARIANT2,
90
91 /*! \brief Another other sample variant.
92 *
93 * This is an extended description of this sample variant.
94 */
95 SAMPLE_VARIANT3,
96 };
97
98
99 /*! \brief A sample method.
100 *
101 * This is an extended description of this sample method.
102 *
103 * \param [in] param1 This is a parameter
104 * \param [in] param2 This is a parameter
105 * \param [in] param3 This is a parameter
106 *
107 * \pre A precondition.
108 * \post A postcondition.
109 */
110 int sample_method(char param1, std::string param2) const;
111
112 /*! \brief A sample static function.
113 *
114 * This is an extended description of this sample static function.
115 */
116 static int sample_static_func(char param1, std::string param2);
117
118protected:
119
120 /*! \brief A sample protected method.
121 *
122 * This is an extended description of this sample protected method.
123 */
124 int sample_protected_method(char param1, std::string param2) const;
125
126private:
127
128 /*! \brief A sample attribute.
129 *
130 * This is an extended description of this sample attribute.
131 */
132 void* sample_attribute1;
133
134 /*! \brief Another sample attribute.
135 *
136 * This is an extended description of this sample attribute.
137 */
138 InnerClass sample_attribute2;
139
140 /*! \brief Another other sample attribute.
141 *
142 * This is an extended description of this sample attribute.
143 */
144 InnerStruct sample_attribute3;
145
146 /*! \brief Another other other sample attribute.
147 *
148 * This is an extended description of this sample attribute.
149 */
150 InnerEnum sample_attribute4;
151
152};
153
154/*! \brief A sample function.
155 *
156 * This is an extended description of this sample function.
157 *
158 * \param [in] param1 This is a parameter
159 * \param [in] param2 This is a parameter
160 * \param [in] param3 This is a parameter
161 *
162 * \pre A precondition.
163 * \post A postcondition.
164 */
165int sample_function(char param1, std::string param2, int hello_world) {
166 std::cout << helloworld << std::endl;
167}
168
169int main(int argc, char** argv) {
170 std::cout << "Hello World" << std::endl;
171 std::cout << arga << std::endl;
172}
173
174int add(float a, float b) { return a + b; }
175template <typename T> struct A { typedef T::U dependent; };
176struct Integer { int i; }; Integer i = { i: 0 };
diff --git a/res/sample-markdown-project-1/Doxyfile b/res/sample-markdown-project-1/Doxyfile
new file mode 100644
index 0000000..c91a981
--- /dev/null
+++ b/res/sample-markdown-project-1/Doxyfile
@@ -0,0 +1,2536 @@
1# Doxyfile 1.8.15
2
3# This file describes the settings to be used by the documentation system
4# doxygen (www.doxygen.org) for a project.
5#
6# All text after a double hash (##) is considered a comment and is placed in
7# front of the TAG it is preceding.
8#
9# All text after a single hash (#) is considered a comment and will be ignored.
10# The format is:
11# TAG = value [value, ...]
12# For lists, items can also be appended using:
13# TAG += value [value, ...]
14# Values that contain spaces should be placed between quotes (\" \").
15
16#---------------------------------------------------------------------------
17# Project related configuration options
18#---------------------------------------------------------------------------
19
20# This tag specifies the encoding used for all characters in the configuration
21# file that follow. The default is UTF-8 which is also the encoding used for all
22# text before the first occurrence of this tag. Doxygen uses libiconv (or the
23# iconv built into libc) for the transcoding. See
24# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
25# The default value is: UTF-8.
26
27DOXYFILE_ENCODING = UTF-8
28
29# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
30# double-quotes, unless you are using Doxywizard) that should identify the
31# project for which the documentation is generated. This name is used in the
32# title of most generated pages and in a few other places.
33# The default value is: My Project.
34
35PROJECT_NAME = "My Sample Project"
36
37# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
38# could be handy for archiving the generated documentation or if some version
39# control system is used.
40
41PROJECT_NUMBER =
42
43# Using the PROJECT_BRIEF tag one can provide an optional one line description
44# for a project that appears at the top of each page and should give viewer a
45# quick idea about the purpose of the project. Keep the description short.
46
47PROJECT_BRIEF =
48
49# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
50# in the documentation. The maximum height of the logo should not exceed 55
51# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
52# the logo to the output directory.
53
54PROJECT_LOGO =
55
56# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
57# into which the generated documentation will be written. If a relative path is
58# entered, it will be relative to the location where doxygen was started. If
59# left blank the current directory will be used.
60
61OUTPUT_DIRECTORY = doc
62
63# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
64# directories (in 2 levels) under the output directory of each output format and
65# will distribute the generated files over these directories. Enabling this
66# option can be useful when feeding doxygen a huge amount of source files, where
67# putting all generated files in the same directory would otherwise causes
68# performance problems for the file system.
69# The default value is: NO.
70
71CREATE_SUBDIRS = NO
72
73# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
74# characters to appear in the names of generated files. If set to NO, non-ASCII
75# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
76# U+3044.
77# The default value is: NO.
78
79ALLOW_UNICODE_NAMES = NO
80
81# The OUTPUT_LANGUAGE tag is used to specify the language in which all
82# documentation generated by doxygen is written. Doxygen will use this
83# information to generate all constant output in the proper language.
84# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
85# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
86# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
87# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
88# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
89# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
90# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
91# Ukrainian and Vietnamese.
92# The default value is: English.
93
94OUTPUT_LANGUAGE = English
95
96# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
97# documentation generated by doxygen is written. Doxygen will use this
98# information to generate all generated output in the proper direction.
99# Possible values are: None, LTR, RTL and Context.
100# The default value is: None.
101
102OUTPUT_TEXT_DIRECTION = None
103
104# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
105# descriptions after the members that are listed in the file and class
106# documentation (similar to Javadoc). Set to NO to disable this.
107# The default value is: YES.
108
109BRIEF_MEMBER_DESC = YES
110
111# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
112# description of a member or function before the detailed description
113#
114# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
115# brief descriptions will be completely suppressed.
116# The default value is: YES.
117
118REPEAT_BRIEF = YES
119
120# This tag implements a quasi-intelligent brief description abbreviator that is
121# used to form the text in various listings. Each string in this list, if found
122# as the leading text of the brief description, will be stripped from the text
123# and the result, after processing the whole list, is used as the annotated
124# text. Otherwise, the brief description is used as-is. If left blank, the
125# following values are used ($name is automatically replaced with the name of
126# the entity):The $name class, The $name widget, The $name file, is, provides,
127# specifies, contains, represents, a, an and the.
128
129ABBREVIATE_BRIEF = "The $name class" \
130 "The $name widget" \
131 "The $name file" \
132 is \
133 provides \
134 specifies \
135 contains \
136 represents \
137 a \
138 an \
139 the
140
141# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
142# doxygen will generate a detailed section even if there is only a brief
143# description.
144# The default value is: NO.
145
146ALWAYS_DETAILED_SEC = NO
147
148# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
149# inherited members of a class in the documentation of that class as if those
150# members were ordinary class members. Constructors, destructors and assignment
151# operators of the base classes will not be shown.
152# The default value is: NO.
153
154INLINE_INHERITED_MEMB = NO
155
156# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
157# before files name in the file list and in the header files. If set to NO the
158# shortest path that makes the file name unique will be used
159# The default value is: YES.
160
161FULL_PATH_NAMES = YES
162
163# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
164# Stripping is only done if one of the specified strings matches the left-hand
165# part of the path. The tag can be used to show relative paths in the file list.
166# If left blank the directory from which doxygen is run is used as the path to
167# strip.
168#
169# Note that you can specify absolute paths here, but also relative paths, which
170# will be relative from the directory where doxygen is started.
171# This tag requires that the tag FULL_PATH_NAMES is set to YES.
172
173STRIP_FROM_PATH =
174
175# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
176# path mentioned in the documentation of a class, which tells the reader which
177# header file to include in order to use a class. If left blank only the name of
178# the header file containing the class definition is used. Otherwise one should
179# specify the list of include paths that are normally passed to the compiler
180# using the -I flag.
181
182STRIP_FROM_INC_PATH =
183
184# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
185# less readable) file names. This can be useful is your file systems doesn't
186# support long names like on DOS, Mac, or CD-ROM.
187# The default value is: NO.
188
189SHORT_NAMES = NO
190
191# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
192# first line (until the first dot) of a Javadoc-style comment as the brief
193# description. If set to NO, the Javadoc-style will behave just like regular Qt-
194# style comments (thus requiring an explicit @brief command for a brief
195# description.)
196# The default value is: NO.
197
198JAVADOC_AUTOBRIEF = NO
199
200# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
201# line (until the first dot) of a Qt-style comment as the brief description. If
202# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
203# requiring an explicit \brief command for a brief description.)
204# The default value is: NO.
205
206QT_AUTOBRIEF = NO
207
208# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
209# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
210# a brief description. This used to be the default behavior. The new default is
211# to treat a multi-line C++ comment block as a detailed description. Set this
212# tag to YES if you prefer the old behavior instead.
213#
214# Note that setting this tag to YES also means that rational rose comments are
215# not recognized any more.
216# The default value is: NO.
217
218MULTILINE_CPP_IS_BRIEF = NO
219
220# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
221# documentation from any documented member that it re-implements.
222# The default value is: YES.
223
224INHERIT_DOCS = YES
225
226# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
227# page for each member. If set to NO, the documentation of a member will be part
228# of the file/class/namespace that contains it.
229# The default value is: NO.
230
231SEPARATE_MEMBER_PAGES = NO
232
233# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
234# uses this value to replace tabs by spaces in code fragments.
235# Minimum value: 1, maximum value: 16, default value: 4.
236
237TAB_SIZE = 4
238
239# This tag can be used to specify a number of aliases that act as commands in
240# the documentation. An alias has the form:
241# name=value
242# For example adding
243# "sideeffect=@par Side Effects:\n"
244# will allow you to put the command \sideeffect (or @sideeffect) in the
245# documentation, which will result in a user-defined paragraph with heading
246# "Side Effects:". You can put \n's in the value part of an alias to insert
247# newlines (in the resulting output). You can put ^^ in the value part of an
248# alias to insert a newline as if a physical newline was in the original file.
249# When you need a literal { or } or , in the value part of an alias you have to
250# escape them by means of a backslash (\), this can lead to conflicts with the
251# commands \{ and \} for these it is advised to use the version @{ and @} or use
252# a double escape (\\{ and \\})
253
254ALIASES =
255
256# This tag can be used to specify a number of word-keyword mappings (TCL only).
257# A mapping has the form "name=value". For example adding "class=itcl::class"
258# will allow you to use the command class in the itcl::class meaning.
259
260TCL_SUBST =
261
262# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
263# only. Doxygen will then generate output that is more tailored for C. For
264# instance, some of the names that are used will be different. The list of all
265# members will be omitted, etc.
266# The default value is: NO.
267
268OPTIMIZE_OUTPUT_FOR_C = NO
269
270# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
271# Python sources only. Doxygen will then generate output that is more tailored
272# for that language. For instance, namespaces will be presented as packages,
273# qualified scopes will look different, etc.
274# The default value is: NO.
275
276OPTIMIZE_OUTPUT_JAVA = NO
277
278# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
279# sources. Doxygen will then generate output that is tailored for Fortran.
280# The default value is: NO.
281
282OPTIMIZE_FOR_FORTRAN = NO
283
284# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
285# sources. Doxygen will then generate output that is tailored for VHDL.
286# The default value is: NO.
287
288OPTIMIZE_OUTPUT_VHDL = NO
289
290# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
291# sources only. Doxygen will then generate output that is more tailored for that
292# language. For instance, namespaces will be presented as modules, types will be
293# separated into more groups, etc.
294# The default value is: NO.
295
296OPTIMIZE_OUTPUT_SLICE = NO
297
298# Doxygen selects the parser to use depending on the extension of the files it
299# parses. With this tag you can assign which parser to use for a given
300# extension. Doxygen has a built-in mapping, but you can override or extend it
301# using this tag. The format is ext=language, where ext is a file extension, and
302# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
303# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
304# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
305# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
306# tries to guess whether the code is fixed or free formatted code, this is the
307# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
308# .inc files as Fortran files (default is PHP), and .f files as C (default is
309# Fortran), use: inc=Fortran f=C.
310#
311# Note: For files without extension you can use no_extension as a placeholder.
312#
313# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
314# the files are not read by doxygen.
315
316EXTENSION_MAPPING =
317
318# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
319# according to the Markdown format, which allows for more readable
320# documentation. See https://daringfireball.net/projects/markdown/ for details.
321# The output of markdown processing is further processed by doxygen, so you can
322# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
323# case of backward compatibilities issues.
324# The default value is: YES.
325
326MARKDOWN_SUPPORT = YES
327
328# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
329# to that level are automatically included in the table of contents, even if
330# they do not have an id attribute.
331# Note: This feature currently applies only to Markdown headings.
332# Minimum value: 0, maximum value: 99, default value: 0.
333# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
334
335TOC_INCLUDE_HEADINGS = 0
336
337# When enabled doxygen tries to link words that correspond to documented
338# classes, or namespaces to their corresponding documentation. Such a link can
339# be prevented in individual cases by putting a % sign in front of the word or
340# globally by setting AUTOLINK_SUPPORT to NO.
341# The default value is: YES.
342
343AUTOLINK_SUPPORT = YES
344
345# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
346# to include (a tag file for) the STL sources as input, then you should set this
347# tag to YES in order to let doxygen match functions declarations and
348# definitions whose arguments contain STL classes (e.g. func(std::string);
349# versus func(std::string) {}). This also make the inheritance and collaboration
350# diagrams that involve STL classes more complete and accurate.
351# The default value is: NO.
352
353BUILTIN_STL_SUPPORT = NO
354
355# If you use Microsoft's C++/CLI language, you should set this option to YES to
356# enable parsing support.
357# The default value is: NO.
358
359CPP_CLI_SUPPORT = NO
360
361# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
362# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
363# will parse them like normal C++ but will assume all classes use public instead
364# of private inheritance when no explicit protection keyword is present.
365# The default value is: NO.
366
367SIP_SUPPORT = NO
368
369# For Microsoft's IDL there are propget and propput attributes to indicate
370# getter and setter methods for a property. Setting this option to YES will make
371# doxygen to replace the get and set methods by a property in the documentation.
372# This will only work if the methods are indeed getting or setting a simple
373# type. If this is not the case, or you want to show the methods anyway, you
374# should set this option to NO.
375# The default value is: YES.
376
377IDL_PROPERTY_SUPPORT = YES
378
379# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
380# tag is set to YES then doxygen will reuse the documentation of the first
381# member in the group (if any) for the other members of the group. By default
382# all members of a group must be documented explicitly.
383# The default value is: NO.
384
385DISTRIBUTE_GROUP_DOC = NO
386
387# If one adds a struct or class to a group and this option is enabled, then also
388# any nested class or struct is added to the same group. By default this option
389# is disabled and one has to add nested compounds explicitly via \ingroup.
390# The default value is: NO.
391
392GROUP_NESTED_COMPOUNDS = NO
393
394# Set the SUBGROUPING tag to YES to allow class member groups of the same type
395# (for instance a group of public functions) to be put as a subgroup of that
396# type (e.g. under the Public Functions section). Set it to NO to prevent
397# subgrouping. Alternatively, this can be done per class using the
398# \nosubgrouping command.
399# The default value is: YES.
400
401SUBGROUPING = YES
402
403# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
404# are shown inside the group in which they are included (e.g. using \ingroup)
405# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
406# and RTF).
407#
408# Note that this feature does not work in combination with
409# SEPARATE_MEMBER_PAGES.
410# The default value is: NO.
411
412INLINE_GROUPED_CLASSES = NO
413
414# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
415# with only public data fields or simple typedef fields will be shown inline in
416# the documentation of the scope in which they are defined (i.e. file,
417# namespace, or group documentation), provided this scope is documented. If set
418# to NO, structs, classes, and unions are shown on a separate page (for HTML and
419# Man pages) or section (for LaTeX and RTF).
420# The default value is: NO.
421
422INLINE_SIMPLE_STRUCTS = NO
423
424# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
425# enum is documented as struct, union, or enum with the name of the typedef. So
426# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
427# with name TypeT. When disabled the typedef will appear as a member of a file,
428# namespace, or class. And the struct will be named TypeS. This can typically be
429# useful for C code in case the coding convention dictates that all compound
430# types are typedef'ed and only the typedef is referenced, never the tag name.
431# The default value is: NO.
432
433TYPEDEF_HIDES_STRUCT = NO
434
435# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
436# cache is used to resolve symbols given their name and scope. Since this can be
437# an expensive process and often the same symbol appears multiple times in the
438# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
439# doxygen will become slower. If the cache is too large, memory is wasted. The
440# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
441# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
442# symbols. At the end of a run doxygen will report the cache usage and suggest
443# the optimal cache size from a speed point of view.
444# Minimum value: 0, maximum value: 9, default value: 0.
445
446LOOKUP_CACHE_SIZE = 0
447
448#---------------------------------------------------------------------------
449# Build related configuration options
450#---------------------------------------------------------------------------
451
452# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
453# documentation are documented, even if no documentation was available. Private
454# class members and static file members will be hidden unless the
455# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
456# Note: This will also disable the warnings about undocumented members that are
457# normally produced when WARNINGS is set to YES.
458# The default value is: NO.
459
460EXTRACT_ALL = NO
461
462# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
463# be included in the documentation.
464# The default value is: NO.
465
466EXTRACT_PRIVATE = NO
467
468# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
469# scope will be included in the documentation.
470# The default value is: NO.
471
472EXTRACT_PACKAGE = NO
473
474# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
475# included in the documentation.
476# The default value is: NO.
477
478EXTRACT_STATIC = NO
479
480# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
481# locally in source files will be included in the documentation. If set to NO,
482# only classes defined in header files are included. Does not have any effect
483# for Java sources.
484# The default value is: YES.
485
486EXTRACT_LOCAL_CLASSES = YES
487
488# This flag is only useful for Objective-C code. If set to YES, local methods,
489# which are defined in the implementation section but not in the interface are
490# included in the documentation. If set to NO, only methods in the interface are
491# included.
492# The default value is: NO.
493
494EXTRACT_LOCAL_METHODS = NO
495
496# If this flag is set to YES, the members of anonymous namespaces will be
497# extracted and appear in the documentation as a namespace called
498# 'anonymous_namespace{file}', where file will be replaced with the base name of
499# the file that contains the anonymous namespace. By default anonymous namespace
500# are hidden.
501# The default value is: NO.
502
503EXTRACT_ANON_NSPACES = NO
504
505# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
506# undocumented members inside documented classes or files. If set to NO these
507# members will be included in the various overviews, but no documentation
508# section is generated. This option has no effect if EXTRACT_ALL is enabled.
509# The default value is: NO.
510
511HIDE_UNDOC_MEMBERS = NO
512
513# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
514# undocumented classes that are normally visible in the class hierarchy. If set
515# to NO, these classes will be included in the various overviews. This option
516# has no effect if EXTRACT_ALL is enabled.
517# The default value is: NO.
518
519HIDE_UNDOC_CLASSES = NO
520
521# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
522# (class|struct|union) declarations. If set to NO, these declarations will be
523# included in the documentation.
524# The default value is: NO.
525
526HIDE_FRIEND_COMPOUNDS = NO
527
528# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
529# documentation blocks found inside the body of a function. If set to NO, these
530# blocks will be appended to the function's detailed documentation block.
531# The default value is: NO.
532
533HIDE_IN_BODY_DOCS = NO
534
535# The INTERNAL_DOCS tag determines if documentation that is typed after a
536# \internal command is included. If the tag is set to NO then the documentation
537# will be excluded. Set it to YES to include the internal documentation.
538# The default value is: NO.
539
540INTERNAL_DOCS = NO
541
542# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
543# names in lower-case letters. If set to YES, upper-case letters are also
544# allowed. This is useful if you have classes or files whose names only differ
545# in case and if your file system supports case sensitive file names. Windows
546# and Mac users are advised to set this option to NO.
547# The default value is: system dependent.
548
549CASE_SENSE_NAMES = NO
550
551# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
552# their full class and namespace scopes in the documentation. If set to YES, the
553# scope will be hidden.
554# The default value is: NO.
555
556HIDE_SCOPE_NAMES = NO
557
558# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
559# append additional text to a page's title, such as Class Reference. If set to
560# YES the compound reference will be hidden.
561# The default value is: NO.
562
563HIDE_COMPOUND_REFERENCE= NO
564
565# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
566# the files that are included by a file in the documentation of that file.
567# The default value is: YES.
568
569SHOW_INCLUDE_FILES = YES
570
571# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
572# grouped member an include statement to the documentation, telling the reader
573# which file to include in order to use the member.
574# The default value is: NO.
575
576SHOW_GROUPED_MEMB_INC = NO
577
578# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
579# files with double quotes in the documentation rather than with sharp brackets.
580# The default value is: NO.
581
582FORCE_LOCAL_INCLUDES = NO
583
584# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
585# documentation for inline members.
586# The default value is: YES.
587
588INLINE_INFO = YES
589
590# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
591# (detailed) documentation of file and class members alphabetically by member
592# name. If set to NO, the members will appear in declaration order.
593# The default value is: YES.
594
595SORT_MEMBER_DOCS = YES
596
597# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
598# descriptions of file, namespace and class members alphabetically by member
599# name. If set to NO, the members will appear in declaration order. Note that
600# this will also influence the order of the classes in the class list.
601# The default value is: NO.
602
603SORT_BRIEF_DOCS = NO
604
605# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
606# (brief and detailed) documentation of class members so that constructors and
607# destructors are listed first. If set to NO the constructors will appear in the
608# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
609# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
610# member documentation.
611# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
612# detailed member documentation.
613# The default value is: NO.
614
615SORT_MEMBERS_CTORS_1ST = NO
616
617# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
618# of group names into alphabetical order. If set to NO the group names will
619# appear in their defined order.
620# The default value is: NO.
621
622SORT_GROUP_NAMES = NO
623
624# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
625# fully-qualified names, including namespaces. If set to NO, the class list will
626# be sorted only by class name, not including the namespace part.
627# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
628# Note: This option applies only to the class list, not to the alphabetical
629# list.
630# The default value is: NO.
631
632SORT_BY_SCOPE_NAME = NO
633
634# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
635# type resolution of all parameters of a function it will reject a match between
636# the prototype and the implementation of a member function even if there is
637# only one candidate or it is obvious which candidate to choose by doing a
638# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
639# accept a match between prototype and implementation in such cases.
640# The default value is: NO.
641
642STRICT_PROTO_MATCHING = NO
643
644# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
645# list. This list is created by putting \todo commands in the documentation.
646# The default value is: YES.
647
648GENERATE_TODOLIST = YES
649
650# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
651# list. This list is created by putting \test commands in the documentation.
652# The default value is: YES.
653
654GENERATE_TESTLIST = YES
655
656# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
657# list. This list is created by putting \bug commands in the documentation.
658# The default value is: YES.
659
660GENERATE_BUGLIST = YES
661
662# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
663# the deprecated list. This list is created by putting \deprecated commands in
664# the documentation.
665# The default value is: YES.
666
667GENERATE_DEPRECATEDLIST= YES
668
669# The ENABLED_SECTIONS tag can be used to enable conditional documentation
670# sections, marked by \if <section_label> ... \endif and \cond <section_label>
671# ... \endcond blocks.
672
673ENABLED_SECTIONS =
674
675# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
676# initial value of a variable or macro / define can have for it to appear in the
677# documentation. If the initializer consists of more lines than specified here
678# it will be hidden. Use a value of 0 to hide initializers completely. The
679# appearance of the value of individual variables and macros / defines can be
680# controlled using \showinitializer or \hideinitializer command in the
681# documentation regardless of this setting.
682# Minimum value: 0, maximum value: 10000, default value: 30.
683
684MAX_INITIALIZER_LINES = 30
685
686# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
687# the bottom of the documentation of classes and structs. If set to YES, the
688# list will mention the files that were used to generate the documentation.
689# The default value is: YES.
690
691SHOW_USED_FILES = YES
692
693# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
694# will remove the Files entry from the Quick Index and from the Folder Tree View
695# (if specified).
696# The default value is: YES.
697
698SHOW_FILES = YES
699
700# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
701# page. This will remove the Namespaces entry from the Quick Index and from the
702# Folder Tree View (if specified).
703# The default value is: YES.
704
705SHOW_NAMESPACES = YES
706
707# The FILE_VERSION_FILTER tag can be used to specify a program or script that
708# doxygen should invoke to get the current version for each file (typically from
709# the version control system). Doxygen will invoke the program by executing (via
710# popen()) the command command input-file, where command is the value of the
711# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
712# by doxygen. Whatever the program writes to standard output is used as the file
713# version. For an example see the documentation.
714
715FILE_VERSION_FILTER =
716
717# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
718# by doxygen. The layout file controls the global structure of the generated
719# output files in an output format independent way. To create the layout file
720# that represents doxygen's defaults, run doxygen with the -l option. You can
721# optionally specify a file name after the option, if omitted DoxygenLayout.xml
722# will be used as the name of the layout file.
723#
724# Note that if you run doxygen from a directory containing a file called
725# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
726# tag is left empty.
727
728LAYOUT_FILE =
729
730# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
731# the reference definitions. This must be a list of .bib files. The .bib
732# extension is automatically appended if omitted. This requires the bibtex tool
733# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
734# For LaTeX the style of the bibliography can be controlled using
735# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
736# search path. See also \cite for info how to create references.
737
738CITE_BIB_FILES =
739
740#---------------------------------------------------------------------------
741# Configuration options related to warning and progress messages
742#---------------------------------------------------------------------------
743
744# The QUIET tag can be used to turn on/off the messages that are generated to
745# standard output by doxygen. If QUIET is set to YES this implies that the
746# messages are off.
747# The default value is: NO.
748
749QUIET = NO
750
751# The WARNINGS tag can be used to turn on/off the warning messages that are
752# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
753# this implies that the warnings are on.
754#
755# Tip: Turn warnings on while writing the documentation.
756# The default value is: YES.
757
758WARNINGS = YES
759
760# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
761# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
762# will automatically be disabled.
763# The default value is: YES.
764
765WARN_IF_UNDOCUMENTED = YES
766
767# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
768# potential errors in the documentation, such as not documenting some parameters
769# in a documented function, or documenting parameters that don't exist or using
770# markup commands wrongly.
771# The default value is: YES.
772
773WARN_IF_DOC_ERROR = YES
774
775# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
776# are documented, but have no documentation for their parameters or return
777# value. If set to NO, doxygen will only warn about wrong or incomplete
778# parameter documentation, but not about the absence of documentation. If
779# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
780# The default value is: NO.
781
782WARN_NO_PARAMDOC = NO
783
784# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
785# a warning is encountered.
786# The default value is: NO.
787
788WARN_AS_ERROR = NO
789
790# The WARN_FORMAT tag determines the format of the warning messages that doxygen
791# can produce. The string should contain the $file, $line, and $text tags, which
792# will be replaced by the file and line number from which the warning originated
793# and the warning text. Optionally the format may contain $version, which will
794# be replaced by the version of the file (if it could be obtained via
795# FILE_VERSION_FILTER)
796# The default value is: $file:$line: $text.
797
798WARN_FORMAT = "$file:$line: $text"
799
800# The WARN_LOGFILE tag can be used to specify a file to which warning and error
801# messages should be written. If left blank the output is written to standard
802# error (stderr).
803
804WARN_LOGFILE =
805
806#---------------------------------------------------------------------------
807# Configuration options related to the input files
808#---------------------------------------------------------------------------
809
810# The INPUT tag is used to specify the files and/or directories that contain
811# documented source files. You may enter file names like myfile.cpp or
812# directories like /usr/src/myproject. Separate the files or directories with
813# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
814# Note: If this tag is empty the current directory is searched.
815
816INPUT = .
817
818# This tag can be used to specify the character encoding of the source files
819# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
820# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
821# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
822# possible encodings.
823# The default value is: UTF-8.
824
825INPUT_ENCODING = UTF-8
826
827# If the value of the INPUT tag contains directories, you can use the
828# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
829# *.h) to filter out the source-files in the directories.
830#
831# Note that for custom extensions or not directly supported extensions you also
832# need to set EXTENSION_MAPPING for the extension otherwise the files are not
833# read by doxygen.
834#
835# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
836# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
837# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
838# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
839# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
840
841FILE_PATTERNS = *.c \
842 *.cc \
843 *.cxx \
844 *.cpp \
845 *.c++ \
846 *.java \
847 *.ii \
848 *.ixx \
849 *.ipp \
850 *.i++ \
851 *.inl \
852 *.idl \
853 *.ddl \
854 *.odl \
855 *.h \
856 *.hh \
857 *.hxx \
858 *.hpp \
859 *.h++ \
860 *.cs \
861 *.d \
862 *.php \
863 *.php4 \
864 *.php5 \
865 *.phtml \
866 *.inc \
867 *.m \
868 *.markdown \
869 *.md \
870 *.mm \
871 *.dox \
872 *.py \
873 *.pyw \
874 *.f90 \
875 *.f95 \
876 *.f03 \
877 *.f08 \
878 *.f \
879 *.for \
880 *.tcl \
881 *.vhd \
882 *.vhdl \
883 *.ucf \
884 *.qsf \
885 *.ice
886
887# The RECURSIVE tag can be used to specify whether or not subdirectories should
888# be searched for input files as well.
889# The default value is: NO.
890
891RECURSIVE = YES
892
893# The EXCLUDE tag can be used to specify files and/or directories that should be
894# excluded from the INPUT source files. This way you can easily exclude a
895# subdirectory from a directory tree whose root is specified with the INPUT tag.
896#
897# Note that relative paths are relative to the directory from which doxygen is
898# run.
899
900EXCLUDE =
901
902# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
903# directories that are symbolic links (a Unix file system feature) are excluded
904# from the input.
905# The default value is: NO.
906
907EXCLUDE_SYMLINKS = NO
908
909# If the value of the INPUT tag contains directories, you can use the
910# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
911# certain files from those directories.
912#
913# Note that the wildcards are matched against the file with absolute path, so to
914# exclude all test directories for example use the pattern */test/*
915
916EXCLUDE_PATTERNS =
917
918# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
919# (namespaces, classes, functions, etc.) that should be excluded from the
920# output. The symbol name can be a fully qualified name, a word, or if the
921# wildcard * is used, a substring. Examples: ANamespace, AClass,
922# AClass::ANamespace, ANamespace::*Test
923#
924# Note that the wildcards are matched against the file with absolute path, so to
925# exclude all test directories use the pattern */test/*
926
927EXCLUDE_SYMBOLS =
928
929# The EXAMPLE_PATH tag can be used to specify one or more files or directories
930# that contain example code fragments that are included (see the \include
931# command).
932
933EXAMPLE_PATH =
934
935# If the value of the EXAMPLE_PATH tag contains directories, you can use the
936# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
937# *.h) to filter out the source-files in the directories. If left blank all
938# files are included.
939
940EXAMPLE_PATTERNS = *
941
942# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
943# searched for input files to be used with the \include or \dontinclude commands
944# irrespective of the value of the RECURSIVE tag.
945# The default value is: NO.
946
947EXAMPLE_RECURSIVE = NO
948
949# The IMAGE_PATH tag can be used to specify one or more files or directories
950# that contain images that are to be included in the documentation (see the
951# \image command).
952
953IMAGE_PATH =
954
955# The INPUT_FILTER tag can be used to specify a program that doxygen should
956# invoke to filter for each input file. Doxygen will invoke the filter program
957# by executing (via popen()) the command:
958#
959# <filter> <input-file>
960#
961# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
962# name of an input file. Doxygen will then use the output that the filter
963# program writes to standard output. If FILTER_PATTERNS is specified, this tag
964# will be ignored.
965#
966# Note that the filter must not add or remove lines; it is applied before the
967# code is scanned, but not when the output code is generated. If lines are added
968# or removed, the anchors will not be placed correctly.
969#
970# Note that for custom extensions or not directly supported extensions you also
971# need to set EXTENSION_MAPPING for the extension otherwise the files are not
972# properly processed by doxygen.
973
974INPUT_FILTER =
975
976# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
977# basis. Doxygen will compare the file name with each pattern and apply the
978# filter if there is a match. The filters are a list of the form: pattern=filter
979# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
980# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
981# patterns match the file name, INPUT_FILTER is applied.
982#
983# Note that for custom extensions or not directly supported extensions you also
984# need to set EXTENSION_MAPPING for the extension otherwise the files are not
985# properly processed by doxygen.
986
987FILTER_PATTERNS =
988
989# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
990# INPUT_FILTER) will also be used to filter the input files that are used for
991# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
992# The default value is: NO.
993
994FILTER_SOURCE_FILES = NO
995
996# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
997# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
998# it is also possible to disable source filtering for a specific pattern using
999# *.ext= (so without naming a filter).
1000# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
1001
1002FILTER_SOURCE_PATTERNS =
1003
1004# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
1005# is part of the input, its contents will be placed on the main page
1006# (index.html). This can be useful if you have a project on for instance GitHub
1007# and want to reuse the introduction page also for the doxygen output.
1008
1009USE_MDFILE_AS_MAINPAGE =
1010
1011#---------------------------------------------------------------------------
1012# Configuration options related to source browsing
1013#---------------------------------------------------------------------------
1014
1015# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
1016# generated. Documented entities will be cross-referenced with these sources.
1017#
1018# Note: To get rid of all source code in the generated output, make sure that
1019# also VERBATIM_HEADERS is set to NO.
1020# The default value is: NO.
1021
1022SOURCE_BROWSER = NO
1023
1024# Setting the INLINE_SOURCES tag to YES will include the body of functions,
1025# classes and enums directly into the documentation.
1026# The default value is: NO.
1027
1028INLINE_SOURCES = NO
1029
1030# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
1031# special comment blocks from generated source code fragments. Normal C, C++ and
1032# Fortran comments will always remain visible.
1033# The default value is: YES.
1034
1035STRIP_CODE_COMMENTS = YES
1036
1037# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
1038# entity all documented functions referencing it will be listed.
1039# The default value is: NO.
1040
1041REFERENCED_BY_RELATION = NO
1042
1043# If the REFERENCES_RELATION tag is set to YES then for each documented function
1044# all documented entities called/used by that function will be listed.
1045# The default value is: NO.
1046
1047REFERENCES_RELATION = NO
1048
1049# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
1050# to YES then the hyperlinks from functions in REFERENCES_RELATION and
1051# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
1052# link to the documentation.
1053# The default value is: YES.
1054
1055REFERENCES_LINK_SOURCE = YES
1056
1057# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
1058# source code will show a tooltip with additional information such as prototype,
1059# brief description and links to the definition and documentation. Since this
1060# will make the HTML file larger and loading of large files a bit slower, you
1061# can opt to disable this feature.
1062# The default value is: YES.
1063# This tag requires that the tag SOURCE_BROWSER is set to YES.
1064
1065SOURCE_TOOLTIPS = YES
1066
1067# If the USE_HTAGS tag is set to YES then the references to source code will
1068# point to the HTML generated by the htags(1) tool instead of doxygen built-in
1069# source browser. The htags tool is part of GNU's global source tagging system
1070# (see https://www.gnu.org/software/global/global.html). You will need version
1071# 4.8.6 or higher.
1072#
1073# To use it do the following:
1074# - Install the latest version of global
1075# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
1076# - Make sure the INPUT points to the root of the source tree
1077# - Run doxygen as normal
1078#
1079# Doxygen will invoke htags (and that will in turn invoke gtags), so these
1080# tools must be available from the command line (i.e. in the search path).
1081#
1082# The result: instead of the source browser generated by doxygen, the links to
1083# source code will now point to the output of htags.
1084# The default value is: NO.
1085# This tag requires that the tag SOURCE_BROWSER is set to YES.
1086
1087USE_HTAGS = NO
1088
1089# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
1090# verbatim copy of the header file for each class for which an include is
1091# specified. Set to NO to disable this.
1092# See also: Section \class.
1093# The default value is: YES.
1094
1095VERBATIM_HEADERS = YES
1096
1097#---------------------------------------------------------------------------
1098# Configuration options related to the alphabetical class index
1099#---------------------------------------------------------------------------
1100
1101# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
1102# compounds will be generated. Enable this if the project contains a lot of
1103# classes, structs, unions or interfaces.
1104# The default value is: YES.
1105
1106ALPHABETICAL_INDEX = YES
1107
1108# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
1109# which the alphabetical index list will be split.
1110# Minimum value: 1, maximum value: 20, default value: 5.
1111# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1112
1113COLS_IN_ALPHA_INDEX = 5
1114
1115# In case all classes in a project start with a common prefix, all classes will
1116# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1117# can be used to specify a prefix (or a list of prefixes) that should be ignored
1118# while generating the index headers.
1119# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1120
1121IGNORE_PREFIX =
1122
1123#---------------------------------------------------------------------------
1124# Configuration options related to the HTML output
1125#---------------------------------------------------------------------------
1126
1127# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
1128# The default value is: YES.
1129
1130GENERATE_HTML = NO
1131
1132# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1133# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1134# it.
1135# The default directory is: html.
1136# This tag requires that the tag GENERATE_HTML is set to YES.
1137
1138HTML_OUTPUT = html
1139
1140# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1141# generated HTML page (for example: .htm, .php, .asp).
1142# The default value is: .html.
1143# This tag requires that the tag GENERATE_HTML is set to YES.
1144
1145HTML_FILE_EXTENSION = .html
1146
1147# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1148# each generated HTML page. If the tag is left blank doxygen will generate a
1149# standard header.
1150#
1151# To get valid HTML the header file that includes any scripts and style sheets
1152# that doxygen needs, which is dependent on the configuration options used (e.g.
1153# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1154# default header using
1155# doxygen -w html new_header.html new_footer.html new_stylesheet.css
1156# YourConfigFile
1157# and then modify the file new_header.html. See also section "Doxygen usage"
1158# for information on how to generate the default header that doxygen normally
1159# uses.
1160# Note: The header is subject to change so you typically have to regenerate the
1161# default header when upgrading to a newer version of doxygen. For a description
1162# of the possible markers and block names see the documentation.
1163# This tag requires that the tag GENERATE_HTML is set to YES.
1164
1165HTML_HEADER =
1166
1167# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1168# generated HTML page. If the tag is left blank doxygen will generate a standard
1169# footer. See HTML_HEADER for more information on how to generate a default
1170# footer and what special commands can be used inside the footer. See also
1171# section "Doxygen usage" for information on how to generate the default footer
1172# that doxygen normally uses.
1173# This tag requires that the tag GENERATE_HTML is set to YES.
1174
1175HTML_FOOTER =
1176
1177# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1178# sheet that is used by each HTML page. It can be used to fine-tune the look of
1179# the HTML output. If left blank doxygen will generate a default style sheet.
1180# See also section "Doxygen usage" for information on how to generate the style
1181# sheet that doxygen normally uses.
1182# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1183# it is more robust and this tag (HTML_STYLESHEET) will in the future become
1184# obsolete.
1185# This tag requires that the tag GENERATE_HTML is set to YES.
1186
1187HTML_STYLESHEET =
1188
1189# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1190# cascading style sheets that are included after the standard style sheets
1191# created by doxygen. Using this option one can overrule certain style aspects.
1192# This is preferred over using HTML_STYLESHEET since it does not replace the
1193# standard style sheet and is therefore more robust against future updates.
1194# Doxygen will copy the style sheet files to the output directory.
1195# Note: The order of the extra style sheet files is of importance (e.g. the last
1196# style sheet in the list overrules the setting of the previous ones in the
1197# list). For an example see the documentation.
1198# This tag requires that the tag GENERATE_HTML is set to YES.
1199
1200HTML_EXTRA_STYLESHEET =
1201
1202# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1203# other source files which should be copied to the HTML output directory. Note
1204# that these files will be copied to the base HTML output directory. Use the
1205# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1206# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1207# files will be copied as-is; there are no commands or markers available.
1208# This tag requires that the tag GENERATE_HTML is set to YES.
1209
1210HTML_EXTRA_FILES =
1211
1212# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1213# will adjust the colors in the style sheet and background images according to
1214# this color. Hue is specified as an angle on a colorwheel, see
1215# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
1216# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1217# purple, and 360 is red again.
1218# Minimum value: 0, maximum value: 359, default value: 220.
1219# This tag requires that the tag GENERATE_HTML is set to YES.
1220
1221HTML_COLORSTYLE_HUE = 220
1222
1223# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1224# in the HTML output. For a value of 0 the output will use grayscales only. A
1225# value of 255 will produce the most vivid colors.
1226# Minimum value: 0, maximum value: 255, default value: 100.
1227# This tag requires that the tag GENERATE_HTML is set to YES.
1228
1229HTML_COLORSTYLE_SAT = 100
1230
1231# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1232# luminance component of the colors in the HTML output. Values below 100
1233# gradually make the output lighter, whereas values above 100 make the output
1234# darker. The value divided by 100 is the actual gamma applied, so 80 represents
1235# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1236# change the gamma.
1237# Minimum value: 40, maximum value: 240, default value: 80.
1238# This tag requires that the tag GENERATE_HTML is set to YES.
1239
1240HTML_COLORSTYLE_GAMMA = 80
1241
1242# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1243# page will contain the date and time when the page was generated. Setting this
1244# to YES can help to show when doxygen was last run and thus if the
1245# documentation is up to date.
1246# The default value is: NO.
1247# This tag requires that the tag GENERATE_HTML is set to YES.
1248
1249HTML_TIMESTAMP = NO
1250
1251# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
1252# documentation will contain a main index with vertical navigation menus that
1253# are dynamically created via Javascript. If disabled, the navigation index will
1254# consists of multiple levels of tabs that are statically embedded in every HTML
1255# page. Disable this option to support browsers that do not have Javascript,
1256# like the Qt help browser.
1257# The default value is: YES.
1258# This tag requires that the tag GENERATE_HTML is set to YES.
1259
1260HTML_DYNAMIC_MENUS = YES
1261
1262# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1263# documentation will contain sections that can be hidden and shown after the
1264# page has loaded.
1265# The default value is: NO.
1266# This tag requires that the tag GENERATE_HTML is set to YES.
1267
1268HTML_DYNAMIC_SECTIONS = NO
1269
1270# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1271# shown in the various tree structured indices initially; the user can expand
1272# and collapse entries dynamically later on. Doxygen will expand the tree to
1273# such a level that at most the specified number of entries are visible (unless
1274# a fully collapsed tree already exceeds this amount). So setting the number of
1275# entries 1 will produce a full collapsed tree by default. 0 is a special value
1276# representing an infinite number of entries and will result in a full expanded
1277# tree by default.
1278# Minimum value: 0, maximum value: 9999, default value: 100.
1279# This tag requires that the tag GENERATE_HTML is set to YES.
1280
1281HTML_INDEX_NUM_ENTRIES = 100
1282
1283# If the GENERATE_DOCSET tag is set to YES, additional index files will be
1284# generated that can be used as input for Apple's Xcode 3 integrated development
1285# environment (see: https://developer.apple.com/xcode/), introduced with OSX
1286# 10.5 (Leopard). To create a documentation set, doxygen will generate a
1287# Makefile in the HTML output directory. Running make will produce the docset in
1288# that directory and running make install will install the docset in
1289# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1290# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
1291# genXcode/_index.html for more information.
1292# The default value is: NO.
1293# This tag requires that the tag GENERATE_HTML is set to YES.
1294
1295GENERATE_DOCSET = NO
1296
1297# This tag determines the name of the docset feed. A documentation feed provides
1298# an umbrella under which multiple documentation sets from a single provider
1299# (such as a company or product suite) can be grouped.
1300# The default value is: Doxygen generated docs.
1301# This tag requires that the tag GENERATE_DOCSET is set to YES.
1302
1303DOCSET_FEEDNAME = "Doxygen generated docs"
1304
1305# This tag specifies a string that should uniquely identify the documentation
1306# set bundle. This should be a reverse domain-name style string, e.g.
1307# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1308# The default value is: org.doxygen.Project.
1309# This tag requires that the tag GENERATE_DOCSET is set to YES.
1310
1311DOCSET_BUNDLE_ID = org.doxygen.Project
1312
1313# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1314# the documentation publisher. This should be a reverse domain-name style
1315# string, e.g. com.mycompany.MyDocSet.documentation.
1316# The default value is: org.doxygen.Publisher.
1317# This tag requires that the tag GENERATE_DOCSET is set to YES.
1318
1319DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1320
1321# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1322# The default value is: Publisher.
1323# This tag requires that the tag GENERATE_DOCSET is set to YES.
1324
1325DOCSET_PUBLISHER_NAME = Publisher
1326
1327# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1328# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1329# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1330# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1331# Windows.
1332#
1333# The HTML Help Workshop contains a compiler that can convert all HTML output
1334# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1335# files are now used as the Windows 98 help format, and will replace the old
1336# Windows help format (.hlp) on all Windows platforms in the future. Compressed
1337# HTML files also contain an index, a table of contents, and you can search for
1338# words in the documentation. The HTML workshop also contains a viewer for
1339# compressed HTML files.
1340# The default value is: NO.
1341# This tag requires that the tag GENERATE_HTML is set to YES.
1342
1343GENERATE_HTMLHELP = NO
1344
1345# The CHM_FILE tag can be used to specify the file name of the resulting .chm
1346# file. You can add a path in front of the file if the result should not be
1347# written to the html output directory.
1348# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1349
1350CHM_FILE =
1351
1352# The HHC_LOCATION tag can be used to specify the location (absolute path
1353# including file name) of the HTML help compiler (hhc.exe). If non-empty,
1354# doxygen will try to run the HTML help compiler on the generated index.hhp.
1355# The file has to be specified with full path.
1356# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1357
1358HHC_LOCATION =
1359
1360# The GENERATE_CHI flag controls if a separate .chi index file is generated
1361# (YES) or that it should be included in the master .chm file (NO).
1362# The default value is: NO.
1363# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1364
1365GENERATE_CHI = NO
1366
1367# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
1368# and project file content.
1369# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1370
1371CHM_INDEX_ENCODING =
1372
1373# The BINARY_TOC flag controls whether a binary table of contents is generated
1374# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
1375# enables the Previous and Next buttons.
1376# The default value is: NO.
1377# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1378
1379BINARY_TOC = NO
1380
1381# The TOC_EXPAND flag can be set to YES to add extra items for group members to
1382# the table of contents of the HTML help documentation and to the tree view.
1383# The default value is: NO.
1384# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1385
1386TOC_EXPAND = NO
1387
1388# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1389# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1390# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1391# (.qch) of the generated HTML documentation.
1392# The default value is: NO.
1393# This tag requires that the tag GENERATE_HTML is set to YES.
1394
1395GENERATE_QHP = NO
1396
1397# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1398# the file name of the resulting .qch file. The path specified is relative to
1399# the HTML output folder.
1400# This tag requires that the tag GENERATE_QHP is set to YES.
1401
1402QCH_FILE =
1403
1404# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1405# Project output. For more information please see Qt Help Project / Namespace
1406# (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
1407# The default value is: org.doxygen.Project.
1408# This tag requires that the tag GENERATE_QHP is set to YES.
1409
1410QHP_NAMESPACE = org.doxygen.Project
1411
1412# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1413# Help Project output. For more information please see Qt Help Project / Virtual
1414# Folders (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
1415# folders).
1416# The default value is: doc.
1417# This tag requires that the tag GENERATE_QHP is set to YES.
1418
1419QHP_VIRTUAL_FOLDER = doc
1420
1421# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1422# filter to add. For more information please see Qt Help Project / Custom
1423# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
1424# filters).
1425# This tag requires that the tag GENERATE_QHP is set to YES.
1426
1427QHP_CUST_FILTER_NAME =
1428
1429# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1430# custom filter to add. For more information please see Qt Help Project / Custom
1431# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
1432# filters).
1433# This tag requires that the tag GENERATE_QHP is set to YES.
1434
1435QHP_CUST_FILTER_ATTRS =
1436
1437# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1438# project's filter section matches. Qt Help Project / Filter Attributes (see:
1439# http://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
1440# This tag requires that the tag GENERATE_QHP is set to YES.
1441
1442QHP_SECT_FILTER_ATTRS =
1443
1444# The QHG_LOCATION tag can be used to specify the location of Qt's
1445# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1446# generated .qhp file.
1447# This tag requires that the tag GENERATE_QHP is set to YES.
1448
1449QHG_LOCATION =
1450
1451# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1452# generated, together with the HTML files, they form an Eclipse help plugin. To
1453# install this plugin and make it available under the help contents menu in
1454# Eclipse, the contents of the directory containing the HTML and XML files needs
1455# to be copied into the plugins directory of eclipse. The name of the directory
1456# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1457# After copying Eclipse needs to be restarted before the help appears.
1458# The default value is: NO.
1459# This tag requires that the tag GENERATE_HTML is set to YES.
1460
1461GENERATE_ECLIPSEHELP = NO
1462
1463# A unique identifier for the Eclipse help plugin. When installing the plugin
1464# the directory name containing the HTML and XML files should also have this
1465# name. Each documentation set should have its own identifier.
1466# The default value is: org.doxygen.Project.
1467# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
1468
1469ECLIPSE_DOC_ID = org.doxygen.Project
1470
1471# If you want full control over the layout of the generated HTML pages it might
1472# be necessary to disable the index and replace it with your own. The
1473# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
1474# of each HTML page. A value of NO enables the index and the value YES disables
1475# it. Since the tabs in the index contain the same information as the navigation
1476# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
1477# The default value is: NO.
1478# This tag requires that the tag GENERATE_HTML is set to YES.
1479
1480DISABLE_INDEX = NO
1481
1482# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1483# structure should be generated to display hierarchical information. If the tag
1484# value is set to YES, a side panel will be generated containing a tree-like
1485# index structure (just like the one that is generated for HTML Help). For this
1486# to work a browser that supports JavaScript, DHTML, CSS and frames is required
1487# (i.e. any modern browser). Windows users are probably better off using the
1488# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
1489# further fine-tune the look of the index. As an example, the default style
1490# sheet generated by doxygen has an example that shows how to put an image at
1491# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
1492# the same information as the tab index, you could consider setting
1493# DISABLE_INDEX to YES when enabling this option.
1494# The default value is: NO.
1495# This tag requires that the tag GENERATE_HTML is set to YES.
1496
1497GENERATE_TREEVIEW = NO
1498
1499# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1500# doxygen will group on one line in the generated HTML documentation.
1501#
1502# Note that a value of 0 will completely suppress the enum values from appearing
1503# in the overview section.
1504# Minimum value: 0, maximum value: 20, default value: 4.
1505# This tag requires that the tag GENERATE_HTML is set to YES.
1506
1507ENUM_VALUES_PER_LINE = 4
1508
1509# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
1510# to set the initial width (in pixels) of the frame in which the tree is shown.
1511# Minimum value: 0, maximum value: 1500, default value: 250.
1512# This tag requires that the tag GENERATE_HTML is set to YES.
1513
1514TREEVIEW_WIDTH = 250
1515
1516# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
1517# external symbols imported via tag files in a separate window.
1518# The default value is: NO.
1519# This tag requires that the tag GENERATE_HTML is set to YES.
1520
1521EXT_LINKS_IN_WINDOW = NO
1522
1523# Use this tag to change the font size of LaTeX formulas included as images in
1524# the HTML documentation. When you change the font size after a successful
1525# doxygen run you need to manually remove any form_*.png images from the HTML
1526# output directory to force them to be regenerated.
1527# Minimum value: 8, maximum value: 50, default value: 10.
1528# This tag requires that the tag GENERATE_HTML is set to YES.
1529
1530FORMULA_FONTSIZE = 10
1531
1532# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
1533# generated for formulas are transparent PNGs. Transparent PNGs are not
1534# supported properly for IE 6.0, but are supported on all modern browsers.
1535#
1536# Note that when changing this option you need to delete any form_*.png files in
1537# the HTML output directory before the changes have effect.
1538# The default value is: YES.
1539# This tag requires that the tag GENERATE_HTML is set to YES.
1540
1541FORMULA_TRANSPARENT = YES
1542
1543# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1544# https://www.mathjax.org) which uses client side Javascript for the rendering
1545# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
1546# installed or if you want to formulas look prettier in the HTML output. When
1547# enabled you may also need to install MathJax separately and configure the path
1548# to it using the MATHJAX_RELPATH option.
1549# The default value is: NO.
1550# This tag requires that the tag GENERATE_HTML is set to YES.
1551
1552USE_MATHJAX = NO
1553
1554# When MathJax is enabled you can set the default output format to be used for
1555# the MathJax output. See the MathJax site (see:
1556# http://docs.mathjax.org/en/latest/output.html) for more details.
1557# Possible values are: HTML-CSS (which is slower, but has the best
1558# compatibility), NativeMML (i.e. MathML) and SVG.
1559# The default value is: HTML-CSS.
1560# This tag requires that the tag USE_MATHJAX is set to YES.
1561
1562MATHJAX_FORMAT = HTML-CSS
1563
1564# When MathJax is enabled you need to specify the location relative to the HTML
1565# output directory using the MATHJAX_RELPATH option. The destination directory
1566# should contain the MathJax.js script. For instance, if the mathjax directory
1567# is located at the same level as the HTML output directory, then
1568# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1569# Content Delivery Network so you can quickly see the result without installing
1570# MathJax. However, it is strongly recommended to install a local copy of
1571# MathJax from https://www.mathjax.org before deployment.
1572# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
1573# This tag requires that the tag USE_MATHJAX is set to YES.
1574
1575MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
1576
1577# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
1578# extension names that should be enabled during MathJax rendering. For example
1579# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1580# This tag requires that the tag USE_MATHJAX is set to YES.
1581
1582MATHJAX_EXTENSIONS =
1583
1584# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1585# of code that will be used on startup of the MathJax code. See the MathJax site
1586# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
1587# example see the documentation.
1588# This tag requires that the tag USE_MATHJAX is set to YES.
1589
1590MATHJAX_CODEFILE =
1591
1592# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1593# the HTML output. The underlying search engine uses javascript and DHTML and
1594# should work on any modern browser. Note that when using HTML help
1595# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
1596# there is already a search function so this one should typically be disabled.
1597# For large projects the javascript based search engine can be slow, then
1598# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
1599# search using the keyboard; to jump to the search box use <access key> + S
1600# (what the <access key> is depends on the OS and browser, but it is typically
1601# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
1602# key> to jump into the search results window, the results can be navigated
1603# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
1604# the search. The filter options can be selected when the cursor is inside the
1605# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
1606# to select a filter and <Enter> or <escape> to activate or cancel the filter
1607# option.
1608# The default value is: YES.
1609# This tag requires that the tag GENERATE_HTML is set to YES.
1610
1611SEARCHENGINE = YES
1612
1613# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1614# implemented using a web server instead of a web client using Javascript. There
1615# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
1616# setting. When disabled, doxygen will generate a PHP script for searching and
1617# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
1618# and searching needs to be provided by external tools. See the section
1619# "External Indexing and Searching" for details.
1620# The default value is: NO.
1621# This tag requires that the tag SEARCHENGINE is set to YES.
1622
1623SERVER_BASED_SEARCH = NO
1624
1625# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
1626# script for searching. Instead the search results are written to an XML file
1627# which needs to be processed by an external indexer. Doxygen will invoke an
1628# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
1629# search results.
1630#
1631# Doxygen ships with an example indexer (doxyindexer) and search engine
1632# (doxysearch.cgi) which are based on the open source search engine library
1633# Xapian (see: https://xapian.org/).
1634#
1635# See the section "External Indexing and Searching" for details.
1636# The default value is: NO.
1637# This tag requires that the tag SEARCHENGINE is set to YES.
1638
1639EXTERNAL_SEARCH = NO
1640
1641# The SEARCHENGINE_URL should point to a search engine hosted by a web server
1642# which will return the search results when EXTERNAL_SEARCH is enabled.
1643#
1644# Doxygen ships with an example indexer (doxyindexer) and search engine
1645# (doxysearch.cgi) which are based on the open source search engine library
1646# Xapian (see: https://xapian.org/). See the section "External Indexing and
1647# Searching" for details.
1648# This tag requires that the tag SEARCHENGINE is set to YES.
1649
1650SEARCHENGINE_URL =
1651
1652# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
1653# search data is written to a file for indexing by an external tool. With the
1654# SEARCHDATA_FILE tag the name of this file can be specified.
1655# The default file is: searchdata.xml.
1656# This tag requires that the tag SEARCHENGINE is set to YES.
1657
1658SEARCHDATA_FILE = searchdata.xml
1659
1660# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
1661# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
1662# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
1663# projects and redirect the results back to the right project.
1664# This tag requires that the tag SEARCHENGINE is set to YES.
1665
1666EXTERNAL_SEARCH_ID =
1667
1668# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
1669# projects other than the one defined by this configuration file, but that are
1670# all added to the same external search index. Each project needs to have a
1671# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
1672# to a relative location where the documentation can be found. The format is:
1673# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
1674# This tag requires that the tag SEARCHENGINE is set to YES.
1675
1676EXTRA_SEARCH_MAPPINGS =
1677
1678#---------------------------------------------------------------------------
1679# Configuration options related to the LaTeX output
1680#---------------------------------------------------------------------------
1681
1682# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
1683# The default value is: YES.
1684
1685GENERATE_LATEX = NO
1686
1687# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
1688# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1689# it.
1690# The default directory is: latex.
1691# This tag requires that the tag GENERATE_LATEX is set to YES.
1692
1693LATEX_OUTPUT = latex
1694
1695# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1696# invoked.
1697#
1698# Note that when not enabling USE_PDFLATEX the default is latex when enabling
1699# USE_PDFLATEX the default is pdflatex and when in the later case latex is
1700# chosen this is overwritten by pdflatex. For specific output languages the
1701# default can have been set differently, this depends on the implementation of
1702# the output language.
1703# This tag requires that the tag GENERATE_LATEX is set to YES.
1704
1705LATEX_CMD_NAME =
1706
1707# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
1708# index for LaTeX.
1709# Note: This tag is used in the Makefile / make.bat.
1710# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
1711# (.tex).
1712# The default file is: makeindex.
1713# This tag requires that the tag GENERATE_LATEX is set to YES.
1714
1715MAKEINDEX_CMD_NAME = makeindex
1716
1717# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
1718# generate index for LaTeX.
1719# Note: This tag is used in the generated output file (.tex).
1720# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
1721# The default value is: \makeindex.
1722# This tag requires that the tag GENERATE_LATEX is set to YES.
1723
1724LATEX_MAKEINDEX_CMD = \makeindex
1725
1726# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
1727# documents. This may be useful for small projects and may help to save some
1728# trees in general.
1729# The default value is: NO.
1730# This tag requires that the tag GENERATE_LATEX is set to YES.
1731
1732COMPACT_LATEX = NO
1733
1734# The PAPER_TYPE tag can be used to set the paper type that is used by the
1735# printer.
1736# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
1737# 14 inches) and executive (7.25 x 10.5 inches).
1738# The default value is: a4.
1739# This tag requires that the tag GENERATE_LATEX is set to YES.
1740
1741PAPER_TYPE = a4
1742
1743# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
1744# that should be included in the LaTeX output. The package can be specified just
1745# by its name or with the correct syntax as to be used with the LaTeX
1746# \usepackage command. To get the times font for instance you can specify :
1747# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
1748# To use the option intlimits with the amsmath package you can specify:
1749# EXTRA_PACKAGES=[intlimits]{amsmath}
1750# If left blank no extra packages will be included.
1751# This tag requires that the tag GENERATE_LATEX is set to YES.
1752
1753EXTRA_PACKAGES =
1754
1755# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
1756# generated LaTeX document. The header should contain everything until the first
1757# chapter. If it is left blank doxygen will generate a standard header. See
1758# section "Doxygen usage" for information on how to let doxygen write the
1759# default header to a separate file.
1760#
1761# Note: Only use a user-defined header if you know what you are doing! The
1762# following commands have a special meaning inside the header: $title,
1763# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
1764# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
1765# string, for the replacement values of the other commands the user is referred
1766# to HTML_HEADER.
1767# This tag requires that the tag GENERATE_LATEX is set to YES.
1768
1769LATEX_HEADER =
1770
1771# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
1772# generated LaTeX document. The footer should contain everything after the last
1773# chapter. If it is left blank doxygen will generate a standard footer. See
1774# LATEX_HEADER for more information on how to generate a default footer and what
1775# special commands can be used inside the footer.
1776#
1777# Note: Only use a user-defined footer if you know what you are doing!
1778# This tag requires that the tag GENERATE_LATEX is set to YES.
1779
1780LATEX_FOOTER =
1781
1782# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1783# LaTeX style sheets that are included after the standard style sheets created
1784# by doxygen. Using this option one can overrule certain style aspects. Doxygen
1785# will copy the style sheet files to the output directory.
1786# Note: The order of the extra style sheet files is of importance (e.g. the last
1787# style sheet in the list overrules the setting of the previous ones in the
1788# list).
1789# This tag requires that the tag GENERATE_LATEX is set to YES.
1790
1791LATEX_EXTRA_STYLESHEET =
1792
1793# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
1794# other source files which should be copied to the LATEX_OUTPUT output
1795# directory. Note that the files will be copied as-is; there are no commands or
1796# markers available.
1797# This tag requires that the tag GENERATE_LATEX is set to YES.
1798
1799LATEX_EXTRA_FILES =
1800
1801# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
1802# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
1803# contain links (just like the HTML output) instead of page references. This
1804# makes the output suitable for online browsing using a PDF viewer.
1805# The default value is: YES.
1806# This tag requires that the tag GENERATE_LATEX is set to YES.
1807
1808PDF_HYPERLINKS = YES
1809
1810# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1811# the PDF file directly from the LaTeX files. Set this option to YES, to get a
1812# higher quality PDF documentation.
1813# The default value is: YES.
1814# This tag requires that the tag GENERATE_LATEX is set to YES.
1815
1816USE_PDFLATEX = YES
1817
1818# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
1819# command to the generated LaTeX files. This will instruct LaTeX to keep running
1820# if errors occur, instead of asking the user for help. This option is also used
1821# when generating formulas in HTML.
1822# The default value is: NO.
1823# This tag requires that the tag GENERATE_LATEX is set to YES.
1824
1825LATEX_BATCHMODE = NO
1826
1827# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
1828# index chapters (such as File Index, Compound Index, etc.) in the output.
1829# The default value is: NO.
1830# This tag requires that the tag GENERATE_LATEX is set to YES.
1831
1832LATEX_HIDE_INDICES = NO
1833
1834# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
1835# code with syntax highlighting in the LaTeX output.
1836#
1837# Note that which sources are shown also depends on other settings such as
1838# SOURCE_BROWSER.
1839# The default value is: NO.
1840# This tag requires that the tag GENERATE_LATEX is set to YES.
1841
1842LATEX_SOURCE_CODE = NO
1843
1844# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
1845# bibliography, e.g. plainnat, or ieeetr. See
1846# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
1847# The default value is: plain.
1848# This tag requires that the tag GENERATE_LATEX is set to YES.
1849
1850LATEX_BIB_STYLE = plain
1851
1852# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
1853# page will contain the date and time when the page was generated. Setting this
1854# to NO can help when comparing the output of multiple runs.
1855# The default value is: NO.
1856# This tag requires that the tag GENERATE_LATEX is set to YES.
1857
1858LATEX_TIMESTAMP = NO
1859
1860# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
1861# path from which the emoji images will be read. If a relative path is entered,
1862# it will be relative to the LATEX_OUTPUT directory. If left blank the
1863# LATEX_OUTPUT directory will be used.
1864# This tag requires that the tag GENERATE_LATEX is set to YES.
1865
1866LATEX_EMOJI_DIRECTORY =
1867
1868#---------------------------------------------------------------------------
1869# Configuration options related to the RTF output
1870#---------------------------------------------------------------------------
1871
1872# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
1873# RTF output is optimized for Word 97 and may not look too pretty with other RTF
1874# readers/editors.
1875# The default value is: NO.
1876
1877GENERATE_RTF = NO
1878
1879# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
1880# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1881# it.
1882# The default directory is: rtf.
1883# This tag requires that the tag GENERATE_RTF is set to YES.
1884
1885RTF_OUTPUT = rtf
1886
1887# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
1888# documents. This may be useful for small projects and may help to save some
1889# trees in general.
1890# The default value is: NO.
1891# This tag requires that the tag GENERATE_RTF is set to YES.
1892
1893COMPACT_RTF = NO
1894
1895# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
1896# contain hyperlink fields. The RTF file will contain links (just like the HTML
1897# output) instead of page references. This makes the output suitable for online
1898# browsing using Word or some other Word compatible readers that support those
1899# fields.
1900#
1901# Note: WordPad (write) and others do not support links.
1902# The default value is: NO.
1903# This tag requires that the tag GENERATE_RTF is set to YES.
1904
1905RTF_HYPERLINKS = NO
1906
1907# Load stylesheet definitions from file. Syntax is similar to doxygen's
1908# configuration file, i.e. a series of assignments. You only have to provide
1909# replacements, missing definitions are set to their default value.
1910#
1911# See also section "Doxygen usage" for information on how to generate the
1912# default style sheet that doxygen normally uses.
1913# This tag requires that the tag GENERATE_RTF is set to YES.
1914
1915RTF_STYLESHEET_FILE =
1916
1917# Set optional variables used in the generation of an RTF document. Syntax is
1918# similar to doxygen's configuration file. A template extensions file can be
1919# generated using doxygen -e rtf extensionFile.
1920# This tag requires that the tag GENERATE_RTF is set to YES.
1921
1922RTF_EXTENSIONS_FILE =
1923
1924# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
1925# with syntax highlighting in the RTF output.
1926#
1927# Note that which sources are shown also depends on other settings such as
1928# SOURCE_BROWSER.
1929# The default value is: NO.
1930# This tag requires that the tag GENERATE_RTF is set to YES.
1931
1932RTF_SOURCE_CODE = NO
1933
1934#---------------------------------------------------------------------------
1935# Configuration options related to the man page output
1936#---------------------------------------------------------------------------
1937
1938# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
1939# classes and files.
1940# The default value is: NO.
1941
1942GENERATE_MAN = NO
1943
1944# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
1945# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1946# it. A directory man3 will be created inside the directory specified by
1947# MAN_OUTPUT.
1948# The default directory is: man.
1949# This tag requires that the tag GENERATE_MAN is set to YES.
1950
1951MAN_OUTPUT = man
1952
1953# The MAN_EXTENSION tag determines the extension that is added to the generated
1954# man pages. In case the manual section does not start with a number, the number
1955# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
1956# optional.
1957# The default value is: .3.
1958# This tag requires that the tag GENERATE_MAN is set to YES.
1959
1960MAN_EXTENSION = .3
1961
1962# The MAN_SUBDIR tag determines the name of the directory created within
1963# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
1964# MAN_EXTENSION with the initial . removed.
1965# This tag requires that the tag GENERATE_MAN is set to YES.
1966
1967MAN_SUBDIR =
1968
1969# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
1970# will generate one additional man file for each entity documented in the real
1971# man page(s). These additional files only source the real man page, but without
1972# them the man command would be unable to find the correct page.
1973# The default value is: NO.
1974# This tag requires that the tag GENERATE_MAN is set to YES.
1975
1976MAN_LINKS = NO
1977
1978#---------------------------------------------------------------------------
1979# Configuration options related to the XML output
1980#---------------------------------------------------------------------------
1981
1982# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
1983# captures the structure of the code including all documentation.
1984# The default value is: NO.
1985
1986GENERATE_XML = YES
1987
1988# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
1989# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1990# it.
1991# The default directory is: xml.
1992# This tag requires that the tag GENERATE_XML is set to YES.
1993
1994XML_OUTPUT = xml
1995
1996# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
1997# listings (including syntax highlighting and cross-referencing information) to
1998# the XML output. Note that enabling this will significantly increase the size
1999# of the XML output.
2000# The default value is: YES.
2001# This tag requires that the tag GENERATE_XML is set to YES.
2002
2003XML_PROGRAMLISTING = YES
2004
2005# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
2006# namespace members in file scope as well, matching the HTML output.
2007# The default value is: NO.
2008# This tag requires that the tag GENERATE_XML is set to YES.
2009
2010XML_NS_MEMB_FILE_SCOPE = NO
2011
2012#---------------------------------------------------------------------------
2013# Configuration options related to the DOCBOOK output
2014#---------------------------------------------------------------------------
2015
2016# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
2017# that can be used to generate PDF.
2018# The default value is: NO.
2019
2020GENERATE_DOCBOOK = NO
2021
2022# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
2023# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
2024# front of it.
2025# The default directory is: docbook.
2026# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
2027
2028DOCBOOK_OUTPUT = docbook
2029
2030# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
2031# program listings (including syntax highlighting and cross-referencing
2032# information) to the DOCBOOK output. Note that enabling this will significantly
2033# increase the size of the DOCBOOK output.
2034# The default value is: NO.
2035# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
2036
2037DOCBOOK_PROGRAMLISTING = NO
2038
2039#---------------------------------------------------------------------------
2040# Configuration options for the AutoGen Definitions output
2041#---------------------------------------------------------------------------
2042
2043# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
2044# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
2045# the structure of the code including all documentation. Note that this feature
2046# is still experimental and incomplete at the moment.
2047# The default value is: NO.
2048
2049GENERATE_AUTOGEN_DEF = NO
2050
2051#---------------------------------------------------------------------------
2052# Configuration options related to the Perl module output
2053#---------------------------------------------------------------------------
2054
2055# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
2056# file that captures the structure of the code including all documentation.
2057#
2058# Note that this feature is still experimental and incomplete at the moment.
2059# The default value is: NO.
2060
2061GENERATE_PERLMOD = NO
2062
2063# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
2064# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
2065# output from the Perl module output.
2066# The default value is: NO.
2067# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2068
2069PERLMOD_LATEX = NO
2070
2071# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
2072# formatted so it can be parsed by a human reader. This is useful if you want to
2073# understand what is going on. On the other hand, if this tag is set to NO, the
2074# size of the Perl module output will be much smaller and Perl will parse it
2075# just the same.
2076# The default value is: YES.
2077# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2078
2079PERLMOD_PRETTY = YES
2080
2081# The names of the make variables in the generated doxyrules.make file are
2082# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
2083# so different doxyrules.make files included by the same Makefile don't
2084# overwrite each other's variables.
2085# This tag requires that the tag GENERATE_PERLMOD is set to YES.
2086
2087PERLMOD_MAKEVAR_PREFIX =
2088
2089#---------------------------------------------------------------------------
2090# Configuration options related to the preprocessor
2091#---------------------------------------------------------------------------
2092
2093# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
2094# C-preprocessor directives found in the sources and include files.
2095# The default value is: YES.
2096
2097ENABLE_PREPROCESSING = YES
2098
2099# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
2100# in the source code. If set to NO, only conditional compilation will be
2101# performed. Macro expansion can be done in a controlled way by setting
2102# EXPAND_ONLY_PREDEF to YES.
2103# The default value is: NO.
2104# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2105
2106MACRO_EXPANSION = NO
2107
2108# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
2109# the macro expansion is limited to the macros specified with the PREDEFINED and
2110# EXPAND_AS_DEFINED tags.
2111# The default value is: NO.
2112# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2113
2114EXPAND_ONLY_PREDEF = NO
2115
2116# If the SEARCH_INCLUDES tag is set to YES, the include files in the
2117# INCLUDE_PATH will be searched if a #include is found.
2118# The default value is: YES.
2119# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2120
2121SEARCH_INCLUDES = YES
2122
2123# The INCLUDE_PATH tag can be used to specify one or more directories that
2124# contain include files that are not input files but should be processed by the
2125# preprocessor.
2126# This tag requires that the tag SEARCH_INCLUDES is set to YES.
2127
2128INCLUDE_PATH =
2129
2130# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
2131# patterns (like *.h and *.hpp) to filter out the header-files in the
2132# directories. If left blank, the patterns specified with FILE_PATTERNS will be
2133# used.
2134# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2135
2136INCLUDE_FILE_PATTERNS =
2137
2138# The PREDEFINED tag can be used to specify one or more macro names that are
2139# defined before the preprocessor is started (similar to the -D option of e.g.
2140# gcc). The argument of the tag is a list of macros of the form: name or
2141# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
2142# is assumed. To prevent a macro definition from being undefined via #undef or
2143# recursively expanded use the := operator instead of the = operator.
2144# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2145
2146PREDEFINED =
2147
2148# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
2149# tag can be used to specify a list of macro names that should be expanded. The
2150# macro definition that is found in the sources will be used. Use the PREDEFINED
2151# tag if you want to use a different macro definition that overrules the
2152# definition found in the source code.
2153# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2154
2155EXPAND_AS_DEFINED =
2156
2157# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
2158# remove all references to function-like macros that are alone on a line, have
2159# an all uppercase name, and do not end with a semicolon. Such function macros
2160# are typically used for boiler-plate code, and will confuse the parser if not
2161# removed.
2162# The default value is: YES.
2163# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2164
2165SKIP_FUNCTION_MACROS = YES
2166
2167#---------------------------------------------------------------------------
2168# Configuration options related to external references
2169#---------------------------------------------------------------------------
2170
2171# The TAGFILES tag can be used to specify one or more tag files. For each tag
2172# file the location of the external documentation should be added. The format of
2173# a tag file without this location is as follows:
2174# TAGFILES = file1 file2 ...
2175# Adding location for the tag files is done as follows:
2176# TAGFILES = file1=loc1 "file2 = loc2" ...
2177# where loc1 and loc2 can be relative or absolute paths or URLs. See the
2178# section "Linking to external documentation" for more information about the use
2179# of tag files.
2180# Note: Each tag file must have a unique name (where the name does NOT include
2181# the path). If a tag file is not located in the directory in which doxygen is
2182# run, you must also specify the path to the tagfile here.
2183
2184TAGFILES =
2185
2186# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
2187# tag file that is based on the input files it reads. See section "Linking to
2188# external documentation" for more information about the usage of tag files.
2189
2190GENERATE_TAGFILE =
2191
2192# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
2193# the class index. If set to NO, only the inherited external classes will be
2194# listed.
2195# The default value is: NO.
2196
2197ALLEXTERNALS = NO
2198
2199# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
2200# in the modules index. If set to NO, only the current project's groups will be
2201# listed.
2202# The default value is: YES.
2203
2204EXTERNAL_GROUPS = YES
2205
2206# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
2207# the related pages index. If set to NO, only the current project's pages will
2208# be listed.
2209# The default value is: YES.
2210
2211EXTERNAL_PAGES = YES
2212
2213# The PERL_PATH should be the absolute path and name of the perl script
2214# interpreter (i.e. the result of 'which perl').
2215# The default file (with absolute path) is: /usr/bin/perl.
2216
2217PERL_PATH = /usr/bin/perl
2218
2219#---------------------------------------------------------------------------
2220# Configuration options related to the dot tool
2221#---------------------------------------------------------------------------
2222
2223# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
2224# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
2225# NO turns the diagrams off. Note that this option also works with HAVE_DOT
2226# disabled, but it is recommended to install and use dot, since it yields more
2227# powerful graphs.
2228# The default value is: YES.
2229
2230CLASS_DIAGRAMS = NO
2231
2232# You can define message sequence charts within doxygen comments using the \msc
2233# command. Doxygen will then run the mscgen tool (see:
2234# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
2235# documentation. The MSCGEN_PATH tag allows you to specify the directory where
2236# the mscgen tool resides. If left empty the tool is assumed to be found in the
2237# default search path.
2238
2239MSCGEN_PATH =
2240
2241# You can include diagrams made with dia in doxygen documentation. Doxygen will
2242# then run dia to produce the diagram and insert it in the documentation. The
2243# DIA_PATH tag allows you to specify the directory where the dia binary resides.
2244# If left empty dia is assumed to be found in the default search path.
2245
2246DIA_PATH =
2247
2248# If set to YES the inheritance and collaboration graphs will hide inheritance
2249# and usage relations if the target is undocumented or is not a class.
2250# The default value is: YES.
2251
2252HIDE_UNDOC_RELATIONS = YES
2253
2254# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
2255# available from the path. This tool is part of Graphviz (see:
2256# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
2257# Bell Labs. The other options in this section have no effect if this option is
2258# set to NO
2259# The default value is: NO.
2260
2261HAVE_DOT = NO
2262
2263# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
2264# to run in parallel. When set to 0 doxygen will base this on the number of
2265# processors available in the system. You can set it explicitly to a value
2266# larger than 0 to get control over the balance between CPU load and processing
2267# speed.
2268# Minimum value: 0, maximum value: 32, default value: 0.
2269# This tag requires that the tag HAVE_DOT is set to YES.
2270
2271DOT_NUM_THREADS = 0
2272
2273# When you want a differently looking font in the dot files that doxygen
2274# generates you can specify the font name using DOT_FONTNAME. You need to make
2275# sure dot is able to find the font, which can be done by putting it in a
2276# standard location or by setting the DOTFONTPATH environment variable or by
2277# setting DOT_FONTPATH to the directory containing the font.
2278# The default value is: Helvetica.
2279# This tag requires that the tag HAVE_DOT is set to YES.
2280
2281DOT_FONTNAME = Helvetica
2282
2283# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
2284# dot graphs.
2285# Minimum value: 4, maximum value: 24, default value: 10.
2286# This tag requires that the tag HAVE_DOT is set to YES.
2287
2288DOT_FONTSIZE = 10
2289
2290# By default doxygen will tell dot to use the default font as specified with
2291# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
2292# the path where dot can find it using this tag.
2293# This tag requires that the tag HAVE_DOT is set to YES.
2294
2295DOT_FONTPATH =
2296
2297# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
2298# each documented class showing the direct and indirect inheritance relations.
2299# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
2300# The default value is: YES.
2301# This tag requires that the tag HAVE_DOT is set to YES.
2302
2303CLASS_GRAPH = YES
2304
2305# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
2306# graph for each documented class showing the direct and indirect implementation
2307# dependencies (inheritance, containment, and class references variables) of the
2308# class with other documented classes.
2309# The default value is: YES.
2310# This tag requires that the tag HAVE_DOT is set to YES.
2311
2312COLLABORATION_GRAPH = YES
2313
2314# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
2315# groups, showing the direct groups dependencies.
2316# The default value is: YES.
2317# This tag requires that the tag HAVE_DOT is set to YES.
2318
2319GROUP_GRAPHS = YES
2320
2321# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
2322# collaboration diagrams in a style similar to the OMG's Unified Modeling
2323# Language.
2324# The default value is: NO.
2325# This tag requires that the tag HAVE_DOT is set to YES.
2326
2327UML_LOOK = NO
2328
2329# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
2330# class node. If there are many fields or methods and many nodes the graph may
2331# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
2332# number of items for each type to make the size more manageable. Set this to 0
2333# for no limit. Note that the threshold may be exceeded by 50% before the limit
2334# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
2335# but if the number exceeds 15, the total amount of fields shown is limited to
2336# 10.
2337# Minimum value: 0, maximum value: 100, default value: 10.
2338# This tag requires that the tag HAVE_DOT is set to YES.
2339
2340UML_LIMIT_NUM_FIELDS = 10
2341
2342# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
2343# collaboration graphs will show the relations between templates and their
2344# instances.
2345# The default value is: NO.
2346# This tag requires that the tag HAVE_DOT is set to YES.
2347
2348TEMPLATE_RELATIONS = NO
2349
2350# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
2351# YES then doxygen will generate a graph for each documented file showing the
2352# direct and indirect include dependencies of the file with other documented
2353# files.
2354# The default value is: YES.
2355# This tag requires that the tag HAVE_DOT is set to YES.
2356
2357INCLUDE_GRAPH = YES
2358
2359# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
2360# set to YES then doxygen will generate a graph for each documented file showing
2361# the direct and indirect include dependencies of the file with other documented
2362# files.
2363# The default value is: YES.
2364# This tag requires that the tag HAVE_DOT is set to YES.
2365
2366INCLUDED_BY_GRAPH = YES
2367
2368# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
2369# dependency graph for every global function or class method.
2370#
2371# Note that enabling this option will significantly increase the time of a run.
2372# So in most cases it will be better to enable call graphs for selected
2373# functions only using the \callgraph command. Disabling a call graph can be
2374# accomplished by means of the command \hidecallgraph.
2375# The default value is: NO.
2376# This tag requires that the tag HAVE_DOT is set to YES.
2377
2378CALL_GRAPH = NO
2379
2380# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
2381# dependency graph for every global function or class method.
2382#
2383# Note that enabling this option will significantly increase the time of a run.
2384# So in most cases it will be better to enable caller graphs for selected
2385# functions only using the \callergraph command. Disabling a caller graph can be
2386# accomplished by means of the command \hidecallergraph.
2387# The default value is: NO.
2388# This tag requires that the tag HAVE_DOT is set to YES.
2389
2390CALLER_GRAPH = NO
2391
2392# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
2393# hierarchy of all classes instead of a textual one.
2394# The default value is: YES.
2395# This tag requires that the tag HAVE_DOT is set to YES.
2396
2397GRAPHICAL_HIERARCHY = YES
2398
2399# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
2400# dependencies a directory has on other directories in a graphical way. The
2401# dependency relations are determined by the #include relations between the
2402# files in the directories.
2403# The default value is: YES.
2404# This tag requires that the tag HAVE_DOT is set to YES.
2405
2406DIRECTORY_GRAPH = YES
2407
2408# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
2409# generated by dot. For an explanation of the image formats see the section
2410# output formats in the documentation of the dot tool (Graphviz (see:
2411# http://www.graphviz.org/)).
2412# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
2413# to make the SVG files visible in IE 9+ (other browsers do not have this
2414# requirement).
2415# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
2416# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
2417# png:gdiplus:gdiplus.
2418# The default value is: png.
2419# This tag requires that the tag HAVE_DOT is set to YES.
2420
2421DOT_IMAGE_FORMAT = png
2422
2423# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
2424# enable generation of interactive SVG images that allow zooming and panning.
2425#
2426# Note that this requires a modern browser other than Internet Explorer. Tested
2427# and working are Firefox, Chrome, Safari, and Opera.
2428# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
2429# the SVG files visible. Older versions of IE do not have SVG support.
2430# The default value is: NO.
2431# This tag requires that the tag HAVE_DOT is set to YES.
2432
2433INTERACTIVE_SVG = NO
2434
2435# The DOT_PATH tag can be used to specify the path where the dot tool can be
2436# found. If left blank, it is assumed the dot tool can be found in the path.
2437# This tag requires that the tag HAVE_DOT is set to YES.
2438
2439DOT_PATH =
2440
2441# The DOTFILE_DIRS tag can be used to specify one or more directories that
2442# contain dot files that are included in the documentation (see the \dotfile
2443# command).
2444# This tag requires that the tag HAVE_DOT is set to YES.
2445
2446DOTFILE_DIRS =
2447
2448# The MSCFILE_DIRS tag can be used to specify one or more directories that
2449# contain msc files that are included in the documentation (see the \mscfile
2450# command).
2451
2452MSCFILE_DIRS =
2453
2454# The DIAFILE_DIRS tag can be used to specify one or more directories that
2455# contain dia files that are included in the documentation (see the \diafile
2456# command).
2457
2458DIAFILE_DIRS =
2459
2460# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
2461# path where java can find the plantuml.jar file. If left blank, it is assumed
2462# PlantUML is not used or called during a preprocessing step. Doxygen will
2463# generate a warning when it encounters a \startuml command in this case and
2464# will not generate output for the diagram.
2465
2466PLANTUML_JAR_PATH =
2467
2468# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
2469# configuration file for plantuml.
2470
2471PLANTUML_CFG_FILE =
2472
2473# When using plantuml, the specified paths are searched for files specified by
2474# the !include statement in a plantuml block.
2475
2476PLANTUML_INCLUDE_PATH =
2477
2478# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
2479# that will be shown in the graph. If the number of nodes in a graph becomes
2480# larger than this value, doxygen will truncate the graph, which is visualized
2481# by representing a node as a red box. Note that doxygen if the number of direct
2482# children of the root node in a graph is already larger than
2483# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
2484# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
2485# Minimum value: 0, maximum value: 10000, default value: 50.
2486# This tag requires that the tag HAVE_DOT is set to YES.
2487
2488DOT_GRAPH_MAX_NODES = 50
2489
2490# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
2491# generated by dot. A depth value of 3 means that only nodes reachable from the
2492# root by following a path via at most 3 edges will be shown. Nodes that lay
2493# further from the root node will be omitted. Note that setting this option to 1
2494# or 2 may greatly reduce the computation time needed for large code bases. Also
2495# note that the size of a graph can be further restricted by
2496# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
2497# Minimum value: 0, maximum value: 1000, default value: 0.
2498# This tag requires that the tag HAVE_DOT is set to YES.
2499
2500MAX_DOT_GRAPH_DEPTH = 0
2501
2502# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
2503# background. This is disabled by default, because dot on Windows does not seem
2504# to support this out of the box.
2505#
2506# Warning: Depending on the platform used, enabling this option may lead to
2507# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
2508# read).
2509# The default value is: NO.
2510# This tag requires that the tag HAVE_DOT is set to YES.
2511
2512DOT_TRANSPARENT = NO
2513
2514# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
2515# files in one run (i.e. multiple -o and -T options on the command line). This
2516# makes dot run faster, but since only newer versions of dot (>1.8.10) support
2517# this, this feature is disabled by default.
2518# The default value is: NO.
2519# This tag requires that the tag HAVE_DOT is set to YES.
2520
2521DOT_MULTI_TARGETS = NO
2522
2523# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
2524# explaining the meaning of the various boxes and arrows in the dot generated
2525# graphs.
2526# The default value is: YES.
2527# This tag requires that the tag HAVE_DOT is set to YES.
2528
2529GENERATE_LEGEND = YES
2530
2531# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
2532# files that are used to generate the various graphs.
2533# The default value is: YES.
2534# This tag requires that the tag HAVE_DOT is set to YES.
2535
2536DOT_CLEANUP = YES
diff --git a/res/sample-markdown-project-1/main.cpp b/res/sample-markdown-project-1/main.cpp
new file mode 100644
index 0000000..8a892a2
--- /dev/null
+++ b/res/sample-markdown-project-1/main.cpp
@@ -0,0 +1,200 @@
1#include <iostream>
2
3/// A sample namespace
4///
5/// This is an extended
6/// description of this
7/// sample namespace.
8///
9/// ```cpp
10/// std::cout << "Example code" << std::endl;
11/// ```
12namespace sample_namespace {
13
14 /// A sample static variable
15 ///
16 /// This is an extended
17 /// description of this
18 /// static variable.
19 static int VARIABLE = 42;
20
21 /// A nested namespace
22 ///
23 /// This is an extended
24 /// description of this
25 /// nested namespace.
26 namespace nested_namespace {
27 }
28
29}
30
31/// A sample class
32///
33/// This is an extended
34/// description of this
35/// sample class.
36class Sample {
37public:
38
39 /// \brief A public type
40 ///
41 /// This is an extended description of this typedef.
42 using Blabla = int;
43
44 /// A sample inner class.
45 ///
46 /// This is an extended description of this sample inner class.
47 ///
48 /// We have a reference to the class Sample.
49 ///
50 /// Also a [link](#bla)
51 ///
52 /// And inline code:
53 ///
54 /// ```cpp
55 /// auto a = int{};
56 /// ```
57 class InnerClass {
58 /// A sample attribute.
59 ///
60 /// This is an extended description of this sample attribute,
61 void* sample_attribute;
62 };
63
64 /// A sample inner struct.
65 ///
66 /// This is an extended description of this sample inner struct.
67 struct InnerStruct {
68 /// A sample attribute.
69 ///
70 /// This is an extended description of this sample attribute.
71 void* sample_attribute;
72 };
73
74 /// A sample inner struct.
75 ///
76 /// This is an extended description of this sample inner struct.
77 enum InnerEnum {
78 /// A sample variant.
79 ///
80 /// This is an extended description of this sample variant,
81 SAMPLE_VARIANT1,
82
83 /// Another sample variant.
84 ///
85 /// This is an extended description of this sample variant,
86 SAMPLE_VARIANT2,
87
88 /// Another other sample variant.
89 ///
90 /// This is an extended description of this sample variant,
91 SAMPLE_VARIANT3,
92 };
93
94
95 /// A sample method.
96 ///
97 /// This is an extended description of this sample method.
98 ///
99 /// # Parameters
100 ///
101 /// - `param1` is an input parameter
102 /// - `param2` is an input parameter
103 /// - `param3` is an input parameter
104 ///
105 /// # Preconditions
106 ///
107 /// - A precondition.
108 ///
109 /// # Preconditions
110 ///
111 /// - A postcondition.
112 int sample_method(char param1, std::string param2) const;
113
114 /// A sample static function.
115 ///
116 /// This is an extended description of this sample static function.
117 static int sample_static_func(char param1, std::string param2);
118
119protected:
120
121 /// A sample protected method.
122 ///
123 /// This is an extended description of this sample protected method.
124 int sample_protected_method(char param1, std::string param2) const;
125
126private:
127
128 /// A sample attribute.
129 ///
130 /// This is an extended description of this sample attribute,
131 void* sample_attribute1;
132
133 /// Another sample attribute.
134 ///
135 /// This is an extended description of this sample attribute,
136 InnerClass sample_attribute2;
137
138 /// Another other sample attribute.
139 ///
140 /// This is an extended description of this sample attribute,
141 InnerStruct sample_attribute3;
142
143 /// Another other other sample attribute.
144 ///
145 /// This is an extended description of this sample attribute,
146 InnerEnum sample_attribute4;
147
148};
149
150/// A sample function.
151///
152/// This is an extended description of this sample function.
153///
154/// # Parameters
155///
156/// - `param1` is an input parameter
157/// - `param2` is an input parameter
158/// - `param3` is an input parameter
159///
160/// # Preconditions
161///
162/// - A precondition.
163///
164/// # Preconditions
165///
166/// - A postcondition.
167int sample_function(char param1, std::string param2, int hello_world) {
168 std::cout << helloworld << std::endl;
169}
170
171/// Another sample function.
172///
173/// This is an extended description of this sample function.
174///
175/// # Preconditions
176///
177/// - A precondition.
178///
179/// # Preconditions
180///
181/// - A postcondition.
182int another_sample_function(
183 /// Documentation of param1
184 char param1,
185 /// Documentation of param2
186 std::string param2,
187 /// Documentation of hello_world
188 int hello_world
189) {
190 std::cout << helloworld << std::endl;
191}
192
193int main(int argc, char** argv) {
194 std::cout << "Hello World" << std::endl;
195 std::cout << arga << std::endl;
196}
197
198int add(float a, float b) { return a + b; }
199template <typename T> struct A { typedef T::U dependent; };
200struct Integer { int i; }; Integer i = { i: 0 };
diff --git a/res/style.css b/res/style.css
new file mode 100644
index 0000000..fa0dc45
--- /dev/null
+++ b/res/style.css
@@ -0,0 +1,329 @@
1/*
2 * I add this to html files generated with pandoc.
3 */
4
5html {
6 font-size: 100%;
7 overflow-y: scroll;
8 -webkit-text-size-adjust: 100%;
9 -ms-text-size-adjust: 100%;
10}
11
12body {
13 color: #444;
14 font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif;
15 font-size: 12px;
16 line-height: 1.7;
17 padding: 1em;
18 margin: auto;
19 max-width: 42em;
20 background: #fefefe;
21}
22
23a {
24 color: #0645ad;
25 /* text-decoration: none; */
26}
27
28a:visited {
29 color: #0b0080;
30}
31
32a:hover {
33 color: #06e;
34}
35
36a:active {
37 color: #faa700;
38}
39
40a:focus {
41 outline: thin dotted;
42}
43
44*::-moz-selection {
45 background: rgba(255, 255, 0, 0.3);
46 color: #000;
47}
48
49*::selection {
50 background: rgba(255, 255, 0, 0.3);
51 color: #000;
52}
53
54a::-moz-selection {
55 background: rgba(255, 255, 0, 0.3);
56 color: #0645ad;
57}
58
59a::selection {
60 background: rgba(255, 255, 0, 0.3);
61 color: #0645ad;
62}
63
64p {
65 margin: 1em 0;
66}
67
68img {
69 max-width: 100%;
70}
71
72h1, h2, h3, h4, h5, h6 {
73 color: #111;
74 line-height: 125%;
75 margin-top: 2em;
76 font-weight: normal;
77}
78
79h4, h5, h6 {
80 font-weight: bold;
81}
82
83h1 {
84 font-size: 2.5em;
85}
86
87h2 {
88 font-size: 2em;
89}
90
91h3 {
92 font-size: 1.5em;
93}
94
95h4 {
96 font-size: 1.2em;
97}
98
99h5 {
100 font-size: 1em;
101}
102
103h6 {
104 font-size: 0.9em;
105}
106
107blockquote {
108 color: #666666;
109 margin: 0;
110 padding-left: 3em;
111 border-left: 0.5em #EEE solid;
112}
113
114hr {
115 display: block;
116 height: 2px;
117 border: 0;
118 border-top: 1px solid #aaa;
119 border-bottom: 1px solid #eee;
120 margin: 1em 0;
121 padding: 0;
122}
123
124pre, code, kbd, samp {
125 color: #000;
126 font-family: monospace, monospace;
127 _font-family: 'courier new', monospace;
128 font-size: 0.98em;
129}
130
131pre {
132 white-space: pre;
133 white-space: pre-wrap;
134 word-wrap: break-word;
135}
136
137b, strong {
138 font-weight: bold;
139}
140
141dfn {
142 font-style: italic;
143}
144
145ins {
146 background: #ff9;
147 color: #000;
148 text-decoration: none;
149}
150
151mark {
152 background: #ff0;
153 color: #000;
154 font-style: italic;
155 font-weight: bold;
156}
157
158sub, sup {
159 font-size: 75%;
160 line-height: 0;
161 position: relative;
162 vertical-align: baseline;
163}
164
165sup {
166 top: -0.5em;
167}
168
169sub {
170 bottom: -0.25em;
171}
172
173ul, ol {
174 margin: 1em 0;
175 padding: 0 0 0 2em;
176}
177
178li p:last-child {
179 margin-bottom: 0;
180}
181
182ul ul, ol ol {
183 margin: .3em 0;
184}
185
186dl {
187 margin-bottom: 1em;
188}
189
190dt {
191 font-weight: bold;
192 margin-bottom: .8em;
193}
194
195dd {
196 margin: 0 0 .8em 2em;
197}
198
199dd:last-child {
200 margin-bottom: 0;
201}
202
203img {
204 border: 0;
205 -ms-interpolation-mode: bicubic;
206 vertical-align: middle;
207}
208
209figure {
210 display: block;
211 text-align: center;
212 margin: 1em 0;
213}
214
215figure img {
216 border: none;
217 margin: 0 auto;
218}
219
220figcaption {
221 font-size: 0.8em;
222 font-style: italic;
223 margin: 0 0 .8em;
224}
225
226table {
227 margin-bottom: 2em;
228 border-bottom: 1px solid #ddd;
229 border-right: 1px solid #ddd;
230 border-spacing: 0;
231 border-collapse: collapse;
232}
233
234table th {
235 padding: .2em 1em;
236 background-color: #eee;
237 border-top: 1px solid #ddd;
238 border-left: 1px solid #ddd;
239}
240
241table td {
242 padding: .2em 1em;
243 border-top: 1px solid #ddd;
244 border-left: 1px solid #ddd;
245 vertical-align: top;
246}
247
248.author {
249 font-size: 1.2em;
250 text-align: center;
251}
252
253@media only screen and (min-width: 480px) {
254 body {
255 font-size: 14px;
256 }
257}
258@media only screen and (min-width: 768px) {
259 body {
260 font-size: 16px;
261 }
262}
263@media print {
264 * {
265 background: transparent !important;
266 color: black !important;
267 filter: none !important;
268 -ms-filter: none !important;
269 }
270
271 body {
272 font-size: 12pt;
273 max-width: 100%;
274 }
275
276 a, a:visited {
277 text-decoration: underline;
278 }
279
280 hr {
281 height: 1px;
282 border: 0;
283 border-bottom: 1px solid black;
284 }
285
286 a[href]:after {
287 content: " (" attr(href) ")";
288 }
289
290 abbr[title]:after {
291 content: " (" attr(title) ")";
292 }
293
294 .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
295 content: "";
296 }
297
298 pre, blockquote {
299 border: 1px solid #999;
300 padding-right: 1em;
301 page-break-inside: avoid;
302 }
303
304 tr, img {
305 page-break-inside: avoid;
306 }
307
308 img {
309 max-width: 100% !important;
310 }
311
312 @page :left {
313 margin: 15mm 20mm 15mm 10mm;
314}
315
316 @page :right {
317 margin: 15mm 10mm 15mm 20mm;
318}
319
320 p, h2, h3 {
321 orphans: 3;
322 widows: 3;
323 }
324
325 h2, h3 {
326 page-break-after: avoid;
327 }
328}
329
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..5368dcd
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,22 @@
1{ pkgs ? import <unstable> {} }:
2
3let
4 clang = pkgs.llvmPackages_latest.clang;
5 mkWrapper = name: mode: pkgs.writeShellScriptBin name ''
6 ./target/${mode}/poseidoc \
7 '--extra-arg=-idirafter "${clang.libc_dev}/include"' \
8 --extra-arg="$(echo -n "${clang.default_cxx_stdlib_compile}")" \
9 '--extra-arg="-resource-dir=${clang}/resource-root"' \
10 "$@"
11 '';
12
13 debugWrapper = mkWrapper "poseidoc" "debug";
14 releaseWrapper = mkWrapper "poseidoc-release" "release";
15
16in
17 with pkgs;
18 with llvmPackages_latest;
19 mkShell {
20 buildInputs = [ llvm libclang debugWrapper releaseWrapper ];
21 LIBCLANG_PATH = "${libclang}/lib";
22 }
diff --git a/src/cli.rs b/src/cli.rs
new file mode 100644
index 0000000..e106de7
--- /dev/null
+++ b/src/cli.rs
@@ -0,0 +1,18 @@
1use structopt::StructOpt;
2
3#[derive(Debug, Clone, StructOpt)]
4pub(crate) struct Cli {
5 #[structopt(long, short, parse(from_occurrences))]
6 pub(crate) verbosity: u8,
7
8 #[structopt(long, number_of_values = 1, parse(try_from_str = shell_words::split))]
9 pub(crate) extra_arg: Vec<Vec<String>>,
10
11 #[structopt(subcommand)]
12 pub(crate) command: Command,
13}
14
15#[derive(Debug, Clone, StructOpt)]
16pub(crate) enum Command {
17 Generate { file: String },
18}
diff --git a/src/doxygen.rs b/src/doxygen.rs
new file mode 100644
index 0000000..8d2267d
--- /dev/null
+++ b/src/doxygen.rs
@@ -0,0 +1,454 @@
1/// A 'recursive descent' parser for Doxygen XML files
2mod builders;
3
4use xml::{
5 attribute::OwnedAttribute,
6 reader::{EventReader, ParserConfig, XmlEvent},
7};
8
9use std::collections::HashMap;
10use std::io::Read;
11
12// === Types ===
13
14#[derive(Debug, Clone)]
15pub(crate) enum DoxygenType {
16 NameSpace(NameSpace),
17 Class(Class),
18 Unhandled,
19}
20
21#[derive(Debug, Clone)]
22pub(crate) struct NameSpace {
23 pub(crate) name: String,
24 pub(crate) members: Vec<String>,
25 pub(crate) brief_description: Description,
26 pub(crate) detailed_description: Description,
27}
28
29#[derive(Debug, Clone)]
30pub(crate) struct FunctionArgument {
31 pub(crate) name: String,
32 pub(crate) r#type: String,
33 pub(crate) default_value: Option<String>,
34}
35
36#[derive(Debug, Clone)]
37pub(crate) enum Member {
38 Variable {
39 name: String,
40 r#type: String,
41 },
42 // What
43 /*
44 Enum {
45
46 }
47 */
48 Function {
49 name: String,
50 args: Vec<FunctionArgument>,
51 return_type: String,
52 },
53 Unhandled,
54}
55
56#[derive(Debug, Clone)]
57pub(crate) struct Class {
58 pub(crate) name: String,
59 pub(crate) inners: Vec<(String, String)>,
60 pub(crate) sections: HashMap<String, Vec<Member>>,
61 pub(crate) brief_description: Description,
62 pub(crate) detailed_description: Description,
63}
64
65// === Description ===
66
67#[derive(Debug, Clone)]
68pub(crate) struct Description {
69 pub(crate) inner: Vec<DescriptionNode>,
70}
71
72impl Description {
73 fn new() -> Self {
74 Self { inner: Vec::new() }
75 }
76}
77
78#[derive(Debug, Clone)]
79pub(crate) enum DescriptionNode {
80 Text(String),
81 Title(String),
82 Para(Paragraph),
83 Sect1(String),
84 Internal(String),
85}
86
87#[derive(Debug, Clone)]
88pub(crate) struct Paragraph {
89 pub(crate) inner: Vec<ParagraphNode>,
90}
91
92#[derive(Debug, Clone)]
93pub(crate) enum ParagraphNode {
94 Text(String),
95 Ref(Ref),
96}
97
98#[derive(Debug, Clone)]
99pub(crate) struct Ref {
100 pub(crate) id: String,
101 pub(crate) kind: RefKind,
102 pub(crate) text: String,
103}
104
105#[derive(Debug, Clone)]
106pub(crate) enum RefKind {
107 Compound,
108 Member,
109}
110
111#[derive(Debug, Clone)]
112enum DoxygenTypeKind {
113 NameSpace,
114 Unhandled,
115}
116
117trait TypeBuilder {
118 //const KIND: DoxygenTypeKind;
119
120 fn build(self: Box<Self>) -> DoxygenType;
121
122 fn name(&mut self, value: String);
123 fn brief_description(&mut self, description: Description);
124 fn detailed_description(&mut self, description: Description);
125
126 fn add_inner(&mut self, name: String, kind: String);
127 fn add_member(&mut self, section: String, member: Member);
128}
129
130trait FromXML {
131 fn from_xml(attributes: Vec<OwnedAttribute>, event_reader: &mut EventReader<impl Read>)
132 -> Self;
133}
134
135impl FromXML for Description {
136 fn from_xml(
137 _attributes: Vec<OwnedAttribute>,
138 mut event_reader: &mut EventReader<impl Read>,
139 ) -> Self {
140 let mut inner = Vec::new();
141
142 while let Ok(event) = event_reader.next() {
143 match event {
144 XmlEvent::Characters(text) => inner.push(DescriptionNode::Text(text)),
145 XmlEvent::StartElement {
146 name, attributes, ..
147 } => inner.push(match name.local_name.as_str() {
148 "para" => {
149 DescriptionNode::Para(Paragraph::from_xml(attributes, &mut event_reader))
150 }
151 "title" => DescriptionNode::Title(event_simple(&mut event_reader)),
152 "sect1" => DescriptionNode::Sect1(event_simple(&mut event_reader)),
153 "internal" => DescriptionNode::Internal(event_simple(&mut event_reader)),
154 other => {
155 warn!("Description element not supported: {}", other);
156 continue;
157 }
158 }),
159 XmlEvent::EndElement { .. } => break,
160 other => {
161 warn!("Description event not supported: {:?}", other);
162 }
163 }
164 }
165
166 Self { inner }
167 }
168}
169
170impl FromXML for Paragraph {
171 fn from_xml(
172 _attributes: Vec<OwnedAttribute>,
173 mut event_reader: &mut EventReader<impl Read>,
174 ) -> Self {
175 let mut inner = Vec::new();
176
177 while let Ok(event) = event_reader.next() {
178 match event {
179 XmlEvent::Characters(text) => inner.push(ParagraphNode::Text(text)),
180 XmlEvent::StartElement {
181 name, attributes, ..
182 } => inner.push(match name.local_name.as_str() {
183 "ref" => ParagraphNode::Ref(Ref::from_xml(attributes, &mut event_reader)),
184 other => {
185 warn!("Paragraph element not supported: {}", other);
186 continue;
187 }
188 }),
189 XmlEvent::EndElement { .. } => break,
190 other => {
191 warn!("Paragraph event not supported: {:?}", other);
192 }
193 }
194 }
195
196 Self { inner }
197 }
198}
199
200impl FromXML for Ref {
201 fn from_xml(
202 attributes: Vec<OwnedAttribute>,
203 mut event_reader: &mut EventReader<impl Read>,
204 ) -> Self {
205 let mut id = None;
206 let mut kind = None;
207
208 for attr in attributes.into_iter() {
209 match attr.name.local_name.as_str() {
210 "refid" => id = Some(attr.value),
211 "kindref" => {
212 kind = Some(match attr.value.as_str() {
213 "compound" => RefKind::Compound,
214 "member" => RefKind::Member,
215 other => {
216 warn!("Ref kind not supported: {}", other);
217 RefKind::Compound
218 }
219 });
220 }
221 other => {
222 warn!("Ref element not supported: {}", other);
223 }
224 }
225 }
226
227 let text = event_simple(&mut event_reader);
228
229 Ref {
230 id: id.unwrap(),
231 kind: kind.unwrap(),
232 text,
233 }
234 }
235}
236
237/// Parse a type from a XML Doxygen file
238pub(crate) fn parse_type(reader: impl Read) -> Vec<DoxygenType> {
239 let mut event_reader = EventReader::new(reader);
240
241 match event_reader.next().unwrap() {
242 XmlEvent::StartDocument { .. } => (),
243 _ => panic!("XML file does not begin with document"),
244 }
245
246 match event_reader.next().unwrap() {
247 XmlEvent::StartElement { name, .. } => {
248 if name.local_name != "doxygen" {
249 panic!("XML file does not start with a 'doxygen' element");
250 }
251 }
252 _ => panic!("XML file does not start with a 'doxygen' element"),
253 }
254
255 let mut result = Vec::new();
256
257 while let Ok(event) = event_reader.next() {
258 match dbg!(event) {
259 XmlEvent::StartElement {
260 name, attributes, ..
261 } => {
262 if name.local_name != "compounddef" {
263 panic!("'doxygen' is not a sequence of 'compounddef' elements");
264 }
265
266 result.push(event_compounddef(attributes, &mut event_reader));
267 }
268 XmlEvent::Whitespace(_) => (),
269 XmlEvent::EndElement { .. } => break,
270 _ => panic!("'doxygen' is not a sequence of 'compounddef' elements"),
271 }
272 }
273
274 // Unnecessarily strict?
275 match event_reader.next().unwrap() {
276 XmlEvent::EndDocument => (),
277 _ => panic!("XML file does not end after 'doxygen' element"),
278 }
279
280 dbg!(result)
281}
282
283fn event_compounddef(
284 attributes: Vec<OwnedAttribute>,
285 mut event_reader: &mut EventReader<impl Read>,
286) -> DoxygenType {
287 let kind = attributes
288 .into_iter()
289 .find_map(|attr| {
290 if attr.name.local_name == "kind" {
291 Some(attr.value)
292 } else {
293 None
294 }
295 })
296 .unwrap();
297
298 let mut builder = builders::builder_for(kind);
299
300 while let Ok(event) = event_reader.next() {
301 match dbg!(event) {
302 XmlEvent::StartElement {
303 name, attributes, ..
304 } => match name.local_name.as_str() {
305 "compoundname" => {
306 let name = event_simple(&mut event_reader);
307 builder.name(name);
308 }
309 "briefdescription" => {
310 let brief_description = Description::from_xml(attributes, &mut event_reader);
311 builder.brief_description(brief_description);
312 }
313 "detaileddescription" => {
314 let detailed_description = Description::from_xml(attributes, &mut event_reader);
315 builder.detailed_description(detailed_description);
316 }
317 "location" => {
318 event_simple(&mut event_reader);
319 debug!("Do something?");
320 }
321 "sectiondef" => {
322 event_section(&mut builder, &mut event_reader);
323 }
324 other_name if is_inner_type(other_name) => {
325 let inner = event_simple(&mut event_reader);
326 builder.add_inner(inner, other_name.to_string());
327 }
328 _other_name => {
329 event_ignore(&mut event_reader);
330 }
331 },
332 XmlEvent::Whitespace(_) => (),
333 XmlEvent::EndElement { .. } => break,
334 _ => panic!("Unhandled XML event"),
335 }
336 }
337
338 builder.build()
339}
340
341/// Returns true if the given XML Element is a reference to another inner type.
342///
343/// Corresponds to the "refType" XSD type in `compound.xsd`
344fn is_inner_type(element_name: &str) -> bool {
345 match element_name {
346 "innerdir" | "innerfile" | "innerclass" | "innernamespace" | "innerpage" | "innergroup" => {
347 true
348 }
349 _ => false,
350 }
351}
352
353/// Get the text inside a simple, non recursive XML tag
354fn event_simple(event_reader: &mut EventReader<impl Read>) -> String {
355 let result;
356
357 match dbg!(event_reader.next().unwrap()) {
358 XmlEvent::Characters(tmp_result) => {
359 result = tmp_result;
360 }
361 XmlEvent::EndElement { .. } => return "".to_string(),
362 _ => panic!("Simple XML event is not so simple"),
363 }
364
365 match dbg!(event_reader.next().unwrap()) {
366 XmlEvent::EndElement { .. } => (),
367 _ => panic!("Simple XML event is not so simple"),
368 }
369
370 result
371}
372
373fn event_ignore(mut event_reader: &mut EventReader<impl Read>) {
374 loop {
375 let event = event_reader.next().unwrap();
376 match dbg!(event) {
377 XmlEvent::StartElement { .. } => event_ignore(&mut event_reader),
378 XmlEvent::EndElement { .. } => break,
379 _ => (),
380 }
381 }
382}
383
384fn event_section(
385 mut builder: &mut Box<dyn TypeBuilder>,
386 mut event_reader: &mut EventReader<impl Read>,
387) {
388 loop {
389 let event = event_reader.next().unwrap();
390 match dbg!(event) {
391 XmlEvent::StartElement {
392 name, attributes, ..
393 } => match name.local_name.as_str() {
394 "memberdef" => {
395 let member = event_member(attributes, &mut event_reader);
396 builder.add_member("bla".to_owned(), member);
397 }
398 _ => panic!("Unhandled thing"),
399 },
400
401 XmlEvent::Whitespace(_) => (),
402 XmlEvent::EndElement { .. } => break,
403 _ => panic!("Unknown section XML event"),
404 }
405 }
406}
407
408fn event_member(
409 attributes: Vec<OwnedAttribute>,
410 mut event_reader: &mut EventReader<impl Read>,
411) -> Member {
412 let kind = attributes
413 .into_iter()
414 .find_map(|attr| {
415 if attr.name.local_name == "kind" {
416 Some(attr.value)
417 } else {
418 None
419 }
420 })
421 .unwrap();
422
423 match kind.as_str() {
424 "variable" => event_member_variable(&mut event_reader),
425 _ => {
426 event_ignore(&mut event_reader);
427 Member::Unhandled
428 }
429 }
430}
431
432fn event_member_variable(mut event_reader: &mut EventReader<impl Read>) -> Member {
433 let mut member_name = None;
434 let mut r#type = None;
435
436 loop {
437 let event = event_reader.next().unwrap();
438 match dbg!(event) {
439 XmlEvent::StartElement { name, .. } => match name.local_name.as_str() {
440 "name" => member_name = Some(event_simple(&mut event_reader)),
441 "definition" => r#type = Some(event_simple(&mut event_reader)),
442 _ => event_ignore(&mut event_reader),
443 },
444 XmlEvent::Whitespace(_) => (),
445 XmlEvent::EndElement { .. } => break,
446 _ => panic!("Unknown member XML event"),
447 }
448 }
449
450 Member::Variable {
451 name: member_name.unwrap(),
452 r#type: r#type.unwrap(),
453 }
454}
diff --git a/src/doxygen/builders.rs b/src/doxygen/builders.rs
new file mode 100644
index 0000000..9b60325
--- /dev/null
+++ b/src/doxygen/builders.rs
@@ -0,0 +1,109 @@
1use super::*;
2
3pub(super) fn builder_for(doxygen_kind: String) -> Box<dyn TypeBuilder> {
4 match doxygen_kind.as_str() {
5 "namespace" => Box::new(NameSpaceBuilder::default()),
6 "class" | "struct" => Box::new(ClassBuilder::default()),
7 _ => Box::new(UnhandledBuilder),
8 }
9}
10
11#[derive(Debug, Default)]
12struct NameSpaceBuilder {
13 name: Option<String>,
14 members: Vec<String>,
15 brief_description: Option<Description>,
16 detailed_description: Option<Description>,
17}
18
19impl TypeBuilder for NameSpaceBuilder {
20 fn build(self: Box<Self>) -> DoxygenType {
21 let name = self.name.unwrap();
22
23 DoxygenType::NameSpace(NameSpace {
24 name,
25 members: self.members,
26 brief_description: self.brief_description.unwrap(),
27 detailed_description: self.detailed_description.unwrap(),
28 })
29 }
30
31 fn name(&mut self, value: String) {
32 self.name = Some(value);
33 }
34
35 fn add_inner(&mut self, name: String, kind: String) {
36 self.members.push(name);
37 }
38
39 fn add_member(&mut self, _section: String, _member: Member) {
40 panic!("Adding member in namespace?");
41 }
42
43 fn brief_description(&mut self, description: Description) {
44 self.brief_description = Some(description);
45 }
46
47 fn detailed_description(&mut self, description: Description) {
48 self.brief_description = Some(description);
49 }
50}
51
52#[derive(Debug, Default)]
53struct UnhandledBuilder;
54
55impl TypeBuilder for UnhandledBuilder {
56 fn build(self: Box<Self>) -> DoxygenType {
57 DoxygenType::Unhandled
58 }
59
60 fn name(&mut self, _value: String) {}
61
62 fn add_inner(&mut self, _name: String, _kind: String) {}
63 fn add_member(&mut self, _section: String, _member: Member) {}
64 fn brief_description(&mut self, _description: Description) {}
65 fn detailed_description(&mut self, _description: Description) {}
66}
67
68#[derive(Debug, Default)]
69struct ClassBuilder {
70 name: Option<String>,
71 inners: Vec<(String, String)>,
72 sections: HashMap<String, Vec<Member>>,
73 brief_description: Option<Description>,
74 detailed_description: Option<Description>,
75}
76
77impl TypeBuilder for ClassBuilder {
78 fn build(self: Box<Self>) -> DoxygenType {
79 let name = self.name.unwrap();
80
81 DoxygenType::Class(Class {
82 name,
83 inners: self.inners,
84 sections: self.sections,
85 brief_description: self.brief_description.unwrap_or(Description::new()),
86 detailed_description: self.detailed_description.unwrap_or(Description::new()),
87 })
88 }
89
90 fn name(&mut self, value: String) {
91 self.name = Some(value);
92 }
93
94 fn add_inner(&mut self, name: String, kind: String) {
95 self.inners.push((name, kind));
96 }
97
98 fn add_member(&mut self, section: String, member: Member) {
99 self.sections.entry(section).or_default().push(member);
100 }
101
102 fn brief_description(&mut self, description: Description) {
103 self.brief_description = Some(description);
104 }
105
106 fn detailed_description(&mut self, description: Description) {
107 self.brief_description = Some(description);
108 }
109}
diff --git a/src/entities.rs b/src/entities.rs
new file mode 100644
index 0000000..b7368df
--- /dev/null
+++ b/src/entities.rs
@@ -0,0 +1,134 @@
1use std::collections::HashMap;
2
3#[derive(Debug, Clone, Hash, PartialEq, Eq)]
4pub(crate) struct Usr(pub(crate) String);
5
6#[derive(Debug, Clone)]
7pub(crate) struct EntitiesManager {
8 toplevel_entities: HashMap<Usr, Entity>,
9 descriptions: HashMap<Usr, Description>,
10}
11
12pub(crate) struct EntitiesManagerComponents {
13 pub(crate) toplevel_entities: HashMap<Usr, Entity>,
14 pub(crate) descriptions: HashMap<Usr, Description>,
15}
16
17impl EntitiesManager {
18 pub fn new() -> Self {
19 EntitiesManager {
20 toplevel_entities: HashMap::new(),
21 descriptions: HashMap::new(),
22 }
23 }
24
25 pub fn insert(&mut self, usr: Usr, description: Description) {
26 info!("Found entity {:?}", description.name);
27 self.descriptions.insert(usr, description);
28 }
29
30 pub fn insert_toplevel(&mut self, usr: Usr, entity: Entity) {
31 self.toplevel_entities.insert(usr, entity);
32 }
33
34 pub fn decompose(self) -> EntitiesManagerComponents {
35 EntitiesManagerComponents {
36 toplevel_entities: self.toplevel_entities,
37 descriptions: self.descriptions,
38 }
39 }
40}
41
42#[derive(Debug, Clone, Default)]
43pub(crate) struct Description {
44 pub(crate) name: String,
45 pub(crate) brief: String,
46 pub(crate) detailed: String,
47}
48
49impl Description {
50 pub(crate) fn with_name(name: String) -> Self {
51 Description {
52 name,
53 ..Default::default()
54 }
55 }
56}
57
58#[derive(Debug, Clone)]
59pub(crate) struct Described<T> {
60 pub(crate) description: Description,
61 pub(crate) entity: T,
62}
63
64#[derive(Debug, Clone)]
65pub(crate) enum Entity {
66 NameSpace(NameSpace),
67 Variable(Variable),
68 Function(Function),
69 Class(Class),
70}
71
72impl Entity {
73 fn kind_name(&self) -> &'static str {
74 match self {
75 Entity::NameSpace(_) => "namespace",
76 Entity::Variable(_) => "variable",
77 Entity::Function(_) => "function",
78 Entity::Class(_) => "class",
79 }
80 }
81}
82
83#[derive(Debug, Clone)]
84pub(crate) struct NameSpace {
85 pub(crate) members: HashMap<Usr, Entity>,
86}
87
88impl From<NameSpace> for Entity {
89 fn from(ns: NameSpace) -> Self {
90 Entity::NameSpace(ns)
91 }
92}
93
94#[derive(Debug, Clone)]
95pub(crate) struct Variable {
96 pub(crate) r#type: String,
97}
98
99impl From<Variable> for Entity {
100 fn from(var: Variable) -> Self {
101 Entity::Variable(var)
102 }
103}
104
105#[derive(Debug, Clone)]
106pub(crate) struct Function {
107 pub(crate) arguments: Vec<FunctionArgument>,
108 pub(crate) return_type: String,
109}
110
111impl From<Function> for Entity {
112 fn from(func: Function) -> Self {
113 Entity::Function(func)
114 }
115}
116
117#[derive(Debug, Clone)]
118pub(crate) struct FunctionArgument {
119 pub(crate) name: String,
120 pub(crate) r#type: String,
121}
122
123#[derive(Debug, Clone)]
124pub(crate) struct Class {
125 pub(crate) member_types: Vec<Usr>,
126 pub(crate) member_functions: HashMap<Usr, Function>,
127 pub(crate) member_variables: HashMap<Usr, Variable>,
128}
129
130impl From<Class> for Entity {
131 fn from(class: Class) -> Self {
132 Entity::Class(class)
133 }
134}
diff --git a/src/generator.rs b/src/generator.rs
new file mode 100644
index 0000000..0ab4511
--- /dev/null
+++ b/src/generator.rs
@@ -0,0 +1,209 @@
1use crate::entities::{
2 Described, Description, EntitiesManager, EntitiesManagerComponents, Entity, Usr,
3};
4
5use anyhow::{Context, Result};
6use thiserror::Error;
7use threadpool::ThreadPool;
8
9use std::collections::HashMap;
10use std::path::Path;
11use std::sync::{mpsc::channel, Arc};
12
13pub(crate) fn generate(base_dir: &Path, manager: EntitiesManager) -> Result<()> {
14 let EntitiesManagerComponents {
15 toplevel_entities,
16 descriptions,
17 } = manager.decompose();
18
19 let md_output_dir = base_dir.join("markdown");
20 let html_output_dir = base_dir.join("html");
21
22 std::fs::create_dir_all(&md_output_dir)
23 .context("Failed to create the markdown output directory")?;
24 std::fs::create_dir_all(&html_output_dir)
25 .context("Failed to create the HTML output directory")?;
26
27 let pool = ThreadPool::new(num_cpus::get());
28
29 let descriptions = Arc::new(descriptions);
30
31 let (tx, rx) = channel::<()>();
32
33 for (usr, entity) in toplevel_entities {
34 generate_recursively(
35 usr,
36 entity,
37 pool.clone(),
38 tx.clone(),
39 descriptions.clone(),
40 &md_output_dir,
41 &html_output_dir,
42 );
43 }
44
45 drop(tx);
46
47 // This is not really idiomatic, but iter returns None when every Sender is destroyed, so just
48 // by passing around Senders in generate_recursively, we wait for every job.
49 rx.iter().for_each(drop);
50
51 Ok(())
52}
53
54fn generate_recursively(
55 usr: Usr,
56 entity: Entity,
57 pool: ThreadPool,
58 tx: std::sync::mpsc::Sender<()>,
59 descriptions: Arc<HashMap<Usr, Description>>,
60 md_output_dir: impl AsRef<Path>,
61 html_output_dir: impl AsRef<Path>,
62) {
63 let descriptions = descriptions.clone();
64 let md_output_dir = md_output_dir.as_ref().to_owned();
65 let html_output_dir = html_output_dir.as_ref().to_owned();
66
67 let pool2 = pool.clone();
68 pool.execute(move || {
69 trace!("Trying to generate {}", usr.0);
70
71 let entity = Described::<Entity> {
72 entity,
73 description: descriptions.get(&usr).unwrap().clone(),
74 };
75
76 let leftovers = generate_single(
77 &usr,
78 entity,
79 &descriptions,
80 &md_output_dir,
81 &html_output_dir,
82 )
83 .unwrap();
84
85 for (usr, entity) in leftovers {
86 let pool = pool2.clone();
87 let tx = tx.clone();
88 generate_recursively(
89 usr,
90 entity,
91 pool,
92 tx,
93 descriptions.clone(),
94 md_output_dir.clone(),
95 html_output_dir.clone(),
96 );
97 }
98 });
99}
100
101fn generate_single(
102 usr: &Usr,
103 entity: Described<Entity>,
104 descriptions: &HashMap<Usr, Description>,
105 md_output_dir: impl AsRef<Path>,
106 html_output_dir: impl AsRef<Path>,
107) -> Result<HashMap<Usr, Entity>> {
108 use std::io::prelude::*;
109 use std::process::{Command, Stdio};
110
111 let md_output_file = md_output_dir.as_ref().join(&usr.0);
112 let html_output_file = html_output_dir.as_ref().join(&usr.0);
113
114 let mut command = Command::new("pandoc");
115
116 command
117 .stdin(Stdio::piped())
118 .stdout(Stdio::piped())
119 .stderr(Stdio::piped())
120 .args(&[
121 "--from=json",
122 "--to=markdown",
123 "--output",
124 md_output_file
125 .to_str()
126 .context("Entity name is not valid UTF-8")?,
127 ]);
128
129 debug!("Launching command: {:?}", command);
130
131 let mut pandoc = command
132 .spawn()
133 .context("Failed to execute Pandoc command")?;
134
135 let (pandoc_ast, leftovers) = entity.into_pandoc(&descriptions);
136
137 if log_enabled!(log::Level::Trace) {
138 let json =
139 serde_json::to_string(&pandoc_ast).context("Failed to convert Pandoc AST to JSON")?;
140 trace!("Sending json: {}", json);
141 write!(
142 pandoc.stdin.as_mut().expect("Pandoc stdin not captured"),
143 "{}",
144 &json,
145 )
146 .context("Failed to convert Pandoc AST to JSON")?;
147 } else {
148 serde_json::to_writer(
149 pandoc.stdin.as_mut().expect("Pandoc stdin not captured"),
150 &pandoc_ast,
151 )
152 .context("Failed to convert Pandoc AST to JSON")?;
153 }
154
155 let output = pandoc
156 .wait_with_output()
157 .expect("Pandoc command wasn't running");
158
159 if !output.status.success() {
160 Err(CommandError {
161 status: output.status,
162 stderr: String::from_utf8(output.stderr).expect("Pandoc outputted invalid UTF-8"),
163 })
164 .context("Pandoc command failed")?;
165 }
166
167 let mut command = Command::new("pandoc");
168 command
169 .stdin(Stdio::piped())
170 .stdout(Stdio::piped())
171 .stderr(Stdio::piped())
172 .args(&[
173 "--from=markdown",
174 "--to=html",
175 "--css=res/style.css",
176 "--standalone",
177 "--self-contained",
178 md_output_file
179 .to_str()
180 .context("Entity name is not valid UTF-8")?,
181 "--output",
182 html_output_file
183 .to_str()
184 .context("Entity name is not valid UTF-8")?,
185 ]);
186
187 debug!("Launching command: {:?}", command);
188
189 let output = command
190 .output()
191 .context("Failed to execute Pandoc command")?;
192
193 if !output.status.success() {
194 Err(CommandError {
195 status: output.status,
196 stderr: String::from_utf8(output.stderr).expect("Pandoc outputted invalid UTF-8"),
197 })
198 .context("Pandoc command failed")?;
199 }
200
201 Ok(leftovers)
202}
203
204#[derive(Debug, Clone, Error)]
205#[error("Command returned status {:?} and stderr {:?}", status, stderr)]
206struct CommandError {
207 status: std::process::ExitStatus,
208 stderr: String,
209}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..e1d4752
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,44 @@
1//mod doxygen;
2mod cli;
3mod entities;
4mod generator;
5mod pandoc;
6mod parsing;
7
8#[macro_use]
9extern crate log;
10
11use cli::Command;
12use generator::generate;
13use parsing::parse_file;
14
15use anyhow::Result;
16use structopt::StructOpt;
17
18fn main() -> Result<()> {
19 let cli = cli::Cli::from_args();
20 pretty_env_logger::formatted_builder()
21 .filter(
22 None,
23 match cli.verbosity {
24 // Warnings and errors for internal warnings / errors
25 0 => log::LevelFilter::Warn,
26 1 => log::LevelFilter::Info,
27 2 => log::LevelFilter::Debug,
28 _ => log::LevelFilter::Trace,
29 },
30 )
31 .try_init()?;
32
33 match cli.command {
34 Command::Generate { file } => {
35 let extra_args = cli.extra_arg.iter().flatten().map(AsRef::as_ref).collect();
36 let manager = parse_file(file, extra_args);
37
38 let base_output_dir = std::path::Path::new("doc");
39 generate(&base_output_dir, manager)?;
40 }
41 }
42
43 Ok(())
44}
diff --git a/src/pandoc.rs b/src/pandoc.rs
new file mode 100644
index 0000000..5ca84e7
--- /dev/null
+++ b/src/pandoc.rs
@@ -0,0 +1,246 @@
1//mod types;
2
3use crate::entities::*;
4
5use pandoc_types::definition::{Attr, Block, Inline, Meta, MetaValue, Pandoc};
6
7use std::collections::HashMap;
8
9impl Described<Entity> {
10 pub fn into_pandoc(
11 self,
12 descriptions: &HashMap<Usr, Description>,
13 ) -> (Pandoc, HashMap<Usr, Entity>) {
14 let mut meta = Meta::null();
15
16 let title = self.title();
17 let mut content_before = self.content_before(&descriptions);
18 let mut content_after = self.content_after(&descriptions);
19 let leftovers = self.leftovers();
20
21 meta.0.insert(
22 "title".to_string(),
23 MetaValue::MetaString(self.description.name),
24 );
25
26 let mut content = Vec::new();
27
28 content.push(Block::Header(1, Attr::null(), title));
29
30 content.append(&mut content_before);
31
32 if !self.description.detailed.is_empty() {
33 content.push(Block::Header(
34 2,
35 Attr::null(),
36 vec![Inline::Str(String::from("Description"))],
37 ));
38
39 content.push(Block::Div(
40 Attr(String::new(), vec![String::from("doc")], vec![]),
41 vec![raw_markdown(self.description.detailed)],
42 ));
43 }
44
45 content.append(&mut content_after);
46
47 (Pandoc(meta, content), leftovers)
48 }
49}
50
51// TODO: replace with single function so we can move out, and remove all of those clones
52trait PandocDisplay {
53 fn content_before(&self, _descriptions: &HashMap<Usr, Description>) -> Vec<Block> {
54 vec![]
55 }
56
57 fn content_after(&self, _descriptions: &HashMap<Usr, Description>) -> Vec<Block> {
58 vec![]
59 }
60
61 fn leftovers(&self) -> HashMap<Usr, Entity> {
62 HashMap::new()
63 }
64}
65
66impl Described<Entity> {
67 fn title(&self) -> Vec<Inline> {
68 match &self.entity {
69 Entity::Variable(variable) => vec![Inline::Code(
70 Attr(String::new(), vec![String::from("cpp")], vec![]),
71 variable.r#type.clone() + " " + &self.description.name,
72 )],
73 _ => vec![Inline::Code(Attr::null(), self.description.name.clone())],
74 }
75 }
76}
77
78impl PandocDisplay for Described<Entity> {
79 fn content_before(&self, descriptions: &HashMap<Usr, Description>) -> Vec<Block> {
80 match &self.entity {
81 Entity::NameSpace(ns) => ns.content_before(descriptions),
82 Entity::Variable(var) => var.content_before(descriptions),
83 Entity::Function(func) => func.content_before(descriptions),
84 Entity::Class(class) => class.content_before(descriptions),
85 }
86 }
87
88 fn content_after(&self, descriptions: &HashMap<Usr, Description>) -> Vec<Block> {
89 match &self.entity {
90 Entity::NameSpace(ns) => ns.content_after(descriptions),
91 Entity::Variable(var) => var.content_after(descriptions),
92 Entity::Function(func) => func.content_after(descriptions),
93 Entity::Class(class) => class.content_after(descriptions),
94 }
95 }
96
97 fn leftovers(&self) -> HashMap<Usr, Entity> {
98 match &self.entity {
99 Entity::NameSpace(ns) => ns.leftovers(),
100 Entity::Variable(var) => var.leftovers(),
101 Entity::Function(func) => func.leftovers(),
102 Entity::Class(class) => class.leftovers(),
103 }
104 }
105}
106
107impl PandocDisplay for NameSpace {
108 fn content_after(&self, descriptions: &HashMap<Usr, Description>) -> Vec<Block> {
109 let mut content = Vec::new();
110
111 content.push(Block::Header(
112 2,
113 Attr::null(),
114 vec![Inline::Str("Members".to_string())],
115 ));
116
117 if let Some(member_list) = member_list(self.members.keys(), descriptions) {
118 content.push(member_list);
119 } else {
120 content.push(str_block(String::from("None")));
121 }
122
123 content
124 }
125
126 fn leftovers(&self) -> HashMap<Usr, Entity> {
127 self.members.clone()
128 }
129}
130
131impl PandocDisplay for Class {
132 fn content_after(&self, descriptions: &HashMap<Usr, Description>) -> Vec<Block> {
133 let mut content = Vec::new();
134
135 if let Some(member_types) = member_list(&self.member_types, descriptions) {
136 content.push(Block::Header(
137 2,
138 Attr::null(),
139 vec![Inline::Str("Member Types".to_string())],
140 ));
141
142 content.push(member_types);
143 }
144
145 if let Some(member_functions) = member_list(self.member_functions.keys(), descriptions) {
146 content.push(Block::Header(
147 2,
148 Attr::null(),
149 vec![Inline::Str("Member Functions".to_string())],
150 ));
151
152 content.push(member_functions);
153 }
154
155 if let Some(member_variables) = member_list(self.member_variables.keys(), descriptions) {
156 content.push(Block::Header(
157 2,
158 Attr::null(),
159 vec![Inline::Str("Member Variables".to_string())],
160 ));
161
162 content.push(member_variables);
163 }
164
165 content
166 }
167
168 fn leftovers(&self) -> HashMap<Usr, Entity> {
169 self.member_functions
170 .iter()
171 .map(|(usr, func)| (usr.clone(), Entity::from(func.clone())))
172 .chain(
173 self.member_variables
174 .iter()
175 .map(|(usr, var)| (usr.clone(), Entity::from(var.clone()))),
176 )
177 .collect()
178 }
179}
180
181impl PandocDisplay for Variable {}
182
183impl PandocDisplay for Function {}
184
185fn str_block(content: String) -> Block {
186 Block::Plain(vec![Inline::Str(content)])
187}
188
189fn entity_link(usr: &Usr, name: String) -> Inline {
190 use pandoc_types::definition::Target;
191 use percent_encoding::{utf8_percent_encode, AsciiSet, CONTROLS};
192
193 use std::iter::once;
194
195 // https://url.spec.whatwg.org/#fragment-percent-encode-set
196 const FRAGMENT: &AsciiSet = &CONTROLS
197 .add(b' ')
198 .add(b'"')
199 .add(b'<')
200 .add(b'>')
201 .add(b'`')
202 .add(b'#')
203 .add(b'?')
204 .add(b'{')
205 .add(b'}');
206
207 Inline::Link(
208 Attr::null(),
209 vec![Inline::Code(Attr::null(), name)],
210 Target(
211 once("./")
212 .chain(utf8_percent_encode(&usr.0, FRAGMENT))
213 .collect(),
214 String::new(),
215 ),
216 )
217}
218
219fn raw_markdown(text: String) -> Block {
220 use pandoc_types::definition::Format;
221 Block::RawBlock(Format(String::from("markdown")), text)
222}
223
224fn member_list<'a>(
225 members: impl IntoIterator<Item = &'a Usr>,
226 descriptions: &HashMap<Usr, Description>,
227) -> Option<Block> {
228 let definitions: Vec<(Vec<Inline>, Vec<Vec<Block>>)> = members
229 .into_iter()
230 .filter_map(|usr| {
231 let name = &descriptions.get(usr)?.name;
232 Some((
233 vec![entity_link(usr, name.clone())],
234 vec![vec![str_block(
235 descriptions.get(usr).unwrap().brief.clone(),
236 )]],
237 ))
238 })
239 .collect();
240
241 if definitions.is_empty() {
242 None
243 } else {
244 Some(Block::DefinitionList(definitions))
245 }
246}
diff --git a/src/pandoc/types.rs b/src/pandoc/types.rs
new file mode 100644
index 0000000..dc5be64
--- /dev/null
+++ b/src/pandoc/types.rs
@@ -0,0 +1,39 @@
1use crate::pandoc::{Block, Inline};
2
3#[derive(Debug, Clone)]
4pub(super) struct Class {
5 inners: Vec<Inner>,
6}
7
8#[derive(Debug, Clone)]
9struct Inner {
10 kind: InnerKind,
11 name: String,
12 //refid: String
13}
14
15#[derive(Debug, Clone)]
16enum InnerKind {
17 Class,
18 Enum,
19}
20
21impl std::fmt::Display for InnerKind {
22 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
23 match self {
24 InnerKind::Class => write!(f, "class"),
25 InnerKind::Enum => write!(f, "enum"),
26 }
27 }
28}
29
30impl From<Inner> for (Vec<Inline>, Vec<Vec<Block>>) {
31 fn from(inner: Inner) -> (Vec<Inline>, Vec<Vec<Block>>) {
32 (
33 vec![Inline::Str(inner.name)],
34 vec![vec![Block::Plain(vec![Inline::Str(
35 inner.kind.to_string(),
36 )])]],
37 )
38 }
39}
diff --git a/src/parsing.rs b/src/parsing.rs
new file mode 100644
index 0000000..137b89d
--- /dev/null
+++ b/src/parsing.rs
@@ -0,0 +1,457 @@
1use crate::entities::*;
2
3use clang::{Clang, Index};
4use codemap::CodeMap;
5
6use std::collections::HashMap;
7use std::path::{Path, PathBuf};
8
9pub(crate) fn parse_file<T>(path: T, mut extra_args: Vec<&str>) -> EntitiesManager
10where
11 T: Into<PathBuf>,
12 T: AsRef<Path>,
13 T: ToString,
14{
15 let mut codemap = CodeMap::new();
16 let file_map = codemap.add_file(path.to_string(), std::fs::read_to_string(&path).unwrap());
17 let file_span = file_map.span;
18
19 let clang = Clang::new().unwrap();
20 let index = Index::new(&clang, true, false);
21 let mut parser = index.parser(path);
22 parser.skip_function_bodies(true);
23
24 extra_args.push("-Werror=documentation");
25 parser.arguments(&extra_args);
26
27 if log_enabled!(log::Level::Debug) {
28 for extra_arg in extra_args {
29 debug!("Extra LibClang argument: {:?}", extra_arg);
30 }
31 }
32
33 let trans_unit = parser.parse().unwrap();
34
35 let mut manager = EntitiesManager::new();
36
37 trans_unit.get_entity().visit_children(|entity, _parent| {
38 if entity.is_in_system_header() {
39 trace!(
40 "Entity is in system header, skipping: USR = {:?}",
41 entity.get_display_name()
42 );
43 return clang::EntityVisitResult::Continue;
44 }
45
46 // TODO: wrap this callback in another function so that we can use the
47 // "?" operator instead of all these `match`es
48 let usr = match entity.get_usr() {
49 Some(usr) => usr,
50 None => return clang::EntityVisitResult::Continue,
51 };
52 trace!("Entity with USR = {:?}", usr);
53
54 let name = match entity.get_name() {
55 Some(name) => name,
56 None => return clang::EntityVisitResult::Continue,
57 };
58
59 debug!("Parsing toplevel entity with name = {:?}", name);
60
61 let entity = entity.into_poseidoc_entity(&mut manager);
62
63 manager.insert_toplevel(usr.into(), entity);
64
65 clang::EntityVisitResult::Continue
66 });
67
68 use codemap_diagnostic::{ColorConfig, Emitter};
69
70 let mut emitter = Emitter::stderr(ColorConfig::Auto, Some(&codemap));
71
72 for diagnostic in trans_unit.get_diagnostics().iter() {
73 let main_diag = match clang_diag_to_codemap_diag(&diagnostic, &file_span) {
74 Some(diag) => diag,
75 None => continue,
76 };
77
78 let sub_diags = diagnostic
79 .get_children()
80 .into_iter()
81 .filter_map(|diagnostic| clang_diag_to_codemap_diag(&diagnostic, &file_span));
82
83 let fix_it_diags = diagnostic
84 .get_fix_its()
85 .into_iter()
86 .map(|fix_it| clang_fix_it_to_codemap_diag(&fix_it, &file_span));
87
88 emitter.emit(
89 &std::iter::once(main_diag)
90 .chain(sub_diags)
91 .chain(fix_it_diags)
92 .collect::<Vec<_>>(),
93 );
94 }
95
96 manager
97}
98
99fn clang_diag_to_codemap_diag(
100 diagnostic: &clang::diagnostic::Diagnostic,
101 file_span: &codemap::Span,
102) -> Option<codemap_diagnostic::Diagnostic> {
103 use codemap_diagnostic::{Diagnostic, Level, SpanLabel, SpanStyle};
104
105 let ranges = diagnostic.get_ranges();
106
107 let (begin, end) = if ranges.is_empty() {
108 let location = diagnostic.get_location();
109
110 (
111 location.get_file_location().offset as u64,
112 location.get_file_location().offset as u64,
113 )
114 } else {
115 let range = diagnostic.get_ranges()[0];
116 if !range.is_in_main_file() {
117 warn!("Skipping diagnostic: {:?}", diagnostic);
118 return None;
119 }
120 (
121 range.get_start().get_file_location().offset as u64,
122 range.get_end().get_file_location().offset as u64,
123 )
124 };
125
126 let label = SpanLabel {
127 span: file_span.subspan(begin, end),
128 label: None,
129 style: SpanStyle::Primary,
130 };
131
132 Some(Diagnostic {
133 level: match diagnostic.get_severity() {
134 clang::diagnostic::Severity::Ignored => return None,
135 clang::diagnostic::Severity::Note => Level::Note,
136 clang::diagnostic::Severity::Warning => Level::Warning,
137 clang::diagnostic::Severity::Error => Level::Error,
138 clang::diagnostic::Severity::Fatal => Level::Error,
139 },
140 message: diagnostic.get_text(),
141 //code: Some("-Werror=documentation".to_string()),
142 code: None,
143 spans: vec![label],
144 })
145}
146
147fn clang_fix_it_to_codemap_diag(
148 fix_it: &clang::diagnostic::FixIt,
149 file_span: &codemap::Span,
150) -> codemap_diagnostic::Diagnostic {
151 use clang::diagnostic::FixIt;
152 use codemap_diagnostic::{Diagnostic, Level, SpanLabel, SpanStyle};
153
154 let label = match fix_it {
155 FixIt::Deletion(range) => {
156 let begin = range.get_start().get_file_location().offset as u64;
157 let end = range.get_end().get_file_location().offset as u64;
158
159 SpanLabel {
160 span: file_span.subspan(begin, end),
161 label: Some(String::from("Try deleting this")),
162 style: SpanStyle::Primary,
163 }
164 }
165 FixIt::Insertion(range, text) => {
166 let location = range.get_file_location().offset as u64;
167
168 SpanLabel {
169 span: file_span.subspan(location, location),
170 label: Some(format!("Try insterting {:?}", text)),
171 style: SpanStyle::Primary,
172 }
173 }
174 FixIt::Replacement(range, text) => {
175 let begin = range.get_start().get_file_location().offset as u64;
176 let end = range.get_end().get_file_location().offset as u64;
177
178 SpanLabel {
179 span: file_span.subspan(begin, end),
180 label: Some(format!("Try replacing this with {:?}", text)),
181 style: SpanStyle::Primary,
182 }
183 }
184 };
185
186 Diagnostic {
187 level: Level::Help,
188 message: String::from("Possible fix"),
189 //code: Some("-Werror=documentation".to_string()),
190 code: None,
191 spans: vec![label],
192 }
193}
194
195pub(crate) struct Comment(String);
196
197impl Comment {
198 pub fn from_raw(raw: String) -> Self {
199 #[derive(Debug)]
200 enum CommentStyle {
201 // Comments of type `/**` or `/*!`
202 Starred,
203 // Comments of type `///`
204 SingleLine,
205 }
206
207 let mut chars = raw.chars();
208 let style = match &chars.as_str()[..3] {
209 "/*!" | "/**" => CommentStyle::Starred,
210 "///" => CommentStyle::SingleLine,
211 _ => panic!("Comment is empty or doesn't start with either `///`, `/**`, or `/*!`"),
212 };
213
214 chars.nth(2);
215
216 let mut result = String::new();
217
218 'parse_loop: loop {
219 let maybe_space = chars.next();
220 let mut empty_line = false;
221 match maybe_space {
222 // TODO: Warn on empty comments
223 None => break,
224 Some(' ') => {}
225 Some('\n') => {
226 empty_line = true;
227 result.push('\n');
228 }
229 Some(ch) => result.push(ch),
230 }
231
232 if !empty_line {
233 let rest = chars.as_str();
234 match rest.find('\n') {
235 None => {
236 result.push_str(rest);
237 break;
238 }
239 Some(position) => {
240 result.push_str(&rest[..position + 1]);
241 chars.nth(position);
242 }
243 }
244 }
245
246 // Beginning of the line
247 let first_non_ws_ch = 'ws_loop: loop {
248 let maybe_whitespace = chars.next();
249 match maybe_whitespace {
250 None => break 'parse_loop,
251 Some(ch) if ch.is_whitespace() => continue,
252 Some(ch) => break 'ws_loop ch,
253 }
254 };
255
256 match style {
257 CommentStyle::Starred if first_non_ws_ch == '*' => {
258 if &chars.as_str()[..1] == "/" {
259 break;
260 }
261 }
262 CommentStyle::Starred => result.push(first_non_ws_ch),
263 CommentStyle::SingleLine => {
264 assert!(first_non_ws_ch == '/');
265 let rest = chars.as_str();
266 if &rest[..2] == "//" {
267 chars.nth(1);
268 } else if &rest[..1] == "/" {
269 chars.nth(0);
270 } else {
271 panic!("Could not parse comment");
272 }
273 }
274 }
275 }
276
277 Self(result)
278 }
279}
280
281impl From<clang::Usr> for Usr {
282 fn from(usr: clang::Usr) -> Self {
283 Self(usr.0)
284 }
285}
286
287trait FromClangEntity {
288 /// Is responsible for inserting its documentation into the entities manager
289 fn from_clang_entity(entity: clang::Entity, manager: &mut EntitiesManager) -> Self;
290}
291
292trait IntoPoseidocEntity<T> {
293 /// Useful for the `clang_entity.into_poseidoc_entity(&mut manager)` syntax. Implement
294 /// `FromClangEntity` instead.
295 fn into_poseidoc_entity(self, manager: &mut EntitiesManager) -> T;
296}
297
298impl<T> IntoPoseidocEntity<T> for clang::Entity<'_>
299where
300 T: FromClangEntity,
301{
302 fn into_poseidoc_entity(self, manager: &mut EntitiesManager) -> T {
303 T::from_clang_entity(self, manager)
304 }
305}
306
307fn get_description(entity: &clang::Entity) -> Description {
308 let name = entity.get_display_name().unwrap();
309
310 if let (Some(brief), Some(comment)) = (entity.get_comment_brief(), entity.get_comment()) {
311 Description {
312 name,
313 brief,
314 detailed: Comment::from_raw(comment).0,
315 }
316 } else {
317 Description::with_name(name)
318 }
319}
320
321impl FromClangEntity for Entity {
322 fn from_clang_entity(entity: clang::Entity, manager: &mut EntitiesManager) -> Self {
323 use clang::EntityKind;
324
325 match entity.get_kind() {
326 EntityKind::Namespace => Self::NameSpace(entity.into_poseidoc_entity(manager)),
327 EntityKind::FieldDecl | EntityKind::VarDecl => {
328 Self::Variable(entity.into_poseidoc_entity(manager))
329 }
330 EntityKind::FunctionDecl | EntityKind::Method | EntityKind::FunctionTemplate => {
331 Self::Function(entity.into_poseidoc_entity(manager))
332 }
333 EntityKind::ClassDecl | EntityKind::StructDecl | EntityKind::ClassTemplate => {
334 Self::Class(entity.into_poseidoc_entity(manager))
335 }
336 _ => panic!("Unsupported entity: {:?}", entity),
337 }
338 }
339}
340
341impl FromClangEntity for NameSpace {
342 fn from_clang_entity(entity: clang::Entity, manager: &mut EntitiesManager) -> Self {
343 match entity.get_kind() {
344 clang::EntityKind::Namespace => {}
345 _ => panic!("Trying to parse a non-variable into a variable"),
346 }
347 debug!("Parsing NameSpace");
348
349 let members = entity
350 .get_children()
351 .into_iter()
352 .map(|child| {
353 let usr = child.get_usr().unwrap().into();
354 trace!("Namespace has member: {:?}", usr);
355 (usr, child.into_poseidoc_entity(manager))
356 })
357 .collect();
358
359 manager.insert(entity.get_usr().unwrap().into(), get_description(&entity));
360
361 NameSpace { members }
362 }
363}
364
365impl FromClangEntity for Variable {
366 fn from_clang_entity(entity: clang::Entity, manager: &mut EntitiesManager) -> Self {
367 match entity.get_kind() {
368 clang::EntityKind::VarDecl | clang::EntityKind::FieldDecl => {}
369 _ => panic!("Trying to parse a non-variable into a variable"),
370 }
371 debug!("Parsing Variable");
372
373 let r#type = entity.get_type().unwrap().get_display_name();
374 trace!("Variable has type: {:?}", r#type);
375
376 manager.insert(entity.get_usr().unwrap().into(), get_description(&entity));
377
378 Variable { r#type }
379 }
380}
381
382impl FromClangEntity for Function {
383 fn from_clang_entity(entity: clang::Entity, manager: &mut EntitiesManager) -> Self {
384 match entity.get_kind() {
385 clang::EntityKind::Method
386 | clang::EntityKind::FunctionDecl
387 | clang::EntityKind::FunctionTemplate => {}
388 _ => panic!("Trying to parse a non-function into a function"),
389 }
390 debug!("Parsing Function");
391
392 let return_type = entity.get_result_type().unwrap().get_display_name();
393 trace!("Function has return type: {:?}", return_type);
394 let arguments = entity
395 .get_arguments()
396 .unwrap()
397 .into_iter()
398 .map(|arg| {
399 let name = arg.get_display_name().unwrap();
400 let r#type = arg.get_type().unwrap().get_display_name();
401 trace!("Function has argument {:?} of type {:?}", name, r#type);
402 FunctionArgument { name, r#type }
403 })
404 .collect();
405
406 manager.insert(entity.get_usr().unwrap().into(), get_description(&entity));
407
408 Function {
409 arguments,
410 return_type,
411 }
412 }
413}
414
415impl FromClangEntity for Class {
416 fn from_clang_entity(entity: clang::Entity, manager: &mut EntitiesManager) -> Self {
417 match entity.get_kind() {
418 clang::EntityKind::ClassDecl
419 | clang::EntityKind::StructDecl
420 | clang::EntityKind::ClassTemplate => {}
421 _ => panic!("Trying to parse a non-class into a class"),
422 }
423 debug!("Parsing Class");
424
425 let mut member_types = Vec::new();
426 let mut member_functions = HashMap::new();
427 let mut member_variables = HashMap::new();
428
429 for child in entity.get_children() {
430 trace!("Class has child: {:?}", child);
431
432 let child_usr = child.get_usr().unwrap().into();
433
434 use clang::EntityKind;
435 match child.get_kind() {
436 EntityKind::ClassDecl | EntityKind::StructDecl | EntityKind::TypeAliasDecl => {
437 member_types.push(child_usr);
438 }
439 EntityKind::Method => {
440 member_functions.insert(child_usr, child.into_poseidoc_entity(manager));
441 }
442 EntityKind::FieldDecl => {
443 member_variables.insert(child_usr, child.into_poseidoc_entity(manager));
444 }
445 _ => trace!("Skipping child"),
446 }
447 }
448
449 manager.insert(entity.get_usr().unwrap().into(), get_description(&entity));
450
451 Class {
452 member_types,
453 member_functions,
454 member_variables,
455 }
456 }
457}