aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-25 00:23:48 -0500
committerDavid Robillard <d@drobilla.net>2014-11-25 00:23:48 -0500
commit68a4dc89f5e00aa6e2780f4f96011b92961b7a80 (patch)
tree22882da1f402bd6067415e687f9061c77680c198
parent1754a6fe0866fcf84846722f45042caa698d1aea (diff)
downloadlv2-68a4dc89f5e00aa6e2780f4f96011b92961b7a80.tar.xz
Single-page API documentation with unified style.
-rw-r--r--doc/DoxygenLayout.xml194
-rw-r--r--doc/doxy-style.css172
-rw-r--r--doc/header.html1
-rw-r--r--doc/reference.doxygen.in11
-rw-r--r--doc/style.css71
-rw-r--r--lv2/lv2plug.in/ns/ext/atom/atom.h12
-rw-r--r--lv2/lv2plug.in/ns/ext/atom/atom.ttl45
-rw-r--r--lv2/lv2plug.in/ns/ext/atom/forge.h7
-rw-r--r--lv2/lv2plug.in/ns/ext/atom/util.h7
-rw-r--r--lv2/lv2plug.in/ns/ext/buf-size/buf-size.h13
-rw-r--r--lv2/lv2plug.in/ns/ext/buf-size/lv2-buf-size.doap.ttl2
-rw-r--r--lv2/lv2plug.in/ns/ext/data-access/data-access.h14
-rw-r--r--lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h14
-rw-r--r--lv2/lv2plug.in/ns/ext/event/event.h22
-rw-r--r--lv2/lv2plug.in/ns/ext/instance-access/instance-access.h25
-rw-r--r--lv2/lv2plug.in/ns/ext/log/log.h12
-rw-r--r--lv2/lv2plug.in/ns/ext/log/logger.h19
-rw-r--r--lv2/lv2plug.in/ns/ext/midi/midi.h10
-rw-r--r--lv2/lv2plug.in/ns/ext/morph/lv2-morph.doap.ttl2
-rw-r--r--lv2/lv2plug.in/ns/ext/morph/morph.h13
-rw-r--r--lv2/lv2plug.in/ns/ext/options/options.h13
-rw-r--r--lv2/lv2plug.in/ns/ext/parameters/parameters.h13
-rw-r--r--lv2/lv2plug.in/ns/ext/patch/patch.h16
-rw-r--r--lv2/lv2plug.in/ns/ext/port-groups/port-groups.h13
-rw-r--r--lv2/lv2plug.in/ns/ext/port-props/port-props.h12
-rw-r--r--lv2/lv2plug.in/ns/ext/presets/lv2-presets.doap.ttl2
-rw-r--r--lv2/lv2plug.in/ns/ext/presets/presets.h11
-rw-r--r--lv2/lv2plug.in/ns/ext/resize-port/lv2-resize-port.doap.ttl2
-rw-r--r--lv2/lv2plug.in/ns/ext/resize-port/resize-port.h12
-rw-r--r--lv2/lv2plug.in/ns/ext/state/state.h12
-rw-r--r--lv2/lv2plug.in/ns/ext/time/time.h15
-rw-r--r--lv2/lv2plug.in/ns/ext/uri-map/uri-map.h11
-rw-r--r--lv2/lv2plug.in/ns/ext/urid/urid.h12
-rw-r--r--lv2/lv2plug.in/ns/ext/worker/worker.h24
-rw-r--r--lv2/lv2plug.in/ns/extensions/ui/ui.h11
-rw-r--r--lv2/lv2plug.in/ns/extensions/units/units.h13
-rw-r--r--lv2/lv2plug.in/ns/index.html.in28
-rw-r--r--lv2/lv2plug.in/ns/lv2core/lv2.h12
-rw-r--r--lv2/lv2plug.in/ns/meta/meta.ttl2
-rwxr-xr-xlv2specgen/lv2specgen.py132
-rw-r--r--lv2specgen/template.html2
-rw-r--r--wscript29
42 files changed, 825 insertions, 238 deletions
diff --git a/doc/DoxygenLayout.xml b/doc/DoxygenLayout.xml
new file mode 100644
index 0000000..22acafb
--- /dev/null
+++ b/doc/DoxygenLayout.xml
@@ -0,0 +1,194 @@
+<doxygenlayout version="1.0">
+ <!-- Generated by doxygen 1.8.8 -->
+ <!-- Navigation index tabs for HTML output -->
+ <navindex>
+ <tab type="user" url="../../ns/index.html" title="Index"/>
+ <tab type="mainpage" visible="no" title=""/>
+ <tab type="pages" visible="yes" title="" intro=""/>
+ <tab type="modules" visible="yes" title="" intro=""/>
+ <tab type="namespaces" visible="yes" title="">
+ <tab type="namespacelist" visible="yes" title="" intro=""/>
+ <tab type="namespacemembers" visible="yes" title="" intro=""/>
+ </tab>
+ <tab type="classes" visible="yes" title="">
+ <tab type="classlist" visible="yes" title="" intro=""/>
+ <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
+ <tab type="hierarchy" visible="yes" title="" intro=""/>
+ <tab type="classmembers" visible="yes" title="" intro=""/>
+ </tab>
+ <tab type="files" visible="yes" title="">
+ <tab type="filelist" visible="yes" title="" intro=""/>
+ <tab type="globals" visible="yes" title="" intro=""/>
+ </tab>
+ <tab type="examples" visible="yes" title="" intro=""/>
+ </navindex>
+
+ <!-- Layout definition for a class page -->
+ <class>
+ <briefdescription visible="yes"/>
+ <includes visible="$SHOW_INCLUDE_FILES"/>
+ <inheritancegraph visible="$CLASS_GRAPH"/>
+ <collaborationgraph visible="$COLLABORATION_GRAPH"/>
+ <memberdecl>
+ <nestedclasses visible="yes" title=""/>
+ <publictypes title=""/>
+ <services title=""/>
+ <interfaces title=""/>
+ <publicslots title=""/>
+ <signals title=""/>
+ <publicmethods title=""/>
+ <publicstaticmethods title=""/>
+ <publicattributes title=""/>
+ <publicstaticattributes title=""/>
+ <protectedtypes title=""/>
+ <protectedslots title=""/>
+ <protectedmethods title=""/>
+ <protectedstaticmethods title=""/>
+ <protectedattributes title=""/>
+ <protectedstaticattributes title=""/>
+ <packagetypes title=""/>
+ <packagemethods title=""/>
+ <packagestaticmethods title=""/>
+ <packageattributes title=""/>
+ <packagestaticattributes title=""/>
+ <properties title=""/>
+ <events title=""/>
+ <privatetypes title=""/>
+ <privateslots title=""/>
+ <privatemethods title=""/>
+ <privatestaticmethods title=""/>
+ <privateattributes title=""/>
+ <privatestaticattributes title=""/>
+ <friends title=""/>
+ <related title="" subtitle=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <inlineclasses title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <services title=""/>
+ <interfaces title=""/>
+ <constructors title=""/>
+ <functions title=""/>
+ <related title=""/>
+ <variables title=""/>
+ <properties title=""/>
+ <events title=""/>
+ </memberdef>
+ <allmemberslink visible="yes"/>
+ <usedfiles visible="$SHOW_USED_FILES"/>
+ <authorsection visible="yes"/>
+ </class>
+
+ <!-- Layout definition for a namespace page -->
+ <namespace>
+ <briefdescription visible="yes"/>
+ <memberdecl>
+ <nestednamespaces visible="yes" title=""/>
+ <constantgroups visible="yes" title=""/>
+ <classes visible="yes" title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <inlineclasses title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdef>
+ <authorsection visible="yes"/>
+ </namespace>
+
+ <!-- Layout definition for a file page -->
+ <file>
+ <briefdescription visible="yes"/>
+ <includes visible="$SHOW_INCLUDE_FILES"/>
+ <includegraph visible="$INCLUDE_GRAPH"/>
+ <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
+ <sourcelink visible="yes"/>
+ <memberdecl>
+ <classes visible="yes" title=""/>
+ <namespaces visible="yes" title=""/>
+ <constantgroups visible="yes" title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ <memberdef>
+ <inlineclasses title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ </memberdef>
+ <authorsection/>
+ </file>
+
+ <!-- Layout definition for a group page -->
+ <group>
+ <detaileddescription title=""/>
+ <groupgraph visible="$GROUP_GRAPHS"/>
+ <memberdecl>
+ <nestedgroups visible="yes" title=""/>
+ <dirs visible="yes" title=""/>
+ <files visible="yes" title=""/>
+ <namespaces visible="yes" title=""/>
+ <classes visible="yes" title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <enumvalues title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <defines title=""/>
+ <signals title=""/>
+ <publicslots title=""/>
+ <protectedslots title=""/>
+ <privateslots title=""/>
+ <events title=""/>
+ <properties title=""/>
+ <friends title=""/>
+ <membergroups visible="yes"/>
+ </memberdecl>
+ <memberdef>
+ <pagedocs/>
+ <inlineclasses title=""/>
+ <defines title=""/>
+ <typedefs title=""/>
+ <enums title=""/>
+ <enumvalues title=""/>
+ <functions title=""/>
+ <variables title=""/>
+ <signals title=""/>
+ <publicslots title=""/>
+ <protectedslots title=""/>
+ <privateslots title=""/>
+ <events title=""/>
+ <properties title=""/>
+ <friends title=""/>
+ </memberdef>
+ <authorsection visible="yes"/>
+ </group>
+
+ <!-- Layout definition for a directory page -->
+ <directory>
+ <briefdescription visible="yes"/>
+ <directorygraph visible="yes"/>
+ <memberdecl>
+ <dirs visible="yes"/>
+ <files visible="yes"/>
+ </memberdecl>
+ <detaileddescription title=""/>
+ </directory>
+</doxygenlayout>
diff --git a/doc/doxy-style.css b/doc/doxy-style.css
index b01ac5d..e98848d 100644
--- a/doc/doxy-style.css
+++ b/doc/doxy-style.css
@@ -88,11 +88,6 @@ div.qindex,div.navtab {
padding: 2px;
}
-div.qindex,div.navpath {
- width: 100%;
- line-height: 140%;
-}
-
div.navtab {
margin-right: 15px;
}
@@ -162,6 +157,10 @@ div.groupHeader {
font-weight: 700;
}
+a + h2.groupheader {
+ display: none;
+}
+
div.groupText {
margin-left: 16px;
font-style: italic;
@@ -236,7 +235,7 @@ span.keyword {
}
span.keywordtype {
- color: #604020;
+ color: #3E873E;
}
span.keywordflow {
@@ -300,14 +299,12 @@ hr.footer {
/* @group Member Descriptions */
table.memberdecls {
- border-spacing: 0;
- font-size: small;
+ border-spacing: 0.125em;
}
.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,.memTemplItemLeft,.memTemplItemRight,.memTemplParams {
- background-color: #FBFBFB;
margin: 0;
- padding: 0.25ex;
+ padding: 0;
}
.mdescLeft,.mdescRight {
@@ -315,7 +312,7 @@ table.memberdecls {
}
.memItemLeft,.memItemRight,.memTemplParams {
- border-top: 1px solid #DDD;
+ border: 0;
}
.memItemLeft,.memTemplItemLeft {
@@ -323,11 +320,19 @@ table.memberdecls {
padding-left: 2em;
}
+.memItemLeft a.el {
+ font-weight: bold;
+}
+
.memTemplParams {
color: #464646;
white-space: nowrap;
}
+td.memSeparator {
+ display: none;
+}
+
/* @end */
/* @group Member Details */
/* Styles for detailed member documentation */
@@ -349,7 +354,8 @@ table.memberdecls {
.memitem {
padding: 0;
margin: 1ex 0 2ex 0;
- border: 1px solid #CCC;
+ border: 1px solid #333;
+ border-radius: 6px;
}
.memname {
@@ -362,12 +368,20 @@ table.memberdecls {
padding: 0.5ex;
font-weight: bold;
background-color: #F3F3F3;
+ border-radius: 6px 6px 0 0;
+ background: linear-gradient(to bottom, #444 0%, #000 100%);
+ color: #FFF;
+}
+
+.memproto .paramname {
+ color: #CCC;
}
.memdoc {
padding: 1ex;
background-color: #FBFBFB;
border-top-width: 0;
+ border-radius: 0 0 6px 6px;
}
.paramkey {
@@ -375,6 +389,7 @@ table.memberdecls {
}
.paramtype {
+ color: #3E873E;
white-space: nowrap;
}
@@ -397,9 +412,8 @@ table.memberdecls {
/* these are for tree view when used as main index */
.directory {
- font-size: 9pt;
- font-weight: bold;
- margin: 5px;
+ font-size: small;
+ margin: 0.5em;
}
.directory h3 {
@@ -494,12 +508,13 @@ table.doxtable th {
font-size: 13px;
}
+div.navpath {
+ padding: 0.25em;
+}
+
.navpath ul {
- font-size: 11px;
- height: 30px;
- line-height: 30px;
+ font-size: x-small;
color: #8AA0CC;
- border: 1px solid #C2CDE4;
overflow: hidden;
margin: 0;
padding: 0;
@@ -514,7 +529,6 @@ table.doxtable th {
}
.navpath a {
- height: 32px;
display: block;
text-decoration: none;
outline: none;
@@ -526,8 +540,8 @@ table.doxtable th {
div.summary {
float: right;
- font-size: 8pt;
- padding-right: 5px;
+ font-size: x-small;
+ padding: 0.25em 0.5em 0 0;
width: 50%;
text-align: right;
}
@@ -540,40 +554,33 @@ div.header {
background-color: #F3F3F3;
margin: 0;
border-bottom: 1px solid #DDD;
+ border-radius: 0 0 6px 6px;
}
div.headertitle {
- background-color: #ECF3F1;
- padding: 5px 5px 5px 10px;
font-size: 180%;
font-weight: bold;
+ color: #FFF;
+ padding: 0.125em 0.25em 0.125em 0.25em;
+ background-color: #333;
+ background: linear-gradient(to bottom, #444 0%, #000 100%);
+ border: 0;
+ border-top: solid 2px #444;
+ border-bottom: solid 2px #444;
+ border-radius: 0 0 6px 6px;
}
div.line {
font-family: monospace, fixed;
- font-size: 13px;
+ font-size: 13px;
min-height: 13px;
line-height: 1.0;
text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
+ white-space: pre-wrap;
text-indent: -53px;
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
- -webkit-transition-property: background-color, box-shadow;
- -webkit-transition-duration: 0.5s;
- -moz-transition-property: background-color, box-shadow;
- -moz-transition-duration: 0.5s;
- -ms-transition-property: background-color, box-shadow;
- -ms-transition-duration: 0.5s;
- -o-transition-property: background-color, box-shadow;
- -o-transition-duration: 0.5s;
- transition-property: background-color, box-shadow;
- transition-duration: 0.5s;
}
div.line.glow {
@@ -587,7 +594,7 @@ span.lineno {
text-align: right;
border-right: 2px solid #0F0;
background-color: #E8E8E8;
- white-space: pre;
+ white-space: pre;
}
span.lineno a {
background-color: #D8D8D8;
@@ -596,3 +603,86 @@ span.lineno a {
span.lineno a:hover {
background-color: #C8C8C8;
}
+
+.tabs, .tabs2, .navpath {
+ background-image: none;
+ background-color: #333;
+ background: linear-gradient(to bottom, #444 0%, #000 100%);
+ border: 0;
+ border-bottom: solid 2px #000;
+ padding: 0;
+ padding-top: 2px;
+}
+
+#navrow1 {
+ border: 0;
+}
+
+th {
+ text-align: left;
+}
+
+.mlabel {
+ padding: 0.125em;
+}
+
+/* tabs*/
+
+.tabs, .tabs2, .tabs3 {
+ width: 100%;
+ z-index: 101;
+ font-size: large;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ line-height: 2em;
+ list-style: none;
+ background-color: #333;
+ background: linear-gradient(to bottom, #555 0%, #111 100%);
+ border: solid 1px #000;
+ border-radius: 6px 6px 0 0;
+ color: #fff;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ color: #fff;
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+span.icon {
+ display: none;
+} \ No newline at end of file
diff --git a/doc/header.html b/doc/header.html
index 6ff2e60..d91ed6a 100644
--- a/doc/header.html
+++ b/doc/header.html
@@ -3,7 +3,6 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>LV2: File List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxy-style.css" rel="stylesheet" type="text/css" />
</head>
<body>
diff --git a/doc/reference.doxygen.in b/doc/reference.doxygen.in
index e071c9c..ae1c2e3 100644
--- a/doc/reference.doxygen.in
+++ b/doc/reference.doxygen.in
@@ -98,7 +98,7 @@ OUTPUT_LANGUAGE = English
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.
-BRIEF_MEMBER_DESC = YES
+BRIEF_MEMBER_DESC = NO
# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
# description of a member or function before the detailed description
@@ -361,7 +361,7 @@ SUBGROUPING = YES
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.
-INLINE_GROUPED_CLASSES = NO
+INLINE_GROUPED_CLASSES = YES
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
@@ -672,7 +672,7 @@ FILE_VERSION_FILTER =
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
-LAYOUT_FILE =
+LAYOUT_FILE = DoxygenLayout.xml
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
@@ -765,11 +765,15 @@ INPUT = @LV2_SRCDIR@/doc/mainpage.dox \
lv2/lv2plug.in/ns/ext/event/event.h \
lv2/lv2plug.in/ns/ext/instance-access/instance-access.h \
lv2/lv2plug.in/ns/ext/log/log.h \
+ lv2/lv2plug.in/ns/ext/log/logger.h \
lv2/lv2plug.in/ns/ext/midi/midi.h \
lv2/lv2plug.in/ns/ext/morph/morph.h \
lv2/lv2plug.in/ns/ext/options/options.h \
+ lv2/lv2plug.in/ns/ext/parameters/parameters.h \
lv2/lv2plug.in/ns/ext/patch/patch.h \
lv2/lv2plug.in/ns/ext/port-groups/port-groups.h \
+ lv2/lv2plug.in/ns/ext/port-props/port-props.h \
+ lv2/lv2plug.in/ns/ext/presets/presets.h \
lv2/lv2plug.in/ns/ext/resize-port/resize-port.h \
lv2/lv2plug.in/ns/ext/state/state.h \
lv2/lv2plug.in/ns/ext/time/time.h \
@@ -777,6 +781,7 @@ INPUT = @LV2_SRCDIR@/doc/mainpage.dox \
lv2/lv2plug.in/ns/ext/urid/urid.h \
lv2/lv2plug.in/ns/ext/worker/worker.h \
lv2/lv2plug.in/ns/extensions/ui/ui.h \
+ lv2/lv2plug.in/ns/extensions/units/units.h \
lv2/lv2plug.in/ns/lv2core/lv2.h
# This tag can be used to specify the character encoding of the source files
diff --git a/doc/style.css b/doc/style.css
index a2c682a..afb41f7 100644
--- a/doc/style.css
+++ b/doc/style.css
@@ -130,14 +130,15 @@ h6 {
position: absolute;
right: 0;
top: 0;
- padding: 1ex;
- margin: 0.5ex 0.25ex 0 0.5ex;
+ padding: 0.5em;
font-size: x-small;
border-style: hidden;
}
#meta tr, #meta th, #meta td {
border: 0;
font-weight: normal;
+ padding: 0.125em 0.25em 0.125em 0.25em;
+ background-color: transparent;
}
#meta th {
text-align: right;
@@ -148,8 +149,8 @@ h6 {
#title {
font-size: 200%;
font-weight: 700;
- margin: 0 0 0.25ex 0;
- padding: 0 0 0 0;
+ margin: 0;
+ padding: 0;
}
#subtitle {
font-size: small;
@@ -472,8 +473,6 @@ ul, ol {
background-color: #222;
background: linear-gradient(to bottom, #444 0%, #000 100%);
border-bottom: solid 2px #444;
- border-left: solid 2px #444;
- border-right: solid 2px #444;
border-radius: 0 0 6px 6px;
color: #EEE;
margin: 0;
@@ -499,6 +498,42 @@ ul, ol {
}
.index {
margin-left: 1em;
+ border-collapse: initial;
+ border-spacing: 0;
+ border-radius: 6px;
+}
+.index th {
+ color: #FFF;
+ background-color: #222;
+ background: linear-gradient(to bottom, #444 0%, #000 100%);
+ border: 0;
+ border-right: solid 1px #333;
+ border-bottom: solid 1px #333;
+}
+.index td {
+ vertical-align: top;
+ border: 0;
+ border-right: solid 1px #DDD;
+ border-bottom: solid 1px #DDD;
+}
+.index td:first-child {
+ border-left: solid 1px #DDD;
+}
+.index ul {
+ padding-left: 1em;
+ border-collapse: initial;
+}
+.index thead tr th:first-child {
+ border-radius: 6px 0 0 0;
+}
+.index thead tr th:last-child {
+ border-radius: 0 6px 0 0;
+}
+.index tbody tr:last-child td:first-child {
+ border-radius:0 0 0 6px;
+}
+.index tbody tr:last-child td:last-child {
+ border-radius:0 0 6px 0;
}
.prop {
margin: 0;
@@ -527,12 +562,19 @@ ul, ol {
vertical-align: text-top;
}
.terminfo th {
- padding: 0 1ex 0 0;
+ padding: 0.25em 0.75em 0.125em 0;
+ border: 0;
+ border-bottom: 1px solid #ddd;
+}
+.terminfo td {
+ padding: 0;
+ border: 0;
+ border-bottom: 1px solid #ddd;
}
.specterm {
background-color: #FBFBFB;
border: 0;
- border: 1px solid #444;
+ border: 1px solid #333;
margin: 0;
padding: 0;
margin-bottom: 1em;
@@ -545,7 +587,7 @@ ul, ol {
color: #FFF;
background-color: #222;
background: linear-gradient(to bottom, #444 0%, #000 100%);
- border: solid 2px #444;
+ border: solid 1px #333;
border-radius: 6px 6px 0 0;
}
.spectermbody {
@@ -581,15 +623,20 @@ div.head table {
table {
border-collapse: collapse;
border-style: hidden;
+ border-spacing: 0;
margin: 0;
border: 0;
}
th {
- vertical-align: text-top;
+ background-color: #F8F8F8;
}
td, th {
- border: 1px dashed #ccc;
- padding: 0.3ex 0.5em 0.3ex 0.5em;
+ border: 1px solid #ddd;
+ padding: 0.25em 0.5em 0.25em 0.5em;
+}
+th {
+ font-weight: bold;
+ text-align: left;
}
pre {
margin: 1em 1em 1em 4em;
diff --git a/lv2/lv2plug.in/ns/ext/atom/atom.h b/lv2/lv2plug.in/ns/ext/atom/atom.h
index 3f0195b..55fffe2 100644
--- a/lv2/lv2plug.in/ns/ext/atom/atom.h
+++ b/lv2/lv2plug.in/ns/ext/atom/atom.h
@@ -15,8 +15,12 @@
*/
/**
- @file atom.h C header for the LV2 Atom extension
- <http://lv2plug.in/ns/ext/atom>.
+ @defgroup atom Atom
+
+ A generic value container and several data types, see
+ <http://lv2plug.in/ns/ext/atom> for details.
+
+ @{
*/
#ifndef LV2_ATOM_H
@@ -239,6 +243,10 @@ typedef struct {
LV2_Atom_Sequence_Body body; /**< Body. */
} LV2_Atom_Sequence;
+/**
+ @}
+*/
+
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/lv2/lv2plug.in/ns/ext/atom/atom.ttl b/lv2/lv2plug.in/ns/ext/atom/atom.ttl
index 301f416..113cfe8 100644
--- a/lv2/lv2plug.in/ns/ext/atom/atom.ttl
+++ b/lv2/lv2plug.in/ns/ext/atom/atom.ttl
@@ -14,31 +14,26 @@
<forge.h> ,
<lv2-atom.doap.ttl> ;
lv2:documentation """
-<p>This specification defines a simple generic data container, called an
-<q>Atom</q>. An atom:Atom can contain simple primitive types like integers,
+
+<p>An #Atom is a simple generic data container for holding any type of Plain
+Old Data (POD). An #Atom can contain simple primitive types like integers,
floating point numbers, and strings; as well as structured data like lists and
-dictionary-like <q>Objects</q>. An Atom is, with one exception, Plain Old Data
-(POD), meaning it can be easily copied (e.g. using <code>memcpy</code>) and is
-suitable for use in real-time code.</p>
-
-<p>Atoms are not limited to the types defined here, but allow implementations
-to work with any type of POD data at all. This is possible because Atom types
-are URIs, but mapped to integers using the <a href="../urid/urid.html">LV2
-URID</a> extension for performance reasons.</p>
-
-<p>Since atoms are simple to copy,
-communication of any atom is simple to implement without requiring special code
-for every type of data. For example, plugins that mutually understand a type
-can be used together in a host that does not understand that type, because the
-host is only required to copy atoms, not interpret their contents. Similarly,
-plugins (such as routers, delays, or data structures) can meaningfully process
-atoms of a type unknown to them.</p>
-
-<p>Atoms can and should be used anywhere values of various types must be stored
-or transmitted. The port type atom:AtomPort can be used to transmit atoms via
-ports. An atom:AtomPort that contains an atom:Sequence can be used for sample
-accurate event communication, such as MIDI, and replaces the earlier <a
-href="../event/event.html">LV2 event</a> extension.</p>
+dictionary-like <q>Objects</q>. Since Atoms are POD, they can be easily copied
+(e.g. using <code>memcpy</code>) anywhere and are suitable for use in real-time
+code.</p>
+
+<p>Every atom starts with an LV2_Atom header, followed by the contents. This
+allows code to process atoms without requiring special code for every type of
+data. For example, plugins that mutually understand a type can be used
+together in a host that does not understand that type, because the host is only
+required to copy atoms, not interpret their contents. Similarly, plugins (such
+as routers, delays, or data structures) can meaningfully process atoms of a
+type unknown to them.</p>
+
+<p>Atoms should be used anywhere values of various types must be stored or
+transmitted. The port type #AtomPort can be used to transmit atoms via ports.
+An #AtomPort that contains an #Sequence can be used for sample accurate event
+communication, such as MIDI, and replaces the earlier event extension.</p>
<h3>Serialisation</h3>
@@ -54,7 +49,7 @@ in plugin data files.</p>
<p>While it is possible to define new Atom types for any binary format, the
standard types defined here are powerful enough to describe almost anything.
Implementations SHOULD build structures out of the types provided here, rather
-than define new binary formats (e.g. use atom:Tuple or atom:Object rather than
+than define new binary formats (e.g. use #Tuple or #Object rather than
a new C <code>struct</code> type). Current implementations have support for
serialising all standard types, so new binary formats are an implementation
burden which harms interoperabilty. In particular, plugins SHOULD NOT expect
diff --git a/lv2/lv2plug.in/ns/ext/atom/forge.h b/lv2/lv2plug.in/ns/ext/atom/forge.h
index 3492712..0ce05dc 100644
--- a/lv2/lv2plug.in/ns/ext/atom/forge.h
+++ b/lv2/lv2plug.in/ns/ext/atom/forge.h
@@ -39,6 +39,12 @@
This header is non-normative, it is provided for convenience.
*/
+/**
+ @defgroup forge Forge
+ @ingroup atom
+ @{
+*/
+
#ifndef LV2_ATOM_FORGE_H
#define LV2_ATOM_FORGE_H
@@ -687,6 +693,7 @@ lv2_atom_forge_beat_time(LV2_Atom_Forge* forge, double beats)
/**
@}
+ @}
*/
#if defined(__clang__)
diff --git a/lv2/lv2plug.in/ns/ext/atom/util.h b/lv2/lv2plug.in/ns/ext/atom/util.h
index 1340024..52cdf93 100644
--- a/lv2/lv2plug.in/ns/ext/atom/util.h
+++ b/lv2/lv2plug.in/ns/ext/atom/util.h
@@ -22,6 +22,12 @@
This header is non-normative, it is provided for convenience.
*/
+/**
+ @defgroup util Utilities
+ @ingroup atom
+ @{
+*/
+
#ifndef LV2_ATOM_UTIL_H
#define LV2_ATOM_UTIL_H
@@ -437,6 +443,7 @@ lv2_atom_object_get(const LV2_Atom_Object* object, ...)
/**
@}
+ @}
*/
#ifdef __cplusplus
diff --git a/lv2/lv2plug.in/ns/ext/buf-size/buf-size.h b/lv2/lv2plug.in/ns/ext/buf-size/buf-size.h
index 20cd8fd..105995b 100644
--- a/lv2/lv2plug.in/ns/ext/buf-size/buf-size.h
+++ b/lv2/lv2plug.in/ns/ext/buf-size/buf-size.h
@@ -17,6 +17,15 @@
#ifndef LV2_BUF_SIZE_H
#define LV2_BUF_SIZE_H
+/**
+ @defgroup buf-size Buffer Size
+
+ Access to, and restrictions on, buffer sizes; see
+ <http://lv2plug.in/ns/ext/buf-size> for details.
+
+ @{
+*/
+
#define LV2_BUF_SIZE_URI "http://lv2plug.in/ns/ext/buf-size"
#define LV2_BUF_SIZE_PREFIX LV2_BUF_SIZE_URI "#"
@@ -27,4 +36,8 @@
#define LV2_BUF_SIZE__powerOf2BlockLength LV2_BUF_SIZE_PREFIX "powerOf2BlockLength"
#define LV2_BUF_SIZE__sequenceSize LV2_BUF_SIZE_PREFIX "sequenceSize"
+/**
+ @}
+*/
+
#endif /* LV2_BUF_SIZE_H */
diff --git a/lv2/lv2plug.in/ns/ext/buf-size/lv2-buf-size.doap.ttl b/lv2/lv2plug.in/ns/ext/buf-size/lv2-buf-size.doap.ttl
index a57ebbd..a153480 100644
--- a/lv2/lv2plug.in/ns/ext/buf-size/lv2-buf-size.doap.ttl
+++ b/lv2/lv2plug.in/ns/ext/buf-size/lv2-buf-size.doap.ttl
@@ -6,7 +6,7 @@
<http://lv2plug.in/ns/ext/buf-size>
a doap:Project ;
rdfs:seeAlso <../../meta/meta.ttl> ;
- doap:name "LV2 Buf Size Extension" ;
+ doap:name "LV2 Buf Size" ;
doap:shortdesc "Access to, and restrictions on, buffer sizes." ;
doap:created "2012-08-07" ;
doap:developer <http://drobilla.net/drobilla#me> ;
diff --git a/lv2/lv2plug.in/ns/ext/data-access/data-access.h b/lv2/lv2plug.in/ns/ext/data-access/data-access.h
index 68aaf62..ab9262c 100644
--- a/lv2/lv2plug.in/ns/ext/data-access/data-access.h
+++ b/lv2/lv2plug.in/ns/ext/data-access/data-access.h
@@ -16,12 +16,12 @@
*/
/**
- @file data-access.h
- C header for the LV2 Extension Data extension
- <http://lv2plug.in/ns/ext/data-access>.
+ @defgroup data-access Data Access
- This extension defines a method for (e.g.) plugin UIs to have (possibly
- marshalled) access to the extension_data function on a plugin instance.
+ Access to plugin extension_data() for UIs, see
+ <http://lv2plug.in/ns/ext/data-acess> for details.
+
+ @{
*/
#ifndef LV2_DATA_ACCESS_H
@@ -61,3 +61,7 @@ typedef struct {
#endif
#endif /* LV2_DATA_ACCESS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h b/lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h
index b62f8ef..a85e332 100644
--- a/lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h
+++ b/lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h
@@ -16,10 +16,12 @@
*/
/**
- @file dynmanifest.h
- C header for the LV2 Dynamic Manifest extension
- <http://lv2plug.in/ns/ext/dynmanifest>.
- Revision: 1.2
+ @defgroup dynmanifest Dynamic Manifest
+
+ Support for dynamic data generation, see
+ <http://lv2plug.in/ns/ext/dynmanifest> for details.
+
+ @{
*/
#ifndef LV2_DYN_MANIFEST_H_INCLUDED
@@ -142,3 +144,7 @@ void lv2_dyn_manifest_close(LV2_Dyn_Manifest_Handle handle);
#endif
#endif /* LV2_DYN_MANIFEST_H_INCLUDED */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/event/event.h b/lv2/lv2plug.in/ns/ext/event/event.h
index abc0b96..260dae1 100644
--- a/lv2/lv2plug.in/ns/ext/event/event.h
+++ b/lv2/lv2plug.in/ns/ext/event/event.h
@@ -16,18 +16,12 @@
*/
/**
- @file event.h
- C API for the LV2 Event extension <http://lv2plug.in/ns/ext/event>.
-
- This extension is a generic transport mechanism for time stamped events
- of any type (e.g. MIDI, OSC, ramps, etc). Each port can transport mixed
- events of any type; the type of events and timestamps are defined by a URI
- which is mapped to an integer by the host for performance reasons.
-
- This extension requires the host to support the LV2 URI Map extension.
- Any host which supports this extension MUST guarantee that any call to
- the LV2 URI Map uri_to_id function with the URI of this extension as the
- 'map' argument returns a value within the range of uint16_t.
+ @defgroup event Event
+
+ Generic time-stamped events, see <http://lv2plug.in/ns/ext/event> for
+ details.
+
+ @{
*/
#ifndef LV2_EVENT_H
@@ -292,3 +286,7 @@ typedef struct {
#endif
#endif /* LV2_EVENT_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/instance-access/instance-access.h b/lv2/lv2plug.in/ns/ext/instance-access/instance-access.h
index 06d8dde..cc84d65 100644
--- a/lv2/lv2plug.in/ns/ext/instance-access/instance-access.h
+++ b/lv2/lv2plug.in/ns/ext/instance-access/instance-access.h
@@ -15,23 +15,22 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+/**
+ @defgroup instance-access Instance Access
+
+ Access to the LV2_Handle of a plugin for UIs; see
+ <http://lv2plug.in/ns/ext/instance-access> for details.
+
+ @{
+*/
+
#ifndef LV2_INSTANCE_ACCESS_H
#define LV2_INSTANCE_ACCESS_H
#define LV2_INSTANCE_ACCESS_URI "http://lv2plug.in/ns/ext/instance-access"
-/**
- @file instance-access.h
- C header for the LV2 Instance Access extension
- <http://lv2plug.in/ns/ext/instance-access>.
-
- This extension defines a method for (e.g.) plugin UIs to get a direct
- handle to an LV2 plugin instance (LV2_Handle), if possible.
-
- To support this feature the host must pass an LV2_Feature struct to the
- UI instantiate method with URI "http://lv2plug.in/ns/ext/instance-access"
- and data pointed directly to the LV2_Handle of the plugin instance.
-*/
-
#endif /* LV2_INSTANCE_ACCESS_H */
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/log/log.h b/lv2/lv2plug.in/ns/ext/log/log.h
index d27e549..5245010 100644
--- a/lv2/lv2plug.in/ns/ext/log/log.h
+++ b/lv2/lv2plug.in/ns/ext/log/log.h
@@ -15,8 +15,12 @@
*/
/**
- @file log.h C header for the LV2 Log extension
- <http://lv2plug.in/ns/ext/log>.
+ @defgroup log Log
+
+ Interface for plugins to log via the host; see
+ <http://lv2plug.in/ns/ext/log> for details.
+
+ @{
*/
#ifndef LV2_LOG_H
@@ -97,3 +101,7 @@ typedef struct _LV2_Log {
#endif
#endif /* LV2_LOG_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/log/logger.h b/lv2/lv2plug.in/ns/ext/log/logger.h
index 1b03866..094dd42 100644
--- a/lv2/lv2plug.in/ns/ext/log/logger.h
+++ b/lv2/lv2plug.in/ns/ext/log/logger.h
@@ -15,13 +15,14 @@
*/
/**
- @file logger.h Convenience API for easy logging in plugin code.
+ @defgroup logger Logger
+ @ingroup log
- This file provides simple wrappers for the most common log operations for
- use in plugin implementations. If host support for logging is not
- available, then these functions will print to stderr instead.
+ Convenience API for easy logging in plugin code. This API provides simple
+ wrappers for logging from a plugin, which automatically fall back to
+ printing to stderr if host support is unavailabe.
- This header is non-normative, it is provided for convenience.
+ @{
*/
#ifndef LV2_ATOM_LOGGER_H
@@ -135,12 +136,12 @@ lv2_log_warning(LV2_Log_Logger* logger, const char* fmt, ...)
return ret;
}
-/**
- @}
-*/
-
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* LV2_LOG_LOGGER_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/midi/midi.h b/lv2/lv2plug.in/ns/ext/midi/midi.h
index b45b4c2..3c8d23e 100644
--- a/lv2/lv2plug.in/ns/ext/midi/midi.h
+++ b/lv2/lv2plug.in/ns/ext/midi/midi.h
@@ -15,8 +15,10 @@
*/
/**
- @file midi.h
- C definitions for the LV2 MIDI extension <http://lv2plug.in/ns/ext/midi>.
+ @defgroup midi MIDI
+
+ Definitions of standard MIDI messages, see <http://lv2plug.in/ns/ext/midi>
+ for details.
*/
#ifndef LV2_MIDI_H
@@ -224,3 +226,7 @@ lv2_midi_message_type(const uint8_t* msg) {
#endif
#endif /* LV2_MIDI_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/morph/lv2-morph.doap.ttl b/lv2/lv2plug.in/ns/ext/morph/lv2-morph.doap.ttl
index 73abdc2..3c7a542 100644
--- a/lv2/lv2plug.in/ns/ext/morph/lv2-morph.doap.ttl
+++ b/lv2/lv2plug.in/ns/ext/morph/lv2-morph.doap.ttl
@@ -6,7 +6,7 @@
<http://lv2plug.in/ns/ext/morph>
a doap:Project ;
rdfs:seeAlso <../../meta/meta.ttl> ;
- doap:name "LV2 Morph Extension" ;
+ doap:name "LV2 Morph" ;
doap:shortdesc "Ports that can dynamically change type." ;
doap:created "2012-05-22" ;
doap:developer <http://drobilla.net/drobilla#me> ;
diff --git a/lv2/lv2plug.in/ns/ext/morph/morph.h b/lv2/lv2plug.in/ns/ext/morph/morph.h
index 6739d39..f16f334 100644
--- a/lv2/lv2plug.in/ns/ext/morph/morph.h
+++ b/lv2/lv2plug.in/ns/ext/morph/morph.h
@@ -14,6 +14,15 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+/**
+ @defgroup morph Morph
+
+ Ports that can dynamically change type, see <http://lv2plug.in/ns/ext/morph>
+ for details.
+
+ @{
+*/
+
#ifndef LV2_MORPH_H
#define LV2_MORPH_H
@@ -32,3 +41,7 @@
#define LV2_MORPH__currentType LV2_MORPH_PREFIX "currentType"
#endif /* LV2_MORPH_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/options/options.h b/lv2/lv2plug.in/ns/ext/options/options.h
index 1a71a3e..a74126b 100644
--- a/lv2/lv2plug.in/ns/ext/options/options.h
+++ b/lv2/lv2plug.in/ns/ext/options/options.h
@@ -14,6 +14,15 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+/**
+ @defgroup options Options
+
+ Instantiation time options, see <http://lv2plug.in/ns/ext/options> for
+ details.
+
+ @{
+*/
+
#ifndef LV2_OPTIONS_H
#define LV2_OPTIONS_H
@@ -130,3 +139,7 @@ typedef struct _LV2_Options_Interface {
#endif
#endif /* LV2_OPTIONS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/parameters/parameters.h b/lv2/lv2plug.in/ns/ext/parameters/parameters.h
index 9c06bab..70235b7 100644
--- a/lv2/lv2plug.in/ns/ext/parameters/parameters.h
+++ b/lv2/lv2plug.in/ns/ext/parameters/parameters.h
@@ -14,6 +14,15 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+/**
+ @defgroup parameters Parameters
+
+ Common parameters for audio processing, see
+ <http://lv2plug.in/ns/ext/parameters>.
+
+ @{
+*/
+
#ifndef LV2_PARAMETERS_H
#define LV2_PARAMETERS_H
@@ -47,3 +56,7 @@
#define LV2_PARAMETERS__wetLevel LV2_PARAMETERS_PREFIX "wetLevel"
#endif /* LV2_PARAMETERS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/patch/patch.h b/lv2/lv2plug.in/ns/ext/patch/patch.h
index 3224264..57a495a 100644
--- a/lv2/lv2plug.in/ns/ext/patch/patch.h
+++ b/lv2/lv2plug.in/ns/ext/patch/patch.h
@@ -15,11 +15,15 @@
*/
/**
- @file patch.h C header for the LV2 Patch extension
- <http://lv2plug.in/ns/ext/patch>.
+ @defgroup patch Patch
- The patch extension is purely data, this header merely defines URIs
- for convenience.
+ Messages for accessing and manipulating properties, see
+ <http://lv2plug.in/ns/ext/patch> for details.
+
+ Note the patch extension is purely data, this header merely defines URIs for
+ convenience.
+
+ @{
*/
#ifndef LV2_PATCH_H
@@ -54,3 +58,7 @@
#define LV2_PATCH__writable LV2_PATCH_PREFIX "writable"
#endif /* LV2_PATCH_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/port-groups/port-groups.h b/lv2/lv2plug.in/ns/ext/port-groups/port-groups.h
index 4dd8cf4..6e80294 100644
--- a/lv2/lv2plug.in/ns/ext/port-groups/port-groups.h
+++ b/lv2/lv2plug.in/ns/ext/port-groups/port-groups.h
@@ -15,9 +15,12 @@
*/
/**
- @file port-groups.h
- C definitions for the LV2 Port Groups extension
- <http://lv2plug.in/ns/ext/port-groups>.
+ @defgroup port-groups Port Groups
+
+ Multi-channel groups of LV2 ports, see
+ <http://lv2plug.in/ns/ext/port-groups> for details.
+
+ @{
*/
#ifndef LV2_PORT_GROUPS_H
@@ -62,3 +65,7 @@
#define LV2_PORT_GROUPS__subGroupOf LV2_PORT_GROUPS_PREFIX "subGroupOf"
#endif /* LV2_PORT_GROUPS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/port-props/port-props.h b/lv2/lv2plug.in/ns/ext/port-props/port-props.h
index 11274cc..32e110a 100644
--- a/lv2/lv2plug.in/ns/ext/port-props/port-props.h
+++ b/lv2/lv2plug.in/ns/ext/port-props/port-props.h
@@ -15,9 +15,11 @@
*/
/**
- @file port-props.h
- C definitions for the LV2 Port Props extension
- <http://lv2plug.in/ns/ext/port-props>.
+ @defgroup port-props Port Properties
+
+ Various port properties.
+
+ @{
*/
#ifndef LV2_PORT_PROPS_H
@@ -40,3 +42,7 @@
#define LV2_PORT_PROPS__trigger LV2_PORT_PROPS_PREFIX "trigger"
#endif /* LV2_PORT_PROPS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/presets/lv2-presets.doap.ttl b/lv2/lv2plug.in/ns/ext/presets/lv2-presets.doap.ttl
index e5bca3a..990972b 100644
--- a/lv2/lv2plug.in/ns/ext/presets/lv2-presets.doap.ttl
+++ b/lv2/lv2plug.in/ns/ext/presets/lv2-presets.doap.ttl
@@ -8,7 +8,7 @@
rdfs:seeAlso <../../meta/meta.ttl> ;
doap:license <http://opensource.org/licenses/isc> ;
doap:name "LV2 Presets" ;
- doap:shortdesc "Presets for LV2 plugins. " ;
+ doap:shortdesc "Presets for LV2 plugins." ;
doap:created "2009-00-00" ;
doap:developer <http://drobilla.net/drobilla#me> ;
doap:release [
diff --git a/lv2/lv2plug.in/ns/ext/presets/presets.h b/lv2/lv2plug.in/ns/ext/presets/presets.h
index 4851feb..22d91a6 100644
--- a/lv2/lv2plug.in/ns/ext/presets/presets.h
+++ b/lv2/lv2plug.in/ns/ext/presets/presets.h
@@ -15,10 +15,11 @@
*/
/**
- @file presets.h
+ @defgroup presets Presets
- C definitions for the LV2 Presets extension
- <http://lv2plug.in/ns/ext/presets>.
+ Presets for plugins, see <http://lv2plug.in/ns/ext/presets> for details.
+
+ @{
*/
#ifndef LV2_PRESETS_H
@@ -32,3 +33,7 @@
#define LV2_PRESETS__value LV2_PRESETS_PREFIX "value"
#endif /* LV2_PRESETS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/resize-port/lv2-resize-port.doap.ttl b/lv2/lv2plug.in/ns/ext/resize-port/lv2-resize-port.doap.ttl
index 7617a2c..644b1ce 100644
--- a/lv2/lv2plug.in/ns/ext/resize-port/lv2-resize-port.doap.ttl
+++ b/lv2/lv2plug.in/ns/ext/resize-port/lv2-resize-port.doap.ttl
@@ -6,7 +6,7 @@
<http://lv2plug.in/ns/ext/resize-port>
a doap:Project ;
rdfs:seeAlso <../../meta/meta.ttl> ;
- doap:name "LV2 Resize Port Extension" ;
+ doap:name "LV2 Resize Port" ;
doap:shortdesc "Dynamically sized LV2 port buffers." ;
doap:created "2007-00-00" ;
doap:developer <http://drobilla.net/drobilla#me> ;
diff --git a/lv2/lv2plug.in/ns/ext/resize-port/resize-port.h b/lv2/lv2plug.in/ns/ext/resize-port/resize-port.h
index 23bc578..3d883a8 100644
--- a/lv2/lv2plug.in/ns/ext/resize-port/resize-port.h
+++ b/lv2/lv2plug.in/ns/ext/resize-port/resize-port.h
@@ -14,6 +14,14 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+/**
+ @defgroup resize-port Resize Port
+
+ Dynamically sized LV2 port buffers.
+
+ @{
+*/
+
#ifndef LV2_RESIZE_PORT_H
#define LV2_RESIZE_PORT_H
@@ -42,6 +50,7 @@ typedef enum {
typedef void* LV2_Resize_Port_Feature_Data;
+/** Host feature to allow plugins to resize their port buffers. */
typedef struct {
LV2_Resize_Port_Feature_Data data;
@@ -70,3 +79,6 @@ typedef struct {
#endif /* LV2_RESIZE_PORT_H */
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/state/state.h b/lv2/lv2plug.in/ns/ext/state/state.h
index 95e3dee..1b08852 100644
--- a/lv2/lv2plug.in/ns/ext/state/state.h
+++ b/lv2/lv2plug.in/ns/ext/state/state.h
@@ -16,8 +16,12 @@
*/
/**
- @file state.h
- C API for the LV2 State extension <http://lv2plug.in/ns/ext/state>.
+ @defgroup state State
+
+ An interface for LV2 plugins to save and restore state, see
+ <http://lv2plug.in/ns/ext/state> for details.
+
+ @{
*/
#ifndef LV2_STATE_H
@@ -350,3 +354,7 @@ typedef struct {
#endif
#endif /* LV2_STATE_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/time/time.h b/lv2/lv2plug.in/ns/ext/time/time.h
index 4f2bea0..14c930b 100644
--- a/lv2/lv2plug.in/ns/ext/time/time.h
+++ b/lv2/lv2plug.in/ns/ext/time/time.h
@@ -15,8 +15,15 @@
*/
/**
- @file time.h C header for the LV2 Time extension
- <http://lv2plug.in/ns/ext/time>.
+ @defgroup time Time
+
+ Properties for describing time, see <http://lv2plug.in/ns/ext/time> for
+ details.
+
+ Note the time extension is purely data, this header merely defines URIs for
+ convenience.
+
+ @{
*/
#ifndef LV2_TIME_H
@@ -38,4 +45,8 @@
#define LV2_TIME__framesPerSecond LV2_TIME_URI "#framesPerSecond"
#define LV2_TIME__speed LV2_TIME_URI "#speed"
+/**
+ @}
+*/
+
#endif /* LV2_TIME_H */
diff --git a/lv2/lv2plug.in/ns/ext/uri-map/uri-map.h b/lv2/lv2plug.in/ns/ext/uri-map/uri-map.h
index 2062af3..dd03345 100644
--- a/lv2/lv2plug.in/ns/ext/uri-map/uri-map.h
+++ b/lv2/lv2plug.in/ns/ext/uri-map/uri-map.h
@@ -15,8 +15,9 @@
*/
/**
- @file
- C header for the LV2 URI Map extension <http://lv2plug.in/ns/ext/uri-map>.
+ @defgroup uri-map URI Map
+
+ C API for the LV2 URI Map extension <http://lv2plug.in/ns/ext/uri-map>.
This extension defines a simple mechanism for plugins to map URIs to
integers, usually for performance reasons (e.g. processing events typed by
@@ -25,6 +26,8 @@
values for use in the audio thread without doing any string comparison.
This allows the extensibility of RDF with the performance of integers (or
centrally defined enumerations).
+
+ @{
*/
#ifndef LV2_URI_MAP_H
@@ -96,3 +99,7 @@ typedef struct {
#endif
#endif /* LV2_URI_MAP_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/urid/urid.h b/lv2/lv2plug.in/ns/ext/urid/urid.h
index 5a308c5..ae1f113 100644
--- a/lv2/lv2plug.in/ns/ext/urid/urid.h
+++ b/lv2/lv2plug.in/ns/ext/urid/urid.h
@@ -16,8 +16,12 @@
*/
/**
- @file urid.h
- C header for the LV2 URID extension <http://lv2plug.in/ns/ext/urid>
+ @defgroup urid URID
+
+ Features for mapping URIs to and from integers, see
+ <http://lv2plug.in/ns/ext/urid> for details.
+
+ @{
*/
#ifndef LV2_URID_H
@@ -127,3 +131,7 @@ typedef struct _LV2_URID_Unmap {
#endif
#endif /* LV2_URID_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/ext/worker/worker.h b/lv2/lv2plug.in/ns/ext/worker/worker.h
index 6c9386b..c14397d 100644
--- a/lv2/lv2plug.in/ns/ext/worker/worker.h
+++ b/lv2/lv2plug.in/ns/ext/worker/worker.h
@@ -15,8 +15,12 @@
*/
/**
- @file worker.h C header for the LV2 Worker extension
- <http://lv2plug.in/ns/ext/worker>.
+ @defgroup worker Worker
+
+ Support for non-realtime plugin operations, see
+ <http://lv2plug.in/ns/ext/worker> for details.
+
+ @{
*/
#ifndef LV2_WORKER_H
@@ -37,7 +41,7 @@ extern "C" {
#endif
/**
- A status code for worker functions.
+ Status code for worker functions.
*/
typedef enum {
LV2_WORKER_SUCCESS = 0, /**< Completed successfully. */
@@ -45,6 +49,7 @@ typedef enum {
LV2_WORKER_ERR_NO_SPACE = 2 /**< Failed due to lack of space. */
} LV2_Worker_Status;
+/** Opaque handle for LV2_Worker_Interface::work(). */
typedef void* LV2_Worker_Respond_Handle;
/**
@@ -60,7 +65,7 @@ typedef LV2_Worker_Status (*LV2_Worker_Respond_Function)(
const void* data);
/**
- LV2 Plugin Worker Interface.
+ Plugin Worker Interface.
This is the interface provided by the plugin to implement a worker method.
The plugin's extension_data() method should return an LV2_Worker_Interface
@@ -112,8 +117,15 @@ typedef struct _LV2_Worker_Interface {
LV2_Worker_Status (*end_run)(LV2_Handle instance);
} LV2_Worker_Interface;
+/** Opaque handle for LV2_Worker_Schedule. */
typedef void* LV2_Worker_Schedule_Handle;
+/**
+ Schedule Worker Host Feature.
+
+ The host passes this feature to provide a schedule_work() function, which
+ the plugin can use to schedule a worker call from run().
+*/
typedef struct _LV2_Worker_Schedule {
/**
Opaque host data.
@@ -156,3 +168,7 @@ typedef struct _LV2_Worker_Schedule {
#endif
#endif /* LV2_WORKER_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/extensions/ui/ui.h b/lv2/lv2plug.in/ns/extensions/ui/ui.h
index 8fada66..27350c4 100644
--- a/lv2/lv2plug.in/ns/extensions/ui/ui.h
+++ b/lv2/lv2plug.in/ns/extensions/ui/ui.h
@@ -17,9 +17,12 @@
*/
/**
- @file ui.h User Interface API.
+ @defgroup ui User Interfaces
- For high-level documentation, see <http://lv2plug.in/ns/extensions/ui>.
+ User interfaces of any type for plugins,
+ <http://lv2plug.in/ns/extensions/ui> for details.
+
+ @{
*/
#ifndef LV2_UI_H
@@ -431,3 +434,7 @@ typedef const LV2UI_Descriptor* (*LV2UI_DescriptorFunction)(uint32_t index);
#endif
#endif /* LV2_UI_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/extensions/units/units.h b/lv2/lv2plug.in/ns/extensions/units/units.h
index a40f097..e61af2a 100644
--- a/lv2/lv2plug.in/ns/extensions/units/units.h
+++ b/lv2/lv2plug.in/ns/extensions/units/units.h
@@ -15,9 +15,12 @@
*/
/**
- @file units.h
- C definitions for the LV2 Units extension
- <http://lv2plug.in/ns/extensions/units>.
+ @defgroup units Units
+
+ Units for LV2 values, see <http://lv2plug.in/ns/extensions/units> for
+ details.
+
+ @{
*/
#ifndef LV2_UNITS_H
@@ -60,3 +63,7 @@
#define LV2_UNITS__unit LV2_UNITS_PREFIX "unit"
#endif /* LV2_UNITS_H */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/index.html.in b/lv2/lv2plug.in/ns/index.html.in
index fc6ac2c..f093e3a 100644
--- a/lv2/lv2plug.in/ns/index.html.in
+++ b/lv2/lv2plug.in/ns/index.html.in
@@ -40,24 +40,26 @@
<!-- DESCRIPTION -->
<!-- <h2 class="sec" id="sec-description">Description</h2> -->
<div class="content">
- <p>This is an index of all official LV2 specifications. These pages are
- high-level descriptions of each specification, and vocabulary
- references with API links where appropriate. A
- global <a href="../doc/html/index.html">API reference</a> is also
- available.</p>
+ <p>All official LV2 specifications.</p>
</div>
<!-- INDEX -->
- <h2 class="sec" id="sec-index">Index</h2>
+ <!-- <h2 class="sec" id="sec-index">Index</h2> -->
<div class="content">
- <table summary="An index of LV2 specifications">
- <tr>
- <th>Name</th>
- <th>Description</th>
- <th>Version</th>
- <th>Status</th>
- </tr>
+ <a id="sec-index" />
+ <table class="index" summary="An index of LV2 specifications">
+ <thead>
+ <tr>
+ <th>Specification</th>
+ <th>API</th>
+ <th>Description</th>
+ <th>Version</th>
+ <th>Status</th>
+ </tr>
+ </thead>
+ <tbody>
@ROWS@
+ </tbody>
</table>
</div>
diff --git a/lv2/lv2plug.in/ns/lv2core/lv2.h b/lv2/lv2plug.in/ns/lv2core/lv2.h
index 504ffd9..b2688c4 100644
--- a/lv2/lv2plug.in/ns/lv2core/lv2.h
+++ b/lv2/lv2plug.in/ns/lv2core/lv2.h
@@ -19,9 +19,11 @@
*/
/**
- @file lv2.h
- API for the LV2 specification <http://lv2plug.in/ns/lv2core>.
- Revision: 12.2
+ @defgroup lv2core LV2 Core
+
+ Core LV2 specification, see <http://lv2plug.in/ns/lv2core> for details.
+
+ @{
*/
#ifndef LV2_H_INCLUDED
@@ -456,3 +458,7 @@ typedef const LV2_Lib_Descriptor *
#endif
#endif /* LV2_H_INCLUDED */
+
+/**
+ @}
+*/
diff --git a/lv2/lv2plug.in/ns/meta/meta.ttl b/lv2/lv2plug.in/ns/meta/meta.ttl
index aab2456..c072231 100644
--- a/lv2/lv2plug.in/ns/meta/meta.ttl
+++ b/lv2/lv2plug.in/ns/meta/meta.ttl
@@ -58,6 +58,8 @@ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH R
rdfs:label "eg-sampler: Add gain parameter."
] , [
rdfs:label "Fix merging of version histories in specification documentation."
+ ] , [
+ rdfs:label "Improve API documentation."
]
]
] , [
diff --git a/lv2specgen/lv2specgen.py b/lv2specgen/lv2specgen.py
index b356bd7..00310d6 100755
--- a/lv2specgen/lv2specgen.py
+++ b/lv2specgen/lv2specgen.py
@@ -304,6 +304,22 @@ def getComment(m, urinode, classlist, proplist, instalist):
return text
markup = rgx.sub(translateLink, markup)
+ # Transform names like #foo into links into this spec if possible
+ rgx = re.compile('([ \t\n\r\f\v^]+)\#([a-zA-Z0-9_-]+)')
+ def translateLocalLink(match):
+ text = match.group(0)
+ space = match.group(1)
+ name = match.group(2)
+ uri = rdflib.URIRef(spec_ns + name)
+ if ((classlist and uri in classlist) or
+ (instalist and uri in instalist) or
+ (proplist and uri in proplist)):
+ return '%s<a href="#%s">%s</a>' % (space, name, name)
+ else:
+ print("warning: Link to undefined resource <%s>\n" % name)
+ return text
+ markup = rgx.sub(translateLocalLink, markup)
+
if have_lxml:
try:
# Parse and validate documentation as XHTML Basic 1.1
@@ -327,6 +343,10 @@ def getComment(m, urinode, classlist, proplist, instalist):
os.chdir(oldcwd)
except Exception as e:
print("Invalid lv2:documentation for %s\n%s" % (urinode, e))
+ line_num = 1
+ for line in doc.split('\n'):
+ print('%3d: %s' % (line_num, line))
+ line_num += 1
return markup
@@ -722,17 +742,12 @@ def getAnchor(uri):
return getShortName(uri)
-def buildIndex(m, classlist, proplist, instalist=None):
- """
- Builds the A-Z list of terms. Args are a list of classes (strings) and
- a list of props (strings)
- """
-
- if len(classlist) == 0 and len(proplist) == 0 and (
- not instalist or len(instalist) == 0):
+def buildIndex(m, classlist, proplist, instalist=None, filelist=None):
+ if not (classlist or proplist or instalist or filelist):
return ''
- azlist = '<dl class="index">'
+ head = '<tr>'
+ body = '<tr>'
def termLink(m, t):
if str(t).startswith(spec_ns_str):
@@ -742,7 +757,8 @@ def buildIndex(m, classlist, proplist, instalist=None):
return '<a href="%s">%s</a>' % (str(t), str(t))
if (len(classlist) > 0):
- azlist += "<dt>Classes</dt><dd><ul>"
+ head += '<th>Classes</th>'
+ body += '<td><ul>'
classlist.sort()
shown = {}
for c in classlist:
@@ -759,7 +775,7 @@ def buildIndex(m, classlist, proplist, instalist=None):
continue
shown[c] = True
- azlist += '<li>' + termLink(m, c)
+ body += '<li>' + termLink(m, c)
def class_tree(c):
tree = ''
shown[c] = True
@@ -776,29 +792,41 @@ def buildIndex(m, classlist, proplist, instalist=None):
if tree != '':
tree = '<ul>' + tree + '</ul>'
return tree
- azlist += class_tree(c)
- azlist += '</li>'
- azlist += '</ul></dd>\n'
+ body += class_tree(c)
+ body += '</li>'
+ body += '</ul></td>\n'
if (len(proplist) > 0):
- azlist += "<dt>Properties</dt><dd>"
+ head += '<th>Properties</th>'
+ body += '<td><ul>'
proplist.sort()
- props = []
for p in proplist:
- props += [termLink(m, p)]
- azlist += ', '.join(props) + '</dd>\n'
+ body += '<li>%s</li>' % termLink(m, p)
+ body += '</ul></td>\n'
if (instalist != None and len(instalist) > 0):
- azlist += "<dt>Instances</dt><dd>"
- instas = []
+ head += '<th>Instances</th>'
+ body += '<td><ul>'
+ instalist.sort()
for i in instalist:
p = getShortName(i)
anchor = getAnchor(i)
- instas += ['<a href="#%s">%s</a>' % (anchor, p)]
- azlist += ', '.join(instas) + '</dd>\n'
+ body += '<li><a href="#%s">%s</a></li>' % (anchor, p)
+ body += '</ul></td>\n'
+
+ if (filelist != None and len(filelist) > 0):
+ head += '<th>Files</th>'
+ body += '<td><ul>'
+ filelist.sort()
+ for i in filelist:
+ p = getShortName(i)
+ anchor = getAnchor(i)
+ body += '<li><a href="%s">%s</a></li>' % (i, os.path.basename(i))
+ body += '</ul></td>\n'
- azlist += '\n</dl>'
- return azlist
+ head += '</tr>'
+ body += '</tr>'
+ return '<table class="index"><thead>%s</thead>\n<tbody>%s</tbody></table>' % (head, body)
def add(where, key, value):
@@ -1049,8 +1077,11 @@ def load_tags(path, docdir):
return e.firstChild.nodeValue
return ''
- def linkTo(sym, url):
- return '<span><a href="%s/%s">%s</a></span>' % (docdir, url, sym)
+ def linkTo(filename, anchor, sym):
+ if anchor:
+ return '<span><a href="%s/%s#%s">%s</a></span>' % (docdir, filename, anchor, sym)
+ else:
+ return '<span><a href="%s/%s">%s</a></span>' % (docdir, filename, sym)
tagdoc = xml.dom.minidom.parse(path)
root = tagdoc.documentElement
@@ -1062,13 +1093,15 @@ def load_tags(path, docdir):
name = getChildText(cn, 'name')
filename = getChildText(cn, 'filename')
+ anchor = getChildText(cn, 'anchor')
if not filename.endswith('.html'):
filename += '.html'
- linkmap[name] = linkTo(name, filename)
+ if cn.getAttribute('kind') != 'group':
+ linkmap[name] = linkTo(filename, anchor, name)
prefix = ''
- if cn.getAttribute('kind') != 'file':
+ if cn.getAttribute('kind') == 'struct':
prefix = name + '::'
members = cn.getElementsByTagName('member')
@@ -1076,8 +1109,7 @@ def load_tags(path, docdir):
mname = prefix + getChildText(m, 'name')
mafile = getChildText(m, 'anchorfile')
manchor = getChildText(m, 'anchor')
- linkmap[mname] = linkTo(
- mname, '%s#%s' % (mafile, manchor))
+ linkmap[mname] = linkTo(mafile, manchor, mname)
return linkmap
@@ -1167,7 +1199,21 @@ def specgen(specloc, indir, style_uri, docdir, tags, opts, instances=False):
instalist = getInstances(m, classlist, proplist)
instalist.sort(lambda x, y: cmp(getShortName(x).lower(), getShortName(y).lower()))
- azlist = buildIndex(m, classlist, proplist, instalist)
+ filelist = []
+ see_also_files = specProperties(m, spec, rdfs.seeAlso)
+ see_also_files.sort()
+ for f in see_also_files:
+ uri = str(f)
+ if uri[:7] == 'file://':
+ uri = uri[7:]
+ if uri[:len(abs_bundle_path)] == abs_bundle_path:
+ uri = uri[len(abs_bundle_path) + 1:]
+ else:
+ continue # Skip seeAlso file outside bundle
+
+ filelist += [uri]
+
+ azlist = buildIndex(m, classlist, proplist, instalist, filelist)
# Generate Term HTML
termlist = docTerms('Property', proplist, m, classlist, proplist, instalist)
@@ -1221,28 +1267,8 @@ def specgen(specloc, indir, style_uri, docdir, tags, opts, instances=False):
template = template.replace('@VERSION@', version_string)
- file_list = ''
- see_also_files = specProperties(m, spec, rdfs.seeAlso)
- see_also_files.sort()
- for f in see_also_files:
- uri = str(f)
- if uri[:7] == 'file://':
- uri = uri[7:]
- if uri[:len(abs_bundle_path)] == abs_bundle_path:
- uri = uri[len(abs_bundle_path) + 1:]
- else:
- continue # Skip seeAlso file outside bundle
-
- entry = '<a href="%s">%s</a>' % (uri, uri)
- if uri.endswith('.h') or uri.endswith('.hpp'):
- name = os.path.basename(uri)
- entry += ' <a href="%s">(docs)</a> ' % (
- docdir + '/' + name.replace('.', '_8') + '.html')
- file_list += '<li>%s</li>' % entry
- elif not uri.endswith('.doap.ttl'):
- file_list += '<li>%s</li>' % entry
-
- template = template.replace('@FILES@', file_list)
+ content_links = '<li><a href="%s">API</a></li>' % os.path.join(docdir, 'group__%s.html' % basename)
+ template = template.replace('@CONTENT_LINKS@', content_links)
comment = getComment(m, rdflib.URIRef(spec_url), classlist, proplist, instalist)
if comment != '':
diff --git a/lv2specgen/template.html b/lv2specgen/template.html
index f82e7aa..fb79c31 100644
--- a/lv2specgen/template.html
+++ b/lv2specgen/template.html
@@ -40,7 +40,7 @@
<li><a href="#sec-index">Index</a></li>
<li><a href="#sec-reference">Reference</a></li>
<li><a href="#sec-history">History</a></li>
- @FILES@
+ @CONTENT_LINKS@
</ul>
</div>
diff --git a/wscript b/wscript
index b56f9ff..e7fc342 100644
--- a/wscript
+++ b/wscript
@@ -157,9 +157,14 @@ def specgen(task):
ext_node, minor, micro, date))
break
- # Get short description
+ # Get name and short description
+ name = model.value(ext_node, doap.name, None)
shortdesc = model.value(ext_node, doap.shortdesc, None)
+ # Chop 'LV2' prefix from name for cleaner index
+ if name.startswith('LV2 '):
+ name = name[4:]
+
SPECGENDIR = 'lv2specgen'
STYLEPATH = 'build/aux/style.css'
TAGFILE = 'build/tags'
@@ -176,12 +181,16 @@ def specgen(task):
lv2specgen.save(task.outputs[0].abspath(), specdoc)
- # Name (comment is to act as a sort key)
+ # Specification (comment is to act as a sort key)
target = path[len('lv2/lv2plug.in/ns/'):]
if not task.env.ONLINE_DOCS:
target += '/%s.html' % b
row = '<tr><!-- %s --><td><a rel="rdfs:seeAlso" href="%s">%s</a></td>' % (
- b, target, b)
+ b, target, name)
+
+ # API
+ row += '<td><a rel="rdfs:seeAlso" href="../doc/html/group__%s.html">%s</a></td>' % (
+ b, b)
# Description
if shortdesc:
@@ -398,6 +407,14 @@ def build(bld):
bld.install_files('${BINDIR}', 'lv2specgen/lv2specgen.py', chmod=Utils.O755)
if bld.env.DOCS or bld.env.ONLINE_DOCS:
+ # Copy Doxygen layout file to build directory
+ bld(features = 'subst',
+ is_copy = True,
+ install_path = None,
+ name = 'copy',
+ source = 'doc/DoxygenLayout.xml',
+ target = 'DoxygenLayout.xml')
+
# Build Doxygen documentation (and tags file)
autowaf.build_dox(bld, 'LV2', VERSION, top, out, 'lv2plug.in/doc', False)
@@ -409,6 +426,12 @@ def build(bld):
source = 'doc/%s' % i,
target = 'aux/%s' % i)
+ bld(features = 'subst',
+ is_copy = True,
+ name = 'copy',
+ source = 'doc/doxy-style.css',
+ target = 'doc/html/doxy-style.css')
+
index_files = []
# Prepare spec output directories