From b4b33f971f6e10e6ac17e1813194b62686ec74e5 Mon Sep 17 00:00:00 2001 From: Andrey Zherikov Date: Fri, 21 Jun 2024 00:01:32 -0400 Subject: [PATCH] New documentation --- .github/workflows/build.yaml | 2 +- .github/workflows/docs.yaml | 99 ++++ .gitignore | 1 - docs/ad.tree | 45 ++ docs/c.list | 6 + docs/cfg/buildprofiles.xml | 12 + docs/code_snippets/allowed_values.d | 14 + docs/code_snippets/ansiStylingArgument.d | 20 + docs/code_snippets/arity.d | 13 + docs/code_snippets/arity_no_values.d | 19 + docs/code_snippets/call_parser1.d | 18 + docs/code_snippets/call_parser2.d | 27 ++ docs/code_snippets/call_parser3.d | 21 + docs/code_snippets/call_parser4.d | 19 + docs/code_snippets/call_parser5.d | 13 + docs/code_snippets/config_addHelp.d | 18 + docs/code_snippets/config_arraySep.d | 16 + docs/code_snippets/config_assignChar.d | 12 + docs/code_snippets/config_bundling.d | 24 + docs/code_snippets/config_caseSensitive.d | 12 + docs/code_snippets/config_endOfNamedArgs.d | 14 + docs/code_snippets/config_errorHandler.d | 24 + docs/code_snippets/config_namedArgPrefix.d | 13 + docs/code_snippets/config_styling.d | 13 + docs/code_snippets/config_stylingMode.d | 12 + docs/code_snippets/double_dash.d | 16 + docs/code_snippets/help_argument_group.d | 29 ++ docs/code_snippets/help_example.d | 24 + docs/code_snippets/mutually_exclusive.d | 20 + .../mutually_exclusive_required.d | 20 + docs/code_snippets/mutually_required.d | 20 + .../mutually_required_required.d | 20 + docs/code_snippets/named_arguments.d | 21 + .../optional_required_arguments.d | 14 + docs/code_snippets/parsing_customization.d | 16 + docs/code_snippets/positional_arguments.d | 10 + docs/code_snippets/styling_helloworld.d | 14 + docs/code_snippets/styling_help.d | 11 + docs/code_snippets/subcommands.d | 25 + docs/code_snippets/subcommands_common_args.d | 26 + docs/code_snippets/subcommands_default.d | 22 + docs/code_snippets/subcommands_enumerate.d | 12 + docs/code_snippets/subcommands_names.d | 22 + docs/code_snippets/types_array.d | 14 + docs/code_snippets/types_array_comma.d | 12 + docs/code_snippets/types_assoc_array.d | 10 + docs/code_snippets/types_assoc_array_comma.d | 12 + docs/code_snippets/types_counter.d | 11 + docs/code_snippets/types_counter_bundling.d | 13 + docs/code_snippets/types_custom.d | 15 + docs/code_snippets/types_enum.d | 15 + docs/code_snippets/types_enum_custom_values.d | 19 + docs/code_snippets/types_function.d | 21 + docs/code_snippets/types_number_string.d | 15 + docs/images/allowed_values_error.png | Bin 0 -> 6514 bytes docs/images/allowed_values_error_dark.png | Bin 0 -> 5980 bytes docs/images/ansiStylingArgument.png | Bin 0 -> 4429 bytes docs/images/ansiStylingArgument_dark.png | Bin 0 -> 4436 bytes docs/images/config_help.png | Bin 0 -> 8777 bytes docs/images/config_help_dark.png | Bin 0 -> 8025 bytes docs/images/config_styling.png | Bin 0 -> 6190 bytes docs/images/config_stylingMode.png | Bin 0 -> 5366 bytes docs/images/config_stylingMode_dark.png | Bin 0 -> 5326 bytes docs/images/config_styling_dark.png | Bin 0 -> 8607 bytes docs/images/default_styling.png | Bin 0 -> 18881 bytes docs/images/default_styling_dark.png | Bin 0 -> 18780 bytes docs/images/hello_world_with_uda.png | Bin 0 -> 26719 bytes docs/images/hello_world_with_uda_dark.png | Bin 0 -> 24758 bytes docs/images/hello_world_without_uda.png | Bin 0 -> 32734 bytes docs/images/hello_world_without_uda_dark.png | Bin 0 -> 31300 bytes docs/images/help_argument_group.png | Bin 0 -> 15145 bytes docs/images/help_argument_group_dark.png | Bin 0 -> 14739 bytes docs/images/help_example.png | Bin 0 -> 32144 bytes docs/images/help_example1.png | Bin 0 -> 23358 bytes docs/images/help_example1_dark.png | Bin 0 -> 33082 bytes docs/images/help_example_dark.png | Bin 0 -> 21393 bytes docs/images/styling_help.png | Bin 0 -> 7157 bytes docs/images/styling_help_dark.png | Bin 0 -> 7164 bytes docs/redirection-rules.xml | 38 ++ docs/topics/ANSI-coloring-and-styling.md | 98 ++++ docs/topics/Argument-dependencies.md | 30 ++ docs/topics/Arguments-bundling.md | 10 + docs/topics/Arguments.md | 4 + docs/topics/Arity.md | 49 ++ docs/topics/Calling-the-parser.md | 119 +++++ docs/topics/End-of-named-arguments.md | 7 + docs/topics/Getting-started.md | 25 + docs/topics/Help-generation.md | 67 +++ docs/topics/Introduction.md | 20 + docs/topics/Named-arguments.md | 30 ++ .../topics/Optional-and-required-arguments.md | 10 + docs/topics/Parsing-customization.md | 135 ++++++ docs/topics/Positional-arguments.md | 21 + docs/topics/Restrict-allowed-values.md | 17 + docs/topics/Shell-completion.md | 90 ++++ docs/topics/Subcommands.md | 46 ++ docs/topics/Supported-types.md | 115 +++++ docs/topics/reference/ArgumentGroup.md | 48 ++ docs/topics/reference/ArgumentValue.md | 26 + docs/topics/reference/CLI-API.md | 191 ++++++++ docs/topics/reference/Command.md | 139 ++++++ docs/topics/reference/Config.md | 148 ++++++ docs/topics/reference/MutuallyExclusive.md | 18 + docs/topics/reference/Param-RawParam.md | 18 + .../reference/PositionalNamedArgument.md | 447 ++++++++++++++++++ docs/topics/reference/RequiredTogether.md | 17 + docs/topics/reference/Result.md | 80 ++++ docs/topics/reference/SubCommand.md | 118 +++++ docs/topics/reference/ansiStylingArgument.md | 31 ++ docs/v.list | 5 + docs/writerside.cfg | 9 + examples/dub.json | 8 +- examples/getting_started/advanced/app.d | 75 --- examples/getting_started/with_uda/app.d | 48 ++ .../{advanced => with_uda}/dub.json | 2 +- .../{basic => without_uda}/app.d | 10 +- .../{basic => without_uda}/dub.json | 2 +- images/default_styling.png | Bin 15101 -> 0 bytes 118 files changed, 3269 insertions(+), 88 deletions(-) create mode 100644 .github/workflows/docs.yaml create mode 100644 docs/ad.tree create mode 100644 docs/c.list create mode 100644 docs/cfg/buildprofiles.xml create mode 100644 docs/code_snippets/allowed_values.d create mode 100644 docs/code_snippets/ansiStylingArgument.d create mode 100644 docs/code_snippets/arity.d create mode 100644 docs/code_snippets/arity_no_values.d create mode 100644 docs/code_snippets/call_parser1.d create mode 100644 docs/code_snippets/call_parser2.d create mode 100644 docs/code_snippets/call_parser3.d create mode 100644 docs/code_snippets/call_parser4.d create mode 100644 docs/code_snippets/call_parser5.d create mode 100644 docs/code_snippets/config_addHelp.d create mode 100644 docs/code_snippets/config_arraySep.d create mode 100644 docs/code_snippets/config_assignChar.d create mode 100644 docs/code_snippets/config_bundling.d create mode 100644 docs/code_snippets/config_caseSensitive.d create mode 100644 docs/code_snippets/config_endOfNamedArgs.d create mode 100644 docs/code_snippets/config_errorHandler.d create mode 100644 docs/code_snippets/config_namedArgPrefix.d create mode 100644 docs/code_snippets/config_styling.d create mode 100644 docs/code_snippets/config_stylingMode.d create mode 100644 docs/code_snippets/double_dash.d create mode 100644 docs/code_snippets/help_argument_group.d create mode 100644 docs/code_snippets/help_example.d create mode 100644 docs/code_snippets/mutually_exclusive.d create mode 100644 docs/code_snippets/mutually_exclusive_required.d create mode 100644 docs/code_snippets/mutually_required.d create mode 100644 docs/code_snippets/mutually_required_required.d create mode 100644 docs/code_snippets/named_arguments.d create mode 100644 docs/code_snippets/optional_required_arguments.d create mode 100644 docs/code_snippets/parsing_customization.d create mode 100644 docs/code_snippets/positional_arguments.d create mode 100644 docs/code_snippets/styling_helloworld.d create mode 100644 docs/code_snippets/styling_help.d create mode 100644 docs/code_snippets/subcommands.d create mode 100644 docs/code_snippets/subcommands_common_args.d create mode 100644 docs/code_snippets/subcommands_default.d create mode 100644 docs/code_snippets/subcommands_enumerate.d create mode 100644 docs/code_snippets/subcommands_names.d create mode 100644 docs/code_snippets/types_array.d create mode 100644 docs/code_snippets/types_array_comma.d create mode 100644 docs/code_snippets/types_assoc_array.d create mode 100644 docs/code_snippets/types_assoc_array_comma.d create mode 100644 docs/code_snippets/types_counter.d create mode 100644 docs/code_snippets/types_counter_bundling.d create mode 100644 docs/code_snippets/types_custom.d create mode 100644 docs/code_snippets/types_enum.d create mode 100644 docs/code_snippets/types_enum_custom_values.d create mode 100644 docs/code_snippets/types_function.d create mode 100644 docs/code_snippets/types_number_string.d create mode 100644 docs/images/allowed_values_error.png create mode 100644 docs/images/allowed_values_error_dark.png create mode 100644 docs/images/ansiStylingArgument.png create mode 100644 docs/images/ansiStylingArgument_dark.png create mode 100644 docs/images/config_help.png create mode 100644 docs/images/config_help_dark.png create mode 100644 docs/images/config_styling.png create mode 100644 docs/images/config_stylingMode.png create mode 100644 docs/images/config_stylingMode_dark.png create mode 100644 docs/images/config_styling_dark.png create mode 100644 docs/images/default_styling.png create mode 100644 docs/images/default_styling_dark.png create mode 100644 docs/images/hello_world_with_uda.png create mode 100644 docs/images/hello_world_with_uda_dark.png create mode 100644 docs/images/hello_world_without_uda.png create mode 100644 docs/images/hello_world_without_uda_dark.png create mode 100644 docs/images/help_argument_group.png create mode 100644 docs/images/help_argument_group_dark.png create mode 100644 docs/images/help_example.png create mode 100644 docs/images/help_example1.png create mode 100644 docs/images/help_example1_dark.png create mode 100644 docs/images/help_example_dark.png create mode 100644 docs/images/styling_help.png create mode 100644 docs/images/styling_help_dark.png create mode 100644 docs/redirection-rules.xml create mode 100644 docs/topics/ANSI-coloring-and-styling.md create mode 100644 docs/topics/Argument-dependencies.md create mode 100644 docs/topics/Arguments-bundling.md create mode 100644 docs/topics/Arguments.md create mode 100644 docs/topics/Arity.md create mode 100644 docs/topics/Calling-the-parser.md create mode 100644 docs/topics/End-of-named-arguments.md create mode 100644 docs/topics/Getting-started.md create mode 100644 docs/topics/Help-generation.md create mode 100644 docs/topics/Introduction.md create mode 100644 docs/topics/Named-arguments.md create mode 100644 docs/topics/Optional-and-required-arguments.md create mode 100644 docs/topics/Parsing-customization.md create mode 100644 docs/topics/Positional-arguments.md create mode 100644 docs/topics/Restrict-allowed-values.md create mode 100644 docs/topics/Shell-completion.md create mode 100644 docs/topics/Subcommands.md create mode 100644 docs/topics/Supported-types.md create mode 100644 docs/topics/reference/ArgumentGroup.md create mode 100644 docs/topics/reference/ArgumentValue.md create mode 100644 docs/topics/reference/CLI-API.md create mode 100644 docs/topics/reference/Command.md create mode 100644 docs/topics/reference/Config.md create mode 100644 docs/topics/reference/MutuallyExclusive.md create mode 100644 docs/topics/reference/Param-RawParam.md create mode 100644 docs/topics/reference/PositionalNamedArgument.md create mode 100644 docs/topics/reference/RequiredTogether.md create mode 100644 docs/topics/reference/Result.md create mode 100644 docs/topics/reference/SubCommand.md create mode 100644 docs/topics/reference/ansiStylingArgument.md create mode 100644 docs/v.list create mode 100644 docs/writerside.cfg delete mode 100644 examples/getting_started/advanced/app.d create mode 100644 examples/getting_started/with_uda/app.d rename examples/getting_started/{advanced => with_uda}/dub.json (75%) rename examples/getting_started/{basic => without_uda}/app.d (88%) rename examples/getting_started/{basic => without_uda}/dub.json (74%) delete mode 100644 images/default_styling.png diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e87efed..7bdc196 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,4 +1,4 @@ -name: Build +name: Build sources on: push: paths-ignore: diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000..1c37d3d --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,99 @@ +name: Build documentation + +on: + push: + branches: ["master"] + pull_request: + +# Gives the workflow permissions to clone the repo and create a page deployment +permissions: + id-token: write + pages: write + +env: + # Name of help module and instance id separated by a slash + INSTANCE: docs/ad + # AD = the ID of the instance in capital letters + ARTIFACT: webHelpAD2-all.zip + # Writerside docker image version + DOCKER_VERSION: 241.15989 + # Add the variable below to upload Algolia indexes + # AD = the ID of the instance in capital letters + ALGOLIA_ARTIFACT: algolia-indexes-AD.zip + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Build Writerside docs using Docker + uses: JetBrains/writerside-github-action@v4 + with: + instance: ${{ env.INSTANCE }} + artifact: ${{ env.ARTIFACT }} + docker-version: ${{ env.DOCKER_VERSION }} + + - name: Upload documentation + uses: actions/upload-artifact@v4 + with: + name: docs + retention-days: 7 + path: | + artifacts/${{ env.ARTIFACT }} + artifacts/report.json + + # Add the step below to upload Algolia indexes + - name: Upload algolia-indexes + uses: actions/upload-artifact@v4 + with: + name: algolia-indexes + retention-days: 7 + path: artifacts/${{ env.ALGOLIA_ARTIFACT }} + + # fail the build when documentation contains errors + test: + # Requires build job results + needs: build + runs-on: ubuntu-latest + steps: + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: docs + path: artifacts + + - name: Test documentation + uses: JetBrains/writerside-checker-action@v1 + with: + instance: ${{ env.INSTANCE }} + + deploy: + if: ${{ github.ref_name == 'master' }} + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + # Requires the test job results + needs: test + runs-on: ubuntu-latest + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: docs + + - name: Unzip artifact + run: unzip -O UTF-8 -qq ${{ env.ARTIFACT }} -d dir + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: dir + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index b9c2183..fc0bff6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ out/ docs.json __dummy.html -docs/ /argparse argparse.iml *argparse.so diff --git a/docs/ad.tree b/docs/ad.tree new file mode 100644 index 0000000..d4b0130 --- /dev/null +++ b/docs/ad.tree @@ -0,0 +1,45 @@ + + + + \ No newline at end of file diff --git a/docs/c.list b/docs/c.list new file mode 100644 index 0000000..c4c77a2 --- /dev/null +++ b/docs/c.list @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/docs/cfg/buildprofiles.xml b/docs/cfg/buildprofiles.xml new file mode 100644 index 0000000..dac9c3c --- /dev/null +++ b/docs/cfg/buildprofiles.xml @@ -0,0 +1,12 @@ + + + + + + + false + + + + diff --git a/docs/code_snippets/allowed_values.d b/docs/code_snippets/allowed_values.d new file mode 100644 index 0000000..24f781b --- /dev/null +++ b/docs/code_snippets/allowed_values.d @@ -0,0 +1,14 @@ +import argparse; + +struct T +{ + @(NamedArgument.AllowedValues!(["apple","pear","banana"])) + string fruit; +} + +T t; +assert(CLI!T.parseArgs(t, ["--fruit", "apple"])); +assert(t == T("apple")); + +// "kiwi" is not allowed +assert(!CLI!T.parseArgs(t, ["--fruit", "kiwi"])); diff --git a/docs/code_snippets/ansiStylingArgument.d b/docs/code_snippets/ansiStylingArgument.d new file mode 100644 index 0000000..0230332 --- /dev/null +++ b/docs/code_snippets/ansiStylingArgument.d @@ -0,0 +1,20 @@ +import argparse; + +struct T +{ + static auto color = ansiStylingArgument; +} + +T t; +CLI!T.parseArgs(t, ["-h"]); + +// This is a way to detect whether `--color` argument was specified in the command line +// Note that 'autodetect' is converted to either 'on' or 'off' +assert(CLI!T.parseArgs(t, ["--color"])); +assert(t.color); + +assert(CLI!T.parseArgs(t, ["--color=always"])); +assert(t.color); + +assert(CLI!T.parseArgs(t, ["--color=never"])); +assert(!t.color); diff --git a/docs/code_snippets/arity.d b/docs/code_snippets/arity.d new file mode 100644 index 0000000..5a9d7cd --- /dev/null +++ b/docs/code_snippets/arity.d @@ -0,0 +1,13 @@ +import argparse; + +struct T +{ + @(NamedArgument.NumberOfValues(1,3)) + int[] a; + @(NamedArgument.NumberOfValues(2)) + int[] b; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a","1","2","3","-b","4","5"])); +assert(t == T([1,2,3], [4,5])); diff --git a/docs/code_snippets/arity_no_values.d b/docs/code_snippets/arity_no_values.d new file mode 100644 index 0000000..3cb20fc --- /dev/null +++ b/docs/code_snippets/arity_no_values.d @@ -0,0 +1,19 @@ +import argparse; + +struct T +{ + @(NamedArgument.AllowNoValue !10) int a; + @(NamedArgument.RequireNoValue!20) int b; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a"])); +assert(t.a == 10); + +assert(CLI!T.parseArgs(t, ["-b"])); +assert(t.b == 20); + +assert(CLI!T.parseArgs(t, ["-a","30"])); +assert(t.a == 30); + +assert(!CLI!T.parseArgs(t, ["-b","30"])); // Unrecognized arguments: ["30"] \ No newline at end of file diff --git a/docs/code_snippets/call_parser1.d b/docs/code_snippets/call_parser1.d new file mode 100644 index 0000000..3f8d66e --- /dev/null +++ b/docs/code_snippets/call_parser1.d @@ -0,0 +1,18 @@ +import argparse; + +struct T +{ + string a; + string b; +} + +mixin CLI!T.main!((args) +{ + // 'args' has 'T' type + static assert(is(typeof(args) == T)); + + // do whatever you need + import std.stdio: writeln; + args.writeln; + return 0; +}); diff --git a/docs/code_snippets/call_parser2.d b/docs/code_snippets/call_parser2.d new file mode 100644 index 0000000..11b3488 --- /dev/null +++ b/docs/code_snippets/call_parser2.d @@ -0,0 +1,27 @@ +import argparse; + +struct cmd1 +{ + string a; +} + +struct cmd2 +{ + string b; +} + +mixin CLI!(cmd1, cmd2).main!((args, unparsed) +{ + // 'args' has either 'cmd1' or 'cmd2' type + static if(is(typeof(args) == cmd1)) + writeln("cmd1: ", args); + else static if(is(typeof(args) == cmd2)) + writeln("cmd2: ", args); + else + static assert(false); // this would never happen + + // unparsed arguments has 'string[]' type + static assert(is(typeof(unparsed) == string[])); + + return 0; +}); diff --git a/docs/code_snippets/call_parser3.d b/docs/code_snippets/call_parser3.d new file mode 100644 index 0000000..87d2cdd --- /dev/null +++ b/docs/code_snippets/call_parser3.d @@ -0,0 +1,21 @@ +import argparse; + +struct COMMAND +{ + string a; + string b; +} + +static int my_main(COMMAND command) +{ + // Do whatever is needed + return 0; +} + +int main(string[] args) +{ + // Do initialization here + // If needed, termination code can be done as 'scope(exit) { ...code... }' here as well + + return CLI!COMMAND.parseArgs!my_main(args[1..$]); +} diff --git a/docs/code_snippets/call_parser4.d b/docs/code_snippets/call_parser4.d new file mode 100644 index 0000000..63cdb25 --- /dev/null +++ b/docs/code_snippets/call_parser4.d @@ -0,0 +1,19 @@ +import argparse; + +struct COMMAND +{ + string a; + string b; +} + +int main(string[] argv) +{ + COMMAND cmd; + + if(!CLI!COMMAND.parseArgs(cmd, argv[1..$])) + return 1; // parsing failure + + // Do whatever is needed + + return 0; +} diff --git a/docs/code_snippets/call_parser5.d b/docs/code_snippets/call_parser5.d new file mode 100644 index 0000000..70dcb4c --- /dev/null +++ b/docs/code_snippets/call_parser5.d @@ -0,0 +1,13 @@ +import argparse; + +struct T +{ + string a; +} + +auto arguments = [ "-a", "A", "-c", "C" ]; + +T result; +assert(CLI!T.parseKnownArgs(result, arguments)); +assert(result == T("A")); +assert(arguments == ["-c", "C"]); diff --git a/docs/code_snippets/config_addHelp.d b/docs/code_snippets/config_addHelp.d new file mode 100644 index 0000000..0b8a808 --- /dev/null +++ b/docs/code_snippets/config_addHelp.d @@ -0,0 +1,18 @@ +import argparse; + +struct T +{ + string a, b; +} + +T t1; +CLI!T.parseArgs(t1, ["-a", "A", "-h", "-b", "B"]); +assert(t1 == T("A")); + +enum Config cfg = { addHelp: false }; + +T t2; +string[] unrecognizedArgs; +CLI!(cfg, T).parseKnownArgs(t2, ["-a", "A", "-h", "-b", "B"], unrecognizedArgs); +assert(t2 == T("A","B")); +assert(unrecognizedArgs == ["-h"]); diff --git a/docs/code_snippets/config_arraySep.d b/docs/code_snippets/config_arraySep.d new file mode 100644 index 0000000..71e03dc --- /dev/null +++ b/docs/code_snippets/config_arraySep.d @@ -0,0 +1,16 @@ +import argparse; + +struct T +{ + string[] a; +} + +T t1; +assert(CLI!T.parseArgs(t1, ["-a","1:2:3","-a","4","5"])); +assert(t1 == T(["1:2:3","4","5"])); + +enum Config cfg = { arraySep: ':' }; + +T t2; +assert(CLI!(cfg, T).parseArgs(t2, ["-a","1:2:3","-a","4","5"])); +assert(t2 == T(["1","2","3","4","5"])); diff --git a/docs/code_snippets/config_assignChar.d b/docs/code_snippets/config_assignChar.d new file mode 100644 index 0000000..7acda42 --- /dev/null +++ b/docs/code_snippets/config_assignChar.d @@ -0,0 +1,12 @@ +import argparse; + +struct T +{ + string[] a; +} + +enum Config cfg = { assignChar: ':' }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["-a:1","-a:2","-a:3"])); +assert(t == T(["1","2","3"])); diff --git a/docs/code_snippets/config_bundling.d b/docs/code_snippets/config_bundling.d new file mode 100644 index 0000000..991104a --- /dev/null +++ b/docs/code_snippets/config_bundling.d @@ -0,0 +1,24 @@ +import argparse; + +struct T +{ + bool a; + bool b; + string c; +} + +enum Config cfg = { bundling: true }; + +T t; + +assert(CLI!(cfg, T).parseArgs(t, ["-ab"])); +assert(t == T(true, true)); + +assert(CLI!(cfg, T).parseArgs(t, ["-abc=foo"])); +assert(t == T(true, true, "foo")); + +assert(CLI!(cfg, T).parseArgs(t, ["-a","-bc=foo"])); +assert(t == T(true, true, "foo")); + +assert(CLI!(cfg, T).parseArgs(t, ["-a","-bcfoo"])); +assert(t == T(true, true, "foo")); diff --git a/docs/code_snippets/config_caseSensitive.d b/docs/code_snippets/config_caseSensitive.d new file mode 100644 index 0000000..9ef060c --- /dev/null +++ b/docs/code_snippets/config_caseSensitive.d @@ -0,0 +1,12 @@ +import argparse; + +struct T +{ + string[] param; +} + +enum Config cfg = { caseSensitive: false }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["--param","1","--PARAM","2","--PaRaM","3"])); +assert(t == T(["1","2","3"])); diff --git a/docs/code_snippets/config_endOfNamedArgs.d b/docs/code_snippets/config_endOfNamedArgs.d new file mode 100644 index 0000000..f6a238e --- /dev/null +++ b/docs/code_snippets/config_endOfNamedArgs.d @@ -0,0 +1,14 @@ +import argparse; + +struct T +{ + @NamedArgument string a; + @PositionalArgument(0) string b; + @PositionalArgument(1) string[] c; +} + +enum Config cfg = { endOfNamedArgs: "---" }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["B","-a","foo","---","--","-a","boo"])); +assert(t == T("foo","B",["--","-a","boo"])); diff --git a/docs/code_snippets/config_errorHandler.d b/docs/code_snippets/config_errorHandler.d new file mode 100644 index 0000000..359db9c --- /dev/null +++ b/docs/code_snippets/config_errorHandler.d @@ -0,0 +1,24 @@ +import argparse; + +struct T +{ + string a; +} + +enum Config cfg = { + errorHandler: + (text) + { + try { + import std.stdio : stderr; + stderr.writeln("Detected an error: ", text); + } + catch(Exception e) + { + throw new Error(e.msg); + } + } +}; + +T t; +assert(!CLI!(cfg, T).parseArgs(t, ["-b"])); diff --git a/docs/code_snippets/config_namedArgPrefix.d b/docs/code_snippets/config_namedArgPrefix.d new file mode 100644 index 0000000..230e57d --- /dev/null +++ b/docs/code_snippets/config_namedArgPrefix.d @@ -0,0 +1,13 @@ +import argparse; + +struct T +{ + string a; + string baz; +} + +enum Config cfg = { namedArgPrefix: '+' }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["+a","foo","++baz","BAZZ"])); +assert(t == T("foo","BAZZ")); diff --git a/docs/code_snippets/config_styling.d b/docs/code_snippets/config_styling.d new file mode 100644 index 0000000..9379785 --- /dev/null +++ b/docs/code_snippets/config_styling.d @@ -0,0 +1,13 @@ +import argparse; +import argparse.ansi; + +struct T +{ + string a, b; +} + +enum Config cfg = { styling: { programName: blue, argumentName: green.italic } }; + +T t; +CLI!(cfg, T).parseArgs(t, ["-a", "A", "-h", "-b", "B"]); +assert(t == T("A")); diff --git a/docs/code_snippets/config_stylingMode.d b/docs/code_snippets/config_stylingMode.d new file mode 100644 index 0000000..683378d --- /dev/null +++ b/docs/code_snippets/config_stylingMode.d @@ -0,0 +1,12 @@ +import argparse; + +struct T +{ + string a, b; +} + +enum Config cfg = { stylingMode: Config.StylingMode.off }; + +T t; +CLI!(cfg, T).parseArgs(t, ["-a", "A", "-h", "-b", "B"]); +assert(t == T("A")); diff --git a/docs/code_snippets/double_dash.d b/docs/code_snippets/double_dash.d new file mode 100644 index 0000000..bccd477 --- /dev/null +++ b/docs/code_snippets/double_dash.d @@ -0,0 +1,16 @@ +import argparse; + +struct T +{ + @NamedArgument + string a; + @NamedArgument + string b; + + @PositionalArgument(0) + string[] args; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a","A","--","-b","B"])); +assert(t == T("A","",["-b","B"])); diff --git a/docs/code_snippets/help_argument_group.d b/docs/code_snippets/help_argument_group.d new file mode 100644 index 0000000..506c74e --- /dev/null +++ b/docs/code_snippets/help_argument_group.d @@ -0,0 +1,29 @@ +import argparse; + +@(Command("MYPROG") +.Description("custom description") +.Epilog("custom epilog") +) +struct T +{ + @(ArgumentGroup("group1").Description("group1 description")) + { + @NamedArgument + { + string a; + string b; + } + @PositionalArgument(0) string p; + } + + @(ArgumentGroup("group2").Description("group2 description")) + @NamedArgument + { + string c; + string d; + } + @PositionalArgument(1) string q; +} + +T t; +CLI!T.parseArgs(t, ["-h"]); diff --git a/docs/code_snippets/help_example.d b/docs/code_snippets/help_example.d new file mode 100644 index 0000000..48ee652 --- /dev/null +++ b/docs/code_snippets/help_example.d @@ -0,0 +1,24 @@ +import argparse; + +@(Command("MYPROG") +.Description("custom description") +.Epilog("custom epilog") +) +struct T +{ + @NamedArgument string s; + @(NamedArgument.Placeholder("VALUE")) string p; + + @(NamedArgument.HideFromHelp) string hidden; + + enum Fruit { apple, pear }; + @(NamedArgument("f","fruit").Required.Description("This is a help text for fruit. Very very very very very very very very very very very very very very very very very very very long text")) Fruit f; + + @(NamedArgument.AllowedValues!([1,4,16,8])) int i; + + @(PositionalArgument(0).Description("This is a help text for param0. Very very very very very very very very very very very very very very very very very very very long text")) string param0; + @(PositionalArgument(1).AllowedValues!(["q","a"])) string param1; +} + +T t; +CLI!T.parseArgs(t, ["-h"]); diff --git a/docs/code_snippets/mutually_exclusive.d b/docs/code_snippets/mutually_exclusive.d new file mode 100644 index 0000000..e5a6f8a --- /dev/null +++ b/docs/code_snippets/mutually_exclusive.d @@ -0,0 +1,20 @@ +import argparse; + +struct T +{ + @MutuallyExclusive() + { + string a; + string b; + } +} + +T t; + +// One of them or no argument is allowed +assert(CLI!T.parseArgs(t, ["-a","a"])); +assert(CLI!T.parseArgs(t, ["-b","b"])); +assert(CLI!T.parseArgs(t, [])); + +// Both arguments or no argument is not allowed +assert(!CLI!T.parseArgs(t, ["-a","a","-b","b"])); diff --git a/docs/code_snippets/mutually_exclusive_required.d b/docs/code_snippets/mutually_exclusive_required.d new file mode 100644 index 0000000..cf7b6a0 --- /dev/null +++ b/docs/code_snippets/mutually_exclusive_required.d @@ -0,0 +1,20 @@ +import argparse; + +struct T +{ + @(MutuallyExclusive.Required) + { + string a; + string b; + } +} + +T t; + +// Either argument is allowed +assert(CLI!T.parseArgs(t, ["-a","a"])); +assert(CLI!T.parseArgs(t, ["-b","b"])); + +// Both or no arguments are not allowed +assert(!CLI!T.parseArgs(t, ["-a","a","-b","b"])); +assert(!CLI!T.parseArgs(t, [])); diff --git a/docs/code_snippets/mutually_required.d b/docs/code_snippets/mutually_required.d new file mode 100644 index 0000000..90b74a2 --- /dev/null +++ b/docs/code_snippets/mutually_required.d @@ -0,0 +1,20 @@ +import argparse; + +struct T +{ + @RequiredTogether() + { + string a; + string b; + } +} + +T t; + +// Both or no argument is allowed +assert(CLI!T.parseArgs(t, ["-a","a","-b","b"])); +assert(CLI!T.parseArgs(t, [])); + +// Only one argument is not allowed +assert(!CLI!T.parseArgs(t, ["-a","a"])); +assert(!CLI!T.parseArgs(t, ["-b","b"])); diff --git a/docs/code_snippets/mutually_required_required.d b/docs/code_snippets/mutually_required_required.d new file mode 100644 index 0000000..bc9ed61 --- /dev/null +++ b/docs/code_snippets/mutually_required_required.d @@ -0,0 +1,20 @@ +import argparse; + +struct T +{ + @(RequiredTogether.Required) + { + string a; + string b; + } +} + +T t; + +// Both arguments are allowed +assert(CLI!T.parseArgs(t, ["-a","a","-b","b"])); + +// Single argument or no argument is not allowed +assert(!CLI!T.parseArgs(t, ["-a","a"])); +assert(!CLI!T.parseArgs(t, ["-b","b"])); +assert(!CLI!T.parseArgs(t, [])); diff --git a/docs/code_snippets/named_arguments.d b/docs/code_snippets/named_arguments.d new file mode 100644 index 0000000..890efae --- /dev/null +++ b/docs/code_snippets/named_arguments.d @@ -0,0 +1,21 @@ +import argparse; + +struct Params +{ + // If name is not provided then member name is used: "--greeting" + @NamedArgument + string greeting; + + // If member name is single character then it becomes a short name: "-a" + @NamedArgument + string a; + + // Argument with multiple names: "--name", "--first-name", "-n" + // Note that single character becomes a short name + @NamedArgument(["name", "first-name", "n"]) + string name; + + // Another way to specify multiple names: "--family", "--last-name" + @NamedArgument("family", "last-name") + string family; +} diff --git a/docs/code_snippets/optional_required_arguments.d b/docs/code_snippets/optional_required_arguments.d new file mode 100644 index 0000000..01796b6 --- /dev/null +++ b/docs/code_snippets/optional_required_arguments.d @@ -0,0 +1,14 @@ +import argparse; + +struct T +{ + @(PositionalArgument(0, "a").Optional) + string a = "not set"; + + @(NamedArgument.Required) + int b; +} + +T t; +assert(CLI!T.parseArgs(t, ["-b", "4"])); +assert(t == T("not set", 4)); diff --git a/docs/code_snippets/parsing_customization.d b/docs/code_snippets/parsing_customization.d new file mode 100644 index 0000000..8d7d721 --- /dev/null +++ b/docs/code_snippets/parsing_customization.d @@ -0,0 +1,16 @@ +import argparse; + +struct T +{ + @(NamedArgument + .PreValidation!((string s) { return s.length > 1 && s[0] == '!'; }) + .Parse !((string s) { return s[1]; }) + .Validation !((char v) { return v >= '0' && v <= '9'; }) + .Action !((ref int a, char v) { a = v - '0'; }) + ) + int a; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a","!4"])); +assert(t == T(4)); diff --git a/docs/code_snippets/positional_arguments.d b/docs/code_snippets/positional_arguments.d new file mode 100644 index 0000000..2e09089 --- /dev/null +++ b/docs/code_snippets/positional_arguments.d @@ -0,0 +1,10 @@ +import argparse; + +struct Params +{ + @PositionalArgument(0) + string firstName; + + @PositionalArgument(1, "lastName") + string arg; +} diff --git a/docs/code_snippets/styling_helloworld.d b/docs/code_snippets/styling_helloworld.d new file mode 100644 index 0000000..3a82e3a --- /dev/null +++ b/docs/code_snippets/styling_helloworld.d @@ -0,0 +1,14 @@ +import argparse.ansi; + +void printText(bool enableStyle) +{ + // style is enabled at runtime when `enableStyle` is true + auto myStyle = enableStyle ? bold.italic.cyan.onRed : noStyle; + + // "Hello" is always printed in green; + // "world!" is printed in bold, italic, cyan and on red when `enableStyle` is true, or "as is" otherwise + writeln(green("Hello "), myStyle("world!")); +} + +printText(true); +printText(false); \ No newline at end of file diff --git a/docs/code_snippets/styling_help.d b/docs/code_snippets/styling_help.d new file mode 100644 index 0000000..4f30847 --- /dev/null +++ b/docs/code_snippets/styling_help.d @@ -0,0 +1,11 @@ +import argparse; +import argparse.ansi; + +struct T +{ + @(NamedArgument("red").Description(bold.underline("Colorize the output:")~" make everything "~red("red"))) + bool red_; +} + +T t; +CLI!T.parseArgs(t, ["-h"]); diff --git a/docs/code_snippets/subcommands.d b/docs/code_snippets/subcommands.d new file mode 100644 index 0000000..cf16b4d --- /dev/null +++ b/docs/code_snippets/subcommands.d @@ -0,0 +1,25 @@ +import argparse; + +struct cmd1 {} +struct cmd2 {} +struct cmd3 {} + +struct T +{ + // name of the subcommand is the same as a name of the type by default + SubCommand!(cmd1, cmd2, cmd3) cmd; +} + +T t; + +assert(CLI!T.parseArgs(t, [])); +assert(t == T.init); + +assert(CLI!T.parseArgs(t, ["cmd1"])); +assert(t == T(typeof(T.cmd)(cmd1.init))); + +assert(CLI!T.parseArgs(t, ["cmd2"])); +assert(t == T(typeof(T.cmd)(cmd2.init))); + +assert(CLI!T.parseArgs(t, ["cmd3"])); +assert(t == T(typeof(T.cmd)(cmd3.init))); diff --git a/docs/code_snippets/subcommands_common_args.d b/docs/code_snippets/subcommands_common_args.d new file mode 100644 index 0000000..119a4cd --- /dev/null +++ b/docs/code_snippets/subcommands_common_args.d @@ -0,0 +1,26 @@ +import argparse; + +struct min {} +struct max {} +struct sum {} + +struct T +{ + int[] n; // common argument for all subcommands + + // name of the subcommand is the same as a name of the type by default + SubCommand!(min, max, sum) cmd; +} + +T t; + +assert(CLI!T.parseArgs(t, ["min","-n","1","2","3"])); +assert(t == T([1,2,3],typeof(T.cmd)(min.init))); + +t = T.init; +assert(CLI!T.parseArgs(t, ["max","-n","4","5","6"])); +assert(t == T([4,5,6],typeof(T.cmd)(max.init))); + +t = T.init; +assert(CLI!T.parseArgs(t, ["sum","-n","7","8","9"])); +assert(t == T([7,8,9],typeof(T.cmd)(sum.init))); diff --git a/docs/code_snippets/subcommands_default.d b/docs/code_snippets/subcommands_default.d new file mode 100644 index 0000000..83c7720 --- /dev/null +++ b/docs/code_snippets/subcommands_default.d @@ -0,0 +1,22 @@ +import argparse; + +struct min {} +struct max {} +struct sum {} + +struct T +{ + int[] n; // common argument for all subcommands + + // name of the subcommand is the same as a name of the type by default + SubCommand!(min, max, Default!sum) cmd; +} + +T t; + +assert(CLI!T.parseArgs(t, ["-n","7","8","9"])); +assert(t == T([7,8,9],typeof(T.cmd)(sum.init))); + +t = T.init; +assert(CLI!T.parseArgs(t, ["max","-n","4","5","6"])); +assert(t == T([4,5,6],typeof(T.cmd)(max.init))); diff --git a/docs/code_snippets/subcommands_enumerate.d b/docs/code_snippets/subcommands_enumerate.d new file mode 100644 index 0000000..5540109 --- /dev/null +++ b/docs/code_snippets/subcommands_enumerate.d @@ -0,0 +1,12 @@ +import argparse; + +struct cmd1 {} +struct cmd2 {} +struct cmd3 {} + +// This mixin defines standard main function that parses command line and calls the provided function: +mixin CLI!(cmd1, cmd2, cmd3).main!((cmd) +{ + import std.stdio; + cmd.writeln; +}); diff --git a/docs/code_snippets/subcommands_names.d b/docs/code_snippets/subcommands_names.d new file mode 100644 index 0000000..e1f079a --- /dev/null +++ b/docs/code_snippets/subcommands_names.d @@ -0,0 +1,22 @@ +import argparse; + +@Command("minimum", "min") +struct min {} +@Command("maximum", "max") +struct max {} + +struct T +{ + int[] n; // common argument for all subcommands + + SubCommand!(min, max) cmd; +} + +T t; + +assert(CLI!T.parseArgs(t, ["minimum","-n","1","2","3"])); +assert(t == T([1,2,3],typeof(T.cmd)(min.init))); + +t = T.init; +assert(CLI!T.parseArgs(t, ["max","-n","4","5","6"])); +assert(t == T([4,5,6],typeof(T.cmd)(max.init))); diff --git a/docs/code_snippets/types_array.d b/docs/code_snippets/types_array.d new file mode 100644 index 0000000..f94b3d5 --- /dev/null +++ b/docs/code_snippets/types_array.d @@ -0,0 +1,14 @@ +import argparse; + +struct T +{ + int[] a; + int[][] b; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a","1","2","3","-a","4","5"])); +assert(t.a == [1,2,3,4,5]); + +assert(CLI!T.parseArgs(t, ["-b","1","2","3","-b","4","5"])); +assert(t.b == [[1,2,3],[4,5]]); diff --git a/docs/code_snippets/types_array_comma.d b/docs/code_snippets/types_array_comma.d new file mode 100644 index 0000000..c1bf22e --- /dev/null +++ b/docs/code_snippets/types_array_comma.d @@ -0,0 +1,12 @@ +import argparse; + +struct T +{ + int[] a; +} + +enum Config cfg = { arraySep: ',' }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["-a=1,2,3","-a","4,5"])); +assert(t == T([1,2,3,4,5])); diff --git a/docs/code_snippets/types_assoc_array.d b/docs/code_snippets/types_assoc_array.d new file mode 100644 index 0000000..2e11093 --- /dev/null +++ b/docs/code_snippets/types_assoc_array.d @@ -0,0 +1,10 @@ +import argparse; + +struct T +{ + int[string] a; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a=foo=3","-a","boo=7"])); +assert(t == T(["foo":3,"boo":7])); diff --git a/docs/code_snippets/types_assoc_array_comma.d b/docs/code_snippets/types_assoc_array_comma.d new file mode 100644 index 0000000..d597ddf --- /dev/null +++ b/docs/code_snippets/types_assoc_array_comma.d @@ -0,0 +1,12 @@ +import argparse; + +struct T +{ + int[string] a; +} + +enum Config cfg = { arraySep: ',' }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["-a=foo=3,boo=7","-a","bar=4,baz=9"])); +assert(t == T(["foo":3,"boo":7,"bar":4,"baz":9])); diff --git a/docs/code_snippets/types_counter.d b/docs/code_snippets/types_counter.d new file mode 100644 index 0000000..19da8ab --- /dev/null +++ b/docs/code_snippets/types_counter.d @@ -0,0 +1,11 @@ +import argparse; + +struct T +{ + @(NamedArgument.Counter) + int v; +} + +T t; +assert(CLI!T.parseArgs(t, ["-v","-v","-v"])); +assert(t == T(3)); diff --git a/docs/code_snippets/types_counter_bundling.d b/docs/code_snippets/types_counter_bundling.d new file mode 100644 index 0000000..ae0c991 --- /dev/null +++ b/docs/code_snippets/types_counter_bundling.d @@ -0,0 +1,13 @@ +import argparse; + +struct T +{ + @(NamedArgument.Counter) + int v; +} + +enum Config cfg = { bundling: true }; + +T t; +assert(CLI!(cfg, T).parseArgs(t, ["-vv","-v"])); +assert(t == T(3)); diff --git a/docs/code_snippets/types_custom.d b/docs/code_snippets/types_custom.d new file mode 100644 index 0000000..5b719f1 --- /dev/null +++ b/docs/code_snippets/types_custom.d @@ -0,0 +1,15 @@ +import argparse; + +struct Value +{ + string a; +} +struct T +{ + @(NamedArgument.Parse!((string s) { return Value(s); })) + Value s; +} + +T t; +assert(CLI!T.parseArgs(t, ["-s","foo"])); +assert(t == T(Value("foo"))); \ No newline at end of file diff --git a/docs/code_snippets/types_enum.d b/docs/code_snippets/types_enum.d new file mode 100644 index 0000000..a8677cb --- /dev/null +++ b/docs/code_snippets/types_enum.d @@ -0,0 +1,15 @@ +import argparse; + +struct T +{ + enum Fruit { apple, pear }; + + Fruit a; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a","apple"])); +assert(t == T(T.Fruit.apple)); + +assert(CLI!T.parseArgs(t, ["-a=pear"])); +assert(t == T(T.Fruit.pear)); diff --git a/docs/code_snippets/types_enum_custom_values.d b/docs/code_snippets/types_enum_custom_values.d new file mode 100644 index 0000000..b488718 --- /dev/null +++ b/docs/code_snippets/types_enum_custom_values.d @@ -0,0 +1,19 @@ +import argparse; + +struct T +{ + enum Fruit { + apple, + @ArgumentValue("no-apple","noapple") + noapple + }; + + Fruit a; +} + +T t; +assert(CLI!T.parseArgs(t, ["-a=no-apple"])); +assert(t == T(T.Fruit.noapple)); + +assert(CLI!T.parseArgs(t, ["-a","noapple"])); +assert(t == T(T.Fruit.noapple)); diff --git a/docs/code_snippets/types_function.d b/docs/code_snippets/types_function.d new file mode 100644 index 0000000..b695478 --- /dev/null +++ b/docs/code_snippets/types_function.d @@ -0,0 +1,21 @@ +import argparse; + +struct T +{ + int a_; + string[] b_; + string[][] c_; + + @NamedArgument + { + void a() { a_++; } + void b(string s) { b_ ~= s; } + void c(string[] s) { c_ ~= s; } + } +} + +T t; +assert(CLI!T.parseArgs(t, ["-a","-b","1","-c","q","w", + "-a","-b","2","-c","e","r", + "-a","-b","3","-c","t","y",])); +assert(t == T(3, ["1","2","3"], [["q","w"],["e","r"],["t","y"]])); diff --git a/docs/code_snippets/types_number_string.d b/docs/code_snippets/types_number_string.d new file mode 100644 index 0000000..a5ec910 --- /dev/null +++ b/docs/code_snippets/types_number_string.d @@ -0,0 +1,15 @@ +import argparse; + +struct T +{ + int i; + uint u; + double f; + string s; + wstring w; + dstring d; +} + +T t; +assert(CLI!T.parseArgs(t, ["-i","-5","-u","8","-f","12.345","-s","sss","-w","www","-d","ddd"])); +assert(t == T(-5,8,12.345,"sss","www","ddd")); diff --git a/docs/images/allowed_values_error.png b/docs/images/allowed_values_error.png new file mode 100644 index 0000000000000000000000000000000000000000..82ad184aca240220b683ef4b4fa844ecd6bcd042 GIT binary patch literal 6514 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 Y|JaarB4ppTf&c&j07*qoM6N<$g60w3UjP6A literal 0 HcmV?d00001 diff --git a/docs/images/allowed_values_error_dark.png b/docs/images/allowed_values_error_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..56bba6047234e04d459f1aeaa39cde734827d257 GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/docs/images/ansiStylingArgument.png b/docs/images/ansiStylingArgument.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3aca7cfa6bce556d2689503a480808fa37f190 GIT binary patch literal 4429 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 literal 0 HcmV?d00001 diff --git a/docs/images/ansiStylingArgument_dark.png b/docs/images/ansiStylingArgument_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..22109f38217be081166d85c8d2f38bcdc9f263a4 GIT binary patch literal 4436 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 literal 0 HcmV?d00001 diff --git a/docs/images/config_help.png b/docs/images/config_help.png new file mode 100644 index 0000000000000000000000000000000000000000..fc60413eaf0fd422371acf4afdf9277856941c8c GIT binary patch literal 8777 zcmd72bx>PT_b!aPwG=4c7Ax8UL4y=861=#U7I$|o1uD3vKyWMWuB8+S7TiJ$0aCPR zAwX{E?|tX{{<-(RJ9E!Wa?YNdv(H+4*|VOVIBiW8auNm-EG#T?)t8F8SXeklnCnm? z0?hYcGPgC%3EN9oMINhqoC%2;;MvK6n5=gJD@iAj!_m{?ASXdMTcOUE_x3V`_ zSdZ6K73K8(E%sN5{b^o-3Dzwiy`W9Rvev=7Ppgwop9V4|`dA29px{?m;Ef8W`0CxD z(elZv(CVW!AB@CNi`RZ*j*r4djA)_0#(I`&?uF5VAM%lpN%0cf;9s6Ldv+?qpj^?JP+ZO*lv~7`QyOma51T2DiB#J$jSDy;s(=pz7+WUKL4&TFMTS6~&^DA_5>J7Ae6*&s z1kOkX^xdo1RdSNikcc5;u_|86wp#Q>iP}6Ax6kZE_o>XSOt+KJy0SNkIWy|D94wj096Vr~dux}TGW=`cT~?+qRUXU5P8miH(?v-o z%+i5oLw$Ux<+Jwv1wuRD9>m4@29T1Rac;iOys8X5SGxWN?t41go|t40ef*@Lpq17t zUu&2PA}~E+Pa>!Q@9qLXpCk8|n$y`-lHdF);-1GdPLYmCc2Jg=0n}6;Yb^7lUKe*t zpqOtyN!k1M4F_GjaXNyT!Do}iVj_d+rQ{M2qXVSu`{zQRc9$=xW0b1(b1LyJ;Dy3X zX?^s>ey7VqJaSw&aZR<%C{XxkB6;7HJ>5zyqqCgohH!xX^n85LiGT&$Ep@{fb3h z9s@T{x`~{`N*mrP2}MQy2lF_UAt;I+|I@Pkr3bGGP%g`5ZO@TCK@Revda5hU%#zCd zgkU}QW2J55&4Gn^OS<5a5EEK~%$k77J)xZ}?BrDMQ*b;i{A>dJ2mFb3J4^*mLD@1d zqx0FO6WajgTXk}$e&|I&a3qxU>>?Y%rcJWCj(ztOP89)#kGxPoe5i8w%*mjOO7Y) zugpkmU)!*z$HuzT3%f>&QvXt876JJZn%C55@lW>m&%YYrIfqn3oTosWGcS=!glLOA(-HrYHqUb<3`(1sJ@)S z%U5n*b7>!qlYREoU0C|vebJU8H!&yllD;I+HgSt^6DG1UXgf`|Ye&Q*SeaQv@!7Bh zjI7-i>dEY`lk{tmP9c}k_?O@M+E{Z&joIpzqN1Ya17Pp5w45&*S$N#nDLZ^p_+C}R z8@Edra(<;j-b@Dg$#3*GOXe??T&mk6L;~S*OIo=er@7b)Y|oW9CaAw(zDnzDRF`c< zULW3lBym{M$uO|U4DoUTJ~Ndse%tNc7O!IyjS-9}IX^GdD`L}onN&Ah=4EM$-ti$A z5AUk1D|+_pJhHWDWvrR{UQ!qnzLB`xdSCQ;%FneBln)aNZHZ0qFfPbbJRX6@FtCDNft!~?Pcuu}kQ{)_>T9E{L_MY{W__O-fH)38- zY77r4m`ih1=j&=B!B_Va*pUw>T5z}m_7X1)ytI6-~JnJ)UG z2sY<`S-pTuJa0-bmOChiN>)EaO2rN}Z$$Qw&+NTddAFO1$zCif*alzbE}W<-9rGqT zqk!i!=-?~@N&8S-Sj0R4`!VI!YThDMfW}dy_accj@)vs)!kV6FZPGhd#)N2V(h}eA z;cJO*N^yLt1u7AHTtaea&*)?&oDN(%=`0cQ9_@FJ0eawC&}5{3>y|YZfRgU&pc;tJ zvE04ZWbV58U^^D94lC`H+-T>N;|ll`=ok3K_6Xp&Ik@`X)|>+$sv7=+RNv36pr3)Dd6d~dbzK4ULN}=xayYr@{_L}tt(|-Pvg1V3g<+6oF!=X`IeQ-dp$}| z08&6D8%THNqm~|Lj}yrog9>MO@8-wO5SBnx{o+r4553%f5o?s*6Vp2}y z2kLqlsvXwZ6Q)}Hv>axSEy#NTHFnu4DNay+dV5Wh8u+Uy?iGm)FV8~J$7wZ2N&=RD zEj+t<+tE}kI^i3!K;;l8TASAlCXh&&%j31B;uYAk_fx~V3jMf)>ZSnAtZtw45}jc5 zpXI*8ezR<)r z*noBh#Q|KI_-jBp_Mkf`MN@fQq?*EM3L!lkE`<#5NgR$?%9uS;&j{g;i&H6bNKwAe z!eWbXCy*PJy{$8N@}$35`SWiB$36?N6sS86&g-)~lTL89Yh2E;-5*V=E6A?MAod~s z^puR4oHR|P-MeusS@v4u0JC1jIfb0^c!m&u;|fTJ^pcVZz>U*m*?0IW%+>)c`~OEf zi0`%42K81WB#?>q-`5P)YYOgu(fGs8xsI zI{0Fh`x1^ewMBTcf(f{~#5D^F9F4gDS+?efj8O^eeHZox0iiJatJxriZ!iU4VG3k1dy;u&?_|gV1fIbYx?KUbFgg; zLe2waC1Grc0ifQWtj^&OlvoyeN}l{R6flwl4pd%4k8+tr5iOu++1PyG;2V8y<9!EP z)(y7{_PzPjT=bIp1$C#m^{2TtY@8j$XwUQw*oUO-)hpfz*e}zJ6kAu;^K?JGmE*D3?WV+&wOv?03LH8Fu>I z0M@W}qbSmA=}16!Fm}Lm7lK0H{jzI7$~;}_oYtDu*%|@-6dW19y7|UD)2^AmN%u$0O{|MTn@&))%Qt{yK_c4r!0}tVb_bE)OqG{8)y?3C znq#NLS^+N&opfekPqSyhs=X{w`T&zTy`_3jZt5n`ZFV8uSEmQu4Yr+}8$)&Hn3NK! zmxP_(lhd&eve??RckEkv9Z9D5kzfn&U^#9nmr(8_GY;)cc3u`~R5>J;Kh7s)>3nU9>tpqtT)Oxk8hj{WjhsEcIId5qZR{08Sp zb_*QF(8w6D9)V)#sVEV_B(Dc%AINGQON&GU#PbW-(W$LYslL(y}~;*ub-cNspy0Z)Q3bIcP+jN+(ETX8?gW z634)BDkl%40~hB0H5PMn?W-OC^>nc()kRMUW zk#sHP?b;%8v(+Z6>`YOZ4a_mMO^P^oiGRlo^bKhKc$cc5ic17e+Fxanb#*wMq`M?1 zCv#d>nQ%GHyUkG_WlkxGP)<+7CLB}dt+i?!Tu=g4b#4BClF0%~!fppR2ILjqo-L6t zt@s>oa>pgWxjK9YN7Hx>8(FCiOqLtDHDOc$>#S{|25(6qP=!@I@N)X?V%sj`Vi(Y2 zG>Q;%upIUhx5n}mS-vZXKrW*!eHgs6a>KD5{9~U=Cfnr#xzczHQg3p5AgI0}-6ltx ziK}r3uHWhW2X(i)o8hIMDhWA>=D9vBz(Dy7%QjCAelMNu%H6%i!!x;T+b?ypi4(V0 znxE=Iop&Q};~0+k&92)B^xC#3w%v9GCc69JU@7&CFz(r}D!)Cxwb!myc>vG0!cm7# z9Hew1)sVX2AW4=d9o8EL(iZ-;eCcr^v4_~;)4Z}9=LbG39)yq6ou=zn%sVb#zI++` z>7nR?$%pxVCH2j;@|w{&YWPTx)USO7WsDzbU{VUsOsmvlLrkdhkjh5c`NVrAd+GQ8lxhUw+SI9c2eh+ge3Y0k zPCtEen*PH)5Lg##SvIV&PXFpZKGSwCAn(1R?5;g2{Pk&VNvEVj6!$^UlP3l1+Hb<6 zfkUybA_NJT0tBul_?jxmDgqF}0nbjRzUKr2da~?HFeP=W3Q!Z1MPv^+Jis0iNfao;(2OlTL}!nvDBD+U@r$a%I6`&HF;s|o_8{I{!q-9`ClXKLd=Gv!tGkyOEyV@O^xjv!V5 z!&0rSMsjlngX-)UN<`A{pbTcuIW{srH*qI!gzjrf2Bq+KFObSq+OOh})*y2q#Ow4T z*DnHT1t!D$pxj2?93;#ye5S%&eXCPKp;SdiR`b^e^_x{NLK1W*BM}FtKSw^pG=L&L zU5OQE#h%b~2JN?y6+SxQ8c~F~l%KqO#R^9fe@>5o;Lie%cmlOTZ0=-fW0 zaZSah#VjQO18^zCxAOzjdNE z!#40YC;o?wy<;aN+H_EF|375BY>(&^lrr)@Nf&pRZ$9&Zh6@Uk|MyAn{~*ndykLqu zMRgp$W8JyVkGEw1AgI~@W{9!<+iyKw7~7lb-N{g_l~vsrc$qd|WK-&TiMyut_m+^= z*z2EOg&KrL+~p3s9R{i0QAcrH?dqDo&0{%YmTRHg=DdWMwHn?2)Ft{X%Vb{J!I5XJO)< z*dRGZtH*gHan3wAp*aG3s~#(|l_(=u+>>J?E{IrjAD_lXtrqKK?@5}tWyhY(K+5yRTMhJ6yv z!@=?Dy_A^lTot_R1S4-OPW~nipH}a?rBX)nXnY+yq5D-@<2jm|Nth5c)q8?*D1_fL z(B#Bd!y1_2oqZmqe&`_b(sG&e82r)Uv!|##trHjTY6S|oGt z!w5;C?-MgTwC{Q(UoOp& zJ7r8K@r~>*!gvCZs4DKHL>@nf6Kng`W&^b;S^<+MZsVat;A45N3tIkzw4oqx8~3}s zf=%Q7FIaRO40*1sFv8wT-5B&D!h+c#{97kP^`gkKy4GBLt=$q)7$n6l{@#7{&71;{d)fbEfDKUGiQZQj2f*S zHEds1;|Cs1bZWt|FS!oj-AB5UJ>HB6g*HlN41>Co?NBq3+IF%KKe#r<(B+@8asiJT>q`mo+r&$lk&H?xs~YQ(vR$XQf6A1QuR&kIv4L|2n+_> zB1mM2iBXL!rJ9gtT~|%GjMhlh{_==4G`mNyp-9AG`sI7dAcGi_CMV-^#R$EH!~T8v zBOTS(;Y!#oAt+5|OsB0c?SVchCjLj&u-e_oVfu*QovcxI1Tq{oT0sbvCa9v)&%?-( zioB3TFaMkB5$Eq>#pCxiQZd|vF zKm7%UF&gf?*j6_%Xzs2IIuh2hJP{l1HsU_nf@W-{>W6svbu?GK{dTl{3K72Y$ScR* z9UdQ^q6;njPA10;=F(vk#?aAo$*yFe`>l@MNj^^Ly9=sWQ{N&y7qWU<1|(aYR|Qm6 zRjM8wqJ-%LGTlHlP^66F=UqTRl=hiv_lMh5T+mf#6;Wg>}VD$u+1l1u5 z*(tz_s$Ekzv~dqCyng1G4;N04s`F`wkZu%7;WLxMHx5j&{ep*}4r!B@6G&`;5 zS?8V=TX@lm6e0b)NWiTyMvvX}FAs4Ak04(uzIxdAV6l^aMh}jK)h3dt5terHHCRdgAw= zAL^cSU;Yekf9F5<>TzeY*|-chop4H}k71oBL4qe@WVm8>_svELe{xoUX2oh~$4r^d zDtI@#mwWJp5-28SC@FQFmwVdmyvj)^&6Nqc2$qti1kyaBg5Zpk4i z%9jZT394IdUhTOQ%q(|Q|6+$9Wag`1snn?zFiUznOp2>Cs94XL(A>aU`~6a`)n4}a@Ek$sQb6)jq4Cua|$OH`3xVTvL6H9vc zuIqk_OHAWg>hi^3+RcSO)PbFtEVPL%4b6v)26giif&C7yO)ePEn^J^;i!qwVMWuF| ztTjIzXT2HG=NHe4bPDYqCiA+tE}^6;-aSuZ`~29DJ06P-b~SJ8wl`T#!_K{|vr~td zKK93VxMfkYXmnPOX^JmaW4PNS1aEgLE+Hk-j}XQDmPN|`Md*?F%wa#$E%9mQtJ?3_ zF&a=p2vI%a%zC+v-W9J2Z*c^$KbknA_Nsu{02Lap1>?eunBb*(yQ-bw2DceOur z_HS9yY65TAugrmTYwP!_25}m)PaJ}z(0@C3DLGr0zNhW3T*%IR)g^0n$t8}J@U3E715roJ?p>L1vKM-C1SCWRPGq5;EdBGb(4eCST| z`K{l<${#QTu4Qx@J<>MUIJf4%RQ>!6fX2`oak(2gQC(gafniQYzcj#;FkQ=K*X=fh zHND4e%#-Tnmos1lwUA~fQ7)rs%vW<{?+vTuu#K!mI2d9Pk~`OXZ#m9^Ndb@N z94tMPxYX7J`N)%ybJH4CUgc?G%a!d+H}c$ZQ(HQ>tV?;H{mLkxd$QKeP_Bp6nUSEh zN3Ot1|8+?1p5HJH;8A9sa0E$ejoImJZ4bsCP$A24)u|FWRN+Ia2YqRyZIb6P#MO^F zb6X6yMi5fWglyLvgR&PGdKxKvH6d%sxe+Ej1rAEP!HY<#%8^iAI9cB$+re|vG#QF# z&L~t#*q!xK^ZX#H5`GxB%pZ-3<%NZqrc1lAR^p{jp^z;`6FqIS=rlr*js23KpV#Z& z;d_&nzn`I0YqSn?C6)K1zGSB^4$F8a6ZR1~no+gdWbP4D_2T_5QpleTWmB)%P$@Nm-eWx0ErGU3f}mdQ`xr&{ zg$jvl9AOso zysuQ?<(WGK^**DbT~{hpR77Q<7kRrtypz?>N@@QiryM#m8lu{0Cxdezp7)K_bmA7I~>RAqf9?{rdlpB}di_**fyg1kkbhXv{uSbl3 zwjEiT49f=VWvT77`em3mEU8ayn0>swDrIvVBDX9sZm%nCGdi{Dut zHRZL-JfwGgxldKOc-a9V{Z%BTDbC+Ot=U2f$Dh%)K^J^?y80wmDRIj^41big9NC-_ z^w&J6@ByhYm9Tb8s@iQ%OfQsyPE6u%J{1h0DZU8`YudG>e#ph7k z)SMLvJwP85dE7AxOi498@fmMN4SpOW(34wWboO(LlXcd5Hx)yvHEd=N5QAi=>q4t> zv+F9S-FVSxfs*>0q48A)eRBVH$X1`{5hXKo))bOIOgI`lUhbAiX12pe?X zhWp?L8iee3v|7f-yOiUZvU}X4hSv%$yn=sX&(-BwD&ZGm?@BnlbJq@tW#U<7^AQ#I z?|DF*3!}v1cT1qAh#FE_r)`8_4+GMW%Ma!du!ds&jWNt3Ea%SQ`FJQtZZF~K!xvdu zy2Wbm*!NbSHQWZphh~i1X3yR_+n@K}_FlN6Z=-ULndUe<_xARjBtM}VAa37O18y%N zrZfR79((zhY^2$# zxtuiUw)3-EpA20U6cikf#`m#0%~emJfqIN@O8!tO^$rhq2k)`2#2+5sdf{ej%)70>FL#1XJ!`FHVU4YQ%UvH^$?eoqivp)rWSx zDR)-leF{5EM5l%iaaR74-(TgCyI|rATmSGtR`h!P&j4ER`NT@anKm-ek}ZvY>i{H^ z@MBbJI}Q~U`$dc0?I`-+`9UH21c6&7YlP87xghuuqL&CRtT+_fxoNi82;%trv`?;lvIN}7t*@>Y@m3#CR5OaK4? literal 0 HcmV?d00001 diff --git a/docs/images/config_help_dark.png b/docs/images/config_help_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..15e34ec6febab8da2d5c30c9f26b543b14ff658a GIT binary patch literal 8025 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 literal 0 HcmV?d00001 diff --git a/docs/images/config_styling.png b/docs/images/config_styling.png new file mode 100644 index 0000000000000000000000000000000000000000..3fbadcf0e607f6e5a0addff4d68ca8584c1a6028 GIT binary patch literal 6190 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 literal 0 HcmV?d00001 diff --git a/docs/images/config_stylingMode.png b/docs/images/config_stylingMode.png new file mode 100644 index 0000000000000000000000000000000000000000..c82d1685e05d7a76fbff57d527fa9edb32eda2c0 GIT binary patch literal 5366 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 DsWqWp literal 0 HcmV?d00001 diff --git a/docs/images/config_styling_dark.png b/docs/images/config_styling_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..010e585bb3b4c6c4dd4ce3f78d42c4b6b47ab334 GIT binary patch literal 8607 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 ZjzfaOhTj_ZfyXW}c)I$ztaD0e0st1}-=Y8j literal 0 HcmV?d00001 diff --git a/docs/images/default_styling_dark.png b/docs/images/default_styling_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..20569060803cb624eec61b4047df359e25a6872f GIT binary patch literal 18780 zcmd43c{H2r+do>W%C=io-3>KYTeWK_T0_ho&{B%FY6xvfQ6h*Srl{)Hy-igblo&Qe zYDjCIb=WNx5<^HOgi=BxhDN9%oF}@!zxVx}v(EYBU1yzjtYwkN^W67yU-ResT>iXn zYkA<8W54X#v**ASt4j`h_UxVAvqwNuL>PGIrLP(Y_#uFBu)MIRiYPk=yb$s>zh=H? z&zn@St-Jex*P?+|&WJsG4u0T&3v|NEy!Py|TE240{6@Gtd#t1U#LbQl9z$Fo{pf7k zi>zy>{(dJE)-IuQ_t`_4{yu^JOXm9id(9=@Nl0EkduX3lpPBHHgCfGh$E8H#q(nRC zFKrTr);RK}HEu(7&0%47$i*|^{gCool`h<(7S>pK#Ny6k$2O}&(UMODLQAkxgsR zTo`RaEDyWFD@!7|A;IHuLt*3lOmC}L&-9Fw>++nwnc{3iT9N^h__nYR$%3cy=(bLYvy)MKz$pL zHdALL-RInBTu3AmZ%rEwe=ncGmFBtZ6WH2d;m4MY9T?_{QT-|#l$_Kw@N%aDx8vMjqUYc11=;>^5CLRF-CcKbLCLsEk(2d^5g zBn0Mvk22`nd}@LbWA6_Ncx}6PW2hcxrhu~hG88G+`OMdS+{jJ}fAdsft~ph7H3i|VH->!1Sj z%4myOtwXvv^6q9gSLtKKV0$;vvIIcaXhJJ#YeFTcn31)kB^(n6))E+xN6x@E+S4=z zsebU>0aW8ZBy4n+;eJeUm@QnHf#e;YH!oCZqYRh?wW3nz#*9Hl_-X6?A-A6P$Cbfj z3~m<;hO}#l>z;r=n=oL1ZylcMO|188quUll57)65{Tib)6QcrKG>iUZ34U(h3s%nd zK=Zh5Cd;j$OZ4!m##sm7!`I7kcm&ixu!h1M5CAA(g(=QPfLSGFJ}X9nbt z8S0f$@??sT*GXUVnmA86V9srElm<-zMus6iD%#L1@^UtR2gZ z9PeVd-OR*uhq?O^3}(sjzMDinBF<(l1y*97clQO9iFy|-8sC$;;rQzk>NdiKEeRWj zmcxk8{jF&U1v?d{(KE=Qc3}%<4-RjRd6`^$)1#qfL7c;=X3YAnI|vvz2nS6djz3IS zBD_v_APV1Cd3oTQ(ATsGqY`)KYn`l;T=4v!&|CD|7nB+(Q*eXnuY zyv40M`0M*~AOjdd56)19kNNZ*^vu3)JO-GfJY`?v$4%-+x5zvPQ^ zFTQTiui43-sd=eEV3?cKI3$SQl3$-Myf(woQO;Mb%^@8bz5>A%+49s1ZOJ5jMS0up zQn_wgOtspyniD}U2ymkQh=6a$^%-A%umu%PDQTS7+j&^TS-q zd{W_y`ooBt;lcyg^#lyp|3aKY{+R#!V7NO88+9;fTRR_7U7rqpfc4ol`FjlW7wKmG zBi@CMXH#YQlu;|J#ClZe0Zb`&KCzX))}K#?n%b~C=mvcVTx{Onw$J8Xp3Z+HR}8Y7 z_2*8L&dFSJu1wc^N8eB_V%JB>B$0#c^Y1v;6&89I6EiAWAngZ^3n_L#kQ0U=JU$vkk^m-z>c_xL@wOt6y zvnv#@{fKBkbmztDz10iwt zu{bXcT>D%sIbQLb;Hg0}4)ihdBP&`^Wu!&1T#9A1x;=*VFnT3n?FiM|gkff=pw<~hUFc1< z-WPH(gkGSZrvEwkyO7}@k8EA-X?aYaXq|ne(v{EwXrKhC%wJF-;_ja8ag38PvgAa3 zo%vs}_K!qJrR1~cL9fp`sFb{yrO_~y<|5kpxTS0wPPDz&+}RZ#&|;Cg*|nWr{-IS> zO{W^ooDH-a#)gV?&x0=bQy00Z&CZ?VR(f!j;X+aMPHDHrs<q%6~H%z19=T{$!Yz2Rwyo?bZOW_^VfS!9k`?;VR6$) z2udb!R*k&ejm0gPLR@OIIZxF$p|5i`fGWW8%TXnq8_0J#+8NTy3|;N!OIFT8R{E}& z!TSRqvDa^9-lZSe_%*L)yIB@y?@pKjq*CH_XN%Z2~eiScwJP(Aau97zT#GSH|L zt!t-CqPxSrvU5A%p}LGPcjb}Q+Z!YQupWj|r!D(I8wo3_gI4*@@D{cKzGfi}to;3$ ze`aA4%4i&kK0Ml#G8=6m>6{lmn4=)GZ)LUjS6MIc<%Hln%uh?Xl5vvC`^)Q%hx*;k zyh|NAhFV0Lf4$%yu-l(a_|3GSUyL8nhZ3ZjxY>*&w@h=&BNDSWZ(OSChy~5B+lRf-x;?H8M=jYm*w> z1EY)vDO@&W$1r{r`-klKe|M4ZkHk~!(h@<;T9BOE>C%d}AHAIV)&>oWU#U>($9G0< z@siy)tWe#$AH6S|82J^;TEWkq*FxXVE`KTC3w5S1a-B{cFjsq)WuQ z`c|Ur1}eNlAo`n5fTZlsDk7FsVJxg#&aj3%cb7R4-ZG9c#JJfWq;aq6iPjTI4cUKA zN5bHquks681600Go4I=c7W=x=AFXa3JCimCS@RyNcLMUe&#}b6zBEQCO1_}5i(OQ( zW#fX=ld3Yg={oS-G|4lAO-s@TrYg|20nf#Dz=GCyUNo1LRtU%CrGXtqZm3yjl~1!P zTSbqbPg?WZ{JuF4ys!0Jdj!pml@dUyKTLkG2hsq^kzMoOPauDP5THPm!$TGnHayVo zZ&#WNOp!KP4M6;kKEi&Tsy!y3$j{rfrxRBA%%nPnzGcvs2r5B*wI@);ZkuR+zncrhD3Seahdk20yav#e=(6hK z5bj5Ap)DI>(#m4EBh^4uWrhXwY%>N78?nOHw_-kyqOuSzDc|bxVk^V_KRqoV2M6x} znk9Aa%4_-P@rf^v`G{8-I3m$-Gi)sKeHGocq!u(|G`9=(U4Z>&~95#S7PAE{{=+Ef{ zGmSQYl`WV_1=ts7I2*5Ei_NA*n?Wo5au1Pa-sy8<{53hnftYhB6_>6jHA8{_F?$H4 zrY5eNg1oLN^O0CASCVZ91gHal!-mt5t8^ib`W2ZC%Wv=V#lkg~ni^G3$0njJ4*Btf zrxWyX&KMj9&N0{hZsvZll48 zizNbB-*1yyiR_9qgg}805srGuEK&&dDwckk3`V8m-|6NbFe*{YKd>%4!70|z4LCnWDviPPoA!d^Qrj_ByqEQ@FU&G1}$TH{b zARw0SroQ)ru~O$!^`d$!UDXdCiA(qEzed-ia$j$+MxRNUHu}cx)?!EvPZ2p}X#;Uf zx?bZWWp-(=4Px8gyVz8j!8~=inWmUa5;pPFKbWih&fqPoe^dL<(9;C(Uy%Av&$6F# z&LYhWpaviVOXsR#bIi3!8?vJyrOpl1qaKQ_&G=W7ej91Es zaj^Pm`LQYkQG|JT@mOfi>wuP-l*o#v>Hdonk zEuU47Fmm>0d%Es#`?o|hK)_#Ro(B?fJzmqDuYbphC8;I21-_Q$0+|-$-U&jiE>pzo zwc9YL>Ft$q7q!9q8e2Mt#jxyVMj8M=_b4=TKRj#B@CN_b`uYLGXfmtHA~CKEkC!{z ztML3Z{|Pql!%W@QsI?>==sx@^_#rLjQZm`x82?V2Yvd9pA1Ah2kziTk7tKs+1#&C{ zcf_J7S$YKU(p1Ew2(>}L=H&3J;VLVf)_NVj;PHb%q4w=q28-ZQDo+FC9=CQ<(0-A3 z91y$^L!k3H=XfWE;yIJrF3h0oF;OFbw~=#L;xojdYk@J}YDzu^5!Wxur5G@5FkhoQ z<)O}}I!y|*eVGnNqhf;mX^1D)6{(g)4-6i8yTo`gQUE*cZ0G9!CQ3825F$=HOUZP{ zW-;wHkL6PHAZrQS>!o`5dnjga+fj<}%6?VDV!g#1hroxAL{RVCIO(-ABUjT5$s93t zDe*KdX;nEndzYpufUFCA_Y`qTVKTF=Z`Ej2AvF{8mb0WkeH%MqGDA31?>n~ojquoA zie8ttEqgUO`g^OBcMj$I@x9>j+e^J7GW|K|-y8R3nrS~iJLsB{cG2QD>5uchrnlIk zuoiT!TW5?7M_9&v!sik%@L+cY(y|tYl3&1dT3b(`!gGUFKB=-jFX$Ck(;qve(YpM- z^zzo2^8;?^gO9ls${@KO&T(-T0{Ac)lXt=&obV|$q`fXn>%-YKmK;+=$#l# z0&Jr6Y(&&6+DQOT#0pweL_R9{rWY)u#CzHVdu3Yc^`^so7iygQU8}$vz#gB~?lBad zWs8sVK1i0ra!f;C+tM%$QUCzvQIYw;U5Y(lr^n`vr!X#TWbHk=Blc!n;nFtg9-e;l z)`!8_4zb%n)oizje!zrxhPQ@}c?0XtNzJPj8hF=4jXz*||d-&Wk&`@~^OGcb}aAHS?HyDqvicFY3bHE>1$5IuQU@V-BN% zE7QP14+PrALKjR5k|tbP$+DW;nkNKWASJ_wHw^FY!nGKdk07`q4`H8bibn5Dwg9;( z&%Jf{>-(MmU@IqU+uZ zp7X`Y8?*Ob1Pk^+nKzV?uTJi3U(Kp#bmr3QRSFniiv7oyUv0*BZv7Mc)ML?I|Ayg^ zLn;Vrmv2n3L}!}}25d&aDd*Sd&pNE%v2xa}BJZq|$A%)~00CE(6#X*04$}v3qy(!2MDx8OJWf?0aa!?klamC^b9ep(2o^`2L(gMaq|8R|5`>MrhiX6Kv6` z=~y~B?87{?H0x9huROWWWHs8jB%`h~1UsMa9~ls&^5c~3BNRCY?B28wyRMec!`3@4 zUT5DR7cM|o*PxlC7 zL5<2tpTxxbf*}_W8m*|F4dALWP`@(rI12{_>Yh2ylcd{{uf8O7DTG-Asl}=mNz}{6 zQB%1khkT{Q7?5kUaC<+(Gu^YfXF*c+G*p!_aPRTl;pA%SW)Ww%9{KP$bT4L6 zYEnB|-kCBQDaO11Vmgb+abM54MwjG!1f*QA`a+UzP|N8e7q>%<M}C{>TB6rf*Vw?8ep3?lEnFg(#=iUFb+7VZf`2JSnLrNJLyk;Gb|zBj zWIwicbe=1vE7F=tRwM#)0sWK9~35gXIc-Nhl^-N-56bw1} zbSZ0GYVG|ke+TbwAM7yny(0i+ZS~_Pq}Eax;5HazZCqC2{rc?kJ;QLKc6PqD#aHn$ zBDs|?zevz91-)@3o$Huw+TxM^tcR zW(mUWCv#0pnNq2gs!cWEvvQBHLMv`o2?D&@p`{}kTxN<7O}k)mSW6xcS#t)oA1n++ z2$2asaV|K7dg|4lvi-@okp>1Tl$BOJoN=GoD=u^Rke z1_Y)0_z~)g%bx$-?#_Q}f&G7RlZn%NHxMM_uw{DWB9g%-0DYvWWr_zH$=Ka#h;zCC z_AGT{l?K<$L(OCd@GfplrJCO2DV43wEIty5M#w6x(j4uKhp?Lb3pQxf*liZRqe}3o z3DC2J7n(2kJ@E+t)8JcvdpE>Qw*oyzWZERZ2kv<IVe>CaY_8b`%eHSx3_M27%+9y5c zK8krAvt0sr9I$2H&v}HTfb|UxTN)$R7Cx@8uba;Bw>Y5s<#a*E_wF<0-;)ZwUzlC) z>xL}}RjH-lx#CJzDn7OK@*szbtb+=}0)-SCe7{CoopU2Wvlv$RX{lNav~{T(Lj@ z(iC~nf(RIG3<_dX>lTc5WfSVRHzIN3)`uH-+e6*dC6H)9cAi*fW#~G+6?eU>Rh6}o zYtMGkO$h8g9aO)swm*QxbsMjCAPIk#RcX_)g^9Qos3 zEbQ+JCnw-!pV^KrsV_(?RTh=lFv5n^->asQulz{V?HN*(7OJmTi@5t5+u0n+X<&17 z1+Xy1*lIQQOE^2UlEv{s&#d01+2*ZvQ`id3zWWfp>H~FZ4X6UZrx#AC@!rsT&zDZ3PXLGQi}0O6Sl|Q=Vq74&E=B+s|xWDNXs| znQlVa_CMAqS>cR99wv)+bcH6bqKZusn`ddgMob3Ewf*z<=W}I)7>Vz``_=O654R5n zbUS-6DWMYzf2IRVhcI=2nH7Z#;an_E7aK97F1Wl`KCFmxXB8iKFAX~-RN{^eI61+c z>Ay8BsT^I!kvxuar)7W0{6%!YNE}lp5IS#d6|uu;?9-^iT1Uj`0o@?4IY?9-f)b#9>FL9UZ24JZrPV=#^V_` zJVu<+-z1^0oZ_oe>4(@Dq3Vve@R6oA?0D!J^D6)9l)=5Cv;1F9%*Ff<{Nh_W;5v3V z;~>+WA2T1DB|qH%=0Ro@zd^gx&c#P^P{dYzdpPR6 zg0Hw*esjhSkdLoXJ+m$4V`k}5{H;F2%qj|C3wow3686Ck7mCbPiB{;2XB&cH@rkXZdh56(dgWc&c|yK+yQP0+m^rPrI?CbLQdxm92eY zOo>KOrVx88FV}V4a&JV5=-d_&8~m+d{^!kyjt2zcca9}nmNebO`X&j703h_fyT+WK z@#yci{Xaw1Inw`cLe>AfK~qhmz;taC0RosH?qPJL*W3SLh!nco@lU82;v&;0+RcCW z_p)t(UjgE`xIgm47*MYit^rZ7J)DUvZRVUA{;+YoL=Qbas~o+L7GO3`Kh?Rb4^_>d zV{P?SPD?t7I>#eQ&>M550X*dGm~$aDba)3Zv|Lj#G&%79bOF&y_iL;0v{02E&`57@ zMx>lClkU^({3(U0W&y0(<=4mW33#J#0XL|YIC^U znVYpO3z$uJ^y#1N_RqS-2P{~ng5Ll_OjomZKKt+dl@43S1Xz#UuM?9Ov>?OpX`hqXYAN-AqFN^6f{P8R53qd%Jz8|QJX+CohkS;Ns*GQNpm zc8t97!n*W6!qB?V4*5?;K6-m{bFrhN5y2q-Ct}YEhg>-P4hM3P>f3uCK7hT&caY$$m%Er0=B%zk~MYq6P4uGH~ zF}{W{#m;le-)cXvjK&Z{ugR@NeRfz3yv_KOECZrcL0Ck-BQEx&9GDgLYP)k8b-^Rf z1#f#G2Vq`$b*#R%N{<>E$@8TtFMXdDKo(JSwL8=m&No*fHxsmH>`O7;8ODRY9m6;% z%n(IClVANgrV84|7A)d6UCz@K{&ETcRd%Bo8MY#`k~E|3(jB5%RtV8;(6-xG_X@OP z<}71I+oOM2Rx~dD!h1!Ib_Yx*gWGMHTybOGasiHcpEtxt`AycIg%Epn?%op9bta`iOa zGF|e$NT8~9PPVPjwIw_BFfXmq=25e%^_Q3O?159!``N?ey~=mfHfleZNb%ZMx|&ay zj;-XZW>;+<%+5DuehQK4Lqt8mk_pXOq}^zm=bLhKWAEza;pf|4$H=|}0K}wTGhkWs zs0X){gZMUYJLYA!|DA^U*@u-W6{pH1UOT3Cf*;5VnZ8#=9yeEKuN)d35N4;Ws0`j& zcNt!NJ{Qjmb*5Hv%1EJPFsrBXOtfDe%V#s~I)URZw|W3Z=DnD}^0FB)gVW`#y_;Z; zBfwWQl)V0( zpt;zKM+S_yx4qb28MJd6#J6uSA8b(T{L1HCRsrJO*qOZquXP{Rjg?2>IYgh{@H?=d z>+ZUHBPfUWg1=&(TA#I*F3hf$(F>?30USwW5QB(~DuIS*1a(`58C~0ct>l^i~LXp)Q`eQ zj-##I#uXW4bA6p{-1)nioukKX@7%x9Jp6eUd0nN@q-ZYbg`JmySOelL&=KyA%F0^Pcs<$D2MnSPdj#@ft#<0Z|zoG~8Fp}qp#Ulw#= zm7iriE66*PKP^gA%LLb%W|XRLh%sNX$vNq?KG8ZMR=j(+_Fvcu>+mXqHZw16@z@gT zMBw240~@tipjquYip$XyKD^?n@?e(OOilY9CEd5`$QMslbDQvr(4?x+7d{7~ASX5{ ze#ORde|7+&x~dk?T%bt~lM~eaYQ%Z>1Pt&p^tr5HtIh1ZbQ&3Dd;0#132SL{{b`&e z+e*(o_bn08EjfzH>t7aPDdsxf+KY5mVJbXhaaBCdoyB8zf!0;oKG8;@LDhIVu;7qb zT@M}#bQHUF56t>1Q=z5BBr65KkrI)Crfb-zgb<5nod>-l;eugjQ^C?f_@X&c62d&+ zo|6>e4QX2%``c7>jqE+9_F+Tk@W1tE|JbBE;c$!}Hh%d|aU@6pYrh=o9FXb_G=AkG zb{oH!8+*$T2gpYEy>b{y6_ja*1Zc2pWL$WXQ1o?`qIpN;@67$&kw22?yZhaq`z9E{ zgXx)PueXTI#s_r=Z-QB0^%%gW-E<2Y8gP&1lB_7zLbG>-43!t9uiqLM{|uwyt6~A=x*eojM^0!{h$qDQYdxM>(E&8tY&R&|!$uy*e#q=* zh8v|t|EBL)?f(IIG2tT!uzw2{FK(+uyr#Pw?C_2<1wgz(;l$M z-i>1wgFka1un_R#XTdN~C<`$&1=xOx0Q8LJZUKO^8}EMWaOB+T2y-}O#&HoaIJZe*KsQVSTINsPL;+<0xINb z3ocAwGI|_q?2u4@*o%g|Zqa50-+P{O+RjiJ85aQ?E7;Dcy{L#@W4o^XH(tqZnFWSf z@+>E%a3%BR`&PC}TAz;>>U0xfi%D5EDHWylpAp^K$>eey;7R!HI_Kl8T0dKV=IswgmO*9LAb9-a?bwSf+<9Y1x*L z7@0iHy@%h5&SjK(%!%JMB{*bq4>LJ5WI%MOd;J-f5WDt2%bgQ2M(eAK)FVT{r>(>7 z!UHUuESa&@LgBA}y=%xpxicQsYj1%*5o1hRAzC4}jL3auTzLt4w;~t~!(VOmaB|xxSN0YCNSQ&-`ylyA%=}xR+ z*e$O1PGtkVSr7jaT$a8aTYr0IgUec@0x12n6TIHom^(D#m6ou@stdvD${~_5lDU#) zqVI7RXG`XR?67<;EmVYIBl#MYca~V~e9An3y^IK&=PsXBmCE zU>nV6|5zZ=3(w$3wX zK-*pSt&9RxkGZbXp_LaEXWsk)vv}i&MY3ZjuC?LP7H|a~*DBAzO3}O8v!f3f(~s#i z#oR!fzC4!_r_}{o!-Be{p}C?RmR}+>5A|hR{+O|T7z(K~H9FN-N_-N(u)0P|!g!wp zH&ja|iPA(rWk8D~i{(zZ0mOS3khEwigqq}{$9ixvraO|&f3$&{^_19cKC}LDziRw2 zKV1AV>n=@lp82dI-{ORM>dxw^>2K}j^kxU!B{*R>fq!MlbR88X)g>`tKjcJbVTN~vawUQ+CUlq(xQF+P zwAJ|KzkmXXs38cxnVb=`)>wF~Nn2Ff#S zG;%gkomuA(F?1A}f*ArDMRjGRxz2oLv-#p(v9pxyikPw-&GL%*-OFou&7%!OHsDllP|_BfLVrxbGbGxx z#hDH&4~RxLso7IUB%eygN`~t|GL@w$)oG!JC;9F8 z?S6gCHP?65*&dX~@iBRn(3wLII4$r);eJvoLXPeq;N48CH8;a}_>A{AW8~r1v?b%m zVCS$yGwYC6Wd{F2&awYz4umJNyx9Gt0lH;`AtRKasX@>O!q5Eo0|G@Z@- zxC7=p;W3o>FFQH8JDS^oTd9h3#S?Lp=qAp~OFR#DTg2wmoke2vI(n%My!rOu!44-& z{(Y8p3P?XVYimxh!{kVgcyjF3>z*sEdT8HS&3CJSlNnpjDNui}CGx5^va6uyzvd#G z*kaQB+!1J7lkTi+0nOGHet2sJZt>LWy7KAO8O>`JSW!ybdX8f5!mCO`*OO2@P^5YQx45`lY=<06IaQ!?PO{8&^V`Rphql){^_-ybcbF#% zI9*Zi&kmBU4dW5rhf5@1JD)=4MNPgLGAi!vNle?WW&JJB^+Q`oY>WI8uP+FR%n8#> zlDx0#>0WtJrXWBtG=_lP(;X$KgnY}X-5Yn3D>B)m(nkrcwyBh)js8s!u)f>}HTv^Z4YeCpkc&}z+Krw=9@>CN*A`=b*(fRirfeep9}Oupo_>$jdOj-~uj z6P2d|L<2|6^zhK!^L;Elq0tv>+pZ$@z173{Gp8Va^%ILk-Z^;k?-{nAJO^U`ZO_9z^K|rMoRQakEiqubfrNU{Y~tl z`-H5y$E?CYsf}{<{Wf-e4Y8Te91SitYxxx_N^DuMi!=0iztWzY1{?|?xS6ACo(E== zY6k=SXh3@Mm&-*x?ExDf7(x40BE4Grc_mcwA4w4$De6M_%t^KV=ILkMKNx7g@*vco zAF{jd-XOUitf&-IOcbeq&c;JU`;4^PSlbn}P(W|5lur2wZjjZdhpf!(u+cyn5R_TArX;kI3^jzgGJ@54hrcUJLdBy5qsb+NBMeW-Iw+ts`D~gCk3UgDZ zkQRNmZ69-^^IP^mz(Q7kW}%P+fWH!b9}l^ph2Bb@_%*MTXl16bt{k*wYs9B~>1c^?YGJ>9T*M3aLEuFZ*ld@m$229V4Bng{+b0fMl4^#84SE* z&y!GN{|{~+5y*S5Oq-q?m(+Vxc%K29z-}ABw$py!O1Xx4@>wUeWK56t?`;8*-={BV z{<=uD0+>EiZmB4I3g0FM@0yt&kGHgd*r^ssHj5Up+27t-=_oz7hy52V2$74Z5P!29 zhve1vHp`!G51bvdC9>(G19`MrR^|HUxgiCFBQf9Sl@Cw4HD9cSXsrNyDap{XV%-~!+LUuTo~rT%1*xclvOc4pYYWAA@F^4a?M zo!+tjiu2U8;MNXr_!LrmY_Q%DGQHE;hDQ`Fz*G4Rpb(@qz`}`@+hyVK+z(B@;WgX? zx|Tm!GZW}X0EBdnMV`y6$98uFZY#8a^^6vP?LT`T+x|&uZ-j-WVnIs zbJNnuv3gs-V&ct)a>R!zzCTt4M2v_GirL%*pb8IuGoyT5hyoS@a@Hu$fAB-WDl5`t~40s#=N%8{5kd42sFO0R6zXm|DjFR^qix5n#&G3F;gGaFWQr{kQPj^|tGyQpn$SB~a|kcX3`d35w?c7bgOVFBU3_ z#~phH&{7JL>MdB8h8+oU8;%d&=A@@tzdxcRx~}Yj`%rdjuxHBPU5YPrS`!I(P+_ko zkw+don&?@$4eg%1FSUPklKA9&!!e!TU&O8|UX1;OG7;i^3>4xU3AlF&|WCyf~FE~`%Ts8r%|!HWIN}WGxR@RBaz3Ee$FS3 z1RVb4y49X}XNYdm<8yj?ou^4!zXpsWg1xXOohO^LI(IjLW1I%)Rba_KL@vjxT#ytn z=-3NKU$ikO!YN*Iv;aoU;!w_-0?DRknDI;%DPY*B2jE}p4&SX!@0i3&40gevh(2(< zTSYClZF|{#ta8wgV=mlsGEWAP!rR>@HMOYeBi3~I^2G5Y%U$OhvUCnGPu!^k$Qn#O zS)(2xYam0OGms`C59*Rtx87-7u;2c8>-pP%JY&jxIQ8y7=^DTD+(3uK@BYd7l;Nnq ztKX}9Z~R24g5D~HE7D4;Iy^DF@1K`Tqx|BjHbgiCrY_K?2lqA7;~T6xRsiBUrAOFu z#nW3~F8|kulE*cQ{_9g?SN8qvN~JvizZiI;$n5s&T4Q)?Ej-T?P`T#6Y&8lxxWlgH zXx?x9kzM|rus4g|7&O(6+Ik$^%~CL*+KFy}>R&Rn4j%fD&iJyezAVe(AByida4n)A zX#Py1L-@K4u-m#rD#Lgi+?%My;~?i0F#%yoYfcR6h%yp7!JBmME%pA@iXxY8fS#_RuhmIq&F0J-62=W?+erks79KM5&bjFrgqObF^i_{Z-ql<>MN zmiTyO7h6p9)p#FCSQ%|aap?O_gQ}ViJWm{SdwU#I=k`sz_p-XSX~Un|`P06c-&ZGB zud~&9yOt-HcYP(_%fxI>V~4hm6$~6q#bt&%GM=)NmShc+F6MbE?>akhe4B8HMn;oV z-urzz++Yc;*kZFkGpXyNPvF<9(nTJ1^3&Yo&lzOWIna3a%)LzCn87R3?3eUH>d50X z&o`tgZr2C#${ER8hhaYzf!_x!qw96vBmAkjTu#^ppbJqgJ4 z2-Bi}c>JL4hnH8Pghsb^+&>Cd_g;wI)bM(zUWhc93A#%_SiH(2iclZvboURom8gANJE38#& z-}E}*@E6blrt}j=a?Mx?SrF+Bk0m!4o$Fcj#cB6U*tEX|!60InLgcHClh|~zfe1qt z65?z3X-Q>UBe-R1_BZCxM~(&nBc(jWwJ*thUyc;(?&;a*_nf&!vdIM~Y& zVbpn$@s#l;w>)symVO1y`dE5mpk`H_=B`-}JOZ$s zOQ$DN%j9St2IIA)t;D+MZG{!c{D&>m#e!aUW4Vr(Tiy?&cmHhxz*ZUnF8n5$3W-{I zCw2y?m{J6y1w{64{l*dM0H`~oYo_lqrTXR+c;^zXH@*K9 zFc!G~`*k?g+d_2x-f>#1Ukg2<*4xY!Vl6t$at9&s=D`qp}5tFEb?EWqyqZ7tRR-QgJgWYcyC6-D1SX~63!{D-C+;vx51jrzT36R5Wq zT|tAIW2^T9Go`c`$2S4AYi!-B(W}dvE%PIhrAZ4HXDInHc;mT{2?WRO&V7Q>5qY7Ha{1=MA$Rcej1>^w9o; zz|z)+wZPEU;+IH*528tm@i*Y9BEHHC{lZ+b!p4hgtU4wvSxSG61vkxlOV4;48=a~+ zbScZy09I0oyq&i?sDkkXJHU%c{(cy1UQc4wo43I@vHHTw7NQlJ8r`*h*K`PMZs;5%1QiG5ewg!+!@c5Ken-E=Mq zyIXA9GOuHvdmZb0_7_`hXmRw3g29H2m)NlJcBBUca!}d3>5DLE6-id-JZQAu1Hjdo zHwW`1j|T^dGws{w9vgF=tNti_P)xc>^&`;wKf;n%5)>~tcApa|YvWRQl~s8NYNH zm?kC8n&b`ysIcocTZo?7^|{)^Bbc>sjm0qllMLuQ0edb!co(B7Rm~nD&L`Bv&0RCR zUoaf0yjG$c`e}8uEYEtxC*Sfq`f3Yg{aGwUk!H`hS%-Jz=#F>;TQ^SRDF?y6Kwk96 z63f7MTZgs}j>Wdyi0+q0=7>p8pbng>v(=bD*-CSz>`y#BS>O*2&UQtVzJCYEogr~Y z>dzBoFRz-Ihg$bS6uwXIqmdt6JhHo27EBCUQKPIE2# zv#qx_T0dw0qRhK8AtU-{+bR`xUSI3jHEC7_veav*Bqpz6I%lQn*hoU1?Xaumkh2QZ zUvn_m+eXsCalhzhHocxSWQ9Hp=<%k}y^xk*4X>SgR@DO!*OC2>Km8TZWElI@; zQJ4=#DD7>UEj6AA>IY`sZruiD-G>-?XOpEbixj3>jlcO^X8P_p;blw-su!9~HHjuh z3=*HDZGS`B(kfI~^KA>NMH=i94|YAHF-}*t+@qi(y}eI&5MVN-t{4nvQ)meY5B@YCIdMMi zslbJ+ahES#kn1IAOTQt6ynkO34k5RD0y8OKWAe*`wCjY(P49nZO}uh^I;zr5$lyC2 z!x8gq@ud}s1<$A6DR-8_ysy#`)e7HR)$PWR(efh+%1A2vZgW*8z^S(D2Ia`mU;Y zHji1?xm&{{nKJT0^Jj8<7W2N?Te>V zX|%xm_Rdp`b8nyd=_GvTmaj#6d`?j{XxxnN^$TF5W$uf!)}d@AnbzT!3!djGe^{!v zeS7@U`E0=IUUo6i9AI7pj#Db(tkQ{JcwP12-|I*J8GR-M&M}y$VGleJiNVv=&t;uc GLK6UA6IcBJ literal 0 HcmV?d00001 diff --git a/docs/images/hello_world_with_uda.png b/docs/images/hello_world_with_uda.png new file mode 100644 index 0000000000000000000000000000000000000000..f99d2f17471741cd657adf0b6d2a51236163f996 GIT binary patch literal 26719 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 literal 0 HcmV?d00001 diff --git a/docs/images/hello_world_with_uda_dark.png b/docs/images/hello_world_with_uda_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d18d9dce78525dc64518b822fbe1377a2ede7a GIT binary patch literal 24758 zcmd?RcTiK?`!9@o5XFK=K|}=fh*SYZdRGJtkWfNz5jFJQTZn>+6hWyHdJUoX5`l;u zK!fzq1q7r92mwL~CGQ5#xBTYLow@IycW!3XZJ6w`vevUc?IBbfqIQAtIwKt&-38E- z$GUWMf1rWmy)&nQzcb&qnE?NsaMx9PL|5E-V*&WjAJz}S59#R2qR#DE(gXiL>+;0d zosRBe)8U^JwIA)5>FAznfF3{8^RZYSI~U8`U$;eDuH(D-ZZe(*b7IW<`3Li*TMW!I zH|R4#QjD$X@BV&wnOWq%4dLChzqp%BFER04q7T*hlKzpkhvg(A=OvZ8yqB4LQa+Gc zl?(4kG-p>Uw=&hbAgw)zNfzY{?eElp}>$tIsx1p@cMQt z2%4v#3rV>yFR=cdH|@3SbgN3&%MI0tYkzi1O-IZdCmO;K;+km+@_z9go6UM-SBpvU{ zH-rq+xbIYAHdyyzUs+5wEJq{Zt>b95N>{$s_UdHyd9KPIdLTS=ma;Dlx4-PXEUw>E z?Ks+9YS}z*Og6>Nqb;o$UcvnGEbiR7Q_Z!|nv-w$OtBDycs|svP|e9zIsQoZ?r1@^ zkH^~94n#dmVmYLrJeEoN2)YuY+Qrz6*cxLM#?EJUSK9VP5`U~ci?wT+AaIS zUhfBgDx}+6X)m)E#~Ogb|44k$#wjb31rveK{z%+3W6jSLF_w?g>T9Xc>PsKoCYswN zZvUEqSy*%FNftHZhA8d9qz4sN9p$zm`PEAyq(YGkT3x2L&9G|ZRd9z$wILa_mhz#1 zbhU?EvzInY%k<04Gr$0N20+D;uT#hN3N;=>k ziGk{?^tY#_;sxWo>|btgRc?;f5=btz$jFIOYiO=0rahENMvE}J&r4}Qf4=BVF2{@t ze%~3>-*O9c_19NRImeO+?Vqn2v^ZyI;hS^evo|R+my-{a_)O1qg7wi($tm8nfb#b< ze_zq6BvUCw$HMRf!jj~^j8Kw6roR zg0KaTr%|QN$G9GBwbPi10%D>OVfp3diOE#|m9m|@A)<4@rQ+-I9d9{g6{B)b4*xT9 z2*vsB0jAqBDKo%UDLX_W>0hU8vdOJsNDuus2RPk;>dy| zv6zQw#F>1q=#(kg<;rg>?&qMf)tVCo#F zg2iI5rhJQYYRsu}61ZQt})ZrAk+&0Uz~9Imrn zDs)-dx$?Cw=gr4kE0Xs)hwgebY7wQRm`6&gNPu;05hp+#<^C=lvS=1hu~yVS*-H;qqwA>zE=nWD;GzS2l>IOqhd( z7~Tl-Hu0-yHH1bokt_XE&LglW-<;gRa4(b(HHFi@&hG{~w!tUA5uYp7lW~uph_katy9ZH8Wvrq-%G}qXn5ki%w?1)CJhXvE9(2Q zq4De_R)IdOn0YYX#upzOrl_UfPAEtC;%NJ%Ea^8Ij=_dPG~;XDqi-zRKQqPEG;s~l z2zif<*)F(}ZO7jt$Dxu#qGH=?Vjd*FUkQN$<|f{DeP=pgIBJ5#M8atOu;FqV0*lW} zHBsI3)eZdFxY4WO^>e3;l{T}mJsnk3X02EUEW^$~M9(kDKS&K*sr!tX;eVLl@QF{E zco()Au4hqPE?S&P-L{XE-!x)pEzsO;{nWGHzI7o^V@#48l*lc*95PaZNF7+8+B3bF zUlRFIv(4~+7#B_06UE83=p7E7&<;%AO?SMKVC%n7mbQO8%;%>thAf)Jw11;c9y zC5{YqFQrg&nRz)0J04-pxb1!cJ3w%6;Aw=-dt%2aI||tnp*^0Cd)G|{t2&cPZPKoY zWZkkz%MQRD08j3itWFuEHgsagIYnPQ5v$RR7ERoqD>={8Fi=7ikL0SUD~=N7Gb}bU zJ}}q$k?*I_@6PdA7?hap=9z4lls}9K%3C=3odprnRzkd(qiGf``bNMrDR+e{QEzj6 zy6BmxV+r@1HwH7qoWH%P?%mn(#-q)D5i5$Q*{(BhtC_W5ow0p4(QGgyJNY3PD)U{S z-$)nAF&%&!sj+A15lL)}2}KP8vkh;nMjUVO7psYYNHo8_P|+rk74yNX(Z?^hPiEsB zI^LbHQ+n=(X%xgNtasdZE~O{AoUW58aP^e`5^oC>B7J9Xk_lOATbJ#*Kd+`(-exkm zOTuvh8|X*Wlf5>{TRJMTzX8I^H;$wnBLRDKObL1|* zD?-rrf$~aC`hrR>X6zLciHrN43)ikT*7DTXJ1Eb07aLzgS{uVo58M3Q{&a64gFeG) zEbFVJU&@R2zUczhWR5sK_of~5=3YaIl{B1$n5~CqEsZrHo@)>Lvet`Gw`qhpnWtIP zXY$5+F0g+Ror|l;5DRDk?XLz4c3w2CUMh9-O9eN`dm2dEU~6S}m&*NGk-ohxY4cpJ zQ$!qdE8*J>x9sZcd(fitBTEVF8N}KU- zi%EV>u?5ow*Jh>~3Z@s%F;Gg|4t(u>>^d2fctF(&nS&zW&D{>nwAZ_U)#(k) zL{Ngx377g}F@2uJoA=EXsp6%@G4(qbzPwDLNx#Z^)kX7Dz7zcUAr`j-5lhYOA~=V> zib>KP3kI}%SuxtvyvW|Os0P4O@%)pL7!aO&a?U#?gz_9iOzzfKKDoO|0df3xA|POtHKSDsH~hx2f(Hn1C{YWaMLrCv1S8`>||P| zYuti}kBY3lT#7J6Mh0o-hwNv`Sb-ypmUSs~?hR@dhqCTv=KGzkM%ZYs$j2Avx zQacs4M&;`Rov7&3Qfvq?fqN|tSw5%#fD*U2LV9At@6D~p6l$E{hnw4?EYNdgH;~Pk zK*1NiGzHl5D!vgfj-xAncM%0|pXe}BbzB*{AgO5SNLKmy)cljR{r*At76Y$HW%wSG z;!h{f)g*lFN5y1=Mq#9g%(ghVs~-g4g*sR7WQO}8Zt-1id^%}YP!kwBz}mgJ58p@d znH1ZC_)Ga^oLFL4x-*n_LPwoPJTAv<-!BP&oWi#k1Y7umy*5a`i&g3u^}Jsalgjr} z01G0dmoK_#r(meWjj>x6tu4D{tJJ@7TppJBB(9WSQoU6m3(1$MHoP1{9hddIyK8})E|%V` zL&wBMZ6)2RK{n)>|+{|tc=7*KHPW94_8n4?cdBmUf0U!rhKm~F{q3}XW7d*A`x4( zHsoI0!wDK3y9r^Dq{Zm==hA@zAoyIL zKXRvS%{Fk!%+0mr6tKx?!rgq61?CILFH|cgd}5CZ#$i z>VZ00#qWGSh}odt3*{c1jJEZ^BaPDl3!!sgd~Ohsotrg*4<@2GC)5O}PTxJ4O#4Z% zl`ldX*6@Ox^hjW{9uc|BC|1ATDa%mV)c>leGjjSBhmJtww#Wx^xJHi%e_+NOE zkEVOYJHEGocsVzEcEfQD^gi5yN>Yk1-CBaB$kh2SeH)P+vOJ6s-%?G63Iz>#{yg`} zzV%(x>L0Dc#qBU&@=YkuK9y2Y7SDl(;ig9AS@&3fhRweOMo2jDm%uM*$`rAeRe7%+ z@~4Xq_C(^lg`Mcqfl zC!2+2zrMXN`W3HF8dZ7SUfIyOFxtau4}0f7-NB?xbC*@?iv9SpmlGxskN#r$=0@fFf(tx;%KMgI|}i%}T=r#zr&(YWvZuKCN^2tCCEA{H!X zL=2$mTr%2!w@_!1g_ztNb*}Lpj>R~@Rz>R?MKECwC6ZGU&6vRuP%$KWKW+Aw0LV01Ksfas+w217Omyk1=&mocsPQA@pSAm%8 zN}I4G51sUwx0{N{l(Y@ev3HBFvtfQ!4h^cjEn!YKrvvJ+54))W^nOK2$H~gC`q*5ez)Ke_R^8FR>p01N? zTfpioM%tRT`d&>%El7i*b=wD-?A$5JQ;J`6y^M;J%$Z($E|2sFL1diy>1Gfa)Qzc_wr&4jaL%^4 zQZdoJmCbr+=t1k+t%NqWTd7*^uF0)Qb~)pMb`$-9S^H{xSjdU*gu5--aNVsmKn@|q zX76gr=+`M|B1j9x%`pxl9O%SOl6YM*%8hSSFwJdeOgE17T75UU_acS^%HGFMRGorR zN4jN(s+t#H6s8!+eh|I2_iUxCjkDrPIpiINzq3)<_w@jOHw#*X6)tZRLOAg!SMRce z39^2rE;lfKBOG;7#}7%qHTI?)Z>6il1{bwWMfFQ7&ToX9>6%0aQu@kcPvqnx=2A@u zI0+95+^ULeJxJ{dIs3OEIJ1G%SWAzvNB)28Xqziy3sZIU;zPQkJ zhr8w<<{#&?>znTp5!>Z5>QtDmJR5yia?ze;QNzgpEZ={%*W9ja{XK9rhnF7pv4%XdvbM2 zvF+4DKJwjqDY)6Y3A#{=B)|8DJr@d38et_krCib*T9Fa1Bi^24OLJ(Cj?IfzB!b>T zv6lIsR1c*hvWYM)2ujrSIN$mp*&|><73vv2ahsrr2m@EoLF2p^8F*5-;o13vbf9hd zEEIO}(`r-9((bDoi|4CNKPMH})5%SZTde3(sQ4iW z*SBSpNi5hefwanCh^*TC6`@}B1YBOMafQ_|=z!eDRg((~oXn%34+PT!U+GYb17G#9 z>U#QYPlhyiArIW!Z}iPgC#uQ#G;TGJhM%Li3h3UK$8A`!+|*42lLIjVf>}I1i`jeL zxZRX}yMkaXI5cVEPR8sz#==mUhlXFYSV_WtSi<>IZ_@b8i2_ot#~J*8eN^(3SoUi zP1VMiMC#;>5rcFP^6zN*Y`95gdUV6WYskG!Sf0EPFt1D!@HR-0ArIu03+;dmd#2L# z0#ULsxU?-Y(UM<|c)n5}H*hszcEkQ_FP!~ucltSvPOxKCSu^6YPFPcpG^cCcAwsXK$^M zd@1rXtxfrM;divmBg%3y;_<5=+0g;cdCsA^ZHNxe-Nxw&L%YuObA%(5XVotIvv@v4 z7dK2MYA*)^q#wCcs~B_GSrpGKm>4MH z?WD;|oVWoB@wt!&tvccQx84AAwFy6B(F{d1&QG&t=l&d#%<~e!Y0-y5hR>?utJ!UG zj=d6Pa>mV^i>6Z`@oh68|7i?0{G$R**DIyS{!1-4{Nl{@n`b$gu&v>e_HjNm$N`6i zv3-;SUe8PTiEi!(eJ{i(5OyookE58>t9iH>B7mCwkAcf?Z5J+^Gx?N*}4t{K#Jnh)%q-6c$ljSSEu0q{=YE73?lssbi>}Un- zPg1^B-cYggoQj0LjTKg}3NTNn%0Q7ImXz$uU@E9VhEI8sS8*rQ{0Sf26c=IpjutlU z@lhj1nO?z!VDh3PW` zu-pDx9Uks+4I)C&b>{S5IrC(KM@;CV%kulE(N}rwpAY7|&f-ELt1{B(ag~LqTDd)L z3oJf`G)JbSnf@Ugs7*Xcd&{M$bKnfJsLuZVB&kFxHkBCks6K*9|6LV3`ylWYCk?K$ z8x;vxR8?UO<2EKxg`;}z|@^b#eHa7|2 zhw~FJ19k!r$a69xAb_k78&+g+{q_)wz5aqw_i)rW0M=c#P*BonXAaFX{#2~bePBWp zw>WXT2OPVpj7#lLCvq)^kPBtUhU`!$9|&aa8|;=c=%!d)!6|GWK%ffCwSK`;!;MW~hUZ+a|W9&$}CXY3#Xocp^M5=$O9nSLl~>9&fNFC3r369&E>E z|Hv>q^&)fs(WuUM227h(Jx-i6Zg0%b`Q)63mPC+zD$uq zLZQsfxWGTR4)~bO20DVAuIEz=uI*YyS-SK7$z0yU|ysI8n9Y?WojvQ?IteO{ogF1?m{dK2%N za?Us>5xSEN6Q&es$UO=R!_au>(*>?i(eezF7QQy)ZoJIbj(?1W^;a|n8o3Wy@cpqA z(xN=8@aE>(jvw@*eohlV{WIMVRtuk7$;g8pozT5H!0KxLa7+2_lQ&;;mb22w4;3Wv z@o;RbxBkGGfA)Gqf9~oK;H*V==YrYWjqu*3mIr$~mSb2?OTcyNVP?(*w9}ARrx@M> z3|IA^QEiOAFIDBgwc;`pXE?IjKthQ8K#2>+#>T$RP!3VOvo=j7mN3nwcv}o%J?+H~ zO;+I5!b4O*OE`}^O#4w5hm8Qazj*b~$dKIk2mF{v;a7z+>zX+2O#%Y#Xkd*5;i_AJ z{*8LKBO35zrca+sTrps|YVe}ZN_o*b2}#?vfq2DQ&bAL#+Qx{7YdVI_uL~Bq3o9to z_BH^yE?9v9d86xX`^JtwpwcFL(<}j)FO#wgvmRZEEJH&NyJG~j|d=)fTv+TT-kTS7%`r~c2kv;CTsQHFu_fBaE zO9;T?czzbObAX5_7!^K3B(OI=`Tp(SD%tY)Kq%a1~t*tvpV!VN(G9`)GUXj$i#_A##l7?8RrgcE{|sMAAKw7pWr`|byt;}=q~{3)rH;7 z<%)yU`VwAvSDt1)DBgNZ%;~4p263>9)A?s@PpdG+*HgQ@g`BixW;EH`LejheQ{g~dEAc+2IpZM40rD*xRG@#$l~}RH}Uyh z{Nkh0qfVbYS~Fh;p}hHRGOSF=4^OaBuH3;SKEkj`U1rM8s~7djSJo#MegR1kA|RxP z`?8p`X{a9gh7dgfM5EP-0n3J6-%YALPmgmt|2z}(ubHy% zj9@H(XRXDbq}tKI{8H!X-@9ntFHQXE8DCxpv7yjkBFdjn6*p{}oXgL1cc3`V5Or4J z-#*;hG@_lKYacBCJ5BIQ)-8oDVqe*FHUE|9fnj2nFXN_9+bW2^Hhb2N@go0F)~~RW zN{cVXCk%UKcrjYhU4Z_Wrlp%dC%^UciWh0z(Q^$hO`kQ@$MUJyk0nAg=P4@4$mHtL zE#`3ubR_3P7RntyaL~}Q3d%?CY8MKehwy9Af0I1veDnsv=>>!()CXxwR`?u9DS!4nAYrfH^t?QpwU!`DU(lWLn<8 z@jUzZ*ws{@wYYoF2XvEwGMeT>6A`{3A~Jdjn=*jU1ta(Fn5ORSdUKsA!I59da{|Wf zYJSL3j+_b^NH>*X-`PFTRd{uZ(k-dHY7Bxa_G;h*!tgZCM62 z_jWmX=bQ@#<3Dehh&jJ#;-k-*x-O}}qv>b!ioUk7hsbT3$_W#na!69N@}Rja=eaMJ z#aFGiR9*ey=d}WsxNtPebZ@d$lPF^@>sKc8d-}enhm&gP;!YYsjI~g6>$K&ht&xrO zgQ|-6V^m7cWYhO^%j6I)C#LpzoPAVEkTG)jz}N=4*il`WVJPRoW?(Y-Sf{;`!-*<;tPA=-roHrpFMZdK)J%g`efOD`o32^qGW2zkqaQkAKdqd#MTIop~1%ewtFM6elBY z$P;%GY!`-}4Fq8n1w20-q=mP=@zol;#F?^(V7J;|3DG%wd@1IzpfeDRNIp!YtF$A{>Sj_%83$gks4OSks+|B0jAo59fL5GE!jxmBf&!dct>(P~FQ zu6SYd>mA3_Ur87a)PyG+08TRgVAYokJ`6*g6*8%OH_L;5*>wm4U8oCaHK>5s?s84Y zE#NH4_)lUAs9EAfJQ*QWGzxTdLl1K-kmja;_(E%K^)UIWhiI;Bxht6%ZJY=e_x(NM^_Yfaox zfbO=1X{~n|mFSy`ZO>)j8sC8Q?YnOdzF3zAC|hRvK`Npf3#9-lv7js<-xHpD^oTE? z8CtsJTQK?t6Q#?$bpzMe0ZSO*cEM?cE95c&>E+902Ibur>(Ck;=2)@%AN>JC(C|dDbp$zyF{Pm^d2InR!thJI7gc`g6NB(L6L9|j> zo)gHebqvn!1#|6v;j}kLA@Tg^8-(PF@-FEGFT*|^rl&1)iu)UV5<sI5IJUj5!!5)Ih)$B-bq^Ao0ljWMu&6bwIoE^JrzPVKY;`i?S-?3s{ z6YBtVC`?vRYmn?WWz+DB@*78MaS4{V>f4%cjd`cZ8yJ|`(XB;m2$#(!Gd{63Zv^Wn z_?$-RZ5)0x%cC_lWum21>(Jm(Q3Q3v1xPl%1zaFr)XAgg2s3}v#1ALEP;NRi_v+0d zwU9EDQ<@$&oob3AT&$UfGp~k1OV!w9$A5P`D4FUQaJw_=*>XySQHkF)4~7feloPk9 z@me04*Ky+il3iHj^FX#M+wNy=*?V(%n)_wD*;+u{T%FH~8Y$n{;rpfkai%>X1h^@+ zuA|E zE)qgH;cB$_?U=N^-|4qTk=j2h$KskiH;1i5CiZ3}uU=aISyv%G7QxVPe1TM79UY0*D*DWjWfOq!g{Q@rShofW)3~0*KK?U&zUGz^z z3!j%y!2QhMx+}NF{kw885!7VrW)03f^+cA^cfi$JE~E13{?Z_@_U!Gf3)xJ+Vx~{7 z)Ferng2$Mz>2zxti(7CBRY1{@8N~h2LA8#_WE>M1+K`6WH1_WR5}}1VD5_EPA=BDh z&_Xf-m8C(RRr~>Qw5BA^a3DtEl#rHZC--+ObG?oi3TKUwu;WA{RU)jJc6N1DV}hgw zN+O%8G?69LyOiO!_ILOlEP?H_f+0PgV5SvC*=a=!=HF7 z`@yWA;dNUz;>=-;=*#?nV@~}~(svm3ex%Beath9;r@uORo_0W@ zIrU934{7s6os>Q#EEjvHn^@>I2p=gx9W9E8M>j3NCIV1FoKsy5wi&3Gwsli8dR$DO zxHDuhXA@6KFn;0tm4Oxfm7~-Jkoe4KcxxnweG_Mq22t+|chy8r7`Ji4xapp}U~Tps z24S-xpU=tIYTKxwML&OtZb#NcsSzxfVmwF%qKtp!pG^z0v*5bG_!nHT&uh?{Ev*=# zNqo<6CMC$0@tLjhziNV*yFjQ1n^+#(qNdp^J_Y}y_y2d$G|g;WBnCB%Nz6jY9G)?YOCKKmBhkFf2XvmJQ`7k>yZq-U|D*=%zSz=T zAnbfR;gmdYO6fm7Oh3opHNJe9c?JTM0A**;geFS6&kjAGgR4eyI(AuiCfjzk0prt^ zBxd`pYr2m|^OLp$IM`yk#2W*j3SPW*9MDxJ{&95K!?PZd{1`2T;nqy#N(_ZKI9jU` ze$^7#gExo79Y+YQ|CL}3Ah)oN8Xc(@r!QQ84Xpo=xisW>kUFrQ&$60(==iRxPr-FV zfD;(A71;x!*O|Vp#J13+sz1wU{Dl26r)X0p`%2zE)~i0k6`Tz@5v!z&M0SSJk5 z71fLjqy-Mc6Na&r5ddhZXdI7yNI@ne1jCi5-;TW6I_70Lw6>x=z#E%;VF_ucmsuF` zwsyPHQh9fXI4kcNETkMPqNTi545No}HwqV-mPGaKQ3{Z@>xjCJq&T=#sFopHKeYXw zq82__U8G?nnjTYcoLrtDm+rAgZW|q{Nc-v9#$n9{xh@yJ*swKTp?R179Z+If4tY_Z z{I@%phr(pHxHwmq{x+EVQd!%`wWHCw(HJKDKfwOkL)suyX@9kKLRt!yWH#N}_8P<_ zbjFj&$?_k3zm)el@mweAdVFKKD{ZeT1C;gr>prfwQtqYrzi>afZ{5Ho(Ft9}*wxwa zJva1!6OL=xNiC0Lej#%hjuSWqYPz$~n-l(iu*lT0|fK)sSMxT(>x9V;yk$H$gFYYDq&+smCaXRKw>%D|KvI@p##tQ6h>Hjsai{Y6+m zXY!h6PS{&DUZkQ6UHdIiW##37wC7C8`ptv{a#OI)6h%iO9*SN(3|a%^JoV_C`?adK46urU z1d~l|mEfR9ApGAA2dc*DD$J`G2-&maQ#q|P{wES zYu|3qBu!MWd06?23W)4HD*w z+c(E8vDVK+gPs9lwz>5q682?s`5(}8%*^Qsc_zbi{}9!%Q~$rE6|fFHI$oG+J7g>) z?q`5_dtv!Gk^GQ&{Ou{Ne3XuBl_hF40~Kpz6cUMizTjQl73o8^c)OxDD^AFD1|R1euAeV;?srNft||1Zgg0=}S~(p~O4 z?+t0&Z#TMPVNrd{!)EYq1kT+>jP>a0(!FH<5ey8^(OWV{VBQ5u0OCthSp*fSEAcT% zV$S?t5B1GuSRfp(i@w7@EoKg+C`Vge@m>Pb)NkDfgrqEfc%mMok@@Dn+Si~r1z8xF zjzK>vZp-ARJ&->ct@I!ooQ^+f1=OL+x#JP7(y6kBw9s~h$I`#(MT@$UfAvHdYh8I?TaN9#1FB^uv-=yRA5p!_I7`uABSU&PoCZOmW&KUtzd_v{e~zU5 zB%IV?Om7K^((pEpQHC3W0YOZB5}Lle;y)MHaJ<*jwXh}o0ex7G-MHVFQ*M-r-}|y1 zDK)*V574mZ@C}j=reixg))nt_S^PWHm_k1@Y{CSwxVAVTFR%y1GbF}{;zV!7${o&m ztc^C)IX%oNPq;3BUXB&gZsl0cago|>1LC1>W*fD?5X2<&X0i~wDNg&k!U*=Z+**># zWLu3qTilt+{N#;t!9m~r5v^5_$UD) z@!@m{3f#{XwFhq>*Pt+tq!K!!is`owq_HYpU<84s)DzmkJlMNqW{1daXjQo zDq)RX|466IB0wk4(d!%g|M`*c>ilm~NJC*8Arv{O%bNW4@Mb^2euV#ihV z5X_oX+WZOh;$4*&?5nhevOAAdes8_NE>TGaS_U1SOOyY;;#eQJ@5c^gQ%*upoj!l& zv)3|Xmm)0ykYH5idvi2u0YlEAQ4C=B4ik-Iv*?R}Ay+PHG6)Daj;Q$l3hOQa*JO7W z7>fKimVI6RUR_=NBBKB>&wE<|B3kYm!vp>b=t;@|dS0p%a~}WM+MXbyRi6x;Xw>KT zw~v-ne}_&2d+6DkaXkBxj zM?0N4M6M#Coc5@$G|Fc#RrhlDL#*m^*p}wi#^Id|7qMOC@jgbgV(&zgV;i_Z@wX3o zo2y(is7dI;6nI@X*vxfdKpapZO07DspL6itKl)O?OcoeeLH^LNCuiX7kN&Mw z$0Ulm+SIyeGx_gr)W^*xTvP-}MokntWd-dHA!rkF_!;&UUz5 zXTE~wTTRG@00Ri%P%C#kVcziottKw|#6uU)zgX!*0;v3k&I7r_KBSBD)_C7;^^Oz$ ze{_fV7{d}6T9X+nfgqLD^P_up+0NhmMJUZc;49wtUcf_u1hT2*&%MXBb{m!V=BIXr zlyY9`OUQUSSWe5Xpq{srEq`{URxf1w(crt*8T%N?(Rx7XzLBeV5M88^Xo5%SKGl4M z0dQQk=yk(4TW4qXRYN6{c7FvkE%{Ej!bz@^U*BA%J3^nAzMpyo45`Um84*_Tg>dg! z;Z#aCT`V|DHyFfo3ek7%T z-!FMn(3~m{dz;u-T$YQli$rT;r06pm$FmPkyb?RqZ{|O_KqewLefAHwShre}xKyK} zp=xu0oE4E82Xd5{1F!!+WF~X?cbDN%Q1pxxeV#CG&#gTG=syj=`vC9z3*$V|$Z$S} zSF3s<+R5AvP}PiZMiz$u8O7M3$K)Sb1k2XKoKU=8cJ}YQ`JN1rd1r78>s#k!dEq@j ze7I$MJVyr6miP5xf6PgJ*TbFf--X^w?=MN_7gPXcW?I8_lR7XF)=&5aK^;3LRd(<$ zMe6)*V7Wq)Pd-U7_ey-1bSq87YA|*q80tU+Kr?f&ldS^cgwTI2Mya=Z1NhT*Joz4HGN5My-hD+O1{A~d4?6iWx%3Z4 zGF#m!@m@4D8&*H$E|ty`KXMDsjs>wAge0|gmLq>c6}1jGTHj0nch=QuX_Vh+$aNZ% zvFu7MM;6)lW;c3z2@7d8cD63MFCM_m>^f+bcbygT1~D{#GWGAl97>+_)B4E7!?s+i zuSwanH}nAnG02HberWD%fC8KTQbQ>3xF^bZ=EJr4n{9u8EBAz(biVuZcHwQx)&x@V zkjQUd-yel_rOG!)-_iJ5>pG1e%$aH3#kgJJg;dU*XO~z?r|_Nenm}ynUq5qPVMC%a z@yXcD);6JUSvPfP?w?;zXu=%&SmxP|fNCgryUx9QT3w1zUd}_fWc_C$GsKujk_i5T z?iB^FVQG7N{GkPMW-{6`rhPES7ueX(Ya}=xiTIJ!_qrdRa71ayU5YEVO=XCjVuK{c zX94L>5M{n6t3GBO&}4^kTm1L#j8DX#gjoPs+WXTAQKy>lv(CLaPbceN)}Nb7ob)k@ zd^wUcPfb3?Zc57!|4U%`kJR$N9yQ}AEEu3k{B^iUqg1j-FK7}tI0KY(#?cz*sM*YF zHhDjfd0?Ix)i{~^EMm|@1BZ*@rAgKR93lkRgryZ8b{lsk0YrNR@VTzb3!Vq$U05x! zpdJC%g>vxe3l|HXssMo~fInRM8bp8YEARz4#v9jsaWWyIccB`rJcdW^^w% z$tf)N=oz&4Yz7j($a`PB*eoL77o_(_sVVWQkjZOt`+?U@!3-flOhVP2F=nwK9Rk$r zEPj17d<+mEGTi4nEdlF)a%V1$>4DXcce4gK#RGCwHAE*pFV}|M-ZVVu^T>S%m z`O^bZf9YaJ$7Gkrcx3MHK^To{$nHE^-O>7H<;R1r^M{)zYRxV* z;^K0un~A^YI`#KGU{|nlqL|_W8;aZk{Rf!Q@;wC9WK#o^!uFTe=-M)WIooBIu69DrSL{g^eXhDyGicX{@9#A9h0q)A6}xNyofEIVG~dhFf~@BxrqFsP(oG{D%-Yu?Q~P1qd!I!@5AmrdsIiP8;r{*4#;FL@lg z#%%*4X8}MAF{;?i+Lzp-G)wxWGOI@_2;4QsDn!)o6?SL4?z{ZB@A);%aN?Y-S0E=q zWjL^@0|Ig~%U#ts=yL=8i0P$3rq6OR-2N+VCymDLm*T1`RiL%I`k76{I1za;haAEE zxZO;>kaO$CpALz*TIa?NchF*%=l*ui2(H1&s%IYClqNU3ikPMg)lZRm$ zwHvOFeSii?rZWV-^oq*+HAQzLiuW!y3Y740D!)HArGRbY3*d2*6YJ&nb|r( z$oe{a7~Lm|99s5S(zndS@BKa6OT@mtxQsHssbPVfK9z*F+^6a$#S4HC z8{-G%`xS>&&9M=G7!WAXvXe06ksSAVeoeyR6Gc1+>7d~_GEn0TV;A(9zAh>3KXC{( z$)UWdHqYrZ4;$q7d4b@Cy9Cg^x|{SKM=5e1HsU}=u}gO1ZMvV+TRdii0)o|fpdwUt zV#Oy;JzKn@E(Qj#z5pbanf9I!mBy(j;ds8@UmPC_O8C=e*^Kg|WI~bi86gghi}~14 zYcrsi_4Uaoy}95dmz|k}QMXDtopddrpYt%T)mXeC9kBIz;{8AM>gO?f>0Jfj9?Qi; zx|$bpWW|5Hde_XcYwUbHo=BN#T75;V~cd{1(lh{P^&zEc`N zu#MTYhM^1a^0p8AqZ%85=QOb3MW?6z#wswr81pAJSOTD95@la}_IYbW=r~ZW*Ne2dT_*(ZH@SBsEBpo{o6nP}n8I8E~Zd zrw_5{hs*=v6f0w`VTllpxRKXdBWi3={FFK{1A(kWvuGjnJKYaL3VJgWGy*A>D&e<~ zQ{Gr+hP8T1^_J9W8-tX*XDE2wbd_>8PW{APdgap>Z`hQOt%4yZuG5!^?U%O;p99ch zuK{CgV~%O?nV8t`k00jvyp0iUBM=~-;j|bFaQ_iie)-Jn zaf2V_fKy)BhwJ85W=i@FwuViTy1%~lw%Z9&G@P%({&DTwip9D9XN8lXieG}b)lhvdZULisVY;IlgX{8MmatRpnZXLI13 zNd41kJ-bD(CVEz*n3iqD69x&I6bwIObm({uQ0gj=kX3s1Eq6v=^g-+f3Av~y2;q2N z5S7!JB5S(Y9l`eC;=D^eR!{H$Yvekkn%dT_cup)xQ7M8!u+WimLJ0w>3KFCjse*`+ zUZhEH3Mh&oodD8H=)EH-3Ia-z(3=QI2N42DfZVl%=iGPixIf-MG6vaWW$m@TGUxmz z8+m~dUiZ~5txb5XNi9W7#q8eG^3wyoN9CJ%>&rqM42K8#$P8=3KOhMrhy1-G5lFHj z6ZioA^@T~SLLES#mEQWmFQ}J=WpxNi{=bj>yGhC!kd!R%jK%1*bmM3caDAcm*&Vm* z&QFv$SRF3Uk$OWIFlzZZ+qqKuey$y;Lt7v#22irz59dfk>~b}PW(siG1NDX(z!`eW zTW-0oz-=Evk8hp|{e%+%dFQcX|GbqL_l}14NVS7Q00oR<&%+p0rdNA@>}_<9mN-mG z^Z9|&Ux6bMaA>YJn^zn0v+p5ZPa%s&roYsoWSoo>g$M^~!)AVV3RbWGL3{1)G+4yY z5a8d%Y)7m30YBFp+$m6hwZNd9v%<3X^5$YcUp@jrE@f>D=sRlO5YVARS=;PJzW*#; zp}gW*oVpW(-La3@C>^4Y;h_8)XQz74woFsjR_d z<8|F75r+XGY+};Uv&oW=X!vdyoLCwxuC@X-M`fwISlH3y4-fW$vQ{b+@etTHVdck= zk$3CK9SzMRg*X%eq$jZgPiJS#-Udy`OoEmEiFg`j+Hw8sYqJGDc+0zUgTb6(FHa)x zAbXB70q+hK`jSJ;!u5+2kn{0glicP6@}VBFuoz`0+4dmF;ksg)1#Pa(g8_M5^m?too z#~M1T{d;0e?sWG4fRVZbzkR6YWTEK9jRTvZA`F;Y`<=00A6J2do4 zly+sm5JZAuL#H&cH8`53=up<>Ut>+HHXFHnph?FkT0K&3k)m1;vO~kM9Q>1IXy7;7 zdls}bG;DFVCw^5VqMWl~>|dCHl@#pUHw?XtM%%#R4^JTX7E_Ik9j<@mz=ZnQyv-Vy zsglN1;dABWZ>^UCel8mO2v<9n8N#Tq%?CTV`sR^|$o5^{HQvQf5@=@4lFP}o)ypSV z)ab9VYKwaFqi0<_M+0NBl zz6pjS*@J2v?!P;{6RDqMSUqN5O{cfPR#HIW{th#_bO9@ZV*>^Ify2Dl?GT}<*K5H| zzI8|zqbBwWdjjFdx0HdPGjSMg9o1%@@!CPnm#~!5z%R{A% z4e`LDje;bu_w;ux=f0*8g$jCidp_V0JlBXnp*9s!VL!f`nr%gn_D9fXlHOhNAoS~X zlFSa7+KWb&MgM^9wEru6!03{`nC`4W>X7Sc=3Z%arQuL4Zk|d5@T+RP(50&eWtrab zDCY-E0I3k!mR&CcWmRZ)ECdIsvi)`Mh6u-#gMA{Kh^qBH6gSJVc?j3x@t!d$q*8;F zZ4mZ-prD4l_qVQtNz%<$CtU^L3fCdTs5K1UnbIa|JJi$qU%qEoA-6A@tPJ%pXBb#7@9*))ELXw_V=!UYlr41Fxbt8W402 z_R~OSHmYxJ{a?#`3;Q>}H~0zgd#750x1N1xpJt}03s8Y(a^^LMKN~=k1)&Ul9l})5 zNQk*+ACt#IR$M{B2IdjOo+f}R|dSGLmMXk(LDB!@9c^6Qiv)!wIEa9y9Z9Dzj4 z9M*0qbV+!B0d}bEciNC8aM%2A9&m)(QVWbfl$F}Q!Q&N&siCe2UJd}l;cJ?HSAiYi zfXGe!n1ZTH5;6=-Cx?knqlnApE42tNpbNo-XJyA~=K{m0oVmgZv;M@y>(9T3+4@@l z`1)J32Tu^y?usv&kpggt@@J)kfSmnsM@KJZL=*Nycp<-Nw}98;@dD z8Q}IZD!v+=n8GcX^EDvwqySqdj*6)NA=H)aR^VZh>(2o6A8-Za@3vJ!0&R!APT324 zvBQ?I-NQKs(EB5)(q{Niv#)Nl@;DsJP&w*wG=u5{b;s4GlB+e-9S-7?pa}DtNLM)J zRipyLwa?DTN7}vWT538bFRv<!QC5sv5dNDtlAI0ksa0K z$&U-Q7HkEEl^q?P-`_(t+%(o$O@Muvv3AS^$ZB|~SX~r{$}krCO>gkQdE6DVCE>aS z`rD=KL#xo8*N~zt>c-V9-HgLrxhCuv6BgAIHV7^e@Q)F`|M4_@ZM3=@!J_kEb*y%l z`SkhC!5?1=jgU(_`ol2a={b_8D`=#K^^++FXPiP6yuEM>u~=0yv)QKAGX3$VDf%qm-RWY1_SkR( zzCXSTRm=&0cZ=-x8LNS6cV5#Vr0pz8 za*I})d#PA4fv&?aw|zFV93ZFjn!fi(Oswk&(D-hIEa|lyA!h%b^Ty-}$?Z5IAg0ZL zEZ?wJh0+eSY%ZFUy;aIilXG|!MgJByytthDf_j`uJzi+a-*57$Q;-i?>Yx!tS=Y^@ z^CFcZ4^AZ0#;KgAlXww@M%B`}2{aM6mdTuwKlX-W-p7XB#r#=P6-?*&)?d);mQ_vv zJDSf>|GO*rhdNCJd+`rwTp&J^-UT9ADP|`XlU|~lEFlVFIlJd=ma;-;(!qWUK*BRD zYU7@FYq;VO-aQCS$*>EOTM^rF#<{E0P%9&D41^OF|LL}=AibdI4rta{x$xs`-aYop zrxF%(JgY&8k9D#Ho{@Eqy$a_THi-wIKrNVdqu#5(Xf2OvQz#0T15f;~?bE$^Sv*$n~xiwHxmbj*cwwbI8x2J>$@`IhIRA~N0ySR5MmOhe>ooT;xz z%|dn}P5yFHdlXm5U*@e5ul{`RXbkOb|MYLRB}s451_za#gW4uk5TT7P^wI&up;gUx zoFCOG#-f+X46&K6|2bp>iRy|P*VlhMTnHFuotV@~@qIKZuC}49{F1W!vtNey9q1T8 z_+)sVHK{>}H|V-3FktNg1Ta~84f4`WZQ9H?VNh-Z_7-NU-hcsq2eMlW=rr7#ZGx$o z&mN;?wPn@=*@znSh}0m#mBEb&Mj3X31Rm8dtwK)_0f**pF*LACGRP23t zelD&U(p*l}&b>Yb7Wz_Iw@U_I*aYA{F*^`Xs;+7N&`L0l%@m05Ess&$%p0$17FQ2obQ|q)hSbBa|#xiZ|h{jUNF*>H-7_| zKDJb5bXB%3>RAIg`ud?)-^BgCvWN1Wt&B5Mwu8fh zSL@fL6Jx1i?mBA#pC56ek6@Dab|2XP1C&V3M|mjoxc$@Wme#A^5cm^Q$eWs(Qm(H3 zRh#%KkbC_gqN2&Fsc%aM)!zh;K<^l$b}vb||7Hb0@8~MdRT?BQnmp&TXwdEg4-z;q zW+jLX%oVNVHD?^}1Uos*`WQOoG`Ck0w0DtpM8Ahto6C18hjN=Zy5%L-0-p`gMm30& z7*EXrq!9I(9mh^EsM;G(>i6jXnGysP;#4c@jl-|Oj0Sy4-7+zpCBiHQDCCyv08*`A z6}{uc>h*2bv2Vygj5?%9uh@jKrbo4WK6`5_giWBk>PJC}O;PRlRNGVCkxF`;(knKm zM8g^&X>W<<(Uu3Wv;5KkhC&f@VChqb(`D4vdfk}zsn|U`^p@6~xT(ov1HK?KPg#o% zQwf-|Ie**Bn0MS?BkFwl)pcm0l-*4@j}Qt0F;?_k|u zNeuYSmwRntaJ>U#xu~7FbStc0Og9RSBfN4M9WMu!cc!b_V`UsL7Qoe^iHa+jAlr?uX#ap zG(rXNZ}b3k)qjmiPrd1yThN7W0H$iOvsukp`vV4-p3gqIy0_UdL);hBz6R4$UVVz_ zDr2B!0yfp-t*%Q0l@E*9an4|B5)Bj@3DT51mOl!vVa}t;cpEX<3rsTsxs?+EWs#?D z>|Nhh{%6zx>RIO6EmcW|crAZhP>atJj)C8-;S530BxIe-^=m^~bdh+jL01#P_XnNs z$`=kA*oklfJPS^YEy%1 zu%dttrjhqJ(1r4BHcil;U|_;x(u}Z*mLf$TGzG6N{p)=o3P+J_JM+!C3*+O&u|WLN z49#8$Zrx>2@OB z+9S?N!Smxkc>5HPZ$U*~H(ruQo91pRVfa#_FBX7lpAZtjPtr|828Eu_-i6GK+7>sB zT;o8d96ovny;yMIeoZ__7Te(!($yi`tJ-Li@p9DX*RD5SJ$z>l_%iP9JS^%qxnS$H zAy_Cws2Ox_R7)vFxakyIfEg42?V`IuRr#Cqy)Dv2_sN?v>vi`Roq5R@GofQgW_n@2 zD-kJ(FE*7ic6ZgMHBIEx*M8yb9vrf4DD6YF?QSR;GVV_v=XYzFh87yxE?YBcG9kSzx%IrrSo{sqa9{yKJ!dy{3k}W%Zm-D*?&zXPwQ*-~+kOra5rO z^*Lbb6v)0l>vjCgu&*@OV^a!AQqFbLoWKh>yjf#a)M6n5jH{uz`|Q@geTWUn*v&r~ zTcsY^tRn_yx7#h^aW57NIsGU{xQ}Gq&7Mfvx&TAd-#xS9uxnhgU%?_;t6d@@kl0;& z8NCEvh6LBE8K3ay8C1UOi0#F>jl1s@4^-Z% zyUKqgA**u$m882R7zU2)kqBCaWRz>opV>z)o{RpFc~x4}96~q!c+kJkHg5=|Id=7L*2gS literal 0 HcmV?d00001 diff --git a/docs/images/hello_world_without_uda.png b/docs/images/hello_world_without_uda.png new file mode 100644 index 0000000000000000000000000000000000000000..890c1c6bde8fff08197c36f5a4acac7ea623e976 GIT binary patch literal 32734 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

