The Configuration File
Mr.Docs uses a configuration file to control how the documentation is generated. The file is used to specify options such as the generator to use, additional compilation options, and filters.
Here’s an example of a configuration file:
source-root: ../include
multipage: false
generator: adoc
The Usage page provides a detailed explanation of what to combine options from the configuration file and the command line.
The Reference section provides a detailed explanation of the options available.
More information about the generators can be found in the Generators page.
YAML Schema
To get linting and autocompletion in the config file, a schema for the config can be specified. The schema for mrdocs.yml is provided here.
The schema for mrdocs.yml is available from https://www.schemastore.org/json/, which is automatically detected and used by most editors.
To manually set the schema in an editor, the following can be used:
-
In JetBrains IDEs,
# $schema: <url>can be used to bind a schema to a file. -
In editors with plugins based on the YAML language server,
# yaml-language-server: $schema=<url>can be used.
The following shows an example of a file specifying an inline-schema that’s compatible with JetBrains IDEs and editors using the YAML language server.
# $schema: https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json
# yaml-language-server: $schema=https://mrdocs.com/docs/mrdocs/develop/_attachments/mrdocs.schema.json
source-root: ../include
multipage: false
generator: adoc
Build Options
A number of options can be used to specify with which compile options Mr.Docs should be run.
source-root: ..
compilation-database: ../CMakeLists.txt
cmake: '-D MRDOCS_BUILD=ON'
defines: 'MRDOCS_BUILD'
The compile options primarily come from the compilation-database file.
When this file is generated from a CMakeLists.txt script, the cmake option can be used to specify additional options to pass to CMake.
Additionally, the defines option can be used to specify preprocessor definitions that should be used when generating the documentation.
These definitions are included in all targets of the compilation database.
Filters
Not all symbols in a project may be relevant to the documentation. Mr.Docs provides a way to filter out symbols based on their location and names.
File Filters
Symbols can also be filtered based on the files where they are declared. This can be useful for excluding files that exclusively contain implementation details or test code.
The input option is a list of directories to include and a list of file patterns to include. Only symbols in files from these directories will be extracted.
input:
- ../include
The default value for input is "<source-root>/.", so only symbols defined in your project source directory will be extracted.
The file-patterns options allows you to specify a list of glob file patterns to include. Only symbols in files whose filename match these patterns will be extracted.
file-patterns:
- '*.hpp'
- '*.h'
The default value for file-patterns include a variety of common C++ header file extensions.
The exclude option is a list of subdirectories in input we want to exclude. Meanwhile, exclude-patterns can use glob patterns to exclude files from the extraction process.
input:
- ../include
exclude:
- ../include/detail
exclude-patterns:
- ../include/*/detail/**
- ../include/*/impl/**
The glob patterns support the following wildcards:
-
*matches all characters except delimiters/ -
**matches all characters -
?matches any single character. -
[<chars>]matches one character in the bracket. -
[<char>-<char>]matches one character in the bracket range. -
[^<chars>]or[!<chars>]matches one character not in the bracket. -
{<glob>,…}matches one of the globs in the list. -
\escapes the next character so it is treated as a literal.
Symbol Filters
Symbols can also be filtered based on their qualified names. You can use glob patterns to specify which symbols to include or exclude.
include-symbols:
- 'my_library::public_namespace::*'
By default, all symbols are included by include-symbols. The syntax for symbol glob patterns is the same as for file patterns, with the exception that the delimiter :: is used instead of /. So you can match all symbols in a namespace and its subnamespaces with my_library::public_namespace::**.
The option exclude-symbols can be used to exclude symbols from the extraction process.
include-symbols:
- 'my_library::**'
exclude-symbols:
- 'my_library::private_namespace::**'
// excluded by `include-symbols`
void f0();
// included because it matches the prefix of 'my_library::**' in `include-symbols`
namespace my_library
{
// included because it matches the pattern 'my_library::**' in `include-symbols`
void f1();
namespace private_namespace
{
// excluded by the pattern 'my_library::private_namespace::**' in `exclude-symbols`
void f2();
}
}
Private Symbols
The implementation-defined and see-below options can be used to designate symbols as implementation details or "see below" in the documentation.
include-symbols:
- 'my_library::**'
implementation-defined:
- 'my_library::detail::**'
see-below:
- 'my_library::see_below::**'
namespace my_library
{
namespace detail
{
// There's no documentation page for A
// Any reference to `A` is rendered as `/* implementation detail */`
class A {};
}
namespace see_below
{
// The documentation page for B is marked as "see below" and its members are not extracted.
class B {
// There's no documentation page for iterator
class iterator;
};
}
// This function is documented, but the return type is rendered as `/* implementation detail */`
detail::A
foo();
}
Whitelisting Rules
The rules for whitelisting symbols (include-symbols, implementation-defined, and see-below) are less strict than the rules for blacklisting symbols (exclude-symbols). A symbol is considered whitelisted if it matches any of the following conditions:
-
The symbol strictly matches one of the patterns.
-
For instance, the patterns
std::vectorandstd::*both matchstd::vectorstrictly.
-
-
The symbol is a parent namespace of an included symbol.
-
For instance, the pattern
std::filesystem::*also includesstdandstd::filesystem.
-
-
The parent symbol is also included.
-
For instance, the pattern
std::*also matchesstd::vector::iteratorbecausestd::vector::iteratoris a member ofstd::vector, which is matches the pattern.
-
-
The symbol is a child of a literal pattern representing a namespace.
-
For instance, the literal pattern
stdmatchesstd::filesystem::path::iteratorbecausestdis a literal pattern matching a namespace. In other words, these literal patterns represent the namespace and its subnamespaces as if the pattern werestd::**.
-
For exclusion rules, the symbol must strictly match the pattern to be excluded. If a scope is escaped by a pattern, all symbols in that scope are also excluded.
Reference
The following options can be defined both in the configuration file and on the command line, where the command line options always take precedence.
Whenever applicable, the command line options attempt to mirror (i) non-abbreviated (ii) kebab-case variants of the equivalent commands in Doxygen. For instance, the Doxygen EXTRACT_ANON_NSPACES option is mirrored by the extract-anonymous-namespaces command line option.
Command Line Options
Options that can only be provided via the command line
The following options can be used to control the general behavior of Mr.Docs and can only be provided via the command line. These include options to specify inputs and the configuration file, which cannot be set on the configuration file itself.
| Name | Description | Default |
|---|---|---|
cmd-line-inputs
(list of paths) (Command line only) |
Configuration or compilation database files | [] |
config
(file path) (Required, Command line only) |
Mr.Docs configuration file | "<cwd>/mrdocs.yml" |
cmd-line-inputs
Configuration or compilation database files
The inputs are configuration files or compilation database files that used to generate the documentation. When the input ends with mrdocs.yml, it is interpreted as a configuration file, the file is read and the options are used to generate the documentation as if it was provided to the config option. When the input ends with compilation_database.json or CMakeLists.txt, it is interpreted as a compilation database file, the file is read and the compiler flags are used to generate the documentation as if it was provided to the compilation-database option.
- Type: list of paths
- Command line only
- Default value: []
- This command is a command line sink. Any command line argument that is not recognized by the parser will be passed to this command.
config
Mr.Docs configuration file
The configuration file is a YAML file that contains the options used to generate the documentation. The configuration file is read and the options are used to generate the documentation. The configuration file can be used to specify the source code, the output directory, the compilation database, the generator, and the filters.
- Type: file path
- Required
- Command line only
- Default value: "<cwd>/mrdocs.yml"
Paths
Paths to the source code and output directories
| Name | Description | Default |
|---|---|---|
source-root
(directory path) |
Path to the root directory of the source code | "<config-dir>" |
output
(path) |
Directory or file for generating output | "<config-dir>/reference-output" |
compilation-database
(file path) |
Path to the compilation database |
source-root
Path to the root directory of the source code
Path to the root directory of the source code. This path is used as a default for input files and a base for relative paths formed from absolute paths. This should typically be the root directory of the git project, as relative paths formed from it can be used to create links to these source files in the repository. Templates use the base-url option to create links to the source code.
- Type: directory path
- Default value: "<config-dir>"
output
Directory or file for generating output
Multipage generators expect a directory. Single page generators expect a file or a directory where the file will be created. If the directory does not exist, it will be created.
- Type: path
- Default value: "<config-dir>/reference-output"
compilation-database
Path to the compilation database
Path to the compilation database or a build script to generate it. The compilation database is a JSON file that contains the compiler commands used to build the source code. The compilation database is used to extract the compiler flags and the source files used to build the source code and extract symbols. This option also accepts the path to a build script such as CMakeLists.txt to be used to generate the compilation database. In this case, Mr.Docs will look for CMake in PATH or in CMAKE_ROOT and run the script to generate the compilation database file.
- Type: file path
- Default value:
Filters
Filters to include or exclude files and symbols from the documentation
| Name | Description | Default |
|---|---|---|
input
(list of paths) |
Input directories to extract symbols from | ["<source-root>/."] |
recursive
(boolean) |
Recursively include files from "input" paths | true |
file-patterns
(list of path-globs) |
File patterns to include | ["*.hpp", "*.h", "*.hh", "*.ipp", "*.inc", "*.cpp", "*.cc", "*.cxx", "*.c", "*.hxx"] |
exclude
(list of paths) |
Input directories to exclude | [] |
exclude-patterns
(list of path-globs) |
File patterns to exclude | [] |
include-symbols
(list of symbol-globs) |
Symbol patterns to include | [] |
exclude-symbols
(list of symbol-globs) |
Symbol patterns to exclude | [] |
see-below
(list of symbol-globs) |
Exposition only symbols rendered as "see-below". | [] |
implementation-defined
(list of symbol-globs) |
Symbols rendered as "implementation-defined" | [] |
input
Input directories to extract symbols from
Input directories to extract. Only symbols defined in files in these directories are extracted. The paths are relative to the mrdocs configuration file.
- Type: list of paths
- Default value: ["<source-root>/."]
Example
/** Allocate a new packet on the heap. */
int av_packet_alloc(void);
/** Release a packet allocated with `av_packet_alloc`. */
void av_packet_free(void);
// Filtered out: `input: include/libavcodec` scopes extraction to that
// directory, so the format-library functions never enter the corpus.
// The directory matters because both libraries put their declarations
// at global scope under the same `av_*` prefix, so a name-based filter
// could not distinguish them.
int av_open_input_file(void);
void av_close_input_file(void);
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
input:
- include/libavcodec
av_packet_alloc
Allocate a new packet on the heap.
Synopsis
Declared in <libavcodec/avcodec.h>
int
av_packet_alloc();
av_packet_free
Release a packet allocated with av_packet_alloc.
Synopsis
Declared in <libavcodec/avcodec.h>
void
av_packet_free();
recursive
Recursively include files from "input" paths
Recursively include files. When set to true, Mr.Docs includes files in subdirectories of the input directories. When set to false, Mr.Docs includes only the files in the input directories.
- Type: boolean
- Default value: true
Example
namespace cli::detail {
// Filtered out: lives in a subdirectory that `recursive: false`
// skips, so `cli::detail::tokenize` never enters the corpus.
void tokenize(char const* arg);
}
namespace cli {
/** Parses command-line arguments into an option set. */
void parse(int argc, char** argv);
}
#include <cli/parse.hpp>
#include <cli/detail/tokens.hpp>
input:
- include/cli
recursive: false
cli::parse
Parses command‐line arguments into an option set.
Synopsis
Declared in <cli/parse.hpp>
void
parse(
int argc,
char** argv);
file-patterns
File patterns to include
File patterns to include. Only the files that match these patterns are extracted. The patterns are relative to the input directories.
- Type: list of path-globs
- Default value: ["*.hpp", "*.h", "*.hh", "*.ipp", "*.inc", "*.cpp", "*.cc", "*.cxx", "*.c", "*.hxx"]
exclude
Input directories to exclude
Symbols defined in files in these directories are not extracted even if they are in the list of include directories. When relative, the paths are relative to the directory of the mrdocs configuration file. For instance, "include/experimental" will exclude all files in the directory <config-dir>/include/experimental.
- Type: list of paths
- Default value: []
Example
namespace httpd {
/** Start the HTTP server on `port`. */
void start(int port);
/** Stop the running server. */
void stop();
}
// Vendored copy of zlib's public API. Documented upstream at
// https://zlib.net/, not here. `exclude: include/zlib` keeps the
// vendored library out of the rendered docs so it does not appear
// alongside the httpd API.
/* Compress `src` into `dst` using DEFLATE. */
int compress2(unsigned char* dst, unsigned long* dstLen,
unsigned char const* src, unsigned long srcLen,
int level);
/* Decompress a DEFLATE-compressed buffer. */
int uncompress(unsigned char* dst, unsigned long* dstLen,
unsigned char const* src, unsigned long srcLen);
#include <httpd/server.hpp>
#include <zlib/zlib.h>
exclude:
- include/zlib
httpd::start
Start the HTTP server on port.
Synopsis
Declared in <httpd/server.hpp>
void
start(int port);
httpd::stop
Stop the running server.
Synopsis
Declared in <httpd/server.hpp>
void
stop();
exclude-patterns
File patterns to exclude
File patterns to exclude. Files that match these patterns are not extracted even if they are in the list of include directories. The patterns are relative to the configuration file. A single * will match all files in the directory. Double ** will match all files in the directory and its subdirectories.
- Type: list of path-globs
- Default value: []
Example
namespace payments::gen {
struct AuthorizeRequest {};
struct AuthorizeResponse {};
}
namespace payments {
/** Authorize a payment of `amount` against `account`. */
bool authorize(char const* account, double amount);
}
// Generated by the build (protoc, gRPC, OpenAPI, …); do not edit by
// hand. Every component in this project keeps its generated headers
// next to the hand-written ones under a `_generated/` subdirectory,
// so `exclude-patterns: '**/_generated/**'` drops them all at once.
namespace storage::gen {
struct PutRequest {};
struct PutResponse {};
}
namespace storage {
/** Persist a value under `key`. */
void put(char const* key, char const* value);
}
#include <storage/storage.hpp>
#include <storage/_generated/messages.hpp>
#include <payments/payments.hpp>
#include <payments/_generated/messages.hpp>
exclude-patterns:
- '**/_generated/**'
payments::authorize
Authorize a payment of amount against account.
Synopsis
Declared in <payments/payments.hpp>
bool
authorize(
char const* account,
double amount);
storage::put
Persist a value under key.
Synopsis
Declared in <storage/storage.hpp>
void
put(
char const* key,
char const* value);
include-symbols
Symbol patterns to include
If any patterns are defined here, only symbols that match one of these patterns are extracted. The patterns are applied to the fully qualified name of the symbol without any leading "::". A single "*" will match all symbols in the namespace. Double "**" will match all symbols in the namespace and its subnamespaces. The patterns also support "?" for any chars, "[<chars>]" for charsets, "[^<chars>]" for inverted charsets, and "{<glob>,...}" for alternatives.
- Type: list of symbol-globs
- Default value: []
Example
namespace lib {
namespace detail {
/// An internal helper that should not appear in the docs.
int helper();
}
/// The library's only public entry point.
int run();
}
include-symbols:
- 'lib::run'
lib::run
The library's only public entry point.
Synopsis
Declared in <include‐symbols.cpp>
int
run();
exclude-symbols
Symbol patterns to exclude
A symbol that matches one of these patterns is not extracted even if whitelisted by "include-symbols". See the documentation for "include-symbols" for the pattern syntax.
- Type: list of symbol-globs
- Default value: []
Example
namespace jzon::extra {
// Filtered out: `exclude-symbols: 'jzon::extra::**'` drops these
// symbols by qualified name, so the `jzon::extra` namespace and its
// members never enter the rendered docs.
void enable_trace();
void disable_trace();
}
namespace jzon {
/** Validate that the document is well-formed JSON.
Parses `source` without constructing a value tree, reporting only
whether the input conforms to RFC 8259. Comments and trailing
commas are rejected.
@param source A null-terminated UTF-8 JSON document.
@return `true` if the document is syntactically valid JSON, `false`
if any syntactic error is encountered.
*/
bool validate(char const* source);
}
#include <jzon/parser.hpp>
#include <jzon/extra/utilities.hpp>
exclude-symbols:
- 'jzon::extra::**'
jzon::validate
Validate that the document is well‐formed JSON.
Synopsis
Declared in <jzon/parser.hpp>
bool
validate(char const* source);
Description
Parses source without constructing a value tree, reporting only whether the input conforms to RFC 8259. Comments and trailing commas are rejected.
Return Value
true if the document is syntactically valid JSON, false if any syntactic error is encountered.
Parameters
Name |
Description |
source |
A null‐terminated UTF‐8 JSON document. |
see-below
Exposition only symbols rendered as "see-below".
Symbols that match one of these filters are tagged as "see-below" in the documentation, and so do symbols in scopes tagged as "see-below". This option is used to remove details about symbols that are considered part of the private API of the project but the user might need to interact with. In the documentation page for this symbol, the symbol is exposition only: the synopsis of the implementation is rendered as "see-below" and members of scopes (such as a namespace or record) are not listed. The rest of the documentation is rendered as usual to explain the symbol. See the documentation for "include-symbol" for the pattern syntax.
- Type: list of symbol-globs
- Default value: []
Example
namespace netz {
/** A non-owning view of a contiguous byte range.
Used as the parameter and return type for the framing helpers in
`netz::stream` and as the buffer surface presented to async read
handlers. Stores a pointer and a length, and does not extend the
lifetime of the storage it refers to.
*/
class buffer_view
{
public:
unsigned char const* data() const noexcept;
unsigned long size() const noexcept;
};
}
namespace netz {
/** Locate the first complete packet at the start of the buffer.
Scans `input` for a frame boundary. The returned view aliases the
same memory as `input`, so the storage behind `input` must outlive
the returned view.
@param input Bytes received from the stream, up to the caller's
current fill mark.
@return A view of the bytes belonging to the first packet, or an
empty view if no complete packet is present yet.
*/
buffer_view first_packet(buffer_view input);
}
#include <netz/stream.hpp>
see-below:
- 'netz::buffer_view'
netz::buffer_view
A non‐owning view of a contiguous byte range.
Synopsis
Declared in <netz/buffer_view.hpp>
class buffer_view { /* see-below */ };
Description
Used as the parameter and return type for the framing helpers in netz::stream and as the buffer surface presented to async read handlers. Stores a pointer and a length, and does not extend the lifetime of the storage it refers to.
netz::first_packet
Locate the first complete packet at the start of the buffer.
Synopsis
Declared in <netz/stream.hpp>
buffer_view
first_packet(buffer_view input);
Description
Scans input for a frame boundary. The returned view aliases the same memory as input, so the storage behind input must outlive the returned view.
Return Value
A view of the bytes belonging to the first packet, or an empty view if no complete packet is present yet.
Parameters
Name |
Description |
input |
Bytes received from the stream, up to the caller's current fill mark. |
implementation-defined
Symbols rendered as "implementation-defined"
Symbols that match one of these filters are tagged as "implementation-defined" in the documentation, and so do symbols in scopes tagged as "implementation-defined". This option is used to exclude symbols from the documentation that are considered part of the private API of the project. An "implementation-defined" symbol has no documentation page in the output. If any other symbol refers to it, the reference is rendered as "implementation-defined". See the documentation for "include-symbol" for the pattern syntax.
- Type: list of symbol-globs
- Default value: []
Example
namespace logr::detail {
struct scope_token { ~scope_token(); };
}
namespace logr {
/** Attach a key/value pair to every log line in the current scope.
The context stays attached until the returned token is destroyed.
Hold it in `auto`; nested contexts stack and unwind in reverse order.
@par Example
@code
void handle_request(request const& req) {
auto ctx = logr::scoped_context("request_id", req.id);
do_work(req);
}
@endcode
@param key The context name surfaced on each log line.
@param value The context value surfaced on each log line.
@return An opaque RAII token whose lifetime governs how long the pair
stays attached. The type is implementation-defined; store it
in `auto`.
*/
detail::scope_token scoped_context(char const* key, char const* value);
}
#include <logr/log.hpp>
implementation-defined:
- 'logr::detail::**'
logr::scoped_context
Attach a key/value pair to every log line in the current scope.
Synopsis
Declared in <logr/log.hpp>
/* implementation-defined */
scoped_context(
char const* key,
char const* value);
Description
The context stays attached until the returned token is destroyed. Hold it in auto; nested contexts stack and unwind in reverse order.
Example
void handle_request(request const& req) {
auto ctx = logr::scoped_context("request_id", req.id);
do_work(req);
}
Return Value
An opaque RAII token whose lifetime governs how long the pair stays attached. The type is implementation‐defined; store it in auto.
Parameters
Name |
Description |
key |
The context name surfaced on each log line. |
value |
The context value surfaced on each log line. |
Semantic Parsing
Options to control how the source code is parsed
Mr.Docs uses libclang to parse the source code and extract symbols. The following options control how the source code is parsed.
| Name | Description | Default |
|---|---|---|
missing-include-prefixes
(list of strings) |
Include path prefixes allowed to be missing | [] |
missing-include-shims
(map |
Shims for forgiven missing include files | {} |
missing-include-prefixes
Include path prefixes allowed to be missing
Specifies path prefixes for include files that, if missing, will not cause documentation generation to fail. Missing files with these prefixes are served as empty files from an in-memory file system, allowing processing to continue. For example, use "llvm/" to forgive all includes from LLVM. If any such path is specified, MrDocs will attempt to synthesize missing included types. Only simple sets of non-conflicting inferred types can be synthesized. For more complex types or for better control, provide a shim using the "missing-include-shims" option.
- Type: list of strings
- Default value: []
Example
missing-include-prefixes:
- "llvm/"
- "boost/"
missing-include-shims
Shims for forgiven missing include files
Specifies a map of include file paths to shim contents. If a missing include file matches a forgiven prefix, MrDocs will use the shim content from this map as the file contents. If no shim is provided for a forgiven file, an empty file is used by default.
- Type: map
- Default value: {}
Example
missing-include-shims:
"llvm/ADT/StringRef.h": |
namespace llvm { class StringRef; }
"boost/version.hpp": |
#define BOOST_VERSION 108400
Comment Parsing
Options to control how comments are parsed
Mr.Docs extracts metadata from the comments in the source code. The following options control how comments are parsed.
| Name | Description | Default |
|---|---|---|
auto-brief
(boolean) |
Use the first line of the comment as the brief | true |
auto-relates
(boolean) |
Automatically find non-member functions | true |
auto-function-metadata
(boolean) |
Automatically provide missing documentation for special functions and trivial metadata | true |
auto-brief
Use the first line of the comment as the brief
When set to true, Mr.Docs uses the first line (until the first dot, question mark, or exclamation mark) of the comment as the brief of the symbol. When set to false, a explicit @brief command is required.
- Type: boolean
- Default value: true
Example
/** Truncate a string to the given length.
The first sentence of this comment becomes the
brief; the rest is the description.
*/
void truncate(char* s, int n);
auto-brief: true
truncate
Truncate a string to the given length.
Synopsis
Declared in <auto‐brief.cpp>
void
truncate(
char* s,
int n);
Description
The first sentence of this comment becomes the brief; the rest is the description.
auto-relates
Automatically find non-member functions
When set to true, Mr.Docs automatically finds non-member functions that are related to the current class.
- Type: boolean
- Default value: true
Example
/** A two-dimensional point.
*/
struct point
{
double x;
double y;
};
/** Print a point to stdout.
The free function takes `point` as its only
parameter, so it gets attached to `point` as a
related function.
*/
void print(point p);
auto-relates: true
point
A two‐dimensional point.
Synopsis
Declared in <auto‐relates.cpp>
struct point;
Non-Member Functions
Name |
Description |
Print a point to stdout. |
point::x
Synopsis
Declared in <auto‐relates.cpp>
double x;
point::y
Synopsis
Declared in <auto‐relates.cpp>
double y;
Print a point to stdout.
Description
The free function takes point as its only parameter, so it gets attached to point as a related function.
Parameters
Name |
Description |
p |
A two‐dimensional point. |
auto-function-metadata
Automatically provide missing documentation for special functions and trivial metadata
When set to true, Mr.Docs automatically provides documentation for special functions, such as constructors, destructors, and operators. It also provides documentation for missing documentation metadata, such as known types.
- Type: boolean
- Default value: true
Example
/// A 2D vector.
struct vec2
{
/// Construct from `x` and `y` components.
vec2(double x, double y);
vec2(vec2 const&);
vec2(vec2&&) noexcept;
~vec2();
vec2& operator=(vec2 const&);
bool operator==(vec2 const&) const;
/// Returns the Euclidean length of the vector.
double magnitude() const;
/// Translate this vector by `delta`.
vec2 translated(vec2 const& delta) const;
};
auto-function-metadata: true
vec2
A 2D vector.
Synopsis
Declared in <auto‐function‐metadata.cpp>
struct vec2;
vec2::vec2
Construct from x and y components.
Synopses
Declared in <auto‐function‐metadata.cpp>
Copy constructor
Move constructor
Construct from x and y components.
vec2(
double x,
double y);
vec2::vec2
Construct from x and y components.
Synopsis
Declared in <auto‐function‐metadata.cpp>
vec2(
double x,
double y);
Parameters
Name |
Description |
x |
The value to construct from |
vec2::~vec2
Destructor
Synopsis
Declared in <auto‐function‐metadata.cpp>
~vec2();
vec2::operator=
Copy assignment operator
Synopsis
Declared in <auto‐function‐metadata.cpp>
Return Value
Reference to the current object
Parameters
Name |
Description |
other |
The object to copy assign from |
vec2::magnitude
Returns the Euclidean length of the vector.
Synopsis
Declared in <auto‐function‐metadata.cpp>
double
magnitude() const;
Return Value
the Euclidean length of the vector.
vec2::translated
Translate this vector by delta.
Synopsis
Declared in <auto‐function‐metadata.cpp>
Return Value
A 2D vector.
Parameters
Name |
Description |
delta |
A 2D vector. |
Metadata Extraction
Metadata and C++ semantic constructs to extract
MrDocs extracts metadata and C++ semantic constructs from the source code to create the documentation. Semantic constructs are patterns not directly represented in the source code AST but can be inferred from the corpus, such as SFINAE. The following options control the extraction of metadata and C++ semantic constructs.
| Name | Description | Default |
|---|---|---|
extract-all
(boolean) |
Extract all symbols | true |
extract-private
(boolean) |
Extraction policy for private class members | false |
extract-private-virtual
(boolean) |
Extraction policy for private virtual methods of a class | false |
extract-private-bases
(boolean) |
Extraction policy for private base classes | false |
extract-static
(boolean) |
Extraction policy for static members of a file | false |
extract-local-classes
(boolean) |
Extraction policy for records defined locally in source files | true |
extract-anonymous-namespaces
(boolean) |
Extraction policy for anonymous namespaces | true |
extract-empty-namespaces
(boolean) |
Extraction policy for empty namespaces | false |
inherit-base-members
(enum) |
Determine how derived classes inherit base members | "copy-dependencies" |
extract-implicit-specializations
(boolean) |
Implicit template specializations used as base classes are extracted as dependencies | true |
extract-friends
(boolean) |
Extraction policy for friend functions and classes | true |
sort-members
(boolean) |
Sort the members of a record | true |
sort-members-by
(enum) |
Determine how members of a record are sorted | "name" |
sort-namespace-members-by
(enum) |
Determine how members of a namespace are sorted | "name" |
sort-members-ctors-1st
(boolean) |
Sort constructors first | true |
sort-members-dtors-1st
(boolean) |
Sort destructors first | true |
sort-members-assignment-1st
(boolean) |
Sort assignment operators first | true |
sort-members-conversion-last
(boolean) |
Sort conversion operators last | true |
sort-members-relational-last
(boolean) |
Sort relational operators last | true |
extract-all
Extract all symbols
When set to true, MrDocs extracts all symbols from the source code, even if no documentation is provided. MrDocs can only identify whether a symbol is ultimated documented after extracting information from all translation units. For this reason, when this option is set to false, it's still recommendable to provide file and symbol filters so that only the desired symbols are traversed and stored by MrDocs.
- Type: boolean
- Default value: true
Example
/// A documented function.
void documented();
// An undocumented function. The default `extract-all: true`
// would pull it in even without a doc comment; setting
// `extract-all: false` hides it.
void undocumented();
extract-all: false
documented
A documented function.
Synopsis
Declared in <extract‐all.cpp>
void
documented();
extract-private
Extraction policy for private class members
Determine whether private class members should be extracted
- Type: boolean
- Default value: false
Example
/// A class with both public and private members.
class widget
{
public:
/// Display the widget.
void show();
private:
/// An internal counter.
int count;
};
extract-private: true
widget
A class with both public and private members.
Synopsis
Declared in <extract‐private.cpp>
class widget;
Member Functions
Name |
Description |
Display the widget. |
Private Data Members
Name |
Description |
An internal counter. |
widget::show
Display the widget.
Synopsis
Declared in <extract‐private.cpp>
void
show();
widget::count
An internal counter.
Synopsis
Declared in <extract‐private.cpp>
int count;
extract-private-virtual
Extraction policy for private virtual methods of a class
Determine whether private virtual methods of a class should be extracted
- Type: boolean
- Default value: false
Example
/// A base class declaring a virtual `draw` method.
struct shape
{
virtual ~shape() = default;
/// Render the shape.
virtual void draw() = 0;
};
/// A circle implementation.
class circle : public shape
{
public:
/// Construct a circle of the given radius.
explicit circle(double r);
private:
/// The private override of `shape::draw`.
void draw() override;
double radius;
};
extract-private-virtual: true
circle
A circle implementation.
Base Classes
Name |
Description |
A base class declaring a virtual |
Member Functions
Name |
Description |
|
Construct a circle of the given radius. |
|
Render the shape. |
Private Member Functions
Name |
Description |
|
The private override of |
circle::circle
Construct a circle of the given radius.
Synopsis
Declared in <extract‐private‐virtual.cpp>
explicit
circle(double r);
Parameters
Name |
Description |
r |
The value to construct from |
circle::draw
The private override of shape::draw.
Synopsis
Declared in <extract‐private‐virtual.cpp>
virtual
void
draw() override;
shape
A base class declaring a virtual draw method.
Synopsis
Declared in <extract‐private‐virtual.cpp>
struct shape;
Member Functions
Name |
Description |
|
Destructor |
|
Render the shape. |
Derived Classes
Name |
Description |
A circle implementation. |
shape::~shape
Destructor
Synopsis
Declared in <extract‐private‐virtual.cpp>
constexpr
virtual
~shape() = default;
shape::draw
Render the shape.
Synopsis
Declared in <extract‐private‐virtual.cpp>
virtual
void
draw() = 0;
extract-private-bases
Extraction policy for private base classes
Determine whether private base classes should be extracted
- Type: boolean
- Default value: false
Example
/// A logger mixin.
class logger
{
public:
/// Write a message to the log.
void log(const char* msg);
};
/// A widget that privately inherits from `logger`
/// for the logging implementation.
class widget : private logger
{
public:
/// Render the widget and write a log entry.
void show();
};
extract-private-bases: true
logger
A logger mixin.
Synopsis
Declared in <extract‐private‐bases.cpp>
class logger;
Member Functions
Name |
Description |
Write a message to the log. |
logger::log
Write a message to the log.
Synopsis
Declared in <extract‐private‐bases.cpp>
void
log(char const* msg);
widget
A widget that privately inherits from logger for the logging implementation.
Member Functions
Name |
Description |
Render the widget and write a log entry. |
widget::show
Render the widget and write a log entry.
Synopsis
Declared in <extract‐private‐bases.cpp>
void
show();
extract-static
Extraction policy for static members of a file
Determine whether static members of a file should be extracted. This option does not refer to static members of a class.
- Type: boolean
- Default value: false
Example
/// A regular free function.
void run();
/// A static helper with internal linkage. With
/// `extract-static: true` it appears in the docs.
static void warm_caches();
extract-static: true
run
A regular free function.
Synopsis
Declared in <extract‐static.cpp>
void
run();
warm_caches
A static helper with internal linkage. With extract‐static: true it appears in the docs.
Synopsis
Declared in <extract‐static.cpp>
static
void
warm_caches();
extract-local-classes
Extraction policy for records defined locally in source files
Determine whether records only defined locally in source files should be extracted.
- Type: boolean
- Default value: true
Example
/// A function whose local helper class is part of
/// the public interface (its instances escape via
/// the returned visitor).
inline void each()
{
/// Local visitor type.
struct visitor
{
void operator()(int) {}
};
visitor{}(0);
}
extract-local-classes: true
each
A function whose local helper class is part of the public interface (its instances escape via the returned visitor).
Synopsis
Declared in <extract‐local‐classes.cpp>
void
each();
extract-anonymous-namespaces
Extraction policy for anonymous namespaces
Determine whether symbols in anonymous namespaces should be extracted.
- Type: boolean
- Default value: true
Example
namespace lib {
/// A regular public function.
void run();
namespace {
/// A helper with translation-unit-local linkage. With
/// `extract-anonymous-namespaces: true` it shows up
/// in the docs.
void warm_caches();
}
}
extract-anonymous-namespaces: true
lib::run
A regular public function.
Synopsis
Declared in <extract‐anonymous‐namespaces.cpp>
void
run();
lib::warm_caches
A helper with translation‐unit‐local linkage. With extract‐anonymous‐namespaces: true it shows up in the docs.
Synopsis
Declared in <extract‐anonymous‐namespaces.cpp>
void
warm_caches();
extract-empty-namespaces
Extraction policy for empty namespaces
Determine whether empty namespaces without documentation should be extracted.
- Type: boolean
- Default value: false
Example
namespace lib {
/** Greet the user by name. */
void greet(char const* name);
}
// Empty namespace reserved for future expansion. With
// `extract-empty-namespaces: true` it still appears in the docs.
namespace lib::experimental {}
extract-empty-namespaces: true
show-namespaces: true
inherit-base-members
Determine how derived classes inherit base members
Determine how derived classes inherit members of base classes. When set to never, derived classes do not inherit members of base classes and only the relationship is stored. When set to reference, derived classes list members of base classes but references are still linked to the base class. When set to copy-dependencies, a reference is created by default and a copy is created when the base class is a dependency. When set to copy-all, a copy is created for each base symbol as if it was declared in the derived class. If the base class is a dependency, the extraction mode is copied from the new parent.
- Type: enum
- Default value: "copy-dependencies"
- Allowed values: ["never", "reference", "copy-dependencies", "copy-all"]
Example
/// A base shape with one operation.
struct shape
{
/// Render the shape to the screen.
void draw();
};
/// A circle. The `draw` from `shape` is inherited
/// and listed on the circle's page too.
struct circle : shape
{
/// Construct a circle of the given radius.
explicit circle(double r);
};
inherit-base-members: copy-all
circle
A circle. The draw from shape is inherited and listed on the circle's page too.
Base Classes
Name |
Description |
A base shape with one operation. |
circle::circle
Construct a circle of the given radius.
Synopsis
Declared in <inherit‐base‐members.cpp>
explicit
circle(double r);
Parameters
Name |
Description |
r |
The value to construct from |
circle::draw
Render the shape to the screen.
Synopsis
Declared in <inherit‐base‐members.cpp>
void
draw();
shape
A base shape with one operation.
Synopsis
Declared in <inherit‐base‐members.cpp>
struct shape;
Member Functions
Name |
Description |
Render the shape to the screen. |
Derived Classes
Name |
Description |
A circle. The |
shape::draw
Render the shape to the screen.
Synopsis
Declared in <inherit‐base‐members.cpp>
void
draw();
extract-implicit-specializations
Implicit template specializations used as base classes are extracted as dependencies
When set to true, MrDocs extracts implicit template specializations used as base classes as dependencies. This allows MrDocs to extract metadata that can later be used to determine the members of the derived class, as specified by the inherit-base-members option.
- Type: boolean
- Default value: true
Example
/// A simple container template.
template <class T>
struct box
{
/// The contained value.
T value;
};
/// Uses `box<int>`. With
/// `extract-implicit-specializations: true`, that
/// implicit instantiation shows up in the docs as
/// `box<int>` alongside the primary template.
box<int> make_int_box(int v);
extract-implicit-specializations: true
box
A simple container template.
Synopsis
Declared in <extract‐implicit‐specializations.cpp>
template<class T>
struct box;
Data Members
Name |
Description |
The contained value. |
Non-Member Functions
Name |
Description |
Uses |
box::value
The contained value.
Synopsis
Declared in <extract‐implicit‐specializations.cpp>
T value;
make_int_box
Uses box<int>. With extract‐implicit‐specializations: true, that implicit instantiation shows up in the docs as box<int> alongside the primary template.
Synopsis
Declared in <extract‐implicit‐specializations.cpp>
box<int>
make_int_box(int v);
Return Value
A simple container template.
extract-friends
Extraction policy for friend functions and classes
Determine whether friend functions and classes should be extracted. When set to true, MrDocs extracts friend functions and classes. When set to false, friend functions and classes are not extracted.
- Type: boolean
- Default value: true
Example
/// A point in 2D.
struct point
{
double x;
double y;
/// Equality comparison, declared as a friend so it
/// participates in ADL.
friend bool operator==(point a, point b);
};
extract-friends: true
point
A point in 2D.
Synopsis
Declared in <extract‐friends.cpp>
struct point;
Friends
Name |
Description |
Equality comparison, declared as a friend so it participates in ADL. |
point::x
Synopsis
Declared in <extract‐friends.cpp>
double x;
point::y
Synopsis
Declared in <extract‐friends.cpp>
double y;
operator==
Equality comparison, declared as a friend so it participates in ADL.
Synopsis
Declared in <extract‐friends.cpp>
Return Value
true if the objects are equal, false otherwise
Parameters
Name |
Description |
a |
The left operand |
b |
The right operand |
sort-members
Sort the members of a record
When set to true, sort the members of a record by the criterion determined in the sort-members-by option. When set to false, the members are included in the declaration order they are extracted.
- Type: boolean
- Default value: true
Example
/// A class declared with members in deliberately
/// scattered order to show how sorting affects the
/// rendered member list.
struct gadget
{
/// Refresh the gadget.
void refresh();
/// Construct a gadget.
gadget();
/// Hide the gadget.
void hide();
/// Show the gadget.
void show();
/// Destroy the gadget.
~gadget();
};
sort-members: true
gadget
A class declared with members in deliberately scattered order to show how sorting affects the rendered member list.
Synopsis
Declared in <sort‐members.cpp>
struct gadget;
gadget::gadget
Construct a gadget.
Synopsis
Declared in <sort‐members.cpp>
gadget();
gadget::~gadget
Destroy the gadget.
Synopsis
Declared in <sort‐members.cpp>
~gadget();
gadget::hide
Hide the gadget.
Synopsis
Declared in <sort‐members.cpp>
void
hide();
gadget::refresh
Refresh the gadget.
Synopsis
Declared in <sort‐members.cpp>
void
refresh();
gadget::show
Show the gadget.
Synopsis
Declared in <sort‐members.cpp>
void
show();
sort-members-by
Determine how members of a record are sorted
If sort-members is set to true, determine how members of a record are sorted. When set to name, members are sorted by name. When set to location, members are sorted by their primary location in the source code, considering the short name of the path and the location in the file.
- Type: enum
- Default value: "name"
- Allowed values: ["name", "location"]
Example
/// Order members alphabetically by name (instead of
/// the default declaration order).
struct widget
{
/// Refresh the widget.
void refresh();
/// Hide the widget.
void hide();
/// Show the widget.
void show();
};
sort-members: true
sort-members-by: name
widget
Order members alphabetically by name (instead of the default declaration order).
Synopsis
Declared in <sort‐members‐by.cpp>
struct widget;
widget::hide
Hide the widget.
Synopsis
Declared in <sort‐members‐by.cpp>
void
hide();
widget::refresh
Refresh the widget.
Synopsis
Declared in <sort‐members‐by.cpp>
void
refresh();
widget::show
Show the widget.
Synopsis
Declared in <sort‐members‐by.cpp>
void
show();
sort-namespace-members-by
Determine how members of a namespace are sorted
Although members of namespaces are always sorted, determine how members of a namespace are sorted. When set to name, members are sorted by name. When set to location, members are sorted by their primary location in the source code, considering the short name of the path and the location in the file.
- Type: enum
- Default value: "name"
- Allowed values: ["name", "location"]
Example
namespace lib {
/// Initialize the library.
void init();
/// Connect to a remote service.
void connect();
/// Shut everything down.
void shutdown();
}
sort-members: true
sort-namespace-members-by: name
lib::connect
Connect to a remote service.
Synopsis
Declared in <sort‐namespace‐members‐by.cpp>
void
connect();
lib::init
Initialize the library.
Synopsis
Declared in <sort‐namespace‐members‐by.cpp>
void
init();
lib::shutdown
Shut everything down.
Synopsis
Declared in <sort‐namespace‐members‐by.cpp>
void
shutdown();
sort-members-ctors-1st
Sort constructors first
When set to true, constructors are sorted first in the list of members of a record.
- Type: boolean
- Default value: true
Example
/// A class whose constructors should head the
/// rendered member list regardless of where the
/// declarations sit in the source.
struct widget
{
/// Hide the widget.
void hide();
/// Show the widget.
void show();
/// Construct an empty widget.
widget();
/// Construct a widget with the given label.
widget(const char* label);
};
sort-members: true
sort-members-ctors-1st: true
widget
A class whose constructors should head the rendered member list regardless of where the declarations sit in the source.
Synopsis
Declared in <sort‐members‐ctors‐1st.cpp>
struct widget;
widget::widget
Constructors
widget::widget
Construct an empty widget.
Synopsis
Declared in <sort‐members‐ctors‐1st.cpp>
widget();
widget::widget
Construct a widget with the given label.
Synopsis
Declared in <sort‐members‐ctors‐1st.cpp>
widget(char const* label);
Parameters
Name |
Description |
label |
The value to construct from |
widget::hide
Hide the widget.
Synopsis
Declared in <sort‐members‐ctors‐1st.cpp>
void
hide();
widget::show
Show the widget.
Synopsis
Declared in <sort‐members‐ctors‐1st.cpp>
void
show();
sort-members-dtors-1st
Sort destructors first
When set to true, destructors are sorted first in the list of members of a record.
- Type: boolean
- Default value: true
Example
/// A class whose destructor sits at the top of the
/// member list.
struct widget
{
/// Refresh the widget.
void refresh();
/// Construct an empty widget.
widget();
/// Destroy the widget and release resources.
~widget();
};
sort-members: true
sort-members-dtors-1st: true
widget
A class whose destructor sits at the top of the member list.
Synopsis
Declared in <sort‐members‐dtors‐1st.cpp>
struct widget;
widget::widget
Construct an empty widget.
Synopsis
Declared in <sort‐members‐dtors‐1st.cpp>
widget();
widget::~widget
Destroy the widget and release resources.
Synopsis
Declared in <sort‐members‐dtors‐1st.cpp>
~widget();
widget::refresh
Refresh the widget.
Synopsis
Declared in <sort‐members‐dtors‐1st.cpp>
void
refresh();
sort-members-assignment-1st
Sort assignment operators first
When set to true, assignment operators are sorted first in the list of members of a record.
- Type: boolean
- Default value: true
Example
/// A class whose assignment operators should be
/// grouped at the top of the member list.
struct widget
{
/// Refresh the widget.
void refresh();
/// Copy-assign from another widget.
widget& operator=(const widget&);
/// Move-assign from another widget.
widget& operator=(widget&&);
};
sort-members: true
sort-members-assignment-1st: true
widget
A class whose assignment operators should be grouped at the top of the member list.
Synopsis
Declared in <sort‐members‐assignment‐1st.cpp>
struct widget;
Member Functions
Name |
Description |
Assignment operators |
|
Refresh the widget. |
widget::operator=
Assignment operators
Synopses
Declared in <sort‐members‐assignment‐1st.cpp>
Copy‐assign from another widget.
widget&
operator=(widget const& other);
Move‐assign from another widget.
widget&
operator=(widget&& other);
widget::operator=
Copy‐assign from another widget.
Synopsis
Declared in <sort‐members‐assignment‐1st.cpp>
Return Value
Reference to the current object
Parameters
Name |
Description |
other |
The object to copy assign from |
widget::operator=
Move‐assign from another widget.
Synopsis
Declared in <sort‐members‐assignment‐1st.cpp>
Return Value
Reference to the current object
Parameters
Name |
Description |
other |
The object to move assign from |
widget::refresh
Refresh the widget.
Synopsis
Declared in <sort‐members‐assignment‐1st.cpp>
void
refresh();
sort-members-conversion-last
Sort conversion operators last
When set to true, conversion operators are sorted last in the list of members of a record or namespace.
- Type: boolean
- Default value: true
Example
/// A class whose conversion operators are pushed to
/// the bottom of the member list.
struct value
{
/// Read the underlying integer.
int get() const;
/// Convert to `bool` for use in conditions.
explicit operator bool() const;
/// Convert to `int` for arithmetic contexts.
explicit operator int() const;
};
sort-members: true
sort-members-conversion-last: true
value
A class whose conversion operators are pushed to the bottom of the member list.
Synopsis
Declared in <sort‐members‐conversion‐last.cpp>
struct value;
Member Functions
Name |
Description |
Read the underlying integer. |
|
Convert to |
|
Convert to |
value::get
Read the underlying integer.
Synopsis
Declared in <sort‐members‐conversion‐last.cpp>
int
get() const;
value::operator bool
Convert to bool for use in conditions.
Synopsis
Declared in <sort‐members‐conversion‐last.cpp>
explicit
operator bool() const;
Return Value
The object converted to bool
value::operator int
Convert to int for arithmetic contexts.
Synopsis
Declared in <sort‐members‐conversion‐last.cpp>
explicit
operator int() const;
Return Value
The object converted to int
sort-members-relational-last
Sort relational operators last
When set to true, relational operators are sorted last in the list of members of a record or namespace.
- Type: boolean
- Default value: true
Example
/// A class whose relational operators sit at the
/// bottom of the member list.
struct value
{
/// Get the underlying integer.
int get() const;
/// Equality comparison.
bool operator==(const value&) const;
/// Less-than comparison.
bool operator<(const value&) const;
};
sort-members: true
sort-members-relational-last: true
value
A class whose relational operators sit at the bottom of the member list.
Synopsis
Declared in <sort‐members‐relational‐last.cpp>
struct value;
Member Functions
Name |
Description |
Get the underlying integer. |
|
Equality comparison. |
|
Less‐than comparison. |
value::get
Get the underlying integer.
Synopsis
Declared in <sort‐members‐relational‐last.cpp>
int
get() const;
Return Value
the underlying integer.
value::operator==
Equality comparison.
Synopsis
Declared in <sort‐members‐relational‐last.cpp>
bool
operator==(value const& rhs) const;
Return Value
true if the objects are equal, false otherwise
Parameters
Name |
Description |
rhs |
The right operand |
value::operator<
Less‐than comparison.
Synopsis
Declared in <sort‐members‐relational‐last.cpp>
bool
operator<(value const& rhs) const;
Return Value
true if the left object is less than the right object, false otherwise
Parameters
Name |
Description |
rhs |
The right operand |
Semantic Constructs
C++ semantic constructs to extract
Semantic constructs are patterns not directly represented in the source code AST but can be inferred from the corpus, such as SFINAE.
| Name | Description | Default |
|---|---|---|
sfinae
(boolean) |
Detect and reduce SFINAE expressions | true |
overloads
(boolean) |
Detect and group function overloads | true |
sfinae
Detect and reduce SFINAE expressions
When set to true, MrDocs detects SFINAE expressions in the source code and extracts them as part of the documentation. Expressions such as std::enable_if<...> are detected, removed, and documented as a requirement. MrDocs uses an algorithm that extracts SFINAE infomation from types by identifying inspecting the primary template and specializations to detect the result type and the controlling expressions in a specialization.
- Type: boolean
- Default value: true
Example
#include <type_traits>
/** Multiply by two, but only for integers.
The `std::enable_if_t` SFINAE on the return type
restricts the overload to integral arguments.
*/
template <class T>
std::enable_if_t<std::is_integral_v<T>, T>
twice(T x);
sfinae: true
twice
Multiply by two, but only for integers.
Synopsis
Declared in <sfinae.cpp>
template<class T>
T
twice(T x)
requires std::is_integral_v<T>;
Description
The std::enable_if_t SFINAE on the return type restricts the overload to integral arguments.
overloads
Detect and group function overloads
When set to true, MrDocs detects function overloads and groups them as a single symbol type. The documentation for this new symbol comes from the union of non-ambiguous metadata from the functions.
- Type: boolean
- Default value: true
Example
/** Compute the absolute value of an integer.
One overload takes `int` and the other `long`,
so the documentation page lists both side by side.
*/
int abs(int x);
/// @copydoc abs(int)
long abs(long x);
overloads: true
abs
Compute the absolute value of an integer.
abs
Compute the absolute value of an integer.
Synopsis
Declared in <overloads.cpp>
int
abs(int x);
Description
One overload takes int and the other long, so the documentation page lists both side by side.
abs
Compute the absolute value of an integer.
Synopsis
Declared in <overloads.cpp>
long
abs(long x);
Description
One overload takes int and the other long, so the documentation page lists both side by side.
Generators
Generators to create the documentation and their options
| Name | Description | Default |
|---|---|---|
generator
(enum) |
Generator used to create the documentation | "adoc" |
multipage
(boolean) |
Generate a multipage documentation | true |
base-url
(string) |
Base URL for links to source code | |
addons
(path) |
Path to the Addons directory | "<mrdocs-root>/share/mrdocs/addons" |
tagfile
(file path) |
Path for the tagfile | "<output-dir>/reference.tag.xml" |
legible-names
(boolean) |
Use legible names | true |
embedded
(boolean) |
Output an embeddable document | false |
show-namespaces
(boolean) |
Show namespace pages in the documentation | true |
show-enum-constants
(boolean) |
Show enum constant pages in the documentation | false |
global-namespace-index
(boolean) |
Use the global namespace page as an index for all symbols | true |
generator
Generator used to create the documentation
The generator is responsible for creating the documentation from the extracted symbols. The generator uses the extracted symbols and the templates to create the documentation. The generator can create different types of documentation such as HTML, XML, and AsciiDoc.
- Type: enum
- Default value: "adoc"
- Allowed values: ["adoc", "html", "xml"]
Example
/// Multiply two integers.
int multiply(int a, int b);
generator: adoc
multiply
Multiply two integers.
Synopsis
Declared in <generator.cpp>
int
multiply(
int a,
int b);
multipage
Generate a multipage documentation
Generates a multipage documentation. The output directory must be a directory. This option acts as a hint to the generator to create a multipage documentation. Whether the hint is followed or not depends on the generator.
- Type: boolean
- Default value: true
Example
multipage: true
base-url
Base URL for links to source code
Base URL for links to source code. The base URL is used to create links to the source code in the documentation. The base URL is combined with the path to the source file to create the link.
- Type: string
- Default value:
Example
/** Compute the area of a circle of radius `r`. */
double area(double r);
base-url: https://github.com/example/geom/blob/main/
area
Compute the area of a circle of radius r.
addons
Path to the Addons directory
Path to the Addons directory. The Addons directory contains the template files used by generators to create the documentation. When a custom Addons directory is not specified, the default templates are used. The default templates are located at the share/mrdocs/addons directory of the MrDocs installation. Users can create custom templates by copying the default templates to a custom directory and specifying the custom directory using this option.
- Type: path
- Default value: "<mrdocs-root>/share/mrdocs/addons"
tagfile
Path for the tagfile
Specifies the full path (filename) where the generated tagfile should be saved. If left empty, no tagfile will be generated.
- Type: file path
- Default value: "<output-dir>/reference.tag.xml"
legible-names
Use legible names
Use legible names for ids in the documentation. When set to true, MrDocs uses legible names for symbols in the documentation. These are symbols that are legible but still safe for URLs. When the option is set to false, MrDocs uses a hash of the symbol ID.
- Type: boolean
- Default value: true
Example
multipage: true
legible-names: true
embedded
Output an embeddable document
Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document. This option is useful for producing documents that can be inserted into an external template.
- Type: boolean
- Default value: false
show-namespaces
Show namespace pages in the documentation
When set to true, MrDocs creates a page for each namespace in the documentation.
- Type: boolean
- Default value: true
Example
/// A tiny example library.
///
/// Holds the entry points the documentation calls out
/// and a few helpers consumed by the rest of the project.
namespace lib {
/// A function inside `lib`. With `show-namespaces: true`
/// the namespace appears in the rendered output as a
/// dedicated entry; with `false` the namespace is
/// flattened into the parent.
void run();
}
show-namespaces: true
Global namespace
Namespaces
Name |
Description |
A tiny example library. |
lib
A tiny example library.
Description
Holds the entry points the documentation calls out and a few helpers consumed by the rest of the project.
Functions
Name |
Description |
A function inside |
lib::run
A function inside lib. With show‐namespaces: true the namespace appears in the rendered output as a dedicated entry; with false the namespace is flattened into the parent.
Synopsis
Declared in <show‐namespaces.cpp>
void
run();
show-enum-constants
Show enum constant pages in the documentation
When set to true, MrDocs creates a page for each enum constant in the documentation.
- Type: boolean
- Default value: false
Example
/// Status of a network operation.
enum class status
{
/// Operation succeeded.
ok,
/// Operation timed out.
timeout,
/// Operation failed for another reason.
error,
};
show-enum-constants: true
status
Status of a network operation.
Synopsis
Declared in <show‐enum‐constants.cpp>
enum class status : int;
status::ok
Operation succeeded.
Synopsis
Declared in <show‐enum‐constants.cpp>
ok
status::timeout
Operation timed out.
Synopsis
Declared in <show‐enum‐constants.cpp>
timeout
status::error
Operation failed for another reason.
Synopsis
Declared in <show‐enum‐constants.cpp>
error
global-namespace-index
Use the global namespace page as an index for all symbols
When set to true, the page for the global namespace will recursively list all symbols in the documentation, not just those in the global namespace. This makes the global namespace page act as an index for the entire project.
- Type: boolean
- Default value: true
Build options
Options for building the source code
When MrDocs is responsible to running the build scripts and generating the compilation database, these options are used to build the source code.
| Name | Description | Default |
|---|---|---|
cmake
(string) |
CMake arguments when generating the compilation database from CMakeLists.txt | |
defines
(list of strings) |
Additional defines passed to the compiler | [] |
use-system-stdlib
(boolean) |
Use the system C++ standard library | false |
stdlib-includes
(list of paths) |
C++ Standard Library include paths | ["<mrdocs-root>/share/mrdocs/headers/libcxx", "<mrdocs-root>/share/mrdocs/headers/clang"] |
use-system-libc
(boolean) |
Use the system C standard library | false |
libc-includes
(list of paths) |
Standard Library include paths | ["<mrdocs-root>/share/mrdocs/headers/libc-stubs"] |
system-includes
(list of paths) |
System include paths | [] |
includes
(list of paths) |
Include paths | [] |
cmake
CMake arguments when generating the compilation database from CMakeLists.txt
When the compilation-database option is a CMakeLists.txt file, these arguments are passed to the cmake command to generate the compilation_database.json.
- Type: string
- Default value:
defines
Additional defines passed to the compiler
Additional defines passed to the compiler when building the source code. These defines are added to the compilation database regardless of the strategy to generate it.
- Type: list of strings
- Default value: []
use-system-stdlib
Use the system C++ standard library
To achieve reproducible results, MrDocs bundles the LibC++ headers. To use the C++ standard library available in the system instead, set this option to true.
- Type: boolean
- Default value: false
stdlib-includes
C++ Standard Library include paths
When use-system-stdlib is disabled, the C++ standard library headers are available in these paths.
- Type: list of paths
- Default value: ["<mrdocs-root>/share/mrdocs/headers/libcxx", "<mrdocs-root>/share/mrdocs/headers/clang"]
use-system-libc
Use the system C standard library
To achieve reproducible results, MrDocs bundles the LibC headers with its definitions. To use the C standard library available in the system instead, set this option to true.
- Type: boolean
- Default value: false
libc-includes
Standard Library include paths
When use-system-libc is disabled, the C standard library headers are available in these paths.
- Type: list of paths
- Default value: ["<mrdocs-root>/share/mrdocs/headers/libc-stubs"]
system-includes
System include paths
System include paths. These paths are used to add directories to the system include search path. The system include search path is used to search for system headers. The system headers are headers that are provided by the system and are not part of the project. The system headers are used to provide the standard library headers and other system headers. The system headers are not part of the project and are not checked for warnings and errors.
- Type: list of paths
- Default value: []
includes
Include paths
Include paths. These paths are used to add directories to the include search path. The include search path is used to search for headers. The headers are used to provide declarations and definitions of symbols. The headers are part of the project and are checked for warnings and errors.
- Type: list of paths
- Default value: []
Warnings
Warnings and progress messages
| Name | Description | Default |
|---|---|---|
verbose
(boolean) |
Verbose output | false |
report
(unsigned integer) (Deprecated) |
The minimum reporting level | -1 |
log-level
(enum) |
The minimum reporting level | "info" |
warnings
(boolean) |
Enable warning messages | true |
warn-if-undocumented
(boolean) |
Warn if symbols are not documented | true |
warn-if-doc-error
(boolean) |
Warn if documentation has errors | true |
warn-no-paramdoc
(boolean) |
Warn if parameters are not documented | true |
warn-unnamed-param
(boolean) |
Warn if documented functions have unnamed parameters | false |
warn-if-undoc-enum-val
(boolean) |
Warn if enum values are not documented | true |
warn-broken-ref
(boolean) |
Warn if a documentation reference is broken | true |
warn-as-error
(boolean) |
Treat warnings as errors | false |
verbose
Verbose output
Verbose output. When set to true, MrDocs outputs additional information during the generation of the documentation.
- Type: boolean
- Default value: false
report
The minimum reporting level
The reporting level determines the amount of information displayed during the generation of the documentation. The value -1 delegates the decision to the log-level option.
- Deprecated: Use
log-levelinstead - Type: unsigned integer
- Default value: -1
- Minimum value: -1
- Maximum value: 5
log-level
The minimum reporting level
The reporting level determines the amount of information displayed during the generation of the documentation.
- Type: enum
- Default value: "info"
- Allowed values: ["trace", "debug", "info", "warn", "error", "fatal"]
warnings
Enable warning messages
When set to true, MrDocs outputs warning messages during the generation of the documentation. It is usually recommended to enable warnings while writing the documentation.
- Type: boolean
- Default value: true
warn-if-undocumented
Warn if symbols are not documented
When set to true, MrDocs outputs a warning message if a symbol that passes all filters is not documented.
- Type: boolean
- Default value: true
warn-if-doc-error
Warn if documentation has errors
When set to true, MrDocs outputs a warning message if the documentation of a symbol has errors such as duplicate parameters and parameters that don't exist.
- Type: boolean
- Default value: true
warn-no-paramdoc
Warn if parameters are not documented
When set to true, MrDocs outputs a warning message if a named function parameter is not documented.
- Type: boolean
- Default value: true
warn-unnamed-param
Warn if documented functions have unnamed parameters
When set to true, MrDocs outputs a warning message if a documented function has a parameter that is not named.
- Type: boolean
- Default value: false
warn-if-undoc-enum-val
Warn if enum values are not documented
When set to true, MrDocs outputs a warning message if an enum value is not documented.
- Type: boolean
- Default value: true
warn-broken-ref
Warn if a documentation reference is broken
When set to true, MrDocs outputs a warning message if a reference in the documentation is broken.
- Type: boolean
- Default value: true
warn-as-error
Treat warnings as errors
When set to true, MrDocs treats warnings as errors and stops the generation of the documentation.
- Type: boolean
- Default value: false
Miscellaneous
Miscellaneous options
| Name | Description | Default |
|---|---|---|
concurrency
(unsigned integer) (Command line only) |
Number of threads to use | 0 |
ignore-map-errors
(boolean) |
Continue if files are not mapped correctly | false |
ignore-failures
(boolean) |
Whether AST visitation failures should not stop the program | false |
concurrency
Number of threads to use
The desired level of concurrency: 0 for hardware-suggested.
- Type: unsigned integer
- Command line only
- Default value: 0
- Minimum value: 0
ignore-map-errors
Continue if files are not mapped correctly
When set to true, MrDocs continues to generate the documentation even if some files are not mapped correctly. Files are not mapped correctly when the source file is not found or the compilation database does not contain the compiler flags for the source file.
- Type: boolean
- Default value: false
ignore-failures
Whether AST visitation failures should not stop the program
When set to true, MrDocs continues to generate the documentation even if there are AST visitation failures. AST visitation failures occur when the source code contains constructs that are not supported by MrDocs.
- Type: boolean
- Default value: false