Browse Source

Generate documentation with Sphinx

zrythm_meson
David Robillard 1 year ago
parent
commit
f95f22013d
  1. 15
      .gitlab-ci.yml
  2. 2
      README.md
  3. 95
      doc/_static/custom.css
  4. 57
      doc/_templates/about.html
  5. 33
      doc/c/Doxyfile
  6. 5
      doc/c/index.rst
  7. 22
      doc/c/overview.rst
  8. 11
      doc/c/reference.rst
  9. 42
      doc/c/wscript
  10. 86
      doc/conf.py.in
  11. 20
      doc/footer.html
  12. 46
      doc/header.html
  13. 35
      doc/index.html.in
  14. 194
      doc/layout.xml
  15. 15
      doc/mainpage.md
  16. 11
      doc/serd.rst
  17. 808
      doc/style.css
  18. 16
      include/serd/serd.h
  19. 20
      resources/serd.svg
  20. 674
      scripts/dox_to_sphinx.py
  21. 11
      wscript

15
.gitlab-ci.yml

@ -88,7 +88,9 @@ test:x64_dbg: @@ -88,7 +88,9 @@ test:x64_dbg:
- groff -Thtml -P -l -P -r -man -wall doc/serdi.1 > build/doc/serdi.html
needs: ["x64_dbg"]
artifacts:
paths: ["build/index.html", "build/coverage", "build/doc"]
paths:
- build/doc
- build/coverage
x64_rel:
@ -216,15 +218,12 @@ pages: @@ -216,15 +218,12 @@ pages:
script:
- mkdir -p .public/doc
- mkdir -p .public/man
- mkdir -p .public/images
- mv build/doc/*.svg .public/images
- mv build/doc/html/ .public/doc/html
- mv build/coverage/ .public/coverage
- mv build/index.html .public/index.html
- mkdir -p .public/c
- mv build/doc/c/singlehtml .public/c/singlehtml
- mv build/doc/serdi.html .public/man/serdi.html
- mv .public public
artifacts:
paths:
- public
only:
- master
# only:
# - master

2
README.md

@ -48,7 +48,7 @@ constant amount of memory (a single page) for all input sizes. @@ -48,7 +48,7 @@ constant amount of memory (a single page) for all input sizes.
Documentation
-------------
* [API reference](https://drobilla.gitlab.io/serd/doc/html/index.html)
* [API reference](https://drobilla.gitlab.io/serd/c/singlehtml)
* [`serdi` man page](https://drobilla.gitlab.io/serd/man/serdi.html)
-- David Robillard <d@drobilla.net>

95
doc/_static/custom.css vendored

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
div.document {
margin: 0;
}
div.body {
margin-top: 2em;
}
div.sphinxsidebarwrapper {
background: #EEE;
}
div.sphinxsidebarwrapper p.blurb {
text-align: center;
}
div.sphinxsidebarwrapper span.logo {
display: block;
text-align: center;
font-family: Georgia, serif;
padding: 0;
font-size: 180%;
}
div.sphinxsidebar a {
border-width: 0;
}
div.sphinxsidebar li {
color: #444;
}
div.section {
margin-top: 2.5em;
}
a.reference {
border-bottom: none;
}
code.xref {
font-weight: normal;
background-color: #F8F8F8;
padding: 0.1em 0 0.1em 0;
}
div.section > dl.c > dt:first-child,
div.section > dl.cpp > dt:first-child {
background-color: #F8F8F8;
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
font-weight: normal;
margin-bottom: 0.5em;
padding: 0.1em 0 0.1em 0;
}
tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.9em;
}
dl.member {
margin-top: 0.5em;
}
dl.enumerator {
margin-top: 0.5em;
}
dl.field-list > dt {
padding-left: 0;
}
pre, tt, code {
background-color: #F8F8F8;
}
.toctree-l1 {
margin-top: 1.0em;
}
img.logo {
width: 6em;
}
.class {
padding-top: 1.5em;
}
.exception {
padding-top: 1.5em;
}
.class > dd > dl.function {
padding-top: 1.0em;
}

57
doc/_templates/about.html vendored

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
{% if theme_logo %}
<p class="logo">
<a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/' ~ theme_logo, 1) }}" alt="Logo"/>
{% if theme_logo_name|lower == 'true' %}
<span class="logo logo-name">{{ project }}</span>
{% endif %}
</a>
</p>
{% else %}
<h1 class="logo"><a href="{{ pathto(master_doc) }}">{{ project }}</a></h1>
{% endif %}
{% if theme_description %}
<p class="blurb">{{ theme_description }}</p>
{% endif %}
{% if theme_github_user and theme_github_repo %}
{% if theme_github_button|lower == 'true' %}
<p>
<iframe src="https://ghbtns.com/github-btn.html?user={{ theme_github_user }}&repo={{ theme_github_repo }}&type={{ theme_github_type }}&count={{ theme_github_count }}&size=large&v=2"
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
</p>
{% endif %}
{% endif %}
{% if theme_travis_button|lower != 'false' %}
{% if theme_travis_button|lower == 'true' %}
{% set path = theme_github_user + '/' + theme_github_repo %}
{% else %}
{% set path = theme_travis_button %}
{% endif %}
<p>
<a class="badge" href="https://travis-ci.org/{{ path }}">
<img
alt="https://secure.travis-ci.org/{{ path }}.svg?branch={{ theme_badge_branch }}"
src="https://secure.travis-ci.org/{{ path }}.svg?branch={{ theme_badge_branch }}"
/>
</a>
</p>
{% endif %}
{% if theme_codecov_button|lower != 'false' %}
{% if theme_codecov_button|lower == 'true' %}
{% set path = theme_github_user + '/' + theme_github_repo %}
{% else %}
{% set path = theme_codecov_button %}
{% endif %}
<p>
<a class="badge" href="https://codecov.io/github/{{ path }}">
<img
alt="https://codecov.io/github/{{ path }}/coverage.svg?branch={{ theme_badge_branch }}"
src="https://codecov.io/github/{{ path }}/coverage.svg?branch={{ theme_badge_branch }}"
/>
</a>
</p>
{% endif %}

33
doc/c/Doxyfile

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
PROJECT_NAME = Serd
PROJECT_BRIEF = "A lightweight library for RDF storage and serialisation"
QUIET = YES
WARN_AS_ERROR = NO
WARN_IF_UNDOCUMENTED = NO
WARN_NO_PARAMDOC = NO
JAVADOC_AUTOBRIEF = YES
CASE_SENSE_NAMES = YES
HIDE_IN_BODY_DOCS = YES
REFERENCES_LINK_SOURCE = NO
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_XML = YES
XML_PROGRAMLISTING = NO
SHOW_FILES = NO
MACRO_EXPANSION = YES
PREDEFINED = SERD_ALLOCATED \
SERD_API \
SERD_CONST_FUNC= \
SERD_DEPRECATED_BY(x)= \
SERD_DISABLE_DEPRECATED \
SERD_NONNULL= \
SERD_NULLABLE= \
SERD_PURE_FUNC=
INPUT = ../../include/serd/serd.h
OUTPUT_DIRECTORY = .

5
doc/c/index.rst

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
.. toctree::
serd
overview
reference

22
doc/c/overview.rst

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
########
Overview
########
.. default-domain:: c
.. highlight:: c
The API revolves around two main types: the :doc:`api/reader`,
which reads text and fires callbacks,
and the :doc:`api/writer`,
which writes text when driven by corresponding functions.
Both work in a streaming fashion but still support pretty-printing,
so the pair can be used to pretty-print, translate,
or otherwise process arbitrarily large documents very quickly.
The context of a stream is tracked by the :doc:`api/env`,
which stores the current base URI and set of namespace prefixes.
The complete API is declared in ``serd.h``:
.. code-block:: c
#include <serd/serd.h>

11
doc/c/reference.rst

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
#############
API Reference
#############
This section contains the generated documentation for all symbols in the public
API.
.. toctree::
api/serd

42
doc/c/wscript

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
#!/usr/bin/env python
def build(bld):
dox_to_sphinx = bld.path.find_node("../../scripts/dox_to_sphinx.py")
index_xml = bld.path.get_bld().make_node("xml/index.xml")
files = [
("../../resources/serd.svg", "sphinx/_static/serd.svg"),
("../_static/custom.css", "sphinx/_static/custom.css"),
("../_templates/about.html", "sphinx/_templates/about.html"),
("../serd.rst", "sphinx/serd.rst"),
("index.rst", "sphinx/index.rst"),
("overview.rst", "sphinx/overview.rst"),
("reference.rst", "sphinx/reference.rst"),
]
# Run Doxygen to generate XML documentation
bld(features="doxygen", doxyfile="Doxyfile")
# Substitute variables to make Sphinx configuration file
bld(features="subst",
source="../conf.py.in",
target="sphinx/conf.py",
SERD_VERSION=bld.env.SERD_VERSION)
# Copy static documentation files to Sphinx build directory
for f in files:
bld(features="subst", is_copy=True, source=f[0], target=f[1])
# Generate Sphinx markup from Doxygen XML
bld.add_group()
bld(rule="${PYTHON} " + dox_to_sphinx.abspath() + " -f ${SRC} ${TGT}",
source=index_xml,
target="sphinx/api/")
# Run Sphinx to generate HTML documentation
doc_dir = bld.env.DOCDIR + "/serd-%s/" % bld.env.SERD_MAJOR_VERSION
bld(features="sphinx",
sphinx_source=bld.path.get_bld().make_node("sphinx"),
sphinx_output_format="singlehtml",
sphinx_options=["-E", "-q"],
install_path=doc_dir + "c/singlehtml/")

86
doc/conf.py.in

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
# Project information
project = "Serd"
copyright = "2020, David Robillard"
author = "David Robillard"
release = "@SERD_VERSION@"
# General configuration
language = "en"
extensions = [
# 'sphinx_rtd_theme',
]
# Enable nitpicky mode to get warnings about broken links
# Unfortunately this means we need to explicitly ignore everything external
nitpicky = True
_opaque = [
"FILE",
"SerdByteSinkImpl",
"SerdByteSourceImpl",
"SerdCursorImpl",
"SerdEnvImpl",
"SerdIterImpl",
"SerdModelImpl",
"SerdNodeImpl",
"SerdNodesImpl",
"SerdRangeImpl",
"SerdReaderImpl",
"SerdSinkImpl",
"SerdStatementImpl",
"SerdWorldImpl",
"SerdWriterImpl",
"int64_t",
"size_t",
"uint32_t",
"uint8_t",
"uintptr_t",
"va_list",
]
nitpick_ignore = list(map(lambda x: ("c:identifier", x), _opaque))
templates_path = ["_templates"]
pygments_style = "friendly"
# HTML output
exclude_patterns = ["xml"]
html_static_path = ["_static"]
html_theme = "alabaster"
# html_theme = "sphinx_rtd_theme"
if html_theme == "alabaster":
html_theme_options = {
"description": "A lightweight library for RDF storage and serialisation",
"donate_url": "http://drobilla.net/pages/donate.html",
# "github_repo": "serd",
# "github_user": "lv2",
"logo": "serd.svg",
"logo_name": True,
"logo_text_align": "center",
"page_width": "80em - 20em",
"sidebar_width": "24em",
}
html_sidebars = {
"**": [
"about.html",
"localtoc.html",
"donate.html",
]
}
elif html_theme == "sphinx_rtd_theme":
html_theme_options = {
"sticky_navigation": False,
"collapse_navigation": False,
"navigation_depth": 4,
"display_version": True,
}

20
doc/footer.html

@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
<!-- HTML footer for doxygen 1.8.15-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby
<a href="http://www.doxygen.org/index.html">Doxygen $doxygenversion</li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<div id="footer">
<address class="footer">$generatedby
<a href="http://www.doxygen.org/">Doxygen</a> $doxygenversion
</address>
</div>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>

46
doc/header.html

@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<div id="header">
<div id="titlebox">
<!--BEGIN PROJECT_LOGO-->
<div id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></div>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<h1 id="title">$projectname</h1>
<!--END PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<div id="shortdesc">$projectbrief</div>
<!--END PROJECT_BRIEF-->
</div>
<div id="metabox">
<table id="meta">
<!--BEGIN PROJECT_NUMBER-->
<tr><th>Version</th><td>$projectnumber</td></tr>
<!--END PROJECT_NUMBER-->
</table>
</div>
</div>
</div>
<!--END TITLEAREA-->
<!-- end header part -->
<!-- Fake static menu from Doxygen 1.8.15 -->
<div id="staticnavrow" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
</ul>
</div>

35
doc/index.html.in

@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Serd</title>
<link href="doc/html/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top">
<div id="titlearea">
<div id="header">
<div id="titlebox">
<h1 id="title">Serd</h1>
<div id="shortdesc">A lightweight library for RDF storage and serialisation</div>
</div>
<div id="metabox">
<table id="meta">
<tr><th>Version</th><td>@SERD_VERSION@</td></tr>
</table>
</div>
</div>
</div>
<div id="navrow1" class="tabs" />
<ul class="tablist" />
</div>
<ul>
<li><a href="doc/html/index.html">API Documentation</a></li>
<li><a href="coverage/index.html">Test Coverage</a></li>
</ul>
<div id="footer" />
</body>
</html>

194
doc/layout.xml

@ -1,194 +0,0 @@ @@ -1,194 +0,0 @@
<doxygenlayout version="1.0">
<!-- Generated by doxygen 1.8.13 -->
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" 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"/>
<detaileddescription title=""/>
<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>
<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"/>
<detaileddescription title=""/>
<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>
<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>
<briefdescription visible="yes"/>
<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=""/>
<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=""/>
<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>

15
doc/mainpage.md

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
Serd is a lightweight and dependency-free C library for RDF serialisation which
supports [Turtle], [NTriples], [NQuads], and [TriG].
The complete API is documented in the [serd](@ref serd) group. It revolves
around two main types: @ref SerdReader, which reads text and fires callbacks,
and @ref SerdWriter, which writes text when driven by corresponding functions.
Both work in a streaming fashion but still support pretty-printing, so the pair
can be used to pretty-print, translate, or otherwise process arbitrarily large
documents very quickly. The stream context is maintained by @ref SerdEnv,
which stores the current base URI and set of namespace prefixes.
[Turtle]: http://www.w3.org/TR/turtle/
[NTriples]: http://www.w3.org/TR/n-triples/
[NQuads]: http://www.w3.org/TR/n-quads/
[TriG]: http://www.w3.org/TR/trig/

11
doc/serd.rst

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
####
Serd
####
Serd is a lightweight and dependency-free C library for RDF serialisation which
supports Turtle_, NTriples_, NQuads_, and TriG_.
.. _Turtle: http://www.w3.org/TR/turtle/
.. _NTriples: http://www.w3.org/TR/n-triples/
.. _NQuads: http://www.w3.org/TR/n-quads/
.. _TriG: http://www.w3.org/TR/trig/

808
doc/style.css

@ -1,808 +0,0 @@ @@ -1,808 +0,0 @@
body {
background: #FFF;
color: #222;
font-style: normal;
line-height: 1.6em;
margin-left: auto;
margin-right: auto;
padding: 1em;
max-width: 60em;
font-family: "SF Pro Text", Verdana, "DejaVu Sans", sans-serif;
text-rendering: optimizeLegibility;
}
h1 {
font-size: 1.68em;
font-weight: 500;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
line-height: 2em;
margin: 0 0 0.25em 0;
}
h2 {
line-height: 1.68em;
font-size: 1.41em;
font-weight: 600;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
margin: 1.25em 0 0.5em 0;
}
h3 {
line-height: 1.41em;
font-size: 1.18em;
font-weight: 600;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
margin: 1.25em 0 0.5em 0;
}
h4 {
line-height: 1.18em;
font-size: 1em;
font-weight: 600;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
margin: 1.25em 0 0.5em 0;
}
h5, h6 {
font-size: 0.7em;
font-weight: 600;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
margin: 1.25em 0 0.5em 0;
}
a {
color: #546E00;
text-decoration: none;
}
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
color: #444;
}
a:hover {
text-decoration: underline;
}
h1 a:link, h2 a:link, h3 a:link, h4 a:link, h5 a:link, h6 a:link {
color: #444;
}
h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited {
color: #444;
}
p {
margin: 0.5em 0 0.5em 0;
}
dt {
font-weight: 600;
}
dd {
margin-left: 2em;
}
caption {
font-weight: 700;
}
.title, #projectname {
line-height: 1.0125em;
margin: 0.75em 0 0 0;
}
.titlearea .header .titlebox, #projectname {
font-size: 1.68em;
font-weight: 400;
margin-bottom: 0.25em;
margin-top: 0;
}
#header {
padding: 0 0 0.5em 0;
border-bottom: 1px solid #EEE;
}
.header .headertitle .title {
line-height: 1.68em;
font-size: 1.68em;
font-weight: 600;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
}
.ingroups {
display: none;
}
.title .ingroups a {
font-size: small;
margin-left: 1em;
}
#titlebox, #metabox {
display: inline-block;
}
#titlebox {
display: inline-block;
width: 75%;
left: 0;
top: 0;
}
#title {
margin-bottom: 0.25em;
line-height: 1.25em;
font-size: 2.5em;
color: #333;
font-weight: 600;
}
.PageDoc {
margin-top: 1.5em;
}
.PageDoc .header .headertitle .title {
display: none;
}
#shortdesc {
margin: 0;
color: #666;
display: inline-block;
font-style: italic;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
padding: 0;
}
#titlearea {
margin: 0.25em auto 0 auto;
padding: 0;
position: relative;
clear: both;
line-height: 1em;
}
.legend {
font-size: small;
text-align: center;
}
.version {
font-size: small;
text-align: center;
}
div.qindex,div.navtab {
background-color: #EBEFF6;
border: 1px solid #A3B4D7;
text-align: center;
margin: 2px;
padding: 2px;
}
div.navtab {
margin-right: 15px;
}
.contents a:visited {
color: #344E00;
}
a.qindexHL {
background-color: #9CAFD4;
color: #FFF;
border: 1px double #869DCA;
}
code {
color: #444;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
}
dl.el {
margin-left: -1cm;
}
.fragment {
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
}
pre.fragment {
border: 1px solid #C4C4C4;
background-color: #F9F9F9;
padding: 0.5em;
overflow: auto;
}
div.ah {
background-color: #000;
font-weight: 700;
color: #FFF;
margin-bottom: 3px;
margin-top: 3px;
padding: 0.2em;
border: thin solid #333;
}
div.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: 700;
}
a + h2.groupheader {
display: none;
}
div.groupText {
margin-left: 16px;
font-style: italic;
}
div.contents, #content {
max-width: 60em;
margin-left: auto;
margin-right: auto;
}
.groupheader + p {
font-style: italic;
color: #666;
margin: 0 0 1em 0;
}
td.indexkey {
background-color: #EBEFF6;
font-weight: 700;
border: 1px solid #C4CFE5;
margin: 2px 0;
padding: 2px 10px;
}
td.indexvalue {
background-color: #EBEFF6;
border: 1px solid #C4CFE5;
padding: 2px 10px;
margin: 2px 0;
}
table.memname {
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
border-spacing: 0;
}
table.memname tbody tr:last-child {
display: none;
}
table.memname tbody tr:only-child {
display: table-cell;
}
table.memname tbody tr:nth-last-child(2)::after {
content: ")";
}
tr.memlist {
background-color: #EEF1F7;
}
p.formulaDsp {
text-align: center;
}
img.formulaInl {
vertical-align: middle;
}
div.center {
text-align: center;
margin-top: 0;
margin-bottom: 0;
padding: 0;
}
div.center img {
border: 0;
}
address.footer {
text-align: right;
}
img.footer {
border: 0;
vertical-align: middle;
}
span.keyword {
color: #586E75;
}
span.keywordtype {
color: #546E00;
}
span.keywordflow {
color: #586E75;
}
span.comment {
color: #6C71C4;
}
span.preprocessor {
color: #D33682;
}
span.stringliteral {
color: #CB4B16;
}
span.charliteral {
color: #CB4B16;
}
td.tiny {
font-size: x-small;
}
.dirtab {
padding: 4px;
border-collapse: collapse;
border: 1px solid #A3B4D7;
}
th.dirtab {
background: #EBEFF6;
font-weight: 700;
}
hr {
height: 0;
border: none;
border-top: 1px solid #DDD;
margin: 2em 0;
}
#footer {
bottom: 0;
clear: both;
font-size: x-small;
margin: 2em 0 0;
padding: 0 1em 1em 1em;
vertical-align: top;
color: #888;
}
td.ititle {
padding-bottom: 0.75em;
}
table.memberdecls {
border-spacing: 0.125em;
line-height: 1.3em;
}
.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,.memTemplItemLeft,.memTemplItemRight,.memTemplParams {
margin: 0;
padding: 0;
}
.mdescLeft,.mdescRight {
color: #555;
}
.memItemLeft,.memItemRight,.memTemplParams {
border: 0;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
}
.memItemLeft,.memTemplItemLeft {
white-space: nowrap;
padding-left: 2em;
}
.memItemLeft a.el {
font-weight: bold;
}
.memTemplParams {
color: #464646;
white-space: nowrap;
}
td.memSeparator {
display: none;
}
td.mlabels-right {
color: #B4C342;
font-weight: normal;
margin-left: 1em;
}
.memtitle {
display: none;
}
.memtemplate {
color: #888;
font-style: italic;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
font-size: small;
}
.memnav {
background-color: #EEE;
border: 1px solid #B4C342;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
.memitem {
padding: 0.5em 0.5em 0.25em 0.5em;
margin: 1em 0 2em 0;
}
.memproto {
border-bottom: 1px solid #EEE;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
font-size: 1.09em;
font-weight: 600;
line-height: 1.41em;
margin-bottom: 0.25em;
padding-bottom: 0.125em;
}
.memproto .paramname {
font-style: normal;
padding-right: 0.25em;
}
.memdoc {
padding: 0;
}
.memdoc > p:first-child, .memdoc .textblock > p:first-child {
font-style: italic;
color: #444;
margin-bottom: 0.75em;
}
.paramkey {
text-align: right;
}
.paramtype {
color: #666;
padding: 0 0.25em 0 0.25em;
white-space: nowrap;
}
.params .paramname {
color: #111;
white-space: nowrap;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
font-style: italic;
padding-right: 0.5em;
vertical-align: top;
}
.fieldname {
color: #000;
}
.fieldtable {
margin-top: 1.0em;
border-collapse: collapse;
}
.fieldtable tbody tr:first-child {
display: none;
}
td.fieldname {
vertical-align: top;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
}
td.fielddoc {
padding: 0.125em 0.5em 0 0.25em;
vertical-align: top;
}
.fieldtable tbody tr td {
border-top: 1px dashed #DDD;
border-bottom: 1px dashed #DDD;
}
td.fieldtype {
color: #666;
padding: 0 0.5em 0 0;
vertical-align: top;
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
}
td.fielddoc p {
margin: 0;
padding: 0 0.5em 0 0;
}
p.reference {
font-size: x-small;
font-style: italic;
}
.ftvtree {
font-family: "DejaVu Sans", Verdana, Helvetica, Arial, sans-serif;
margin: 0;
}
.directory {
margin: 0.5em;
}
.directory h3 {
margin: 0;
margin-top: 1em;
font-size: 11pt;
}
.directory > h3 {
margin-top: 0;
}
.directory p {
margin: 0;
white-space: nowrap;
}
.directory div {
display: none;
margin: 0;
}
.directory img {
vertical-align: -30%;
}
td.entry {
font-family: "DejaVu Sans", Verdana, Helvetica, Arial, sans-serif;
font-weight: 400;
padding-right: 1em;
}
.arrow {
color: #CCC;
user-select: none;
font-size: 80%;
display: inline-block;
width: 16px;
height: 22px;
vertical-align: top;
}
td.entry b {
font-family: "DejaVu Sans", Verdana, Helvetica, Arial, sans-serif;
font-weight: 400;
font-size: 130%;
}
.directory-alt {
font-size: 100%;
font-weight: bold;
}
.directory-alt h3 {
margin: 0;
margin-top: 1em;
font-size: 11pt;
}
.directory-alt > h3 {
margin-top: 0;
}
.directory-alt p {
margin: 0;
white-space: nowrap;
}
.directory-alt div {
display: none;
margin: 0;
}
.directory-alt img {
vertical-align: -30%;
}
div.dynheader {
margin-top: 8px;
}
address {
font-style: normal;
color: #444;
}
table.doxtable {
border-collapse: collapse;
margin: 0.5em;
}
table.doxtable td,table.doxtable th {
border: 1px solid #DDD;
padding: 3px 7px 2px;
}
table.doxtable th {
background-color: #F3F3F3;
color: #000;
padding-bottom: 4px;
padding-top: 5px;
text-align: left;
font-weight: bold;
}
.tabsearch {
top: 0;
left: 10px;
height: 36px;
z-index: 101;
overflow: hidden;
font-size: 13px;
}
div.navpath {
color: #DDD;
}
.navpath ul {
overflow: hidden;
margin: 0;
padding: 0;
}
.navpath li {
float: left;
padding-left: 0;
margin-left: 0.5em;
padding-right: 1em;
}
.navpath a {
display: block;
text-decoration: none;
outline: none;
}
div.summary {
font-size: small;
font-family: "DejaVu Sans", Verdana, Helvetica, Arial, sans-serif;
margin: 0;
padding: 0.25em 0;
display: none;
}
div.summary a {
white-space: nowrap;
}
#metabox {
display: inline-block;
font-size: x-small;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
position: absolute;
right: 0;
bottom: 0.25em;
color: #666;
font-style: italic;
}
#meta {
border-style: hidden;
margin-right: 0.25em;
}
#meta tr, #meta th, #meta td {
background-color: transparent;
border: 0;
margin: 0;
font-weight: normal;
}
#meta th {
text-align: right;
}
#meta th::after {
content: ":";
}
div.line {
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
line-height: 1.4em;
white-space: pre-wrap;
}
.glow {
background-color: #2AA198;
box-shadow: 0 0 10px #2AA198;
}
span.lineno {
padding-right: 4px;
text-align: right;
border-right: 2px solid #546E00;
background-color: #E8E8E8;
white-space: pre;
}
span.lineno a {
background-color: #D8D8D8;
}
span.lineno a:hover {
background-color: #C8C8C8;
}
.tabs, .tabs2, .navpath {
padding: 0.25em 0;
font-size: small;
font-family: Helvetica, Arial, "DejaVu Sans Condensed", Verdana, sans-serif;
margin: 0;
}
th {
text-align: left;
font-size: 110%;
font-weight: 500;
}
.mlabel {
padding: 0.125em;
}
#navrow1, #navrow2 {
/* Disable menu from Doxygen 1.8.15, it is faked in the template */
display: none;
}
.tablist {
margin: 0;
padding: 0;
display: table;
}
.tablist li {
display: table-cell;
line-height: 2em;
list-style: none;
border-bottom: 0;
}
.tablist a {
display: block;
padding: 0 1em 0 0;
text-decoration: none;
outline: none;
}
.tabs3 .tablist a {
padding: 0 10px;
}
.tablist li.current a {
color: #222;
}
span.icon {
display: none;
}

16
include/serd/serd.h

@ -258,7 +258,7 @@ void @@ -258,7 +258,7 @@ void
serd_free(void* SERD_NULLABLE ptr);
/**
@name String Utilities
@defgroup string String Utilities
@{
*/
@ -312,7 +312,7 @@ serd_base64_decode(const uint8_t* SERD_NONNULL str, @@ -312,7 +312,7 @@ serd_base64_decode(const uint8_t* SERD_NONNULL str,
/**
@}
@name Byte Streams
@defgroup streams Byte Streams
@{
*/