;y` zB@CWxFT&qRhRJ-AjeJ(i39STuPaVTR`CdY8Mj#6TpVk{Jwj?uq`9ZlV9*QJPp4u%5 zai5#y5g4Qa^G$l_IYtfe**-W3{oH&Lj}B<0p&^Oux5~xGP5N-FLRoCx7k?bM+OxYJ z7V2d*Re-H9ciXf(kpW~y6%zR+a9stiJMb)B2#s?%L{iuuK|+Y|Hc0S3@>(NdF?x45 zIgdkz;8oaH0gfp$+4*xNP3qZk_JGOjMDFWQbaBL?hGPS%1$;W3ty4FFf2-r`ua-dp zj|d=SSws__KP`ZV^3?`Flk@FR7}z3kKDVl+rTz!v&9q^z1Bmf=)CU3UUKfz|1_zw( zk`SD{cKbimi$g`Yho!i*K@cmRGJvt{D2jEHB@xb$O&kuUTa@=R_EeI2o6j@l27DpM zu^R48EGBm_xp(J0ugxw>ES@dqF{N}(5~yI}Wvg~@4O5;U!65Vvk~vQCPjoI@FbAP5 zsKfc*K8QYE|L7Ly)7eV{e$+fqz0PRd2H_h)DIyE}K|qsD>jG02uN6<2LlIVHukrYL ztpYmn{1J1)C^guYRc9j{@`YXH9E?#tU93UI{o$%o)^&fb~Qg2wSXm)q!jC6SsU>jqb zB^|UkUJ@kZ>TY;h!2+iUKmonn#ok15A9v}Sx`(d3q$K_rq}PLZoS3=F>(jU)c!ctD zo=(?!9bfgH#(kVx&4%B4i=F+fw#nywM93Bl2-~(pgtctpadCO4TYzF<(J?@$>3_2N zX1wVX-5M+R)18VMD@z*OAJU~~6#e|Skat;IHTK|2IE&5|uC0*p zl0&3kUV&gLu2t$G62vx*i%$Glbmo-ZBSO;i1;mOrLM@DPau|neLw|hOyiNaN2>q8I z{+XW(YYcIy457?1E4P#dWb4@ia+a>S95T!GENd{(;0Lhvp4*+{CZJV zk$c#6kVi~71S!1>)Gy2m7GRb<`RffyelJ{)1)jD*Fv~wUMywWwBG-JqAAq4$1h1=H|J&u?G`_P0zvDDw_XtlR8?p;CyK(n zGYc>qDef$B&f8l6xDn@8&Hg+-I+nP5oyY0IsYw>rk3D&_ zRojM5$UU|$n)oRaE&_CByV)DeM2_mubIVXTv;Y1TpF0W!RdrciO9gUHQxpm+#5lM? zzZ0(k>sQ^XR^7~N@y)(|1 z_CHjc#E*L@y2X+7vQQBsVV@tlK22P>idsvzUw;JVR9*)ul{<(&Jjlgwa0}o!PJAG3 zP$qo2|1ueA{FiTc!J?;aar~kH_ydWM$JX-A<^t)!xBRg~HzsatN-br!B9+ZM|N5w2 zqX>;h)mjN5!R3DoTJFW$pMOQ3T$ZG!rJB1x{CumwrK_q;&rG;Uwv!J94=!V9>s>v1{L1Ebml;NUFqQt^Gue{;v zOYx*iy%DXGO&8^)gbz*&fE`SifoWgk}ZmRJAJ-9c1-=PR9CWB@U7 zR36an5EXZsU}G7bADq}O-YGvmb7#IZk!2CAL^i^u?Cr;qm z#4fEu#Pzjc$m`0jMV-@E00 zEsM$kg=SzWM#5Rcg8hjqf&Ypfz~LKp79->09#5{F>3mqMa}zQK`r)4+f(f~-3<}VA zT-e*j6s#MCAQT>6+q7G&Q!oMXqZL7d$TMcsD?4^`^JoBBcIs;9S3AiVq@ylFFI?%J zT&ZI?1N@7uWxB?SZc!6Y^F}DyZ>03b-6r2>;l5UFIm9SI9@kD!Cr1nd!6`g&( zWY`IU3nyzme*CVNfQWyPd#54AT`2*5@GT!?!f*cdm#0tj>C@z1C$D5tRu70W>cp{D z7?G9@CPocdU9swSo0Cw_0#+FWaosU`;T71dYI>){41U+q^^M9-3%p5H{=oQ{z1bAC zILVRPAY`isfFvv`U_V&BF+qD)pFo;kzVCvfs!S07Xw5J;UMGpLb603!x@!RZNFgOvk`AhnRR4P%JRKVF$ zduPV^E37moFVsyIOsN-N9BjU>!`83tCG2mW*91>Ai&%qr`TEZtaxR;GBRb!gTV7|- zTUV~Wys_hVyk*>q7-KIr?Rs>Mm)3PQGe{jo9_Tb*T4brK)wtA(IGM}0XO_Qlg!c;% z1Mk#Sh+?ns?Q5?8hD$J!yh_QqVMx&Kh>M3Lxon{%-$^5n0p^KmzouanUi~#)7Finhmr$)K`SL`ZKFQnnMrHxR+3oy%lFv zbpFElxfWUS410{0pz;IiZ|_CZl4JEzqYjSuNcDuX!3YLip;TFBPE`NIXS{hFTI~7L zMS!-vZ94F{1~7nXyw+oEoI*H#GP>~1pT)IMdlovxRuvy@>;NpBO0~D53-t+9O399C z#kvQxe)A+l0q7ow`;$H3wi1?Q^rRt=UC~;wj|~QKhcfS$TUD^AwtCUi>;Zg<|s^Vs=_y zK_O@e&>^v)dCZD*u}?1qHj_uy(pSBIhA&TQ-7@q}x|zbUf6w68bTt@3)If~_&~j9~ zwrv`&#CFA=B>;|p*uK9_#bK?lel0X}W&l%TXE&P??egLQ?jIYUxbL7MI7{mGYUMh&XO18SoWe&CgFh?$rTHe#k1rb9qfbFlgLfM?v|V3A-aTg=nf@*S77Fx2wq4Jq?alOX7TZ(}1B zj@#xG+V#S$yuM;Jy%RO#im$iarcY0On>){tCU)uSbe4C<+~*s3Lu%^ku)btunf-k(} zzFBiMI&gIb7=>Ef3%!vK2L}gdM&}MMmx&TC13(^Q(BV7p(WowtXi_EqL7Q(|Xg5eD z<%GZtDmu57MfQDTBvpv-wCyL0l+P@e_x8j7ERYPX-&eUGRh?)IuWrfRhy4lD-M`-^ z^xt9tT3m&b@t3yjvhwL=IxE>LRsuh|tlR|l>++Rder8;N7l zUt^snOqN?1OdlMHFO1IbVt9XKDtHX3sI!B*ni)h0qSHC%=7059x;VPYUnYxf2je1k zE|cB}XqXMQj45U)gCMs9p|uV+6^ksC_+i~I1key(IE*u+AHwwuz4h2!FG%PvhHTo5<@Y!{EIJt!3vJoD*OY(pH$oe@V#Fopro zYvch4Sg@aN8jbBHm*&H)VW!`f<^-&gVVZ@U>bR>!6dO(#P@^w2@}od}8tDKg z6|f6~)KfC2A?2h;5h85~Y*lCSoiLx=p2S)v5vXH|i17~z+aefJEXs#LMr}~%(hVFK zNY)Er>Q>#UdsMq7t&!&eNejn*e~*W>;#>xiucO&fyyKbrBfK%|npJmwg5LzE-u&zCsX(>d(^~!+UO-)(lqG@2l7@=b$EC1=#v?Nd$_~Am}&zBYRT0 zT6Pd$dBBpVbUQSFF>g|O7e@@ps*Y0>HAH)HC<66-mj)H>_eyg|o7FS*v3`4GcATuzhe(_##>c9=&cwZ+NaPQ0O7ZwU3{gNa zN65TA%PJVRAIe~A1+S%85}|8C@)Bc>BLf(I(UKUSu0sm=yx(N)nSjP+*QhhkZK>=di zH5zA9s(9ujO(Lhf7*>U8qeN?Fa@%Qmdbz{~6mM{Y-Q6?sNdawr00oRsda<;8o5d_3 zb!vH9j5RJU?!fDhrlO+`q92yz7Qh-^0?tiX1a`;F-}%FB>#7_jD-emS1vu;;2atv~ z8X9jjqDj3FP{kJZ_67F>?=LNsn(6-pO8s3S`N3aGQ5=^@#C{K-lMm5pz!OC|gz-;H z2pLpmbO(P$-wn}EFL!gFu6qY0+!^GXx^0a>fCGJeaxfj+GkV@_AuE_Jr zs&jrI$GnvyzBc}pK8_5tSaXWq_WfPSB15m_}XC#fI(@nfrePZ|z$ z*P*yzOKoOa<-J9VP97Q)*G^|SeW|o9&44EM(xkT|^nvm#CXh6sIp9v2m|ovnv~TUBO_aR%=|i?ayI`3|TB z{F*#umNT zt5@I$0|M41KF^H(=_|`)Y>@Zl?AfzrT^=4i@lL_ncXLv*PnQ9nSoVYvrY^^)#-b#S z9aE3>YTq-m4N>VUsH@Z4-dumCJ`+W~TXuiozUzT+gDfyT|5`4Scl^JzoO)^i%jrZW zOg987UD_x!{#)_>{7TClUilUc(_ry8j7Z3Neu^lg`v~2%+REsNlAyo6wX>(q1-O#7 z^y@wU8@fq|_ypbL`VVwd3D1z5V+hRTx=B9s`lkBa$KY}=HZYZy#|C>~kS$}ZS8&zA zPQ<{Itb=yB(4&D{KD2zZBYpseR(y&kt*B4{xf%S=RPJ9y0UFjpgW7DxZF6x{9oOf1 zxC0u%oABta_fE-7GflO{3qBq*6A{(RCH9SSWmi0*je*p=*Kf_`WbL_sUzP4Q*Pr+K zRfx-fo2fB(@j;%Pn24Mw2^7?do|)(EeqlAZ`W1qqf#St@^38>>C^z7khol+ZZ90xi zCA5pLphFomLlyuY)3duxp1xwsP2y;Uq@)I?^aX;DHH5&-0e&--+9Dyz{r6xt=-oKK z;;}M(ZV#LpD2c4H8h^|tzzgAOz&lmvykFi`Y^!zyin%~01`(CJ$?alrfA7XoPCPv%&_^WwVFmD< zCW&pe1@IVcfRZ5^l3xzjXQ&ytxFm-uiHm_?u-lwLOr_Nqck6O8+0j>bEPNtNrR?Wa zt1mun4_dxA1(;p6-F^E!KsW_%a{AeiXCcW~GaqiJW4i6q1s31nAx-K*ER^kx^@)7| zilr$&g+q5xkAAAAM13CClm|@a!+Nke&}X$RL`+x|YQ7$O1A@Kxp!1y8-IED@UaOQK)Deje0 zgW2N*AC|U<xy;a(1NPjY>=(HKNp5wNTh)Le2abSz z#&*%_FQG%U8w%NWM|a+@rwZywzi2X1X_gZY%yVWu&fXOcu@vVc zv?oZMcU$=FLsW#=o;s5nYhsceDSTS~yzc$)IKJ~Uqs_*TwQ%fVc8@uD zeI4m-=6?A3wdO(JbCtQ5pN^j;LI{gBSuCBOds~NNGnq4dPX`jz6S7c$yZWG;q&5fW zlbLm2o`NH&=w;(F=y?Ss&56-r`MA0v?gk@N^xOQ3bIy;T!SJRg0sT~M3BML`o`W|B z4{R4zFQm(mCo(^j7shUk6-tD9fPQohE)14vY=|tA)0V6G z$62|7wm5VTFpcP&($ENC5PS?G$O1jj0p*Zo)9wYxKKL*Xx~yA_8#H-Kr-bG1cl zYTG2MA;_of`7kdD3XVndGLLAdmTZU7`a!O~LLKD8R`(^!odbLjN2#he%*)HO-{kNv zu6l}W`^y)xgn}29TsN>_a&lgy5M*}vBA$1+FNYb^O!+=NeJGB9p*zNFf6qK_dXh`m zPz$fm)^Y|j!El|=`chTxhr=oVbwR#1S$Ma{zyx%^i*&1~HBFfkg-b3r2Xq8b?@QKC z)+mNj)~)2OBe-&~e)Va+=W^y~ezzkP+O1U5a5g9>=)z4z;d3ynumyg>Wa@rz6VN(8 zI@ksnCs9^k14qPs%-IZnl(Y?aAeqHFHKFzT7+lUB5ULAjZ!Wfu8YR2^lo%^_U0AAo ztI?7vYg-^<3N#X!yKk2hjbO{*D9_HB zEg?)ar0)LpmvaX|^y=V~n_eqzHpU3R%KWLk%$zfbn44vj(A`@&!)Hvm5Wu-blaT)b zZ5`F(PgIzb;`TLn|EWj6Ml018%-gElnWRx-y;DU272{^u?ZNH2Q!3q+G&I^_F%mIM z9%l`mYZf|OyYjxroBA{-cF8wL#kdqP<8(pB2u?GCwJtMOrOt73{;;rq?-YrIE8a|4 zaG-)Dch&jqymg#=Nq)bJ-hLDK@~8~_JTL7l6H^>xl7!2GxQu#Ai=-Wb!b4RIBlxnBKvHVutOnWyQ+8*_QMwM?0yQ>A#z@2gz$iG*x`xHs88 z>%sf+t~A}?61>ZZ2Rqdh+YBSFghuO0H^*;BBtqYQK9k7TsQr#)DbXhgJTMDNWI-9{ zTW`Pj@_+AcC2tFNPXZ->??HXWv(m2>y-J{pZtn)FM3WTvE^M`Rg{~&SKitPY@UzcgIx_RwOdZlM5{wfJcg|d&I z>8bc}UIN9y^BdDLXwtHf_)AJ#m&!K75CNyp5Ph1c1a=NV8S;&em-g*OAD&;B-#-7r z>fqHu^Qrw!1TVL&bnA6#B5AHR)L)+8Hrv4#Dsc@@8?9a{LHSdVx6N4c!#iVg-nM7Z z2knV&a%e*9TGvY?RHu{w9Ad6#z2AJpw4D$k8P?A}F)VP6Y18fl_@}meb+)WDEMz4d zoWH0%elc4px{j?K@38ZqtqJ;UfgM_h4wzCHfzrpPga3XfLG-&J?9c~S@IfPSi)_+e zGign`kg8?D)f)#&V9-~g00`!?i&OlhEyrSGs3=jCDrgCxJc*=duTJnbL_}kGcC_F| z>OD~NDT`%umU zNl-~>hp($Y{D7>hAtIVZtLtE&z_`iR1%|FUPtl#=wHd90KQ2LY8katm%iHohuv*JM zxmTwE4l!c;t|2G)+Qoyq!~gtr`xN}8j*DeUWEB-tVtE(RG~fxz8AvZ#SS2AoeK8v{Uefo#A0dMYmr~__5sIne7OKyobU);3?Lpa zU}Fgb=g|RqSrwdbVLsGGjUdkE;4uD~dehS}JM@Pqv52iBwMUPHx*So^>5&VZ0VHOS z#ioX+U*n>-l8A@#0vs>UR;;Ur`hqddV{fSOt$F%an`sIMfHoL6#9^x+R?_-XY@rjH z@IS!eiQ*<#;uW7@=MTG=Kk2Vj%H8m3Qv4~JHgzi_BNyNJkpbr}UC*z3`vXJdC9%ko zst2|wmyr)74h*G%KZQiQgEx5Z|G+K^5TqwXRpu4jdi} z7NfIFeM?^t_Zog1(r)198BOPwbR;|48;H~QN*qbWi#ubM8WSj6;SdTl>6YLb!lwH( ziR6Jii5E46%6>>o9v{|@`b^8Y6%w0Dby3yBSCl?nm|xoCwk+zvU-a%U9i+;<%J!m)!5}FFe64}M?_rm zHnf>{A=&RqW5L@veay44;>gGT%@PwdaC-F*i$)0Ff7^ci6VbZ(>X&!4!SiMJy#|I; P;E$}7(*5FlM!x?CUpwy; literal 0 HcmV?d00001 diff --git a/docs/images/hello_world_without_uda_dark.png b/docs/images/hello_world_without_uda_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1a0661f026979c67a2ad76866fc6cdd234731c35 GIT binary patch literal 31300 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 literal 0 HcmV?d00001 diff --git a/docs/images/help_argument_group_dark.png b/docs/images/help_argument_group_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..23be326ea0d982fc27494734ac35b036347d9b8c GIT binary patch literal 14739 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 literal 0 HcmV?d00001 diff --git a/docs/images/help_example.png b/docs/images/help_example.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff3d8fc20b836266ee42687057604c5f0cf0e6b GIT binary patch literal 32144 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 XUBGjPtGB=@>K9}mDoGYUFbez+_|R?J literal 0 HcmV?d00001 diff --git a/docs/images/help_example1.png b/docs/images/help_example1.png new file mode 100644 index 0000000000000000000000000000000000000000..08591e72a8a4128ae93475f1c6f4c0d4fb15b576 GIT binary patch literal 23358 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 Kw;-MMB>W3WMEuwQ literal 0 HcmV?d00001 diff --git a/docs/images/help_example1_dark.png b/docs/images/help_example1_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7de7e97bcc281496a5dc03d2bb4b31c69a3c223d GIT binary patch literal 33082 zcmd43cT|)8wk?bZg3?r^DAfkio6;empdd|(ARPn*r1zds6ciMcj+7{ZfYN&pMOvtW z^b$JKl28Mw-xJ@n_c?pq@7^))e>Y<&Nyy0a{MuS`%{doupXfefxNz+P1qB6zriPjU z1qCI6g5t~v+H=4=N@@rO;KvysgGcu%N{2W%ffrPcsyeC^6cq_{cw1`V^?6SXQy&Tn z#!m9TGd&)K_7oK1!V*8;exhGze{~LD%zLfzd?QkX{o|)-F2I( zUVQpR4@CI=o=ZVGFwH!g{_3*4{|t znNriL7sx-qzPgX*X}Y5pTH2rWMK5*6G)=Q`93EFz@yGdOG|2N_D-N_{| zI_!-Cr-kN*AHe0%rT9XlqQsPJ(712Pq~Gwpj1$q^Yrfkl?kh8o=7^Eb6C&oa^6W{C zeM$UH=I#w$<3CJ>#|!muZnr;+V-=apRgatd{`AKj{`5fPj_mx!-+LUZA?$MA_TqQ_ zGVmf*2|AwwUC^cW@L(RH;ans~1KJwB6-%=lc;%^dLdNME8ypkKuWmcYGIM2ipVOpf zrlCE3=jC*6>yM{DzPkiWzecv>Jcg#czUIZcZEi3*_QZ3!{~7txesLrCcxUrr0{1ST zcKTwfaNqk+TFz5djtNK8=McCBj0G@#^J97-x6Tu(hh8ftHi?s&~ylD+{C&j z>g0Bs#q+YvyUv&238-!VEQ1hS>O7b3hoI6}SQQw!A$TuL0_h~dpF-Yy_04RhLmX~X z53;39JXx{1;J9Yb-oLu|(W&vyGfY<;Thm)+{&NrD6NUO;EpW%Xag5QK(r%UeUC0

