first
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
/html/*
|
||||
/latex/*
|
||||
@@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="34.342606mm"
|
||||
height="15.300875mm"
|
||||
viewBox="0 0 34.342606 15.300875"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.2 (unknown)"
|
||||
sodipodi:docname="CLI11.svg"
|
||||
inkscape:export-filename="/data/CLI11_300.png"
|
||||
inkscape:export-xdpi="222.62143"
|
||||
inkscape:export-ydpi="222.62143">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.206433"
|
||||
inkscape:cx="93.996945"
|
||||
inkscape:cy="15.843961"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1347"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="1"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-53.018986,-23.9019)">
|
||||
<g
|
||||
id="g4602"
|
||||
transform="rotate(-0.28559572,70.190289,31.552338)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3732"
|
||||
transform="scale(0.26458333)"
|
||||
d="m 233.33789,90.337891 -32.95117,28.619139 31.94726,28.91406 64.9004,0.29688 32.95117,-28.61914 -31.94727,-28.914064 z"
|
||||
style="fill:#008080;stroke-width:0.54128456" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:0.3148967;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 62.120274,24.413292 -8.32335,7.065988 8.069765,7.138804 16.393615,0.0733 8.32335,-7.065988 -8.069768,-7.138806 z"
|
||||
id="path3774" />
|
||||
</g>
|
||||
<g
|
||||
id="g4609"
|
||||
transform="translate(-0.43472687)">
|
||||
<path
|
||||
inkscape:transform-center-y="0.00020894337"
|
||||
inkscape:transform-center-x="0.0229185"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3730"
|
||||
d="m 60.964519,27.804182 c 0.886395,-0.348655 1.859691,-0.390207 2.74248,-0.111952 0.651274,0.210103 1.042699,0.454066 1.576252,0.972044 l -1.506657,0.592635 c -0.744252,-0.446473 -1.423964,-0.497745 -2.270962,-0.164583 -0.738662,0.290549 -1.26082,0.814436 -1.498695,1.510755 -0.203801,0.580557 -0.182185,1.300104 0.05025,1.891033 0.534609,1.359137 2.079298,2.048044 3.418738,1.521183 0.699266,-0.275052 1.11846,-0.713017 1.465328,-1.565931 l 1.585527,-0.623658 c -0.04824,1.554281 -1.023053,2.892949 -2.510224,3.47792 -2.127345,0.836779 -4.497206,-0.187252 -5.322363,-2.28505 -0.809661,-2.058401 0.211919,-4.404734 2.270322,-5.214396 z"
|
||||
style="fill:#ffffff;stroke-width:0.14321487" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3728"
|
||||
transform="scale(0.26458333)"
|
||||
d="m 253.49609,104.47266 h 5.48047 v 24.32031 h 9.03906 v 5.24023 h -14.51953 z"
|
||||
style="fill:#ffffff;stroke-width:0.54128456" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3726"
|
||||
transform="scale(0.26458333)"
|
||||
d="m 271.07422,104.47266 h 5.48047 v 29.56054 h -5.48047 z"
|
||||
style="fill:#ffffff;stroke-width:0.54128456" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3724"
|
||||
transform="scale(0.26458333)"
|
||||
d="m 294.68555,104.47266 v 29.56054 h -5.32032 v -24.56054 h -3.71875 z"
|
||||
style="fill:#ffffff;stroke-width:0.54128456" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3705"
|
||||
transform="scale(0.26458333)"
|
||||
d="m 305.76758,104.47266 v 29.56054 h -5.32031 v -24.56054 h -3.71875 z"
|
||||
style="fill:#ffffff;stroke-width:0.54128456" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 9.7 KiB |
@@ -0,0 +1,11 @@
|
||||
# Run the real Doxyfile (same config as the published docs: impl/ headers,
|
||||
# book chapters, doxygen-awesome styling). All paths in the Doxyfile are
|
||||
# relative to the repo root, and OUTPUT_DIRECTORY is empty, so the output
|
||||
# lands in html/ at the repo root (gitignored).
|
||||
add_custom_target(
|
||||
docs
|
||||
COMMAND ${CMAKE_COMMAND} -E env CLI11_VERSION=${CLI11_VERSION} $<TARGET_FILE:Doxygen::doxygen>
|
||||
"${PROJECT_SOURCE_DIR}/docs/Doxyfile"
|
||||
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
|
||||
COMMENT "Generating API documentation with Doxygen (output: ${PROJECT_SOURCE_DIR}/html)"
|
||||
VERBATIM)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,267 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<doxygenlayout version="2.0">
|
||||
<!-- Generated by doxygen 1.17.0 -->
|
||||
<!-- Navigation index tabs for HTML output -->
|
||||
<navindex>
|
||||
<tab type="mainpage" visible="yes" title="Introduction"/>
|
||||
<tab type="pages" visible="no" title="" intro=""/>
|
||||
<tab type="usergroup" title="Guide" url="[none]">
|
||||
<tab type="user" url="book-installation.html" title="Installation"/>
|
||||
<tab type="user" url="book-basics.html" title="The Basics"/>
|
||||
<tab type="user" url="book-flags.html" title="Adding Flags"/>
|
||||
<tab type="user" url="book-options.html" title="Options"/>
|
||||
<tab type="user" url="book-validators.html" title="Validators"/>
|
||||
<tab type="user" url="book-subcommands.html" title="Subcommands and the App"/>
|
||||
<tab type="user" url="book-option-groups.html" title="Option groups"/>
|
||||
<tab type="user" url="book-config.html" title="Accepting configure files"/>
|
||||
<tab type="user" url="book-formatting.html" title="Formatting help output"/>
|
||||
<tab type="user" url="book-unicode.html" title="Unicode support"/>
|
||||
<tab type="user" url="book-toolkits.html" title="Using CLI11 in a Toolkit"/>
|
||||
<tab type="user" url="book-advanced-topics.html" title="Advanced topics"/>
|
||||
<tab type="user" url="book-internals.html" title="CLI11 Internals"/>
|
||||
</tab>
|
||||
<tab type="usergroup" title="Examples" url="[none]">
|
||||
<tab type="user" url="book-an-advanced-example.html" title="Making a git clone"/>
|
||||
<tab type="user" url="book-modules-example.html" title="Using CLI11 as a C++20 module"/>
|
||||
<tab type="user" url="example-programs.html" title="Example programs"/>
|
||||
</tab>
|
||||
<tab type="usergroup" title="API Reference" url="[none]">
|
||||
<tab type="topics" visible="yes" title="Errors & Validators" 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>
|
||||
<tab type="user" url="changelog.html" title="Changelog"/>
|
||||
</navindex>
|
||||
|
||||
<!-- Layout definition for a class page -->
|
||||
<class>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_HEADERFILE"/>
|
||||
<inheritancegraph visible="yes"/>
|
||||
<collaborationgraph visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestedclasses visible="yes" title=""/>
|
||||
<publictypes visible="yes" title=""/>
|
||||
<services visible="yes" title=""/>
|
||||
<interfaces visible="yes" title=""/>
|
||||
<publicslots visible="yes" title=""/>
|
||||
<signals visible="yes" title=""/>
|
||||
<publicmethods visible="yes" title=""/>
|
||||
<publicstaticmethods visible="yes" title=""/>
|
||||
<publicattributes visible="yes" title=""/>
|
||||
<publicstaticattributes visible="yes" title=""/>
|
||||
<protectedtypes visible="yes" title=""/>
|
||||
<protectedslots visible="yes" title=""/>
|
||||
<protectedmethods visible="yes" title=""/>
|
||||
<protectedstaticmethods visible="yes" title=""/>
|
||||
<protectedattributes visible="yes" title=""/>
|
||||
<protectedstaticattributes visible="yes" title=""/>
|
||||
<packagetypes visible="yes" title=""/>
|
||||
<packagemethods visible="yes" title=""/>
|
||||
<packagestaticmethods visible="yes" title=""/>
|
||||
<packageattributes visible="yes" title=""/>
|
||||
<packagestaticattributes visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
<events visible="yes" title=""/>
|
||||
<privatetypes visible="yes" title=""/>
|
||||
<privateslots visible="yes" title=""/>
|
||||
<privatemethods visible="yes" title=""/>
|
||||
<privatestaticmethods visible="yes" title=""/>
|
||||
<privateattributes visible="yes" title=""/>
|
||||
<privatestaticattributes visible="yes" title=""/>
|
||||
<friends visible="yes" title=""/>
|
||||
<related visible="yes" title="" subtitle=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
<memberdef>
|
||||
<inlineclasses visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<services visible="yes" title=""/>
|
||||
<interfaces visible="yes" title=""/>
|
||||
<constructors visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<related visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
<events visible="yes" title=""/>
|
||||
</memberdef>
|
||||
<allmemberslink visible="yes"/>
|
||||
<usedfiles visible="$SHOW_USED_FILES"/>
|
||||
<authorsection visible="yes"/>
|
||||
</class>
|
||||
|
||||
<!-- Layout definition for a namespace page -->
|
||||
<namespace>
|
||||
<briefdescription visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestednamespaces visible="yes" title=""/>
|
||||
<constantgroups visible="yes" title=""/>
|
||||
<interfaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<concepts visible="yes" title=""/>
|
||||
<structs visible="yes" title=""/>
|
||||
<exceptions visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<sequences visible="yes" title=""/>
|
||||
<dictionaries visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
<memberdef>
|
||||
<inlineclasses visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<sequences visible="yes" title=""/>
|
||||
<dictionaries visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</namespace>
|
||||
|
||||
<!-- Layout definition for a concept page -->
|
||||
<concept>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_HEADERFILE"/>
|
||||
<definition visible="yes" title=""/>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
<authorsection visible="yes"/>
|
||||
</concept>
|
||||
|
||||
<!-- Layout definition for a file page -->
|
||||
<file>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<includegraph visible="yes"/>
|
||||
<includedbygraph visible="yes"/>
|
||||
<sourcelink visible="yes"/>
|
||||
<memberdecl>
|
||||
<interfaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<structs visible="yes" title=""/>
|
||||
<exceptions visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<concepts visible="yes" title=""/>
|
||||
<constantgroups visible="yes" title=""/>
|
||||
<defines visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<sequences visible="yes" title=""/>
|
||||
<dictionaries visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
<memberdef>
|
||||
<inlineclasses visible="yes" title=""/>
|
||||
<defines visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<sequences visible="yes" title=""/>
|
||||
<dictionaries visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
</memberdef>
|
||||
<authorsection/>
|
||||
</file>
|
||||
|
||||
<!-- Layout definition for a group page -->
|
||||
<group>
|
||||
<briefdescription visible="yes"/>
|
||||
<groupgraph visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestedgroups visible="yes" title=""/>
|
||||
<modules visible="yes" title=""/>
|
||||
<dirs visible="yes" title=""/>
|
||||
<files visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<concepts visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<defines visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<sequences visible="yes" title=""/>
|
||||
<dictionaries visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<enumvalues visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<signals visible="yes" title=""/>
|
||||
<publicslots visible="yes" title=""/>
|
||||
<protectedslots visible="yes" title=""/>
|
||||
<privateslots visible="yes" title=""/>
|
||||
<events visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
<friends visible="yes" title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
<memberdef>
|
||||
<pagedocs/>
|
||||
<inlineclasses visible="yes" title=""/>
|
||||
<defines visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<sequences visible="yes" title=""/>
|
||||
<dictionaries visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<enumvalues visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<signals visible="yes" title=""/>
|
||||
<publicslots visible="yes" title=""/>
|
||||
<protectedslots visible="yes" title=""/>
|
||||
<privateslots visible="yes" title=""/>
|
||||
<events visible="yes" title=""/>
|
||||
<properties visible="yes" title=""/>
|
||||
<friends visible="yes" title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</group>
|
||||
|
||||
<!-- Layout definition for a C++20 module page -->
|
||||
<module>
|
||||
<briefdescription visible="yes"/>
|
||||
<exportedmodules visible="yes"/>
|
||||
<memberdecl>
|
||||
<concepts visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<enums visible="yes" title=""/>
|
||||
<typedefs visible="yes" title=""/>
|
||||
<functions visible="yes" title=""/>
|
||||
<variables visible="yes" title=""/>
|
||||
<membergroups visible="yes" title=""/>
|
||||
</memberdecl>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
<memberdecl>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
</module>
|
||||
|
||||
<!-- Layout definition for a directory page -->
|
||||
<directory>
|
||||
<briefdescription visible="yes"/>
|
||||
<directorygraph visible="yes"/>
|
||||
<memberdecl>
|
||||
<dirs visible="yes"/>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription visible="yes" title=""/>
|
||||
</directory>
|
||||
</doxygenlayout>
|
||||
@@ -0,0 +1,138 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
Copyright (c) 2021 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
class DoxygenAwesomeDarkModeToggle extends HTMLElement {
|
||||
// SVG icons from https://fonts.google.com/icons
|
||||
// Licensed under the Apache 2.0 license:
|
||||
// https://www.apache.org/licenses/LICENSE-2.0.html
|
||||
static lightModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FCBF00"><rect fill="none" height="24" width="24"/><circle cx="12" cy="12" opacity=".3" r="3"/><path d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg>`
|
||||
static darkModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FE9700"><rect fill="none" height="24" width="24"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27 C17.45,17.19,14.93,19,12,19c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z" opacity=".3"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg>`
|
||||
static title = "Toggle Light/Dark Mode"
|
||||
|
||||
static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode"
|
||||
static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode"
|
||||
|
||||
static _staticConstructor = function() {
|
||||
DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference)
|
||||
// Update the color scheme when the browsers preference changes
|
||||
// without user interaction on the website.
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
|
||||
DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
|
||||
})
|
||||
// Update the color scheme when the tab is made visible again.
|
||||
// It is possible that the appearance was changed in another tab
|
||||
// while this tab was in the background.
|
||||
document.addEventListener("visibilitychange", visibilityState => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
|
||||
}
|
||||
});
|
||||
}()
|
||||
|
||||
static init() {
|
||||
$(function() {
|
||||
$(document).ready(function() {
|
||||
const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle')
|
||||
toggleButton.title = DoxygenAwesomeDarkModeToggle.title
|
||||
toggleButton.updateIcon()
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
|
||||
toggleButton.updateIcon()
|
||||
})
|
||||
document.addEventListener("visibilitychange", visibilityState => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
toggleButton.updateIcon()
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
|
||||
})
|
||||
$(window).resize(function(){
|
||||
document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.onclick=this.toggleDarkMode
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns `true` for dark-mode, `false` for light-mode system preference
|
||||
*/
|
||||
static get systemPreference() {
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns `true` for dark-mode, `false` for light-mode user preference
|
||||
*/
|
||||
static get userPreference() {
|
||||
return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) ||
|
||||
(DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey))
|
||||
}
|
||||
|
||||
static set userPreference(userPreference) {
|
||||
DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference
|
||||
if(!userPreference) {
|
||||
if(DoxygenAwesomeDarkModeToggle.systemPreference) {
|
||||
localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true)
|
||||
} else {
|
||||
localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)
|
||||
}
|
||||
} else {
|
||||
if(!DoxygenAwesomeDarkModeToggle.systemPreference) {
|
||||
localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true)
|
||||
} else {
|
||||
localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)
|
||||
}
|
||||
}
|
||||
DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged()
|
||||
}
|
||||
|
||||
static enableDarkMode(enable) {
|
||||
if(enable) {
|
||||
DoxygenAwesomeDarkModeToggle.darkModeEnabled = true
|
||||
document.documentElement.classList.add("dark-mode")
|
||||
document.documentElement.classList.remove("light-mode")
|
||||
} else {
|
||||
DoxygenAwesomeDarkModeToggle.darkModeEnabled = false
|
||||
document.documentElement.classList.remove("dark-mode")
|
||||
document.documentElement.classList.add("light-mode")
|
||||
}
|
||||
}
|
||||
|
||||
static onSystemPreferenceChanged() {
|
||||
DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference
|
||||
DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
|
||||
}
|
||||
|
||||
static onUserPreferenceChanged() {
|
||||
DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
|
||||
}
|
||||
|
||||
toggleDarkMode() {
|
||||
DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference
|
||||
this.updateIcon()
|
||||
}
|
||||
|
||||
updateIcon() {
|
||||
if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) {
|
||||
this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon
|
||||
} else {
|
||||
this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle);
|
||||
@@ -0,0 +1,107 @@
|
||||
/* SPDX-License-Identifier: MIT */
|
||||
/**
|
||||
|
||||
Doxygen Awesome
|
||||
https://github.com/jothepro/doxygen-awesome-css
|
||||
|
||||
Copyright (c) 2021 - 2025 jothepro
|
||||
|
||||
*/
|
||||
|
||||
html {
|
||||
/* side nav width. MUST be = `TREEVIEW_WIDTH`.
|
||||
* Make sure it is wide enough to contain the page title (logo + title + version)
|
||||
*/
|
||||
--side-nav-fixed-width: 335px;
|
||||
--menu-display: none;
|
||||
|
||||
--top-height: 120px;
|
||||
--toc-sticky-top: -25px;
|
||||
--toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px);
|
||||
}
|
||||
|
||||
#projectname {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
html {
|
||||
--searchbar-background: var(--page-background-color);
|
||||
}
|
||||
|
||||
#side-nav {
|
||||
min-width: var(--side-nav-fixed-width);
|
||||
max-width: var(--side-nav-fixed-width);
|
||||
top: var(--top-height);
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
#nav-tree,
|
||||
#side-nav {
|
||||
height: calc(100vh - var(--top-height)) !important;
|
||||
}
|
||||
|
||||
#top {
|
||||
display: block;
|
||||
border-bottom: none;
|
||||
height: var(--top-height);
|
||||
margin-bottom: calc(0px - var(--top-height));
|
||||
max-width: var(--side-nav-fixed-width);
|
||||
overflow: hidden;
|
||||
background: var(--side-nav-background);
|
||||
}
|
||||
|
||||
#main-nav {
|
||||
float: left;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.ui-resizable-handle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui-resizable-e {
|
||||
width: 0;
|
||||
}
|
||||
|
||||
#nav-path {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
left: calc(var(--side-nav-fixed-width) + 1px);
|
||||
bottom: 0;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#doc-content {
|
||||
height: calc(100vh - 31px) !important;
|
||||
padding-bottom: calc(3 * var(--spacing-large));
|
||||
padding-top: calc(var(--top-height) - 80px);
|
||||
box-sizing: border-box;
|
||||
margin-left: var(--side-nav-fixed-width) !important;
|
||||
}
|
||||
|
||||
#MSearchBox {
|
||||
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)));
|
||||
}
|
||||
|
||||
#MSearchField {
|
||||
width: calc(
|
||||
var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px
|
||||
);
|
||||
}
|
||||
|
||||
#MSearchResultsWindow {
|
||||
left: var(--spacing-medium) !important;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
#nav-sync {
|
||||
bottom: 4px;
|
||||
right: auto;
|
||||
left: 300px;
|
||||
width: 35px;
|
||||
top: auto !important;
|
||||
user-select: none;
|
||||
position: fixed;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
||||
/* CLI11 tweaks on top of doxygen-awesome (sidebar-only layout). */
|
||||
|
||||
/* doxygen-awesome hides the sidebar expander arrows until hover, which makes
|
||||
collapsed sections (Guide, Examples, API Reference) easy to miss. Keep them
|
||||
visible. */
|
||||
html {
|
||||
--side-nav-arrow-opacity: 0.4;
|
||||
--side-nav-arrow-hover-opacity: 0.9;
|
||||
|
||||
/* The theme reserves --top-height for the sidebar header (title + search).
|
||||
Its 120px default is a few pixels too short for our logo + two-line brief,
|
||||
which clips the bottom of the search bar. */
|
||||
--top-height: 140px;
|
||||
}
|
||||
|
||||
/* The sidebar header already shows the project name, so the always-expanded
|
||||
"CLI11" root node in the navtree is redundant. Hide its row and shift the
|
||||
remaining rows left one indent level (the tree indents 16px per level with
|
||||
inline padding, so a fixed negative margin promotes every row equally). */
|
||||
#nav-tree-contents > ul > li > div.item {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#nav-tree-contents ul.children_ul .arrow {
|
||||
margin-left: -16px;
|
||||
}
|
||||
|
||||
/* Place the dark-mode toggle in the top-right corner of the sidebar header. */
|
||||
#titlearea {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
doxygen-awesome-dark-mode-toggle {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 8px;
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
# Example programs {#example-programs}
|
||||
|
||||
The [`examples/`][examples] directory holds small, complete programs. Each one
|
||||
builds and runs on its own, so you can copy a file into your project and change
|
||||
it. Build them with the `CLI11_BUILD_EXAMPLES` CMake option, which is on by
|
||||
default when CLI11 is the top level project.
|
||||
|
||||
Read @ref book-an-advanced-example for a step by step walkthrough of a larger
|
||||
program.
|
||||
|
||||
## Start here
|
||||
|
||||
`minimal.cpp` is the smallest program that parses and exits correctly. Use it as
|
||||
a starting point for a new application:
|
||||
|
||||
\include minimal.cpp
|
||||
|
||||
`simple.cpp` adds options, a flag, and a version flag, and shows how to read the
|
||||
values and the counts back after the parse:
|
||||
|
||||
\include simple.cpp
|
||||
|
||||
## Options and flags
|
||||
|
||||
| Example | Shows |
|
||||
| ---------------------------- | ------------------------------------------------------------ |
|
||||
| [array_option.cpp][] | An option that fills a `std::array` |
|
||||
| [digit_args.cpp][] | Numbered flags (`-1` to `-9`) with values attached |
|
||||
| [enum.cpp][] | An option that takes an `enum class` value |
|
||||
| [enum_ostream.cpp][] | A custom `operator<<` for an `enum class` in help and errors |
|
||||
| [ranges.cpp][] | Options that accept a range of values |
|
||||
| [retired.cpp][] | Retired and deprecated options |
|
||||
| [inter_argument_order.cpp][] | Recovery of the original order of unlimited arguments |
|
||||
| [custom_parse.cpp][] | A custom lexical cast for a user type |
|
||||
|
||||
## Validators
|
||||
|
||||
| Example | Shows |
|
||||
| ----------------------------- | -------------------------------------------------- |
|
||||
| [validators.cpp][] | The built in `ExistingFile` and `Range` validators |
|
||||
| [custom_validator.cpp][] | A `CLI::Validator` subclass |
|
||||
| [date_validator.cpp][] | A `CLI::CustomValidator` built from a lambda |
|
||||
| [positional_validation.cpp][] | Validators that select between positionals |
|
||||
|
||||
## Subcommands and groups
|
||||
|
||||
| Example | Shows |
|
||||
| -------------------------- | ------------------------------------------------------ |
|
||||
| [subcommands.cpp][] | Basic subcommands and `--help-all` |
|
||||
| [subcom_help.cpp][] | A required argument on a subcommand |
|
||||
| [subcom_partitioned.cpp][] | Subcommands built as separate `CLI::App_p` objects |
|
||||
| [subcom_in_files][] | A subcommand defined in its own source and header file |
|
||||
| [shapes.cpp][] | Repeated subcommands with immediate callbacks |
|
||||
| [nested.cpp][] | Nested subcommands |
|
||||
| [groups.cpp][] | Help groups |
|
||||
| [option_groups.cpp][] | Option groups and the requirements between them |
|
||||
| [positional_arity.cpp][] | Option groups that select on the number of positionals |
|
||||
|
||||
## Help output
|
||||
|
||||
| Example | Shows |
|
||||
| ------------------- | ------------------------------------------------ |
|
||||
| [formatter.cpp][] | A `CLI::Formatter` subclass |
|
||||
| [help_usage.cpp][] | A custom usage line and wide character support |
|
||||
| [modhelp.cpp][] | Help printed after the parse, with option values |
|
||||
| [close_match.cpp][] | A "did you mean" message for an unknown option |
|
||||
|
||||
## Configuration files
|
||||
|
||||
| Example | Shows |
|
||||
| ------------------ | --------------------------------------------------------------- |
|
||||
| [config_app.cpp][] | Reading a configuration file and printing the result |
|
||||
| [json.cpp][] | A JSON configuration file, with [nlohmann/json][] as the parser |
|
||||
|
||||
## Passing arguments on
|
||||
|
||||
| Example | Shows |
|
||||
| ---------------------------- | ----------------------------------------------- |
|
||||
| [prefix_command.cpp][] | `prefix_command` on the main application |
|
||||
| [arg_capture.cpp][] | `prefix_command` on a subcommand, with an alias |
|
||||
| [callback_passthrough.cpp][] | A callback that parses the remaining arguments |
|
||||
| [testEXE.cpp][] | Arguments collected for another program |
|
||||
|
||||
[examples]: https://github.com/CLIUtils/CLI11/tree/main/examples
|
||||
[nlohmann/json]: https://github.com/nlohmann/json
|
||||
[arg_capture.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/arg_capture.cpp
|
||||
[array_option.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/array_option.cpp
|
||||
[callback_passthrough.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/callback_passthrough.cpp
|
||||
[close_match.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/close_match.cpp
|
||||
[config_app.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/config_app.cpp
|
||||
[custom_parse.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/custom_parse.cpp
|
||||
[custom_validator.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/custom_validator.cpp
|
||||
[date_validator.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/date_validator.cpp
|
||||
[digit_args.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/digit_args.cpp
|
||||
[enum.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/enum.cpp
|
||||
[enum_ostream.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/enum_ostream.cpp
|
||||
[formatter.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/formatter.cpp
|
||||
[groups.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/groups.cpp
|
||||
[help_usage.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/help_usage.cpp
|
||||
[inter_argument_order.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/inter_argument_order.cpp
|
||||
[json.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/json.cpp
|
||||
[modhelp.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/modhelp.cpp
|
||||
[nested.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/nested.cpp
|
||||
[option_groups.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/option_groups.cpp
|
||||
[positional_arity.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/positional_arity.cpp
|
||||
[positional_validation.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/positional_validation.cpp
|
||||
[prefix_command.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/prefix_command.cpp
|
||||
[ranges.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/ranges.cpp
|
||||
[retired.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/retired.cpp
|
||||
[shapes.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/shapes.cpp
|
||||
[subcom_help.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/subcom_help.cpp
|
||||
[subcom_in_files]:
|
||||
https://github.com/CLIUtils/CLI11/tree/main/examples/subcom_in_files
|
||||
[subcom_partitioned.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/subcom_partitioned.cpp
|
||||
[subcommands.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/subcommands.cpp
|
||||
[testEXE.cpp]: https://github.com/CLIUtils/CLI11/blob/main/examples/testEXE.cpp
|
||||
[validators.cpp]:
|
||||
https://github.com/CLIUtils/CLI11/blob/main/examples/validators.cpp
|
||||
@@ -0,0 +1,123 @@
|
||||
<!-- HTML header for doxygen 1.17.0-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||
<meta name="generator" content="Doxygen $doxygenversion"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
|
||||
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
|
||||
<!--BEGIN PROJECT_ICON-->
|
||||
<link rel="icon" href="$relpath^$projecticon" type="image/x-icon" />
|
||||
<!--END PROJECT_ICON-->
|
||||
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<!--BEGIN FULL_SIDEBAR-->
|
||||
<script type="text/javascript">var page_layout=1;</script>
|
||||
<!--END FULL_SIDEBAR-->
|
||||
<!--BEGIN HTML_DYNAMIC_SECTIONS-->
|
||||
<script type="text/javascript" src="$relpath^dynsections.js"></script>
|
||||
<!--END HTML_DYNAMIC_SECTIONS-->
|
||||
<!--BEGIN HTML_CODE_FOLDING-->
|
||||
<script type="text/javascript" src="$relpath^codefolding.js"></script>
|
||||
<!--END HTML_CODE_FOLDING-->
|
||||
<!--BEGIN COPY_CLIPBOARD-->
|
||||
<script type="text/javascript" src="$relpath^clipboard.js"></script>
|
||||
<!--END COPY_CLIPBOARD-->
|
||||
$treeview
|
||||
$search
|
||||
$mathjax
|
||||
$darkmode
|
||||
$mermaidjs
|
||||
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||
$extrastylesheet
|
||||
<script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script>
|
||||
<script type="text/javascript">
|
||||
// jQuery-free replacement for DoxygenAwesomeDarkModeToggle.init();
|
||||
// doxygen >= 1.12 no longer ships jquery.js.
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
const toggleButton = document.createElement("doxygen-awesome-dark-mode-toggle")
|
||||
toggleButton.title = DoxygenAwesomeDarkModeToggle.title
|
||||
toggleButton.updateIcon()
|
||||
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
|
||||
toggleButton.updateIcon()
|
||||
})
|
||||
document.addEventListener("visibilitychange", () => {
|
||||
if (document.visibilityState === "visible") {
|
||||
toggleButton.updateIcon()
|
||||
}
|
||||
})
|
||||
document.getElementById("titlearea").appendChild(toggleButton)
|
||||
})
|
||||
// The navtree renders with every group collapsed except the current
|
||||
// page's path. Start the top-level groups (Guide, Examples, API
|
||||
// Reference) open. The tree is built asynchronously, so wait for it to
|
||||
// appear.
|
||||
window.addEventListener("load", () => {
|
||||
const expandTopLevel = () => {
|
||||
const items = document.querySelectorAll(
|
||||
"#nav-tree-contents > ul > li > ul > li > .item")
|
||||
if (!items.length) return false
|
||||
items.forEach((item) => {
|
||||
const arrow = item.querySelector(".arrowhead.closed")
|
||||
if (arrow) arrow.closest("a").click()
|
||||
})
|
||||
return true
|
||||
}
|
||||
if (expandTopLevel()) return
|
||||
const contents = document.getElementById("nav-tree-contents")
|
||||
if (!contents) return
|
||||
const observer = new MutationObserver(() => {
|
||||
if (expandTopLevel()) observer.disconnect()
|
||||
})
|
||||
observer.observe(contents, { childList: true, subtree: true })
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!--BEGIN FULL_SIDEBAR-->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<!--END FULL_SIDEBAR-->
|
||||
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
|
||||
<!--BEGIN TITLEAREA-->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr id="projectrow">
|
||||
<!--BEGIN PROJECT_LOGO-->
|
||||
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"$logosize/></td>
|
||||
<!--END PROJECT_LOGO-->
|
||||
<!--BEGIN PROJECT_NAME-->
|
||||
<td id="projectalign">
|
||||
<div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber"> $projectnumber</span><!--END PROJECT_NUMBER-->
|
||||
</div>
|
||||
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
|
||||
</td>
|
||||
<!--END PROJECT_NAME-->
|
||||
<!--BEGIN !PROJECT_NAME-->
|
||||
<!--BEGIN PROJECT_BRIEF-->
|
||||
<td>
|
||||
<div id="projectbrief">$projectbrief</div>
|
||||
</td>
|
||||
<!--END PROJECT_BRIEF-->
|
||||
<!--END !PROJECT_NAME-->
|
||||
<!--BEGIN DISABLE_INDEX-->
|
||||
<!--BEGIN SEARCHENGINE-->
|
||||
<!--BEGIN !FULL_SIDEBAR-->
|
||||
<td>$searchbox</td>
|
||||
<!--END !FULL_SIDEBAR-->
|
||||
<!--END SEARCHENGINE-->
|
||||
<!--END DISABLE_INDEX-->
|
||||
</tr>
|
||||
<!--BEGIN SEARCHENGINE-->
|
||||
<!--BEGIN FULL_SIDEBAR-->
|
||||
<tr><td colspan="2">$searchbox</td></tr>
|
||||
<!--END FULL_SIDEBAR-->
|
||||
<!--END SEARCHENGINE-->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--END TITLEAREA-->
|
||||
<!-- end header part -->
|
||||
@@ -0,0 +1,123 @@
|
||||
# Introduction {#mainpage}
|
||||
|
||||
CLI11 lets you write your own command line programs in C++. The library is
|
||||
designed to be clean, intuitive, but powerful. There are no requirements beyond
|
||||
C++11 support (and even `<regex>` support not required). It works on Mac, Linux,
|
||||
and Windows, and has 100% test coverage on all three systems. You can simply
|
||||
drop in a single header file (`CLI11.hpp` available in [releases][]) to use
|
||||
CLI11 in your own application. Other ways to integrate it into a build system
|
||||
are listed in the [README][].
|
||||
|
||||
The library was inspired by the Python libraries [Plumbum][] and [Click][], and
|
||||
incorporates many of their user friendly features.
|
||||
|
||||
The syntax is simple and scales from a basic application to a massive physics
|
||||
analysis with multiple models and many parameters and switches. For example,
|
||||
this is a simple program that has an optional parameter that defaults to 0:
|
||||
|
||||
```text
|
||||
$ ./a.out
|
||||
Parameter value: 0
|
||||
|
||||
$ ./a.out -p 4
|
||||
Parameter value: 4
|
||||
|
||||
$ ./a.out --help
|
||||
App description
|
||||
Usage: ./a.out [OPTIONS]
|
||||
|
||||
Options:
|
||||
-h,--help Print this help message and exit
|
||||
-p INT Parameter
|
||||
```
|
||||
|
||||
Like any good command line application, help is provided. This program can be
|
||||
implemented in only a few lines:
|
||||
|
||||
\include intro.cpp
|
||||
|
||||
[Source code](https://github.com/CLIUtils/CLI11/blob/main/book/code/intro.cpp)
|
||||
|
||||
Unlike some other libraries, this is enough to exit correctly and cleanly if
|
||||
help is requested or if incorrect arguments are passed. You can try this example
|
||||
out for yourself. To compile with GCC:
|
||||
|
||||
```text
|
||||
c++ -std=c++11 intro.cpp
|
||||
```
|
||||
|
||||
Much more complicated options are handled elegantly:
|
||||
|
||||
```cpp
|
||||
std::string file;
|
||||
app.add_option("-f,--file", file, "Require an existing file")
|
||||
->required()
|
||||
->check(CLI::ExistingFile);
|
||||
```
|
||||
|
||||
You can use any valid type; the above example could have used a
|
||||
`boost::file_system` file instead of a `std::string`. The value is a real value
|
||||
and does not require any special lookups to access. You do not have to risk
|
||||
typos by repeating the values after parsing like some libraries require. The
|
||||
library also handles positional arguments, flags, fixed or unlimited repeating
|
||||
options, interdependent options, flags, custom validators, help groups, and
|
||||
more.
|
||||
|
||||
You can use subcommands, as well. Subcommands support callback lambda functions
|
||||
when parsed, or they can be checked later. You can infinitely nest subcommands,
|
||||
and each is a full `App` instance, supporting everything listed above.
|
||||
|
||||
Reading/producing `.ini` files for configuration is also supported, as is using
|
||||
environment variables as input. The base `App` can be subclassed and customized
|
||||
for use in a toolkit (like [GooFit][]). All the standard shell idioms, like
|
||||
`--`, work as well.
|
||||
|
||||
The guide chapters in the sidebar walk through the library step by step,
|
||||
starting with [installation](@ref book-installation) and a first program. The
|
||||
examples section shows complete programs: the @ref book-an-advanced-example
|
||||
walkthrough, and @ref example-programs, an index of the programs that ship with
|
||||
CLI11. Feel free to contribute to [the guide here][cli11guide] if something can
|
||||
be improved!
|
||||
|
||||
## API reference
|
||||
|
||||
The main classes are:
|
||||
|
||||
| Name | Where used |
|
||||
| -------------- | --------------------------------------------------------- |
|
||||
| CLI::Option | Options, stored in the app |
|
||||
| CLI::App | The main application or subcommands |
|
||||
| CLI::Validator | A check that can affect the type name |
|
||||
| CLI::Formatter | A subclassable formatter for help printing |
|
||||
| CLI::ExitCode | A scoped enum with exit codes |
|
||||
| CLI::Timer | A timer class, only in CLI/Timer.hpp (not in `CLI11.hpp`) |
|
||||
| CLI::AutoTimer | A timer that prints on deletion |
|
||||
|
||||
Groups of related topics:
|
||||
|
||||
| Name | Description |
|
||||
| -------------------- | ---------------------------------------------- |
|
||||
| @ref error_group | Errors that can be thrown |
|
||||
| @ref validator_group | Common validators used in CLI::Option::check() |
|
||||
|
||||
Full indexes:
|
||||
|
||||
- [Errors & Validators](topics.html)
|
||||
- [Namespace List](namespaces.html)
|
||||
- [Class List](annotated.html)
|
||||
|
||||
## About
|
||||
|
||||
CLI11 was developed at the [University of Cincinnati][] in support of the
|
||||
[GooFit][] library under [NSF Award 1414736][nsf 1414736]. It was featured in a
|
||||
[DIANA/HEP][] meeting at CERN. Please give it a try! Feedback is always welcome.
|
||||
|
||||
[goofit]: https://github.com/GooFit/GooFit
|
||||
[diana/hep]: https://diana-hep.org
|
||||
[releases]: https://github.com/CLIUtils/CLI11/releases
|
||||
[readme]: https://github.com/CLIUtils/CLI11/blob/main/README.md
|
||||
[nsf 1414736]: https://nsf.gov/awardsearch/showAward?AWD_ID=1414736
|
||||
[university of cincinnati]: https://www.uc.edu
|
||||
[cli11guide]: https://github.com/CLIUtils/CLI11/tree/main/book
|
||||
[plumbum]: https://plumbum.readthedocs.io/en/latest/
|
||||
[click]: https://click.palletsprojects.com
|
||||
Reference in New Issue
Block a user