ChainCLI
A modern C++20 command-line interface library
Loading...
Searching...
No Matches
docwriting.h
1/*
2 * Copyright 2025 Dominik Czekai
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18#include <memory>
19
20#include "cli_config.h"
21#include "commands/argument.h"
22#include "commands/argument_group.h"
23#include "commands/command.h"
24#include "commands/docwriting/docformatter.h"
25#include "commands/flag_argument.h"
26#include "commands/option_argument.h"
27#include "commands/positional_argument.h"
28
29namespace cli::commands::docwriting
30{
31
34{
35
36public:
39 explicit DocWriter(const CliConfig &config) : configuration(config) {}
40
43 void setAppFormatter(std::unique_ptr<AbstractCliAppDocFormatter> formatter);
44
48
52 std::unique_ptr<AbstractArgDocFormatter<PositionalArgumentBase>> formatter);
53
56 void setFlagFormatter(std::unique_ptr<AbstractArgDocFormatter<FlagArgument>> formatter);
57
60 void setCommandFormatter(std::unique_ptr<AbstractCommandFormatter> formatter);
61
65 void setDocStrings(Command &command, std::string_view fullCommandPath) const;
66
71 std::string generateLongDocString(const Command &command,
72 std::string_view fullCommandPath) const;
73
78 std::string generateShortDocString(const Command &command,
79 std::string_view fullCommandPath) const;
80
84 std::string generateOptionsDocString(const FlagArgument &argument) const;
85
89 std::string generateArgDocString(const FlagArgument &argument) const;
90
94 std::string generateOptionsDocString(const OptionArgumentBase &argument) const;
95
99 std::string generateArgDocString(const OptionArgumentBase &argument) const;
100
104 std::string generateOptionsDocString(const PositionalArgumentBase &argument) const;
105
109 std::string generateArgDocString(const PositionalArgumentBase &argument) const;
110
114 std::string generateAppDocString(const std::vector<const cli::commands::Command *> &commands) const;
115
120 std::string generateCommandDocString(const Command &command) const;
121
124 std::string generateAppVersionString() const;
125
126private:
127 const CliConfig &configuration;
128
129 std::unique_ptr<AbstractCommandFormatter> commandFormatterPtr =
130 std::make_unique<DefaultCommandFormatter>();
131 std::unique_ptr<AbstractArgDocFormatter<FlagArgument>> flagFormatterPtr =
132 std::make_unique<DefaultFlagFormatter>();
133 std::unique_ptr<AbstractArgDocFormatter<OptionArgumentBase>> optionFormatterPtr =
134 std::make_unique<DefaultOptionFormatter>();
135 std::unique_ptr<AbstractArgDocFormatter<PositionalArgumentBase>> positionalFormatterPtr =
136 std::make_unique<DefaultPositionalFormatter>();
137 std::unique_ptr<AbstractCliAppDocFormatter> appFormatterPtr = std::make_unique<DefaultCliAppDocFormatter>();
138};
139
140} // namespace cli::commands::docwriting
Represents a command in the CLI application.
Definition command.h:36
Represents a flag argument in the CLI.
Definition flag_argument.h:31
Untemplated base class for option arguments in the CLI. Used to store all option arguments in a singl...
Definition option_argument.h:33
Untemplated Base class for positional arguments in the CLI. Used to store all positional arguments in...
Definition positional_argument.h:34
Abstract base class for argument documentation formatters.
Definition docformatter.h:33
Documentation writer for CLI commands. Consists of formatters for commands and arguments.
Definition docwriting.h:34
void setCommandFormatter(std::unique_ptr< AbstractCommandFormatter > formatter)
Set the formatter for command arguments.
Definition docwriting.cpp:44
void setOptionFormatter(std::unique_ptr< AbstractArgDocFormatter< OptionArgumentBase > > formatter)
Set the formatter for option arguments.
Definition docwriting.cpp:27
std::string generateAppDocString(const std::vector< const cli::commands::Command * > &commands) const
Generate the documentation string for the application.
Definition docwriting.cpp:99
void setFlagFormatter(std::unique_ptr< AbstractArgDocFormatter< FlagArgument > > formatter)
Set the formatter for flag arguments.
Definition docwriting.cpp:39
std::string generateArgDocString(const FlagArgument &argument) const
Generate the argument documentation string for a flag argument.
Definition docwriting.cpp:74
std::string generateLongDocString(const Command &command, std::string_view fullCommandPath) const
Generate the long documentation string for a command.
Definition docwriting.cpp:62
std::string generateCommandDocString(const Command &command) const
Generate the documentation string for a command.
Definition docwriting.cpp:104
void setPositionalFormatter(std::unique_ptr< AbstractArgDocFormatter< PositionalArgumentBase > > formatter)
Set the formatter for positional arguments.
Definition docwriting.cpp:33
void setDocStrings(Command &command, std::string_view fullCommandPath) const
Build and set the documentation strings for a command.
Definition docwriting.cpp:49
std::string generateAppVersionString() const
Generate the version string for the application.
Definition docwriting.cpp:109
std::string generateOptionsDocString(const FlagArgument &argument) const
Generate the documentation string for a flag argument.
Definition docwriting.cpp:69
DocWriter(const CliConfig &config)
Construct a new DocWriter object.
Definition docwriting.h:39
std::string generateShortDocString(const Command &command, std::string_view fullCommandPath) const
Generate the short documentation string for a command.
Definition docwriting.cpp:55
void setAppFormatter(std::unique_ptr< AbstractCliAppDocFormatter > formatter)
Set the formatter for the application documentation.
Definition docwriting.cpp:114
Holds the configuration for the CLI application.
Definition cli_config.h:24