6d0pv(y%Xw%z+TI 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 Dp>g6` literal 0 HcmV?d00001 diff --git a/docs/images/styling_help.png b/docs/images/styling_help.png new file mode 100644 index 0000000000000000000000000000000000000000..db2faa516d673b8f18b79a307b9494e6a81a84ac GIT binary patch literal 7157 zcmch6X&{v0_cjqq*|J9VeW^xei?K6y8vAa>mL*BDWC;l~wq%(~gc^*{*s_k6S+Zow zE>SZ=hBS6#@Q!}}-~ZG5^?g6g%=0|+-1l?t>zs4l=Uh*Qt+nad)8|h!Ffg1o0~y_5 zU^oG$9|y6q(7zEiqp#>cj1f0X4H)VMM1Ipxm;>~!^cfh?IqWo_ll1dbw?Qru3=ABf zjz5fquqs~$24R?)k-mMj=jw~O8egXZ!r~y0nDN7yT#%@V>LG)aiOCY{7cQf7#%Y3n z$+8@i5BT8pQ@U}H-1|N4F81;DC*$=frC3jXO<*YQUya=SVL zwQT==?Ngf8{nh4)*?>~FfcW6j_?pAz+IO?Ag3wF=9`WTZLQ4|3O^J}({aPe;@qiciO&&v8_cfcJN1at{v1! zCj>&4ce?j~634va{2j7C&ew6ybZK{+b{}S)3w?C?Uc#-;+lSa)MWkpW{i%Ckm;w(& zkN9-Ly`NLBUrYq*ns8|?cJJ*H-xYaXBv(F|++-BnTWagUj!MY=QASEq_l1>^_@*#! z@M8shNG8Dl(Aknt{I;`-fxW{PI3>3M(ST6J3q~O5mz^zFS>XzFqtiai1B~;AFkBx> zc*ndjwDsP@KRcaKlpdRSYQA7c?AA1~aVOE|7Xc8inVqm=EOBqMB6O3HI5Hu-pDJD6 zo{rItS*YwIL`<$xf9Swj#i+}x6nC)|rZj0J*SXsVU!C~FW}|P0AMBZ0=l_Z#7qDAA zr-dCZWZ+7VcB!ZmXb38Cbsfwqh17T#EYRJmjprY{u8Kos0r35$S-8=6n1kJhOoXIM z`fjO3y22E?b7DqOPA1Nvomr2xq&Z$hZTjv6=>C_aaE$cDNeZj z-8>s#Ylu0tP%v|m4^77m(f9!mIgK{h`}%s(dbc*EKzcfG4D@Tpi65LU8!~KKUcD^l z)*Li;n#lTdWD8*fQMzS2*uq~Lm=^erd7;95Cb4zsPi`ZN9Ni`NqE^2Mh`CMMXFFR8LHnn?p#WSEca7mB*L61O z5cJvPM|{eV48abiDK7SoUXiFWiltd8qWmJfbOwnt4RN!4Oyg$u5SMk0`^L@En-!31B0|i#Icw8k#*N2<@lccOH_KUak<1Mowb?^( z-fs#$5uwHkz(IlAAl%tSZpY-noFA}l!>KELq5NRHAk-XCpk74oUL~T=ZMPC1awfA@ z71Q2u-xJlYprJHdF1?)iHJ+@Fo+UD}J8f ztXOu9*|8EB{s;5=Gq>H3rnpsoIH&iM$rICebs+An5e;9kDnE0p9jo5njA+qwu1?q+ zV=EIaYYz2MZRx`0(xklViq$sVlN+Snb*cBAP9>tcQ5OwnB6BX(P`o=fYrN{??sC9BC^|be zh$$gmsW)^MaT-F2%A`-4L4I5s<1>oZ*Tw@!L`DkH4;D@lD>PP~1vCq(4%SY1V6+1C z=Z0C2w-j8*+{P@f2t)f@t#$0tIl3w7{CTc2s&AF_H&F9C&8CBwGJ2kFOIz%jF|*;Y zPHKB7>p;uRRI!iJ*(XN}o#LeRK;!Ef@phMnZC@ybLuh49o5nBjS)7-1!e{n6qaBoS zA6OIvo@06azQ{y?w6kMymj)Z_ZWbFtP$~Q5z>5KWrknxCxp*HF3vLpgGbR zU|u8r#=y2NPjS8_ws@q#UdrJHONfi|yzlqCd9!Kh+dS%#s6jNNn_t-L=1WsGd%xTH zRUoiKzrOIh?o-Y0ls;_{(h%sdAx$Hx&fN$r!89)m^wkPi7}`!0UO?*9GVM z5XeWz8#oglW}TLd@-%FwPW@MTpS%!1uw{YFW$CY1OCp7b99ZJ~o?QNr(~9+7(VJ-< zWY3?Z$Zv$zbaJ2iZF30Vh-PX(MwDJ0iJwxssnmw&W0!Hj=F+0GY5>X7S-I~`<*OB~ zPntOb(!Z&S79?#C7ZS`}J}SSHx%cK%=|(z`yhOHu_RRy=HKg@4>f#W>5Nu2V=xf}v z#y3W{6;4F(*gN{%juVk`{!LeIQEQoNy3fu;IwZz^_&>doz0xG$#fsECS*?eDhz z5*T%iL}rymeBPOiCx1)atLuW25)Xfi3Dh5c@hXb+*HT6*BU?_)&5IuGbG2jg80F2|mMH!Z_$ zOiYU(-0=a@3kkXda_5m|lh1pKp=cjowNgrdWo-*Htdz(SStF4VwKJ`f$4vH+t(Wy%2pSA`^p=QkquxxG>p_c*f2TCZQ2p zKqNnykWIfugAI^6nM5waG(>OUE#Txq-8<#V-EQ^n&eQXW8|pU7hcv>3)0PMnd=Okz zN}o=U`CO0EVTqSOeD^zfD%RdhWaR;8j?mWqBt?>8LqVzSeF@49?gQeQs=-7|qy*zo zD($K$b;Mk}g(e@l5^dDC23;WYh8hmQgLwzxcWC9))l?q$MC!Eful!fm>xU}`Ud}+( z6A8s`gjf-rQo@55W4X#~iW2X8Pqi#r(5}z!96D%IXMO$rJc=!fO5CQ`!yt~^7|Q2t z&eb*Q`|onSR6vC17|YdwO&RX7)agKu44igEW>&&{MKHhJi3 z>usHDD`P#(!+PCsg^fY{<_%dhQVJXP5*5`Y-qy!DS_IJ($Qe?v^jz<_ z{j2LE$X+FJ9dT}!KWz@iIOp0>thgTz02$0YwB^${c2umc>n*Q>hq(W7iA)N4qCpfK zet7xDg||11b!wd6n1@?FUxEUzsqlb19k&e3E&{1FAq`4q{;s54Jv7cpQMVv9u2JVB z%+mVr1CTzmk(bQ!_?I06($cfOWo?-|_9a2uDjSwU_H%y0I`z)=0E<^PV@?nECVg?% z5SXvI3t_56U&Jn_D%YyV#m|V@kGUYE;Qer~wfnW-6*AV%iYCwH8a}z3|Y2$SErn6BfwV8FNUkgT*_!+i}V;W`Ix1Fe&N_!{w0LN3_j0i zY;h7;n^A9`SAK0E_m$!tiUZV|&il}wU%H80{(22GhtLdLu29MGh<7?8#CaIM;qFn{ z+tL%ms5adj0K*_(I#@oAXq(hf(ta_JNyHSu z;`$S&c14G^k+I9z@_QTwU2q#l@11IJquV|O$@617t<0t4SSJ~?;qw8Y8wFtw@2o+L zs~S<%o--a>-hBSw5t?h-1KQiwc*9~$OkLf%h=S1P#RA?HHhY%C6TI`UP^6H6ldL{Q z4LFujCx{{snNe6t1v|K8=gnRlPF%KajvYO3x(N4Zv0Smp;f%=wjs>~QBXFZ%SpRsO zs${FV(dlZrnp43I)?R?-*w5S+_2IKjR+>IQgvI8ciMa|MONkrTQS03f?2C*KM{^TGT{ffyrYoYM`gDO+o z9#-d=yg@~LsQzmNKX}COhGfzcEGSx9&pXxVzNf3&RrXN+N)9izbHNT(mpFQO>HIOB zUVKuxhyVVjgNvC5DSc6z*R<#PM$Yq+n@XjQpcO3Rv{K=K2PreODyO9yKXRulJts>m zu8L`Tsojtq0~j1-!c5-%j$F35eZY5V+AWY9Y~CpyxRTCd#FiVkHK{CjoB4FIB#aM- zd-Ovbh$TQ(&Sa!;LUFoq1V&>NJl@tLS9i-8!5J5WQ=cGcmT_)XnwG^&vT3k3Kk4qx z6eum!Sl72z7`FwaMjL=`Ch|TXRFKMU_}^~N?hJDQgzmy)IE*+Ua^PB9A47R#-G>Fs zMP6B4%iOLoF%p83yGe&ZJug2G>MkL!UsK|nme{QNz^X?$P%4RuOw837yU6n`g(vzX zfEou;h7c$xpfF%97d!@zew40&2-1$9Q1X;p{;fXXk~wzAlU7@$>-pPjwQ^aB$`w%c znK|QBo`T8)LP!+69Kb|x`TF0`RkQozCR~y$ zVA!0`wWucD)03tEZxOCJ7)Fg*WzFnTwZUY>v>HFypDltLOs03qX}uxX(ORdA%89QK&=9&PR=ruu zR0~CV>b^Qdvlj2>6pVk+lDmrPIHXC*QOjv`Ve0jfh_?((xI96r#=zi#gR;s#v@dki zVr!IS8j^7p_!A{|3nLP71$pbUl+yS29l2h8h-=yD%aWT<6WuZaP8g4-0f{Zjl{mq*0n?IZruMF2mmP`z* zmMpu@lS>GlJz@9^%mzexkNTUb06)5e8JeWae)#^!Q|StxQ@Rg- zg#uDJby1mur~$YJeKBAWh&;#JHB?Yz*j>^*OP`hMtnW$n#JFgjsd~b#{&fjED9I!{ z=hjeDndiY@6t-L}1!rxEb7fu4s0R#ZHykfX(}|wF%MXpjSLfM_4Yxf^`=ZxHRCW8o zo7~u>5T_SJF2nFUJRWIv0_dw3>l8>tgcHpbKckwa0;I$O5_!&MIsmnzJSoS5A-xMG zPx@+)MTQAQu&XTM5a?l6zc1J8hfNn>qpLYw=jfg+sLiOR%>@ZDvn24a+X>FlH=5U0 zzZ3$62J@jNS0x_Uvp5$0?NM^3w`b@cq(=SGVt2{k7w6(6$FjIvPZ4YyQSc0B$juiv zO~b5&nZJ=zEVQ?rU8hJk9f(#*6==4+XUn3^>hrIvqIsejwtjk+_6LN$zN&f+b=bKl z3tEBj?mBpOW0zmQN7U(^{*lcUYu^H`7z`;Dp5cw$ z$SL*rgJbq&`@*f+_Wb(*YPV)*hT14fnw(t{JKsOM;b(3TG|V(c0dmsjAyf4^5-2$#_QT8BK-SB5WiS9l`R)cY7mg-(?9cj_L12x zmZ!dd-n!XxNrHg@$S@N79-@hVBvv|VR$?w|=)}AkT~0QcRb3d@$~#;7*G$h9kPc}~ z9oIApykq^e_-}gA;`MQd#pEntV^=b;qMP2E_aWRC-VUZg5B+!dUnRab-Owuy4=JZh zmm8hg7>Zt`$~*xOe`iL0f&Xuq&Ly0f6!L%bI#B3J&fesNeW=FZ-BU>CG`1&J`{)Hl zBucpYR#Us#w#>t&b7BF$!hZ3RjxkSOF=l4nlb%Ci{Q7Gng|cGO8A60|@**q@>WRPF z5%bQ!KA4mazhnPWPm3&GHN=bDeEMmrB7qdd7Y`xDDQrZU2eaL^cyKN055^NGNv?Y4gzfL3{@l`lWJ*4iNj0)6*W@}=L)_)P}%@h;DI{8=T zB5*g@tAJ`yj61tDNi3<={9yI``Q?cW;Yuury5HWW4D-<0XVIhKDahh;?D33#R3buc z{buUJ4}$v8G>Mv<(u~KOChY)al{ttQt0y)Msfu<5q+97OH^y@Md@5=^?*xqUa1xho zk-s-lhUR+S@Goc;YwDhT0*YmD3}gZK?vKpzBkVWoTV{_tFA1yKU2X8`W3zkL&%;vMHMPoD1t@8gcVj+1}Yk{9S0N-Jc5H@b6ZQQSv^o)AhUAOZR5aG8531Vv( z`s-h_ob%YcRj4r-#hg(1*tu#s6A+L?UzEdlG=1k>cz_%A8mf?Yv_ZwvwSCe{EU)_A zLQG9N6bI?;Pij;~MvvlIHGfd}4Pb48>**tc5i@j86Okz>% literal 0 HcmV?d00001 diff --git a/docs/images/styling_help_dark.png b/docs/images/styling_help_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..09717acd21ad1af7fee5c2f5a5022b1654c8e65e GIT binary patch literal 7164 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 wN&>%4 + + + + + Created after removal of "Param and RawParam" from argparse documentation + Param-and-RawParam.html + + + Created after removal of "ANSI styling" from argparse documentation + ANSI-styling.html + + + Created after removal of "ANSI colors and styles" from argparse documentation + ANSI-colors-and-styles.html + + + Created after removal of "Without User-Defined Attributes" from argparse documentation + + Without-User-Defined-Attributes.html + + + Created after removal of "With User-Defined Attributes" from argparse documentation + With-User-Defined-Attributes.html + + + Created after removal of "About argparse documentation" from argparse documentation + starter-topic.html + + + Created after removal of "Default" from argparse documentation + Default.html + + \ No newline at end of file diff --git a/docs/topics/ANSI-coloring-and-styling.md b/docs/topics/ANSI-coloring-and-styling.md new file mode 100644 index 0000000..efae02c --- /dev/null +++ b/docs/topics/ANSI-coloring-and-styling.md @@ -0,0 +1,98 @@ +# ANSI coloring and styling + +Using colors in the command line tool’s output does not just look good: **contrasting** important elements like argument +names from the rest of the text **reduces the cognitive load** on the user. `argparse` uses [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) +to add coloring and styling to the error messages and help text. In addition, `argparse` offers public API to apply +colors and styles to any text printed to the console (see below). + +> Coloring and styling API is provided in a separate `argparse.ansi` submodule. It has no dependencies on other parts of +> `argparse` so can be easily used in any other parts of a program unrelated to command line parsing. +> +{style="tip"} + +Default styling + +## Styles and colors + +The following styles and colors are available in `argparse.ansi` submodule: + +**Font styles:** +- `bold` +- `italic` +- `underline` + +**Colors:** + +| **Foreground** | **Background** | +|----------------|------------------| +| `black` | `onBlack` | +| `red` | `onRed` | +| `green` | `onGreen` | +| `yellow` | `onYellow` | +| `blue` | `onBlue` | +| `magenta` | `onMagenta` | +| `cyan` | `onCyan` | +| `lightGray` | `onLightGray` | +| `darkGray` | `onDarkGray` | +| `lightRed` | `onLightRed` | +| `lightGreen` | `onLightGreen` | +| `lightYellow` | `onLightYellow` | +| `lightBlue` | `onLightBlue` | +| `lightMagenta` | `onLightMagenta` | +| `lightCyan` | `onLightCyan` | +| `white` | `onWhite` | + +There is also a “virtual” style `noStyle` that means no styling is applied. It’s useful in ternary operations as a fallback +for the case when styling is disabled. See below example for details. + +All styles above can be combined using `.` and even be used in regular output: + + + +The following example shows how styling can be used in custom help text (`Usage`, `Description`, `ShortDescription`, `Epilog` API): + + + +Here is how help screen will look like: + +Config help example + + +## Enable/disable the styling + +By default `argparse` will try to detect whether ANSI styling is supported, and if so, it will apply styling to the help text. + +There is `Config.stylingMode` parameter that can be used to override default behavior: +- If it’s set to `Config.StylingMode.on`, then styling is **always enabled**. +- If it’s set to `Config.StylingMode.off`, then styling is **always disabled**. +- If it’s set to `Config.StylingMode.autodetect`, then [heuristics](#heuristic) are used to determine + whether styling will be applied. + +In some cases styling control should be exposed to a user as a command line argument (similar to `--color` argument in `ls` or `grep` command). +`argparse` supports this use case – just add an argument to a command (it can be customized with `@NamedArgument` UDA): + + + +This will add the following argument: + +ansiStylingArgument + + +## Heuristics for enabling styling {id="heuristic"} + +Below is the exact sequence of steps `argparse` uses to determine whether or not to emit ANSI escape codes +(see detectSupport() function [here](https://github.com/andrey-zherikov/argparse/blob/master/source/argparse/ansi.d) for details): + +1. If environment variable `NO_COLOR != ""`, then styling is **disabled**. See [here](https://no-color.org/) for details. +2. If environment variable `CLICOLOR_FORCE != "0"`, then styling is **enabled**. See [here](https://bixense.com/clicolors/) for details. +3. If environment variable `CLICOLOR == "0"`, then styling is **disabled**. See [here](https://bixense.com/clicolors/) for details. +4. If environment variable `ConEmuANSI == "OFF"`, then styling is **disabled**. See [here](https://conemu.github.io/en/AnsiEscapeCodes.html#Environment_variable) for details. +5. If environment variable `ConEmuANSI == "ON"`, then styling is **enabled**. See [here](https://conemu.github.io/en/AnsiEscapeCodes.html#Environment_variable) for details. +6. If environment variable `ANSICON` is defined (regardless of its value), then styling is **enabled**. See [here](https://github.com/adoxa/ansicon/blob/master/readme.txt) for details. +7. **Windows only** (`version(Windows)`): + 1. If environment variable `TERM` contains `"cygwin"` or starts with `"xterm"`, then styling is **enabled**. + 2. If `GetConsoleMode` call for `STD_OUTPUT_HANDLE` returns a mode that has `ENABLE_VIRTUAL_TERMINAL_PROCESSING` set, then styling is **enabled**. + 3. If `SetConsoleMode` call for `STD_OUTPUT_HANDLE` with `ENABLE_VIRTUAL_TERMINAL_PROCESSING` mode was successful, then styling is **enabled**. +8. **Posix only** (`version(Posix)`): + 1. If `STDOUT` is **not** redirected, then styling is **enabled**. +9. If none of the above applies, then styling is **disabled**. diff --git a/docs/topics/Argument-dependencies.md b/docs/topics/Argument-dependencies.md new file mode 100644 index 0000000..dcf2115 --- /dev/null +++ b/docs/topics/Argument-dependencies.md @@ -0,0 +1,30 @@ +# Argument dependencies + +## Mutually exclusive arguments {id="MutuallyExclusive"} + +Mutually exclusive arguments (i.e., those that can’t be used together) can be declared using `MutuallyExclusive()` UDA: + + + +> Parentheses `()` are required for this UDA to work correctly. +> +{style="warning"} + +Set of mutually exclusive arguments can be marked as required in order to require exactly one of the arguments: + + + + +## Mutually required arguments {id="RequiredTogether"} + +Mutually required arguments (i.e., those that require other arguments) can be declared using `RequiredTogether()` UDA: + + + +> Parentheses `()` are required for this UDA to work correctly. +> +{style="warning"} + +Set of mutually required arguments can be marked as required in order to require all arguments: + + diff --git a/docs/topics/Arguments-bundling.md b/docs/topics/Arguments-bundling.md new file mode 100644 index 0000000..ac0e668 --- /dev/null +++ b/docs/topics/Arguments-bundling.md @@ -0,0 +1,10 @@ +# Arguments bundling + +Some command line tools allow bundling of single-character argument names in a form of `-abc` where `a`, `b` and `c` are +separate arguments. `argparse` supports this through [`Config.bundling`](Config.md#bundling) setting and allows the following usages: + + + +To explain what happens under the hood, let's consider that a command line has `-abc` entry and there is no `abc` argument. +In this case, `argparse` tries to parse it as `-a bc` if there is an `a` argument and it accepts a value, or as `-a -bc` +if there is an `a` argument and it does not accept any value. In case if there is no `a` argument, `argparse` will error out. diff --git a/docs/topics/Arguments.md b/docs/topics/Arguments.md new file mode 100644 index 0000000..d217ffa --- /dev/null +++ b/docs/topics/Arguments.md @@ -0,0 +1,4 @@ +# Arguments + +Command line usually consists of arguments that can be separated into _named arguments_ and _positional arguments_. +There is no restriction that one should be before another one so they may be mixed in command line. diff --git a/docs/topics/Arity.md b/docs/topics/Arity.md new file mode 100644 index 0000000..03a7f68 --- /dev/null +++ b/docs/topics/Arity.md @@ -0,0 +1,49 @@ +# Arity + +Sometimes an argument might accept more than one value. This is especially a case when a data member is an array. + +`argparse` supports these use cases: +- Exact number of values. +- Limited range of minimum-maximum number of values. +- Unlimited range where only minimum number of values is provided (e.g. argument accepts _any number_ of values). + +To adjust the arity, use one the following API: +- `NumberOfValues(ulong min, ulong max)` – sets both minimum and maximum number of values. +- `NumberOfValues(ulong num)` – sets the exact number of values. +- `MinNumberOfValues(ulong min)` – sets minimum number of values. +- `MaxNumberOfValues(ulong max)` – sets maximum number of values. + +> Positional argument must have at least one value. +> +{style="warning"} + +Example: + + + +## Default arity + +| Type | Default arity | Notes | +|-----------------------|:---------------:|-----------------------------------------------------------------------------------------------------------------------------| +| `bool` | 0 | Boolean flags do not accept values with the only exception when they are specified in `--flag=true` format in command line. | +| String or scalar | 1 | Exactly one value is accepted. | +| Static array | Length of array | If a range is desired then use provided API to adjust arity. | +| Dynamic array | 1 ... ∞ | | +| Associative array | 1 ... ∞ | | +| `function ()` | 0 | Same as boolean flag. | +| `function (string)` | 1 | Same as `string`. | +| `function (string[])` | 1 ... ∞ | Same as `string[]` array. | +| `function (RawParam)` | 1 ... ∞ | Same as `string[]` array. | + +## Named arguments with no values + +Sometimes named arguments are can have no values in command line. Here are two cases that arise in this situation: + +- Argument should get specific value if there is no value provided in command line. Use `AllowNoValue` in this case. + +- Argument must not have any values in command line. Use `RequireNoValue` in this case. + +Both `AllowNoValue` and `RequireNoValue` accept a value that should be used when no value is provided in the command line. +The difference between them can be seen in this example: + + diff --git a/docs/topics/Calling-the-parser.md b/docs/topics/Calling-the-parser.md new file mode 100644 index 0000000..66aebe0 --- /dev/null +++ b/docs/topics/Calling-the-parser.md @@ -0,0 +1,119 @@ +# Calling the parser + +`argparse` provides `CLI` template to call the parser covering different use cases. It has the following signatures: +- `template CLI(Config config, COMMAND)` – this is main template that provides multiple API (see below) for all + supported use cases. +- `template CLI(Config config, COMMANDS...)` – convenience wrapper of the previous template that provides `main` + template mixin only for the simplest use case with subcommands. See [Subcommands](Subcommands.md) section for details. +- `alias CLI(COMMANDS...) = CLI!(Config.init, COMMANDS)` – alias provided for convenience that allows using default + `Config`, i.e., `config = Config.init`. + +## Wrapper for `main` function + +The recommended and most convenient way to use `argparse` is through `CLI!(...).main(alias newMain)` mixin template. +It declares the standard `main` function that parses command line arguments and calls provided `newMain` function with +an object that contains parsed arguments. + +`newMain` function must satisfy these requirements: +- It must accept `COMMAND` type as a first parameter if `CLI` template is used with one `COMMAND`. +- It must accept all `COMMANDS` types as a first parameter if `CLI` template is used with multiple `COMMANDS...`. + `argparse` uses `std.sumtype.match` for matching. Possible implementation of such `newMain` function would be a + function that is overridden for every command type from `COMMANDS`. Another example would be a lambda that does + compile-time checking of the type of the first parameter (see examples below for details). +- Optionally `newMain` function can take a `string[]` parameter as a second argument. Providing such a function will + mean that `argparse` will parse known arguments only and all unknown ones will be passed into the second parameter of + `newMain` function. If `newMain` function doesn’t have such parameter, then `argparse` will error out if there is an + unknown argument provided in command line. +- Optionally `newMain` can return a result that can be cast to `int`. In this case, this result will be returned from + standard `main` function. + +**Usage examples:** + + + + + + +## Call parser with custom `main` function + +In the case when wrapping of standard `main` function does not fit the needs (e.g., some initialization has to be done before parsing +the command line), `argparse` offers `CLI!(...).parseArgs` function: + +`int parseArgs(alias newMain)(string[] args, COMMAND initialValue = COMMAND.init)` + +**Parameters:** + +- `newMain` – function that’s called with object of type `COMMAND` as a first parameter that is filled with the data parsed from + command line; optionally it can take `string[]` as a second parameter which will contain unknown arguments + (see [Wrapper for main function](#wrapper-for-main-function) section for details). +- `args` – raw command line arguments (excluding `argv[0]` – first command line argument in `main` function). +- `initialValue` – initial value for the object passed to `newMain` function. + +**Return value:** + +If there is an error happened during the parsing, then non-zero value is returned. In case of no error, if `newMain` +function returns a value that can be cast to `int`, then this value is returned, or `0` otherwise. + +**Usage example:** + + + + +## Low-level calling of parser + +For the cases when providing `newMain` function is not possible or feasible, `parseArgs` function can accept a reference +to an object that receives the values of command line arguments: + +`Result parseArgs(ref COMMAND receiver, string[] args)` + +**Parameters:** + +- `receiver` – object that is populated with parsed values. +- `args` – raw command line arguments (excluding `argv[0]` – first command line argument in `main` function). + +**Return value:** + +An object that can be cast to `bool` to check whether the parsing was successful or not. + +> Note that this function will error out if command line contains unknown arguments. +> +{style="warning"} + +**Usage example:** + + + + +## Partial argument parsing + +Sometimes a program may only parse a few of the command line arguments and process the remaining arguments in some different +way. In these cases, `CLI!(...).parseKnownArgs` function can be used. It works much like `CLI!(...).parseArgs` except +that it does not produce an error when unknown arguments are present. It has the following signatures: + +- `Result parseKnownArgs(ref COMMAND receiver, string[] args, out string[] unrecognizedArgs)` + + **Parameters:** + + - `receiver` – the object that’s populated with parsed values. + - `args` – raw command line arguments (excluding `argv[0]` – first command line argument in `main` function). + - `unrecognizedArgs` – raw command line arguments that were not parsed. + + **Return value:** + + An object that can be cast to `bool` to check whether the parsing was successful or not. + +- `Result parseKnownArgs(ref COMMAND receiver, ref string[] args)` + + **Parameters:** + + - `receiver` – the object that’s populated with parsed values. + - `args` – raw command line arguments that are modified to have parsed arguments removed (excluding `argv[0]` – first + command line argument in `main` function). + + **Return value:** + + An object that can be cast to `bool` to check whether the parsing was successful or not. + +**Usage example:** + + diff --git a/docs/topics/End-of-named-arguments.md b/docs/topics/End-of-named-arguments.md new file mode 100644 index 0000000..ea76ff4 --- /dev/null +++ b/docs/topics/End-of-named-arguments.md @@ -0,0 +1,7 @@ +# End of named arguments + +When the command line contains an entry that is equal to [`Config.endOfNamedArgs`](Config.md#endOfNamedArgs) +(double dash `--` by default), `argparse` interprets all following command line entries as positional arguments, even +if they can match a named argument or a subcommand. + + diff --git a/docs/topics/Getting-started.md b/docs/topics/Getting-started.md new file mode 100644 index 0000000..3a64eea --- /dev/null +++ b/docs/topics/Getting-started.md @@ -0,0 +1,25 @@ +# Getting started + +`argparse` provides User-Defined Attributes (UDA) that can be used to annotate `struct` members that are part of +command line interface. + +## Without User-Defined Attributes + +Using UDAs is not required and if a `struct` has no UDAs then all data members are treated as named command line +arguments: + + + +Running the program above with `-h` argument will have the following output: + +Hello world example + +## With User-Defined Attributes + +Although UDA-less approach is useful as a starting point, it's not enough for real command line tool: + + + +Running the program above with `-h` argument will have the following output: + +Hello world example diff --git a/docs/topics/Help-generation.md b/docs/topics/Help-generation.md new file mode 100644 index 0000000..117ec0c --- /dev/null +++ b/docs/topics/Help-generation.md @@ -0,0 +1,67 @@ +# Help generation + + +## Command + +`Command` UDA provides few customizations that affect help text. It can be used for **top-level command** and **subcommands**. + +- Program name (i.e., the name of top-level command) and subcommand name can be provided to `Command` UDA as a parameter. + If program name is not provided, then `Runtime.args[0]` (a.k.a. `argv[0]` from `main` function) is used. + If subcommand name is not provided (e.g., `@(Command.Description(...))`), then the name of the type that represents the command is used. +- `Usage` – allows custom usage text. By default, the parser calculates the usage message from the arguments it contains + but this can be overridden with `Usage` call. If the custom text contains `%(PROG)` then it will be replaced by the + command/program name. +- `Description` – used to provide a description of what the command/program does and how it works. In help messages, the + description is displayed between the usage string and the list of the command arguments. +- `ShortDescription` – used to provide a brief description of what the subcommand does. It is applicable to subcommands + only and is displayed in *Available commands* section on help screen of the parent command. +- `Epilog` – custom text that is printed after the list of the arguments. + +`Usage`, `Description`, `ShortDescription` and `Epilog` modifiers take either `string` or `string function()` +value – the latter can be used to return a value that is not known at compile time. + +## Argument + +There are some customizations supported on argument level for both `PositionalArgument` and `NamedArgument` UDAs: + +- `Description` – provides brief description of the argument. This text is printed next to the argument + in the argument-list section of a help message. `Description` takes either `string` or `string function()` + value – the latter can be used to return a value that is not known at compile time. +- `HideFromHelp` – can be used to indicate that the argument shouldn’t be printed in help message. +- `Placeholder` – provides custom text that is used to indicate the value of the argument in help message. + +## Help text styling + +`argparse` uses `Config.styling` to determine what style should be applied to different parts of the help text. +Please refer to [ANSI coloring and styling](ANSI-coloring-and-styling.md) section for details. + +## Example + +Here is an example of how this customization can be used: + + + +This example will print the following help message: + +Help example + +## Argument groups + +By default, parser groups command line arguments into “required arguments” and “optional arguments” when displaying help +message. When there is a better conceptual grouping of arguments than this default one, appropriate groups can be +created using `ArgumentGroup` UDA. + +This UDA has some customization for displaying help text: + +- `Description` – provides brief description of the group. This text is printed right after group name. + It takes either `string` or `string function()` value – the latter can be used to return a value that is not known + at compile time. + +Example: + + + +When an argument is attributed with a group, the parser treats it just like a normal argument, but displays the argument +in a separate group for help messages: + +Help argument group diff --git a/docs/topics/Introduction.md b/docs/topics/Introduction.md new file mode 100644 index 0000000..ce8f1f2 --- /dev/null +++ b/docs/topics/Introduction.md @@ -0,0 +1,20 @@ +# Introduction + +`argparse` is a flexible parser of command line arguments that allows easy creation of terminal applications with rich +command line interface. + +## Features + +`argparse` provides a lot of features to support different use cases: +- Positional arguments +- Named arguments +- Argument grouping +- Subcommands +- Built-in help screen +- ANSI colors and styles +- Shell completion +- Support for different types, for example: scalars, enums, arrays, associative arrays, callbacks + +Example of help screen with ANSI colors and styles: + +Help example diff --git a/docs/topics/Named-arguments.md b/docs/topics/Named-arguments.md new file mode 100644 index 0000000..cba98ac --- /dev/null +++ b/docs/topics/Named-arguments.md @@ -0,0 +1,30 @@ +# Named arguments + +_Named arguments_ (they are also called as flags or options) have one or more name that can be separated into two categories: +- _Short names_ are those that start with single dash `-` (see [`Config.namedArgPrefix`](Config.md#namedArgPrefix) for customization). +- _Long names_ start with double dash `--` (see [`Config.namedArgPrefix`](Config.md#namedArgPrefix) for customization). + +Both cases are fully supported with one caveat: +if a single-character argument is used with a double dash (e.g., `--n`) in command line, then it behaves the same as a +multi-character argument. + +The following usages of the argument in the command line are equivalent: +- `--name John` +- `--name=John` +- `--n John` +- `--n=John` +- `-n John` +- `-n=John` +- `-nJohn` - this works for single-character names only + +> Any other character can be used instead of `=` – see [`Config.assignChar`](Config.md#assignChar) for details. + +_Named arguments_ can be declared using `NamedArgument` UDA which has the following parameters: + +| # | Name | Type | Optional/
Required | Description | +|---|--------|------------------------|------------------------|------------------------------------------------------------| +| 1 | `name` | `string` or `string[]` | optional | Name(s) of this argument that can show up in command line. | + +Example: + + diff --git a/docs/topics/Optional-and-required-arguments.md b/docs/topics/Optional-and-required-arguments.md new file mode 100644 index 0000000..830ceb6 --- /dev/null +++ b/docs/topics/Optional-and-required-arguments.md @@ -0,0 +1,10 @@ +# Optional and required arguments + +Arguments can be marked as required or optional by adding `.Required` or `.Optional` to UDA. If required argument is +not present in command line, `argparse` will error out. + +By default, _positional arguments_ are **required** and _named arguments_ are **optional**. + +Example: + + diff --git a/docs/topics/Parsing-customization.md b/docs/topics/Parsing-customization.md new file mode 100644 index 0000000..c503c3c --- /dev/null +++ b/docs/topics/Parsing-customization.md @@ -0,0 +1,135 @@ +# Parsing customization + +Sometime the functionality that is provided out of the box is not enough and needs to be tuned. +`argparse` allows customizing of every step of command line parsing: + +- **Pre-validation** – argument values are validated as raw strings. +- **Parsing** – raw argument values are converted to a different type (usually the type of the receiving data member). +- **Validation** – converted value is validated. +- **Action** – depending on a type of the receiving data member, for example, it can be an assignment of converted value to a + data member, or appending value if type is an array. + +In case if argument does not have any value to parse, then the only one step is involved in parsing: + +- **Action if no value** – similar to **Action** step above but without converted value. + +> If any of the steps above fails, then the command line parsing fails as well. +> +{style="note"} + +Each of the steps above can be customized with UDA modifiers below. + +## Pre-validation {id="PreValidation"} + +`PreValidation` modifier can be used to customize the validation of raw string values. It accepts a function with one of +the following signatures: + +- `bool validate(string value)` + + `Result validate(string value)` + + > In this case, function will be called once for every value specified in command line for an argument in case of multiple values. + > + {style="note"} + +- `bool validate(string[] value)` + + `Result validate(string[] value)` + +- `bool validate(RawParam param)` + + `Result validate(RawParam param)` + +Parameters: + +- `value`/`param` values to be parsed. + +Return value: + +- `true`/`Result.Success` if validation passed or +- `false`/`Result.Error` otherwise. + +## Parsing {id="Parse"} + +`Parse` modifier allows providing custom conversion from raw string to a typed value. It accepts a function with one of +the following signatures: + +- `ParseType parse(string value)` +- `ParseType parse(string[] value)` +- `ParseType parse(RawParam param)` +- `bool parse(ref ParseType receiver, RawParam param)` +- `void parse(ref ParseType receiver, RawParam param)` +- `Result parse(ref ParseType receiver, RawParam param)` + +> `ParseType` is a type that a string value is supposed to be parsed to and it is not required be the same as +a type of destination - `argparse` tries to detect this type from provided function. +> +{title="ParseType"} + +Parameters: + +- `value`/`param` raw (string) values to be parsed. +- `receiver` is an output variable for parsed value. + +Return value for functions that return `bool` or `Result` (in other cases parsing is always considered successful): +- `true`/`Result.Success` if parsing was successful or +- `false`/`Result.Error` otherwise. + +## Validation {id="Validation"} + +`Validation` modifier can be used to validate parsed value. It accepts a function with one of the following +signatures: + +- `bool validate(ParseType value)` + + `Result validate(ParseType value)` + +- `bool validate(ParseType[] value)` + + `Result validate(ParseType[] value)` + +- `bool validate(Param!ParseType param)` + + `Result validate(Param!ParseType param)` + +Parameters: + +- `value`/`param` contains a value returned from `Parse` step. + +Return value: + +- `true`/`Result.Success` if validation passed or +- `false`/`Result.Error` otherwise. + +## Action {id="Action"} + +`Action` modifier allows customizing a logic of how "destination" should be changed when argument has a value in +command line. It accepts a function with one of the following signatures: + +- `bool action(ref T receiver, ParseType value)` + + `void action(ref T receiver, ParseType value)` + +- `Result action(ref T receiver, ParseType value)` + + `bool action(ref T receiver, Param!ParseType param)` + +- `void action(ref T receiver, Param!ParseType param)` + + `Result action(ref T receiver, Param!ParseType param)` + +Parameters: + +- `receiver` is a receiver (destination) which is supposed to be changed based on a `value`/`param`. +- `value`/`param` has a value returned from `Parse` step. + +Return value: + +- `true`/`Result.Success` if operation was successful or +- `false`/`Result.Error` otherwise. + +## Example + +All the above modifiers can be combined in any way: + + diff --git a/docs/topics/Positional-arguments.md b/docs/topics/Positional-arguments.md new file mode 100644 index 0000000..e586ee5 --- /dev/null +++ b/docs/topics/Positional-arguments.md @@ -0,0 +1,21 @@ +# Positional arguments + +_Positional arguments_ are arguments that have specific position within the command line. This argument can be declared +using `PositionalArgument` UDA. It has the following parameters: + +| # | Name | Type | Optional/
Required | Description | +|---|---------------|----------|------------------------|--------------------------------------------------------------------------------------------------------------| +| 1 | `position` | `uint` | required | Zero-based unsigned position of the argument. | +| 2 | `placeholder` | `string` | optional | Name of this argument that is shown in help text.
If not provided, then the name of data member is used. | + +Since that both _named_ and _positional arguments_ can be mixed in the command line, `argparse` enforces the following +restrictions to be able to parse a command line unambiguously: +- Positions of _positional arguments_ must be consecutive starting with zero without missing or repeating. +- _Positional argument_ must not have variable number of values except for the last argument. +- Optional _positional argument_ must have index greater than required _positional arguments_. +- If a command has default subcommand (see Subcommand section for details) the optional _positional argument_ is not + allowed in this command. + +Example: + + diff --git a/docs/topics/Restrict-allowed-values.md b/docs/topics/Restrict-allowed-values.md new file mode 100644 index 0000000..3a690ad --- /dev/null +++ b/docs/topics/Restrict-allowed-values.md @@ -0,0 +1,17 @@ +# Restrict allowed values + +In some cases an argument can receive one of the limited set of values. This can be achieved by adding `.AllowedValues!()` +to UDA: + + + +For the value that is not in the allowed list, this error will be printed: + +Allowed values error + +> If the type of destination data member is `enum`, then the allowed values are automatically limited to those +> listed in the `enum`. +> +> See [Enum](Supported-types.md#enum) section for details. +> +{style="note"} \ No newline at end of file diff --git a/docs/topics/Shell-completion.md b/docs/topics/Shell-completion.md new file mode 100644 index 0000000..95195a4 --- /dev/null +++ b/docs/topics/Shell-completion.md @@ -0,0 +1,90 @@ +# Shell completion + +`argparse` supports tab completion of last argument for certain shells (see below). However, this support is limited +to the names of arguments and subcommands. + +## Wrappers for main function + +If you are using `CLI!(...).main(alias newMain)` mixin template in your code then you can easily build a completer +(program that provides completion) by defining `argparse_completion` version (`-version=argparse_completion` option of +`dmd`). Don’t forget to use different output file for completer than your main program (`-of` option in `dmd`). No other +changes are necessary to generate completer, but you should consider minimizing the set of imported modules when +`argparse_completion` version is defined. For example, you can put all imports into your main function that is passed to +`CLI!(...).main(alias newMain)` – `newMain` parameter is not used in completer. + +If you prefer having separate main module for completer, then you can use `CLI!(...).mainComplete` mixin template: +```c++ +mixin CLI!(...).mainComplete; +``` + +In case if you prefer to have your own `main` function and would like to call completer by yourself, you can use +`int CLI!(...).complete(string[] args)` function. This function executes the completer by parsing provided `args` (note +that you should remove the first argument from `argv` passed to `main` function). The returned value is meant to be +returned from `main` function, having zero value in case of success. + +## Low level completion + +In case if none of the above methods is suitable, `argparse` provides `string[] CLI!(...).completeArgs(string[] args)` +function. It takes arguments that should be completed and returns all possible completions. + +`completeArgs` function expects to receive all command line arguments (excluding `argv[0]` – first command line argument +in `main` function) in order to provide completions correctly (set of available arguments depends on subcommand). This +function supports two workflows: +- If the last argument in `args` is empty and it’s not supposed to be a value for a command line argument, then all + available arguments and subcommands (if any) are returned. +- If the last argument in `args` is not empty and it’s not supposed to be a value for a command line argument, then only + those arguments and subcommands (if any) are returned that start with the same text as the last argument in `args`. + +For example, if there are `--foo`, `--bar` and `--baz` arguments available, then: +- Completion for `args=[""]` will be `["--foo", "--bar", "--baz"]`. +- Completion for `args=["--b"]` will be `["--bar", "--baz"]`. + +## Using the completer + +Completer that is provided by `argparse` supports the following shells: +- bash +- zsh +- tcsh +- fish + +Its usage consists of two steps: completion setup and completing of the command line. Both are implemented as +subcommands (`init` and `complete` accordingly). + +### Completion setup + +Before using completion, completer should be added to the shell. This can be achieved by using `init` subcommand. It +accepts the following arguments (you can get them by running ` init --help`): +- `--bash`: provide completion for bash. +- `--zsh`: provide completion for zsh. Note: zsh completion is done through bash completion so you should execute `bashcompinit` first. +- `--tcsh`: provide completion for tcsh. +- `--fish`: provide completion for fish. +- `--completerPath `: path to completer. By default, the path to itself is used. +- `--commandName `: command name that should be completed. By default, the first name of your main command is used. + +Either `--bash`, `--zsh`, `--tcsh` or `--fish` is expected. + +As a result, completer prints the script to setup completion for requested shell into standard output (`stdout`) +which should be executed. To make this more streamlined, you can execute the output inside the current shell or to do +this during shell initialization (e.g., in `.bashrc` for bash). To help doing so, completer also prints sourcing +recommendation to standard output as a comment. + +Example of completer output for ` init --bash --commandName mytool --completerPath /path/to/completer` arguments: +```bash +# Add this source command into .bashrc: +# source <(/path/to/completer init --bash --commandName mytool) +complete -C 'eval /path/to/completer --bash -- $COMP_LINE ---' mytool +``` + +Recommended workflow is to install completer into a system according to your installation policy and update shell +initialization/config file to source the output of `init` command. + +### Completing of the command line + +Argument completion is done by `complete` subcommand (it’s default one). It accepts the following arguments (you can get them by running ` complete --help`): +- `--bash`: provide completion for bash. +- `--tcsh`: provide completion for tcsh. +- `--fish`: provide completion for fish. + +As a result, completer prints all available completions, one per line, assuming that it’s called according to the output +of `init` command. + diff --git a/docs/topics/Subcommands.md b/docs/topics/Subcommands.md new file mode 100644 index 0000000..c2b16ac --- /dev/null +++ b/docs/topics/Subcommands.md @@ -0,0 +1,46 @@ +# Subcommands + +Sophisticated command line tools, like `git`, have many subcommands (e.g., `git clone`, `git commit`, `git push`, etc.), +each with its own set of arguments. There are few ways how to use subcommands with `argparse`. + +## `Subcommand` type + +General approach to declare subcommands is to use `SubCommand` type. This type is behaving like a `SumType` from standard library +with few additions: +- It allows no command to be chosen. +- It supports at most one default subcommand (see [below](#default-subcommand) for details). + +> See [SubCommand](SubCommand.md) section in the Reference for more detailed description of `SubCommand` type. +> +{style="note"} + + + +## Subcommands with shared common arguments + +In some cases command line tool has arguments that are common across all subcommands. They can be specified as regular +arguments in a struct that represents the whole program: + + + +## Subcommand name and aliases + +Using type name as a subcommand name in command line might not be convenient, moreover, the same subcommand might have +multiple names in command line (e.g. short and long versions). `Command` UDA can be used to list all acceptable names for +a subcommand: + + + +## Default subcommand + +Default subcommand is one that is selected when user does not specify any subcommand in the command line. +To mark a subcommand as default, use `Default` template: + + + +## Enumerating subcommands in CLI mixin + +One of the possible ways to use subcommands with `argparse` is to list all subcommands in `CLI` mixin. Although this might +be a useful feature, it is very limited: `CLI` mixin only allows overriding of the `main` function for this case: + + diff --git a/docs/topics/Supported-types.md b/docs/topics/Supported-types.md new file mode 100644 index 0000000..9f4fc4c --- /dev/null +++ b/docs/topics/Supported-types.md @@ -0,0 +1,115 @@ +# Supported types + +When command line entries are mapped to the annotated data members, the text value is converted to the type of the +data member. + +## Boolean flags + +Boolean types usually represent command line flags. `argparse` supports multiple ways of providing flag value including +negation (i.e., `--no-flag`): + +| Command line entries | Result | +|--------------------------------|-----------| +| `-b` / `--boo` | `true` | +| `-b=` / `--boo=` | `` | +| `--no-b` / `--no-boo` | `false` | +| `-b ` / `--boo ` | error | + +> `` is accepted only if it's provided with assignment `=` character ([`Config.assignChar`](Config.md#assignChar)), +> not as a separate command line entry. +> +{style="warning"} + +`argparse` supports the following strings as a `` (comparison is case-insensitive): + +| `` | Result | +|------------------|--------| +| `true`,`yes`,`y` | true | +| `false`,`no`,`n` | false | + +## Numbers and strings + +Numeric (according to `std.traits.isNumeric`) and string (according to `std.traits.isSomeString`) data types are +seamlessly converted to destination type using `std.conv.to`: + + + +## Arrays + +`argparse` supports 1D and 2D arrays: +- If an argument is bound to 1D array, a new element is appended to this array each time the argument is provided in +command line. +- In case of 2D array, new elements are grouped in a way as they appear in +command line and then each group is appended to this array. + +The difference can be easily shown in the following example: + + + +Alternatively one can set [`Config.arraySep`](Config.md#arraySep) to allow multiple elements in one command line entry: + + + +## Associative arrays + +`argparse` also supports associative array where simple value type (e.g. numbers, strings etc.). In this case, expected +format of the value is `key=value` (equal sign can be customized with [`Config.assignChar`](Config.md#assignChar)): + + + +Alternatively one can set [`Config.arraySep`](Config.md#arraySep) to allow multiple elements in one command line entry: + + + +## Enums {id="enum"} + +It is encouraged to use `enum` types for arguments that have a limited set of valid values. In this case, `argparse` +validates that the value specified in command line matches one of enum identifiers: + + + +In some cases the value for command line argument might have characters that are not allowed in enum identifiers. +Actual values that are allowed in command line can be adjusted with `ArgumentValue` UDA: + + + +> When `ArgumentValue` UDA is used, enum identifier is ignored so if argument is supposed to accept it, identifier +> must be listed in the UDA as well - see `"noapple"` in the example above. +> +{style="note"} + +## Counter + +Counter is an argument that tracks the number of times it's specified in the command line: + + + +The same example with enabled [bundling](Arguments-bundling.md): + + + +## Callback + +If member type is a function, `argparse` will try to call it when the corresponding argument is specified in the +command line. + +`argparse` supports the following function signatures (return value is ignored, if any): + +- `... func()` - argument is treated as a boolean flag. + +- `... func(string)` - argument has exactly one value. The value specified in command line is provided into `string` parameter. + +- `... func(string[])` - argument has zero or more values. Values specified in command line are provided into `string[]` parameter. + +- `... func(RawParam)` - argument has zero or more values. Values specified in command line are provided into parameter. + +Example: + + + +## Custom types + +`argparse` can actually work with any arbitrary type - just provide parsing function (see [Parsing customization](Parsing-customization.md#Parse) +for details): + + diff --git a/docs/topics/reference/ArgumentGroup.md b/docs/topics/reference/ArgumentGroup.md new file mode 100644 index 0000000..19f08fc --- /dev/null +++ b/docs/topics/reference/ArgumentGroup.md @@ -0,0 +1,48 @@ +# ArgumentGroup + +`ArgumentGroup` UDA is used to group arguments on help screen. + +## Usage + +**Signature** +```C++ +ArgumentGroup(string name) +``` + +**Usage example** + +```C++ +@ArgumentGroup("my group") +{ +... +} +``` + + +## Public members + +### Description + +`Description` is used to add description text to a group. + +**Signature** + +```C++ +... Description(auto ref ... group, string text) +... Description(auto ref ... group, string function() text) +``` + +**Parameters** + +- `text` + + Text that contains group description or a function that returns such text. + +**Usage example** + +```C++ +@(ArgumentGroup("my group").Description("custom description")) +{ +... +} +``` diff --git a/docs/topics/reference/ArgumentValue.md b/docs/topics/reference/ArgumentValue.md new file mode 100644 index 0000000..38a684e --- /dev/null +++ b/docs/topics/reference/ArgumentValue.md @@ -0,0 +1,26 @@ +# ArgumentValue + +`ArgumentValue` UDA is used to list all values that an argument can accept. This is very useful in the cases when an argument +must have a value from a specific list, for example, when argument type is `enum`. + +**Signature** + +```C++ +ArgumentValue(string[] values...) +``` + +**Parameters** + +- `values` + + Values that argument can have. + +**Usage example** + +```C++ +enum Fruit { + apple, + @ArgumentValue("no-apple","noapple") + noapple +}; +``` diff --git a/docs/topics/reference/CLI-API.md b/docs/topics/reference/CLI-API.md new file mode 100644 index 0000000..cee7c0d --- /dev/null +++ b/docs/topics/reference/CLI-API.md @@ -0,0 +1,191 @@ +# CLI API + +`CLI` is a template that provides entry-point functions to call `argparse`. + +Here are the signatures that `CLI` template has: +```c++ +template CLI(Config config, COMMAND) +template CLI(Config config, COMMANDS...) +``` + +The second template with multiple `COMMANDS...` has only `main` function which wraps all `COMMANDS` inside internal +struct with only data member of type `SubCommand!COMMANDS` and calls `CLI(Config config, CMD).main` with that. + +There is also an `alias` that uses default `Config.init` to simplify default behavior: +```c++ +alias CLI(COMMANDS...) = CLI!(Config.init, COMMANDS); +``` + +## Public members + +### parseKnownArgs + +`CLI.parseKnownArgs` is a function that parses only known arguments from the command line. + +All arguments that were not recognized during parsing are returned to a caller. + +**Signature** + +```c++ +Result parseKnownArgs(ref COMMAND receiver, string[] args, out string[] unrecognizedArgs) +Result parseKnownArgs(ref COMMAND receiver, ref string[] args) +``` + +**Parameters** + +- `receiver` + + Object that receives parsed command line arguments. + +- `args` + + Command line arguments to parse (excluding `argv[0]` – first command line argument in `main` function). + +- `unrecognizedArgs` + + Command line arguments that were not parsed. + +**Notes** + +- The second signature (without `unrecognizedArgs` parameter) returns not parsed arguments through `args` reference parameter. + +**Return value** + +`Result` object that can be cast to `bool` to check whether the parsing was successful or not. +Successful parsing for `parseKnownArgs` function means that there are no error during parsing of known arguments. +This means that having unrecognized arguments in a command line is not an error. + +### parseArgs + +`CLI.parseArgs` is a function that parses command line arguments and validates that there are no unknown ones. + +**Signature** + +```c++ +Result parseArgs(ref COMMAND receiver, string[] args) +int parseArgs(alias newMain)(string[] args, COMMAND initialValue = COMMAND.init) +``` + +**Parameters** + +- `receiver` + + Object that receives parsed command line arguments. + +- `args` + + Command line arguments to parse (excluding `argv[0]` – first command line argument in `main` function). + +- `newMain` + + Function that is called after successful command line parsing. See [`newMain`](#newMain) for details. + +- `initialValue` + + Initial value for the object passed to `newMain` function. + + +**Notes** + +- `newMain` will not be called in case of parsing error. + +**Return value** + +- In case of parsing error - `Result.exitCode` (`1` by default). +- In case of success: + - `0` for the `parseArgs` version that doesn't accept `newMain` function. + - `0` if `newMain` doesn't return a value that can be cast to `int`. + - Value returned by `newMain` that is cast to `int`. + +### complete + +`CLI.complete` is a function that performs shell completion for command line arguments. + +**Signature** + +```c++ +int complete()(string[] args) +``` + +**Parameters** + +- `args` + + Command line arguments (excluding `argv[0]` – first command line argument in `main` function). + +**Notes** + +This function provides completion for the last argument in the command line: +- If the last entry in command line is an empty string (`""`) then it provides all available argument names prepended + with [`Config.namedArgPrefix`](Config.md#namedArgPrefix). +- If the last entry in command line contains characters then `complete` provides completion only with those arguments + that have names starting with specified characters. + +**Return value** + +- `0` in case of successful parsing. +- Non-zero otherwise. + +### mainComplete + +`CLI.mainComplete` is a mixin template that provides global `main` function which calls [`CLI.complete`](#complete). + +**Signature** + +```c++ +template mainComplete() +``` + +**Notes** + +Ingested `main` function is a simple wrapper of [`CLI.complete`](#complete) function that removes `argv[0]` from command line. + +**Return value** + +Value returned from [`CLI.complete`](#complete) function. + +### main + +`CLI.main` is a mixin template that does one of these: + +- If `argparse_completion` version is defined then it instantiates `CLI.mainComplete` template mixin. +- Otherwise it provides global `main` function that calls [`CLI.parseArgs`](#parseargs) function. + +**Signature** + +```c++ +template main(alias newMain) +``` + +**Parameters** + +- `newMain` + + Function that is called after successful command line parsing. See [`newMain`](#newMain) for details. + +**Notes** + +- `newMain` parameter is not used in case if `argparse_completion` version is defined. + +**Return value** + +See [`CLI.mainComplete`](#maincomplete) and [`CLI.parseArgs`](#parseargs). + +## newMain parameter {id="newMain"} + +`newMain` parameter in `CLI` API is a substitution for classic `main` function with the following differences: +- Its first parameter has type of a command struct that is passed to `CLI` API. This parameter is filled with the data + parsed from actual command line. + + `... newMain(COMMAND command)` + +- It might have optional second parameter of type `string[]` that receives unknown command line arguments. + + `... newMain(COMMAND command, string[] unrecognizedArgs)` + +- `newMain` can optionally return anything that can be cast to `int`. In this case, `argparse` will return that value from `CLI` API + or from injected `main` function in case of `CLI.main`. + +> If `newMain` has only one parameter, `argparse` will error out when command line contains unrecognized arguments. +> +{style="warning"} \ No newline at end of file diff --git a/docs/topics/reference/Command.md b/docs/topics/reference/Command.md new file mode 100644 index 0000000..55e77ee --- /dev/null +++ b/docs/topics/reference/Command.md @@ -0,0 +1,139 @@ +# Command + +`Command` UDA is used to customize **top-level command** as well as **subcommands**. + +This UDA can be chained with functions listed below to adjust different settings. + +**Signature** + +```c++ +Command(string[] names...) +``` + +**Parameters** + +- `names` + + For **subcommands**, these are the names of the subcommand that can appear in the command line. If no name is provided then + the name of the type that represents the command is used. + + For **top-level command**, this is a name of a program/tool that is appeared on help screen. If multiple names are passed, only first is used. + If no name is provided then `Runtime.args[0]` (a.k.a. `argv[0]` from `main` function) is used. + + +## Public members + +### Usage + +`Usage` allows customize the usage text. By default, the parser calculates the usage message from the arguments it contains +but this can be overridden with `Usage` call. If the custom text contains `%(PROG)` then it will be replaced by the +`argv[0]` (from `main` function) in case of top-level command or by a list of commands (all parent commands and current one) +in case of subcommand. + + +**Signature** + +```C++ +Usage(auto ref ... command, string text) +Usage(auto ref ... command, string function() text) +``` + +**Parameters** + +- `text` + + Usage text or a function that returns such text. + +**Usage example** + +```C++ +@(Command.Usage("%(PROG) [...]")) +struct my_command +{ +... +} +``` + +### Description + +`Description` can be used to provide a description of what the command/program does and how it works. In help messages, the + description is displayed between the usage string and the list of the command arguments. + +**Signature** + +```C++ +Description(auto ref ... command, string text) +Description(auto ref ... command, string function() text) +``` + +**Parameters** + +- `text` + + Text that contains command description or a function that returns such text. + +**Usage example** + +```C++ +@(Command.Description("custom description")) +struct my_command +{ +... +} +``` + +### ShortDescription + +`ShortDescription` can be used to provide a brief description of what the subcommand does. It is applicable to subcommands + only and is displayed in *Available commands* section on help screen of the parent command. + +**Signature** + +```C++ +ShortDescription(auto ref ... command, string text) +ShortDescription(auto ref ... command, string function() text) +``` + +**Parameters** + +- `text` + + Text that contains short description for a subcommand or a function that returns such text. + +**Usage example** + +```C++ +@(Command.ShortDescription("custom description")) +struct my_command +{ +... +} +``` + + +### Epilog + +`Epilog` can be used to provide some custom text that is printed at the end after the list of command arguments. + +**Signature** + +```C++ +Epilog(auto ref ... command, string text) +Epilog(auto ref ... command, string function() text) +``` + +**Parameters** + +- `text` + + Epilog text or a function that returns such text. + +**Usage example** + +```C++ +@(Command.Epilog("extra info about the command")) +struct my_command +{ +... +} +``` diff --git a/docs/topics/reference/Config.md b/docs/topics/reference/Config.md new file mode 100644 index 0000000..80ce66d --- /dev/null +++ b/docs/topics/reference/Config.md @@ -0,0 +1,148 @@ +# Config + +`argparse` provides decent amount of settings to customize the parser. All customizations can be done by creating +`Config` object with required settings (see below) and passing it to [CLI API](CLI-API.md). + +## Assign character {id="assignChar"} + +`Config.assignChar` is an assignment character used in arguments with value: `-a=5`, `-b=foo`. + +Default is equal sign `=`. + +Example: + + + +## Array separator {id="arraySep"} + +When `Config.arraySep` is set to `char.init`, values to array and associative-array receivers are treated as an individual +value. That is, only one argument is appended/inserted per appearance of the argument. If `arraySep` is set to something +else, then each value is first split by the separator, and the individual pieces are treated as values to the same +argument. + +Default is `char.init`. + +Example: + + + +## Named argument prefix {id="namedArgPrefix"} + +`Config.namedArgPrefix` is a character that named arguments begin with. + +Default is dash (`-`). + +Example: + + + +## End of named arguments {id="endOfNamedArgs"} + +`Config.endOfNamedArgs` is a string that marks the end of all named arguments. All arguments that are specified +after this one are treated as positional regardless to the value which can start with `namedArgPrefix` (dash `-` by default) +or be a subcommand. + +Default is double dash (`--`). + +Example: + + + +## Case sensitivity {id="caseSensitive"} + +`Config.caseSensitive` controls whether the argument names are case-sensitive. By default they are and it can be changed +by setting this member to `false`. + +Default is `true`. + +Example: + + + +## Bundling of single-character arguments {id="bundling"} + +`Config.bundling` controls whether single-character arguments (usually boolean flags) can be bundled together. +If it is set to `true` then `-abc` is the same as `-a -b -c`. + +Default is `false`. + +Example: + + + +## Adding help generation {id="addHelp"} + +`Config.addHelp` can be used to add (if `true`) or not (if `false`) `-h`/`--help` argument. +In case if the command line has `-h` or `--help`, then the corresponding help text is printed and the parsing is stopped. +If `CLI!(...).parseArgs(alias newMain)` or `CLI!(...).main(alias newMain)` is used, then provided `newMain` function will +not be called. + +Default is `true`. + +Example: + + + +Help text from the first part of the example code above: + +Config help example + + +## Styling mode {id="stylingMode"} + +`Config.stylingMode` controls whether styling for help text and errors should be enabled. +It has the following type: `enum StylingMode { autodetect, on, off }`: +- `Config.StylingMode.on`: styling is **always enabled**. +- `Config.StylingMode.off`: styling is **always disabled**. +- `Config.StylingMode.autodetect`: styling will be enabled when possible. + +See [ANSI coloring and styling](ANSI-coloring-and-styling.md) for details. + +Default value is `Config.StylingMode.autodetect`. + +Example: + + + +Help text from the first part of the example code above: + +Config stylingMode example + +## Styling scheme {id="styling"} + +`Config.styling` contains style for the text output (error messages and help text). It has the following members: + +- `programName`: style for the program name. Default is `bold`. +- `subcommandName`: style for the subcommand name. Default is `bold`. +- `argumentGroupTitle`: style for the title of argument group. Default is `bold.underline`. +- `argumentName`: style for the argument name. Default is `lightYellow`. +- `namedArgumentValue`: style for the value of named argument. Default is `italic`. +- `positionalArgumentValue`: style for the value of positional argument. Default is `lightYellow`. +- `errorMessagePrefix`: style for *Error:* prefix in error messages. Default is `red`. + +See [ANSI coloring and styling](ANSI-coloring-and-styling.md) for details. + +Example: + + + +Help text from the first part of the example code above: + +Config styling example + +## Error handling {id="errorHandler"} + +`Config.errorHandler` is a handler function for all errors occurred during command line parsing. +It is a function that receives `string` parameter which would contain an error message. + +> Function must ne `nothrow` +> +{style="warning"} + +The default behavior is to print error message to `stderr`. + +Example: + + + +This code prints `Detected an error: Unrecognized arguments: ["-b"]` to `stderr`. diff --git a/docs/topics/reference/MutuallyExclusive.md b/docs/topics/reference/MutuallyExclusive.md new file mode 100644 index 0000000..bc25b4b --- /dev/null +++ b/docs/topics/reference/MutuallyExclusive.md @@ -0,0 +1,18 @@ +# MutuallyExclusive + +`MutuallyExclusive` UDA is used to mark a set of arguments as mutually exclusive. This means that as soon as one argument from +this group is specified in the command line then no other arguments from the same group can be specified. + +See ["Argument dependencies"](Argument-dependencies.md#MutuallyExclusive) section for more details. + +## Required + +"Mutually exclusive" group can be marked as required in order to require exactly one argument from the group: + +```C++ +@(MutuallyExclusive.Required) +{ + int a; + int b; +} +``` diff --git a/docs/topics/reference/Param-RawParam.md b/docs/topics/reference/Param-RawParam.md new file mode 100644 index 0000000..051a02b --- /dev/null +++ b/docs/topics/reference/Param-RawParam.md @@ -0,0 +1,18 @@ +# Param / RawParam + +[Parsing customization API](Parsing-customization.md) works with Param/RawParam struct under the hood which is publicly available for usage. + +`Param` is a template struct parametrized by `VALUE_TYPE` (see below) which is usually a `string[]` or a type of destination data member. + +> `RawParam` is an alias where `VALUE_TYPE` is `string[]`. This alias represents "raw" values from command line. +> +{style="note"} + +`Param` struct has the following fields: + +- `const(Config)*` `config`- The content is almost the same as the [`Config`](Config.md) object that was passed into [CLI API](CLI-API.md). + The only difference is in [`Config.stylingMode`](Config.md#stylingMode) - it is either `Config.StylingMode.on` or `Config.StylingMode.off` + based on [auto-detection](ANSI-coloring-and-styling.md#heuristic) results. +- `string` `name` – For named argument, it contains a name that is specified in command line exactly including prefix(es) + ([`Config.namedArgPrefix`](Config.md#namedArgPrefix)). For positional arguments, it contains placeholder value. +- `VALUE_TYPE` `value` – Argument values that are provided in command line. diff --git a/docs/topics/reference/PositionalNamedArgument.md b/docs/topics/reference/PositionalNamedArgument.md new file mode 100644 index 0000000..ec5cc60 --- /dev/null +++ b/docs/topics/reference/PositionalNamedArgument.md @@ -0,0 +1,447 @@ +# PositionalArgument/NamedArgument + +`PositionalArgument` UDA is used to declare an argument that has specific position in the command line. + + +**Signature** + +```c++ +PositionalArgument(uint position) +PositionalArgument(uint position, string placeholder) +NamedArgument(string[] names...) +``` + +**Parameters** + +- `position` + + Zero-based unsigned position of the argument. + +- `placeholder` + + Name of this argument that is shown in help text. + By default, the name of data member is used. + +- `names` + + Name(s) of this argument that can be used in command line. + By default, the name of data member is used. + +## Public members + +### Description + +`Description` can be used to provide a description of the argument. This text is printed next to the argument +in the argument list section of a help message. + +**Signature** + +```C++ +Description(auto ref ... argument, string text) +Description(auto ref ... argument, string function() text) +``` + +**Parameters** + +- `text` + + Text that contains argument description or a function that returns such text. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Description("custom description")) + int a; +} +``` + +### HideFromHelp + +`HideFromHelp` can be used to indicate that the argument should not be printed in help message. + +**Signature** + +```C++ +HideFromHelp(auto ref ... argument, bool hide = true) +``` + +**Parameters** + +- `hide` + + If `true` then argument is not printed in help message. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.HideFromHelp) + int a; +} +``` + +### Placeholder + +`Placeholder` provides custom text that is used to indicate the value of the argument in help message. + +**Signature** + +```C++ +Placeholder(auto ref ... argument, string value) +``` + +**Parameters** + +- `value` + + Text that is used as a placeholder for a value of an argument in help message. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Placeholder("VALUE")) + int a; +} +``` + +### Required + +Mark an argument as required so if it is not provided in command line, `argparse` will error out. + +By default all positional arguments are required. + +**Signature** + +```C++ +Required(auto ref ... argument) +``` + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Required) + int a; +} +``` + +### Optional + +Mark an argument as optional so it can be omitted in command line without causing errors. + +By default all named arguments are optional. + +**Signature** + +```C++ +Optional(auto ref ... argument) +``` + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Optional) + int a; +} +``` + +### NumberOfValues + +`NumberOfValues` is used to limit number of values that an argument can accept. + +**Signature** + +```C++ +NumberOfValues(auto ref ... argument, ulong min, ulong max) +NumberOfValues(auto ref ... argument, ulong num) +``` + +**Parameters** + +- `min` + + Minimum number of values. + +- `max` + + Maximum number of values. + +- `num` + + Exact number of values. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.NumberOfValues(1,3)) + int[] a; + + @(NamedArgument.NumberOfValues(2)) + int[] b; +} +``` + +### MinNumberOfValues + +`MinNumberOfValues` is used to set minimum number of values that an argument can accept. + +**Signature** + +```C++ +MinNumberOfValues(auto ref ... argument, ulong min) +``` + +**Parameters** + +- `min` + + Minimum number of values. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.MinNumberOfValues(2)) + int[] a; +} +``` + +### MaxNumberOfValues + +`MaxNumberOfValues` is used to set maximum number of values that an argument can accept. + +**Signature** + +```C++ +MaxNumberOfValues(auto ref ... argument, ulong max) +``` + +**Parameters** + +- `max` + + Maximum number of values. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.MinNumberOfValues(3)) + int[] a; +} +``` + +### AllowNoValue + +`AllowNoValue` allows an argument to not have a value in the command line - in this case, the value provided to this function will be used. + +**Signature** + +```C++ +AllowNoValue(alias valueToUse)(auto ref ... argument) +``` + +**Parameters** + +- `valueToUse` + + Value that is used when argument has no value specified in command line. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.AllowNoValue!10) + int a; +} +``` + +### RequireNoValue + +`RequireNoValue` requires an argument to have no value in the command line. The argument is behaving like a boolean flag +but instead of `true`/`false` values, there can be either a value provided to this function or a default one (`.init`). + +**Signature** + +```C++ +RequireNoValue(alias valueToUse)(auto ref ... argument) +``` + +**Parameters** + +- `valueToUse` + + Value that is used when argument is specified in command line. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.RequireNoValue!10) + int a; +} +``` + +### AllowedValues + +`AllowedValues` can be used to restrict what value can be provided in the command line for an argument. + +**Signature** + +```C++ +AllowedValues(alias values)(auto ref ... argument) +``` + +**Parameters** + +- `values` + + List of values that an argument can have. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.AllowedValues!([1,4,16,8])) + int a; +} +``` + +### Counter + +`Counter` can be used to mark an argument that tracks the number of times it's specified in the command line. + +**Signature** + +```C++ +Counter(auto ref ... argument) +``` + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Counter) + int a; +} +``` + +### PreValidation + +`PreValidation` can be used to customize the validation of raw string values. + +**Signature** + +```C++ +PreValidation(alias func)(auto ref ... argument) +``` + +**Parameters** + +- `func` + + Function that is called to validate raw value. See [parsing customization](Parsing-customization.md#PreValidation) for details. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.PreValidation!((string s) { return s.length > 0;})) + int a; +} +``` + +### Parse + +`Parse` can be used to provide custom conversion from raw string to a value. + +**Signature** + +```C++ +Parse(alias func)(auto ref ... argument) +``` + +**Parameters** + +- `func` + + Function that is called to convert raw value. See [parsing customization](Parsing-customization.md#Parse) for details. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Parse!((string s) { return s[1]; })) + char a; +} +``` + +### Validation + +`Validation` can be used to validate parsed value. + +**Signature** + +```C++ +Validation(alias func)(auto ref ... argument) +``` + +**Parameters** + +- `func` + + Function that is called to validate the value. See [parsing customization](Parsing-customization.md#Validation) for details. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Validation!((int a) { return a >= 0 && a <= 9; })) + int a; +} +``` + +### Action + +`Action` can be used to customize a logic of how "destination" should be changed based on parsed argument value. + +**Signature** + +```C++ +Action(alias func)(auto ref ... argument) +``` + +**Parameters** + +- `func` + + Function that is called to update the destination. See [parsing customization](Parsing-customization.md#Action) for details. + +**Usage example** + +```C++ +struct my_command +{ + @(NamedArgument.Action!((ref int a, int v) { a += v; }) + int a; +} +``` diff --git a/docs/topics/reference/RequiredTogether.md b/docs/topics/reference/RequiredTogether.md new file mode 100644 index 0000000..72e2fc7 --- /dev/null +++ b/docs/topics/reference/RequiredTogether.md @@ -0,0 +1,17 @@ +# RequiredTogether + +`RequiredTogether` UDA is used to mark a set of arguments as mutually required. This means that as soon as one argument from +this group is specified in the command line then all arguments from the same group must also be specified. + +See ["Argument dependencies"](Argument-dependencies.md#RequiredTogether) section for more details. + +## Required + +"Required together" group can be marked as required in order to require all arguments: + +```C++ +@(RequiredTogether.Required) +{ +... +} +``` diff --git a/docs/topics/reference/Result.md b/docs/topics/reference/Result.md new file mode 100644 index 0000000..66c3c85 --- /dev/null +++ b/docs/topics/reference/Result.md @@ -0,0 +1,80 @@ +# Result struct + +`Result` is a struct that is used to communicate between `argparse` and user functions. +Its main responsibility is to hold the result of an operation: success or failure. + +## Public members + +### Success + +`Result.Success` is an compile-time constant (`enum`) that represents a successful result of an operation. + +**Signature** +```c++ +static enum Success +``` + +### Error + +`Result.Error` is a function that returns a failed result of an operation. + +**Signature** + +```c++ +static auto Error(T...)(string msg, T extraArgs) +static auto Error(T...)(int resultCode, string msg, T extraArgs) +``` + +**Parameters** + +- `resultCode` + + Result/exit code of an operation. If it's not specified then `1` is used. + +- `msg` + + Text of an error message. + +- `extraArgs` + + Additional arguments that are added to the text of an error message. + +**Notes** + +- `msg` and `extraArgs` are converted to a single error message string using `std.conv.text(msg, extraArgs)`. +- Error message supports ANSI styling. See [ANSI coloring and styling](ANSI-coloring-and-styling.md) how to use. +- Error message is passed to [`Config.errorHandler`](Config.md#errorHandler) if it's set or printed to `stderr` otherwise + by [CLI API](CLI-API.md) at the end of parsing. + +**Return value** + +`Result` object that represents the failed result of an operation. + +### exitCode + +`Result.exitCode` is a property that returns the result/exit code. It's supposed to be returned from `main()` function. + +**Signature** + +```c++ +int exitCode() const +``` + +**Return value** + +Result/exit code of an operation. + +### opCast + +`Result.opCast` can be used to determine whether result of an operation is successful. + +**Signature** + +```c++ +bool opCast(T : bool)() const +``` + +**Return value** + +- `true` if operation is successful. +- `false` otherwise. diff --git a/docs/topics/reference/SubCommand.md b/docs/topics/reference/SubCommand.md new file mode 100644 index 0000000..0621c1b --- /dev/null +++ b/docs/topics/reference/SubCommand.md @@ -0,0 +1,118 @@ +# SubCommand + +`SubCommand` type can be used to enumerate type for subcommands. This is a wrapper of `SumType`: + +```c++ +struct SubCommand(Commands...) +``` + +## Public members + +### Copy constructor + +**Signature** + +```c++ +this(T)(T value) +``` + +**Parameters** + +- `T value` + + Value that is copied to a new object. Its type `T` must be one of the `Commands`. + +### Assignment operator + +**Signature** + +```c++ +ref SubCommand opAssign(T)(T value) +``` + +**Parameters** + +- `T value` + + Value to be assigned. Its type `T` must be one of the `Commands`. + +### isSetTo + +Checks whether the object is set to a specific command type; + +**Signature** + +```c++ +bool isSetTo(T)() const +``` + +**Parameters** + +- `T` + + Type `T` must be one of the `Commands`. + +**Return value** + +`true` if object contains `T` type, `false` otherwise. + +### isSet + +Checks whether the object is set to any command type; + +**Signature** + +```c++ +bool isSet() const +``` + +**Return value** + +If one of the `Commands` is a default command then this function always returns `true`. + +In case if there is no default command, then: +- `true` if object contains any type from `Commands`, `false` otherwise. + +## Default + +`Default` type is a struct that can be used to mark a subcommand as default, i.e. it's chosen if no other subcommand is specified +in command line explicitly. + +This struct has no members and is erased by `SubCommand` before passing to internal `SumType` member. + +**Signature** + +```c++ +struct Default(COMMAND) +``` + +## match + +`match` is a function template that is similar to the one from standard library but adapted to work with `SubCommand`. + +**Signature** + +```c++ +template match(handlers...) +{ + auto ref match(Sub : const SubCommand!Args, Args...)(auto ref Sub sc) + ... +} +``` + +**Parameters** + +- `handlers` + + Functions that have the same meaning as for `match` function in standard library with an exception that they must not use `Default` + type because the latter is erased by `SubCommand` (i.e. just use `T` instead of `Default!T` here). + +- `sc` + + `SubCommand` parameter that the matching is applied to. + +**Return value** + +- If `SubCommand` is set to any subcommand (or has default one) then function returns the result from `match` function from standard library. +- Otherwise, `init` value of the type that would be returned from `match` function from standard library if that type is not `void`. +- Otherwise, this function has no return value (i.e. it's `void`). diff --git a/docs/topics/reference/ansiStylingArgument.md b/docs/topics/reference/ansiStylingArgument.md new file mode 100644 index 0000000..084bf71 --- /dev/null +++ b/docs/topics/reference/ansiStylingArgument.md @@ -0,0 +1,31 @@ +# ansiStylingArgument + +Almost every command line tool that supports ANSI coloring and styling provides command line argument to control whether +this coloring/styling should be forcefully enabled or disabled. + +`argparse` provides `ansiStylingArgument` function that returns an object which allows checking the status of styling/coloring. +This function adds a command line argument that can have one of these values: +- `always` or no value - coloring/styling should be enabled. +- `never` - coloring/styling should be disabled. +- `auto` - in this case, `argparse` will try to detect whether ANSI coloring/styling is supported by a system. + +See [ANSI coloring and styling](ANSI-coloring-and-styling.md) for details. + +**Signature** + +```C++ +... ansiStylingArgument() +``` + +**Usage example** + +```C++ +static auto color = ansiStylingArgument; +``` + +> Explicit `static` is not required because returned object has only `static` data members. + +**Return value** + +Returned object that can be cast to boolean. Its value is `true` when the ANSI coloring/styling should be enabled in the output, +otherwise it's `false`. diff --git a/docs/v.list b/docs/v.list new file mode 100644 index 0000000..2d12cb3 --- /dev/null +++ b/docs/v.list @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/writerside.cfg b/docs/writerside.cfg new file mode 100644 index 0000000..a3c205b --- /dev/null +++ b/docs/writerside.cfg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/examples/dub.json b/examples/dub.json index 323c765..001870b 100644 --- a/examples/dub.json +++ b/examples/dub.json @@ -7,8 +7,8 @@ "all:completion-separate_main-completer":"*", "all:completion-single_main-app":"*", "all:completion-single_main-completer":"*", - "all:getting_started-advanced":"*", - "all:getting_started-basic":"*", + "all:getting_started-with_uda":"*", + "all:getting_started-without_uda":"*", "all:sub_commands-advanced":"*", "all:sub_commands-basic":"*", "all:sub_commands-common_args":"*", @@ -20,8 +20,8 @@ "completion/separate_main/completer", "completion/single_main/app", "completion/single_main/completer", - "getting_started/advanced", - "getting_started/basic", + "getting_started/with_uda", + "getting_started/without_uda", "sub_commands/advanced", "sub_commands/basic", "sub_commands/common_args", diff --git a/examples/getting_started/advanced/app.d b/examples/getting_started/advanced/app.d deleted file mode 100644 index 316dbd6..0000000 --- a/examples/getting_started/advanced/app.d +++ /dev/null @@ -1,75 +0,0 @@ -import argparse; -import argparse.ansi; - -struct Advanced -{ - // Positional arguments are required by default - @PositionalArgument(0) - string name; - - // Named arguments can be attributed in bulk (parentheses can be omitted) - @NamedArgument - { - string unused = "some default value"; - int number; - bool boolean; - } - - // Named argument can have custom or multiple names - @NamedArgument("apple","appl") - int apple; - - @NamedArgument(["b","banana","ban"]) - int banana; - - // Enums can have a value that is not an identifier - enum Enum { - @ArgumentValue("value1","value-1","value.1") - value1, - value2, - } - @NamedArgument - Enum choice; - - // Custom types can also be used with custom parsing function - struct CustomType { - double d; - } - @(NamedArgument.Parse!((string value) { import std.conv: to; return CustomType(value.to!double); })) - CustomType custom; - - @(NamedArgument.Description(green.bold.underline("Colorize")~" the output. If value is omitted then '"~red("always")~"' is used.")) - static auto color = ansiStylingArgument; -} - -// Customize parsing config -auto config() -{ - Config cfg; - - cfg.styling.programName = blue.onYellow; - cfg.styling.argumentName = bold.italic.cyan.onRed; - - return cfg; -} - -// This mixin defines standard main function that parses command line and calls the provided function: -mixin CLI!(config(), Advanced).main!((args, unparsed) -{ - // 'args' has 'Advanced' type - static assert(is(typeof(args) == Advanced)); - - // unparsed arguments has 'string[]' type - static assert(is(typeof(unparsed) == string[])); - - // do whatever you need - import std.stdio: writeln; - args.writeln; - writeln("Unparsed args: ", unparsed); - - // use actual styling mode to print output - auto style = Advanced.color ? red.onWhite : noStyle; - writeln(style("Styling mode: "), Advanced.color ? "on" : "off"); - - return 0; -}); \ No newline at end of file diff --git a/examples/getting_started/with_uda/app.d b/examples/getting_started/with_uda/app.d new file mode 100644 index 0000000..40cd050 --- /dev/null +++ b/examples/getting_started/with_uda/app.d @@ -0,0 +1,48 @@ +import argparse; + +struct Example +{ + // Positional arguments are required by default + @PositionalArgument(0) + string name; + + // Named arguments can be attributed in bulk (parentheses can be omitted) + @NamedArgument + { + // '--number' argument + int number; + + // '--boolean' argument + bool boolean; + + // Argument can have default value if it's not specified in command line + // '--unused' argument + string unused = "some default value"; + } + + // Enums are also supported + enum Enum { unset, foo, boo } + + // '--choice' argument + @NamedArgument + Enum choice; + + // Named argument can have specific or multiple names + @NamedArgument("apple","appl") + int apple; + + @NamedArgument("b","banana","ban") + int banana; +} + +// This mixin defines standard main function that parses command line and calls the provided function: +mixin CLI!Example.main!((args) +{ + // 'args' has 'Example' type + static assert(is(typeof(args) == Example)); + + // do whatever you need + import std.stdio: writeln; + args.writeln; + return 0; +}); \ No newline at end of file diff --git a/examples/getting_started/advanced/dub.json b/examples/getting_started/with_uda/dub.json similarity index 75% rename from examples/getting_started/advanced/dub.json rename to examples/getting_started/with_uda/dub.json index 34a8805..cc05706 100644 --- a/examples/getting_started/advanced/dub.json +++ b/examples/getting_started/with_uda/dub.json @@ -1,6 +1,6 @@ { "license": "BSL-1.0", - "name": "getting_started-advanced", + "name": "getting_started-with_uda", "targetType":"executable", "sourcePaths":["."], "dependencies":{ "all:argparse":"*" } diff --git a/examples/getting_started/basic/app.d b/examples/getting_started/without_uda/app.d similarity index 88% rename from examples/getting_started/basic/app.d rename to examples/getting_started/without_uda/app.d index 4131aab..d06c152 100644 --- a/examples/getting_started/basic/app.d +++ b/examples/getting_started/without_uda/app.d @@ -1,7 +1,7 @@ import argparse; // If struct has no UDA then all members are named arguments -struct Basic +struct Example { // Basic data types are supported: // '--name' argument @@ -18,7 +18,7 @@ struct Basic string unused = "some default value"; - // Enums are also supported + // Enums are supported enum Enum { unset, foo, boo } // '--choice' argument Enum choice; @@ -41,10 +41,10 @@ struct Basic } // This mixin defines standard main function that parses command line and calls the provided function: -mixin CLI!Basic.main!((args) +mixin CLI!Example.main!((args) { - // 'args' has 'Baisc' type - static assert(is(typeof(args) == Basic)); + // 'args' has 'Example' type + static assert(is(typeof(args) == Example)); // do whatever you need import std.stdio: writeln; diff --git a/examples/getting_started/basic/dub.json b/examples/getting_started/without_uda/dub.json similarity index 74% rename from examples/getting_started/basic/dub.json rename to examples/getting_started/without_uda/dub.json index 4e4299b..07a0e3c 100644 --- a/examples/getting_started/basic/dub.json +++ b/examples/getting_started/without_uda/dub.json @@ -1,6 +1,6 @@ { "license": "BSL-1.0", - "name": "getting_started-basic", + "name": "getting_started-without_uda", "targetType":"executable", "sourcePaths":["."], "dependencies":{ "all:argparse":"*" } diff --git a/images/default_styling.png b/images/default_styling.png deleted file mode 100644 index a53edbebf79adf946b041aa3c6814e1e171092fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15101 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