CLI11 2.2.0
Loading...
Searching...
No Matches
FormatterFwd.hpp
Go to the documentation of this file.
1// Copyright (c) 2017-2022, 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// [CLI11:public_includes:set]
10#include <map>
11#include <string>
12#include <utility>
13#include <vector>
14// [CLI11:public_includes:end]
15
16#include "StringTools.hpp"
17
18namespace CLI {
19// [CLI11:formatter_fwd_hpp:verbatim]
20
21class Option;
22class App;
23
28
29enum class AppFormatMode {
30 Normal,
31 All,
32 Sub,
33};
34
40 protected:
43
45 std::size_t column_width_{30};
46
49 std::map<std::string, std::string> labels_{};
50
54
55 public:
56 FormatterBase() = default;
57 FormatterBase(const FormatterBase &) = default;
59
61 virtual ~FormatterBase() noexcept {} // NOLINT(modernize-use-equals-default)
62
64 virtual std::string make_help(const App *, std::string, AppFormatMode) const = 0;
65
69
71 void label(std::string key, std::string val) { labels_[key] = val; }
72
74 void column_width(std::size_t val) { column_width_ = val; }
75
79
81 std::string get_label(std::string key) const {
82 if(labels_.find(key) == labels_.end())
83 return key;
84 else
85 return labels_.at(key);
86 }
87
89 std::size_t get_column_width() const { return column_width_; }
90
92};
93
95class FormatterLambda final : public FormatterBase {
96 using funct_t = std::function<std::string(const App *, std::string, AppFormatMode)>;
97
99 funct_t lambda_;
100
101 public:
103 explicit FormatterLambda(funct_t funct) : lambda_(std::move(funct)) {}
104
106 ~FormatterLambda() noexcept override {} // NOLINT(modernize-use-equals-default)
107
109 std::string make_help(const App *app, std::string name, AppFormatMode mode) const override {
110 return lambda_(app, name, mode);
111 }
112};
113
116class Formatter : public FormatterBase {
117 public:
118 Formatter() = default;
119 Formatter(const Formatter &) = default;
120 Formatter(Formatter &&) = default;
121
124
127 virtual std::string make_group(std::string group, bool is_positional, std::vector<const Option *> opts) const;
128
130 virtual std::string make_positionals(const App *app) const;
131
133 std::string make_groups(const App *app, AppFormatMode mode) const;
134
136 virtual std::string make_subcommands(const App *app, AppFormatMode mode) const;
137
139 virtual std::string make_subcommand(const App *sub) const;
140
142 virtual std::string make_expanded(const App *sub) const;
143
145 virtual std::string make_footer(const App *app) const;
146
148 virtual std::string make_description(const App *app) const;
149
151 virtual std::string make_usage(const App *app, std::string name) const;
152
154 std::string make_help(const App * /*app*/, std::string, AppFormatMode) const override;
155
159
161 virtual std::string make_option(const Option *opt, bool is_positional) const {
162 std::stringstream out;
164 out, make_option_name(opt, is_positional) + make_option_opts(opt), make_option_desc(opt), column_width_);
165 return out.str();
166 }
167
169 virtual std::string make_option_name(const Option *, bool) const;
170
172 virtual std::string make_option_opts(const Option *) const;
173
175 virtual std::string make_option_desc(const Option *) const;
176
178 virtual std::string make_option_usage(const Option *opt) const;
179
181};
182
183// [CLI11:formatter_fwd_hpp:end]
184} // namespace CLI
Creates a command line program, with very few defaults.
Definition App.hpp:85
Definition FormatterFwd.hpp:39
std::size_t column_width_
The width of the first column.
Definition FormatterFwd.hpp:45
std::map< std::string, std::string > labels_
The required help printout labels (user changeable) Values are Needs, Excludes, etc.
Definition FormatterFwd.hpp:49
std::size_t get_column_width() const
Get the current column width.
Definition FormatterFwd.hpp:89
FormatterBase(FormatterBase &&)=default
void label(std::string key, std::string val)
Set the "REQUIRED" label.
Definition FormatterFwd.hpp:71
std::string get_label(std::string key) const
Get the current value of a name (REQUIRED, etc.)
Definition FormatterFwd.hpp:81
FormatterBase()=default
FormatterBase(const FormatterBase &)=default
virtual ~FormatterBase() noexcept
Adding a destructor in this form to work around bug in GCC 4.7.
Definition FormatterFwd.hpp:61
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 column width.
Definition FormatterFwd.hpp:74
This is a specialty override for lambda functions.
Definition FormatterFwd.hpp:95
std::string make_help(const App *app, std::string name, AppFormatMode mode) const override
This will simply call the lambda function.
Definition FormatterFwd.hpp:109
~FormatterLambda() noexcept override
Adding a destructor (mostly to make GCC 4.7 happy)
Definition FormatterFwd.hpp:106
FormatterLambda(funct_t funct)
Create a FormatterLambda with a lambda function.
Definition FormatterFwd.hpp:103
Definition FormatterFwd.hpp:116
virtual std::string make_description(const App *app) const
This displays the description line.
Definition Formatter.hpp:67
Formatter(Formatter &&)=default
virtual std::string make_option(const Option *opt, bool is_positional) const
This prints out an option help line, either positional or optional form.
Definition FormatterFwd.hpp:161
virtual std::string make_usage(const App *app, std::string name) const
This displays the usage line.
Definition Formatter.hpp:93
Formatter(const Formatter &)=default
virtual std::string make_subcommand(const App *sub) const
This prints out a subcommand.
Definition Formatter.hpp:209
std::string make_help(const App *, std::string, AppFormatMode) const override
This puts everything together.
Definition Formatter.hpp:143
virtual std::string make_subcommands(const App *app, AppFormatMode mode) const
This prints out all the subcommands.
Definition Formatter.hpp:167
virtual std::string make_option_opts(const Option *) const
This is the options part of the name, Default: combined into left column.
Definition Formatter.hpp:242
virtual std::string make_positionals(const App *app) const
This prints out just the positionals "group".
Definition Formatter.hpp:33
Formatter()=default
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.hpp:277
virtual std::string make_option_name(const Option *, bool) const
This is the name part of an option, Default: left column.
Definition Formatter.hpp:235
virtual std::string make_footer(const App *app) const
This prints out all the groups of options.
Definition Formatter.hpp:135
std::string make_groups(const App *app, AppFormatMode mode) const
This prints out all the groups of options.
Definition Formatter.hpp:43
virtual std::string make_expanded(const App *sub) const
This prints out a subcommand in help-all.
Definition Formatter.hpp:215
virtual std::string make_group(std::string group, bool is_positional, std::vector< const Option * > opts) const
Definition Formatter.hpp:22
virtual std::string make_option_usage(const Option *opt) const
This is used to print the name on the USAGE line.
Definition Formatter.hpp:279
Definition Option.hpp:238
std::ostream & format_help(std::ostream &out, std::string name, const std::string &description, std::size_t wid)
Print a two part "help" string.
Definition StringTools.hpp:182
Definition App.hpp:34
AppFormatMode
Definition FormatterFwd.hpp:29
@ Normal
The normal, detailed help.
@ All
A fully expanded help.
@ Sub
Used when printed as part of expanded subcommand.