CLI11 2.7.1
C++11 Command Line Interface Parser
Loading...
Searching...
No Matches
FormatterFwd.hpp
1// Copyright (c) 2017-2026, University of Cincinnati, developed by Henry Schreiner
2// under NSF AWARD 1414736 and by the respective contributors.
3// All rights reserved.
4//
5// SPDX-License-Identifier: BSD-3-Clause
6
7#pragma once
8
9// IWYU pragma: private, include "CLI/CLI.hpp"
10
11// [CLI11:public_includes:set]
12#include <cstdint>
13#include <functional>
14#include <map>
15#include <string>
16#include <utility>
17#include <vector>
18// [CLI11:public_includes:end]
19
20#include "StringTools.hpp"
21
22namespace CLI {
23// [CLI11:formatter_fwd_hpp:verbatim]
24
25class Option;
26class App;
27
32
33enum class AppFormatMode : std::uint8_t {
34 Normal,
35 All,
36 Sub,
37};
38
43class FormatterBase {
44 protected:
47
49 std::size_t column_width_{30};
50
53
55 std::size_t right_column_width_{65};
56
59
61 std::size_t footer_paragraph_width_{80};
62
65 bool enable_footer_formatting_{true};
66
69 bool enable_option_type_names_{true};
70 bool enable_default_flag_values_{true};
73 std::map<std::string, std::string> labels_{};
74
76 static std::string default_label(const std::string &key) { return key; }
77
81
82 public:
83 FormatterBase() = default;
84 FormatterBase(const FormatterBase &) = default;
85 FormatterBase(FormatterBase &&) = default;
86 FormatterBase &operator=(const FormatterBase &) = default;
87 FormatterBase &operator=(FormatterBase &&) = default;
88
90 virtual ~FormatterBase() noexcept {} // NOLINT(modernize-use-equals-default)
91
93 virtual std::string make_help(const App *, std::string, AppFormatMode) const = 0;
94
98
100 void label(std::string key, std::string val) { labels_[key] = val; }
101
103 void column_width(std::size_t val) { column_width_ = val; }
104
107 void long_option_alignment_ratio(float ratio) {
109 (ratio >= 0.0f) ? ((ratio <= 1.0f) ? ratio : 1.0f / ratio) : ((ratio < -1.0f) ? 1.0f / (-ratio) : -ratio);
110 }
111
113 void right_column_width(std::size_t val) { right_column_width_ = val; }
114
117
119 void footer_paragraph_width(std::size_t val) { footer_paragraph_width_ = val; }
123 void enable_footer_formatting(bool value = true) { enable_footer_formatting_ = value; }
124
126 void enable_option_defaults(bool value = true) { enable_option_defaults_ = value; }
128 void enable_option_type_names(bool value = true) { enable_option_type_names_ = value; }
130 void enable_default_flag_values(bool value = true) { enable_default_flag_values_ = value; }
134
136 CLI11_NODISCARD std::string get_label(std::string key) const {
137 auto it = labels_.find(key);
138 return it != labels_.end() ? it->second : default_label(key);
139 }
140
142 CLI11_NODISCARD std::size_t get_column_width() const { return column_width_; }
143
145 CLI11_NODISCARD std::size_t get_right_column_width() const { return right_column_width_; }
146
148 CLI11_NODISCARD std::size_t get_description_paragraph_width() const { return description_paragraph_width_; }
149
151 CLI11_NODISCARD std::size_t get_footer_paragraph_width() const { return footer_paragraph_width_; }
152
155 CLI11_NODISCARD float get_long_option_alignment_ratio() const { return long_option_alignment_ratio_; }
156
159
161 CLI11_NODISCARD bool is_footer_paragraph_formatting_enabled() const { return enable_footer_formatting_; }
162
164 CLI11_NODISCARD bool is_option_defaults_enabled() const { return enable_option_defaults_; }
165
167 CLI11_NODISCARD bool is_option_type_names_enabled() const { return enable_option_type_names_; }
168
170 CLI11_NODISCARD bool is_default_flag_values_enabled() const { return enable_default_flag_values_; }
171
173};
174
176class FormatterLambda final : public FormatterBase {
177 using funct_t = std::function<std::string(const App *, std::string, AppFormatMode)>;
178
180 funct_t lambda_;
181
182 public:
184 explicit FormatterLambda(funct_t funct) : lambda_(std::move(funct)) {}
185
187 ~FormatterLambda() noexcept override {} // NOLINT(modernize-use-equals-default)
188
190 std::string make_help(const App *app, std::string name, AppFormatMode mode) const override {
191 return lambda_(app, name, mode);
192 }
193};
194
197class Formatter : public FormatterBase {
198 public:
199 Formatter() = default;
200 Formatter(const Formatter &) = default;
201 Formatter(Formatter &&) = default;
202 Formatter &operator=(const Formatter &) = default;
203 Formatter &operator=(Formatter &&) = default;
204
207
210 CLI11_NODISCARD virtual std::string
211 make_group(std::string group, bool is_positional, std::vector<const Option *> opts) const;
212
214 virtual std::string make_positionals(const App *app) const;
215
217 std::string make_groups(const App *app, AppFormatMode mode) const;
218
220 virtual std::string make_subcommands(const App *app, AppFormatMode mode) const;
221
223 virtual std::string make_subcommand(const App *sub) const;
224
226 virtual std::string make_expanded(const App *sub, AppFormatMode mode) const;
227
229 virtual std::string make_footer(const App *app) const;
230
232 virtual std::string make_description(const App *app) const;
233
235 virtual std::string make_usage(const App *app, std::string name) const;
236
238 std::string make_help(const App *app, std::string, AppFormatMode mode) const override;
239
243
245 virtual std::string make_option(const Option *, bool) const;
246
248 virtual std::string make_option_name(const Option *, bool) const;
249
251 virtual std::string make_option_opts(const Option *) const;
252
254 virtual std::string make_option_desc(const Option *) const;
255
257 virtual std::string make_option_usage(const Option *opt) const;
258
260};
261
262// [CLI11:formatter_fwd_hpp:end]
263} // namespace CLI
Creates a command line program, with very few defaults.
Definition App.hpp:115
Definition FormatterFwd.hpp:43
void footer_paragraph_width(std::size_t val)
Set the footer paragraph width.
Definition FormatterFwd.hpp:119
std::size_t column_width_
The width of the left column (options/flags/subcommands).
Definition FormatterFwd.hpp:49
void right_column_width(std::size_t val)
Set the right column width (description of options/flags/subcommands).
Definition FormatterFwd.hpp:113
std::map< std::string, std::string > labels_
The required help printout labels (user changeable) Values are Needs, Excludes, etc.
Definition FormatterFwd.hpp:73
std::size_t footer_paragraph_width_
The width of the footer paragraph.
Definition FormatterFwd.hpp:61
CLI11_NODISCARD std::size_t get_column_width() const
Get the current left column width (options/flags/subcommands).
Definition FormatterFwd.hpp:142
CLI11_NODISCARD float get_long_option_alignment_ratio() const
Get the current alignment ratio for long options within the left column.
Definition FormatterFwd.hpp:155
bool enable_option_defaults_
options controlling formatting of options
Definition FormatterFwd.hpp:68
void enable_default_flag_values(bool value=true)
enable default flag values to be printed
Definition FormatterFwd.hpp:130
CLI11_NODISCARD bool is_option_defaults_enabled() const
Get the current status of whether option defaults are printed.
Definition FormatterFwd.hpp:164
CLI11_NODISCARD std::size_t get_footer_paragraph_width() const
Get the current footer paragraph width.
Definition FormatterFwd.hpp:151
void long_option_alignment_ratio(float ratio)
Definition FormatterFwd.hpp:107
CLI11_NODISCARD std::string get_label(std::string key) const
Get the current value of a name (REQUIRED, etc.).
Definition FormatterFwd.hpp:136
CLI11_NODISCARD std::size_t get_description_paragraph_width() const
Get the current description paragraph width at the top of help.
Definition FormatterFwd.hpp:148
void enable_option_defaults(bool value=true)
enable option defaults to be printed
Definition FormatterFwd.hpp:126
void enable_description_formatting(bool value=true)
enable formatting for description paragraph
Definition FormatterFwd.hpp:121
void label(std::string key, std::string val)
Set the "REQUIRED" or other labels.
Definition FormatterFwd.hpp:100
bool enable_description_formatting_
options controlling formatting for footer and descriptions
Definition FormatterFwd.hpp:64
void enable_footer_formatting(bool value=true)
disable formatting for footer paragraph
Definition FormatterFwd.hpp:123
static std::string default_label(const std::string &key)
Default user-facing help labels used when no override is set.
Definition FormatterFwd.hpp:76
CLI11_NODISCARD bool is_default_flag_values_enabled() const
Get the current status of whether default flag values are printed.
Definition FormatterFwd.hpp:170
CLI11_NODISCARD bool is_description_paragraph_formatting_enabled() const
Get the current status of description paragraph formatting.
Definition FormatterFwd.hpp:158
CLI11_NODISCARD std::size_t get_right_column_width() const
Get the current right column width (description of options/flags/subcommands).
Definition FormatterFwd.hpp:145
virtual ~FormatterBase() noexcept
Adding a destructor in this form to work around bug in GCC 4.7.
Definition FormatterFwd.hpp:90
virtual std::string make_help(const App *, std::string, AppFormatMode) const =0
This is the key method that puts together help.
void column_width(std::size_t val)
Set the left column width (options/flags/subcommands).
Definition FormatterFwd.hpp:103
std::size_t right_column_width_
The width of the right column (description of options/flags/subcommands).
Definition FormatterFwd.hpp:55
void enable_option_type_names(bool value=true)
enable option type names to be printed
Definition FormatterFwd.hpp:128
float long_option_alignment_ratio_
The alignment ratio for long options within the left column.
Definition FormatterFwd.hpp:52
std::size_t description_paragraph_width_
The width of the description paragraph at the top of help.
Definition FormatterFwd.hpp:58
CLI11_NODISCARD bool is_footer_paragraph_formatting_enabled() const
Get the current status of whether footer paragraph formatting is enabled.
Definition FormatterFwd.hpp:161
void description_paragraph_width(std::size_t val)
Set the description paragraph width at the top of help.
Definition FormatterFwd.hpp:116
CLI11_NODISCARD bool is_option_type_names_enabled() const
Get the current status of whether option type names are printed.
Definition FormatterFwd.hpp:167
std::string make_groups(const App *app, AppFormatMode mode) const
This prints out all the groups of options.
Definition Formatter_inl.hpp:63
virtual std::string make_usage(const App *app, std::string name) const
This displays the usage line.
Definition Formatter_inl.hpp:113
virtual std::string make_option_name(const Option *, bool) const
This is the name part of an option, Default: left column.
Definition Formatter_inl.hpp:402
virtual std::string make_expanded(const App *sub, AppFormatMode mode) const
This prints out a subcommand in help-all.
Definition Formatter_inl.hpp:271
std::string make_help(const App *app, std::string, AppFormatMode mode) const override
This puts everything together.
Definition Formatter_inl.hpp:173
virtual CLI11_NODISCARD std::string make_group(std::string group, bool is_positional, std::vector< const Option * > opts) const
Definition Formatter_inl.hpp:42
virtual std::string make_option(const Option *, bool) const
This prints out an option help line, either positional or optional form.
Definition Formatter_inl.hpp:311
virtual std::string make_footer(const App *app) const
This prints out all the groups of options.
Definition Formatter_inl.hpp:165
virtual std::string make_option_usage(const Option *opt) const
This is used to print the name on the USAGE line.
Definition Formatter_inl.hpp:457
virtual std::string make_subcommand(const App *sub) const
This prints out a subcommand.
Definition Formatter_inl.hpp:251
virtual std::string make_positionals(const App *app) const
This prints out just the positionals "group".
Definition Formatter_inl.hpp:53
virtual std::string make_subcommands(const App *app, AppFormatMode mode) const
This prints out all the subcommands.
Definition Formatter_inl.hpp:206
virtual std::string make_description(const App *app) const
This displays the description line.
Definition Formatter_inl.hpp:88
virtual std::string make_option_desc(const Option *) const
This is the description. Default: Right column, on new line if left column too large.
Definition Formatter_inl.hpp:455
virtual std::string make_option_opts(const Option *) const
This is the options part of the name, Default: combined into left column.
Definition Formatter_inl.hpp:409
std::string make_help(const App *app, std::string name, AppFormatMode mode) const override
This will simply call the lambda function.
Definition FormatterFwd.hpp:190
~FormatterLambda() noexcept override
Adding a destructor (mostly to make GCC 4.7 happy).
Definition FormatterFwd.hpp:187
FormatterLambda(funct_t funct)
Create a FormatterLambda with a lambda function.
Definition FormatterFwd.hpp:184
Definition Option.hpp:259