Haio
0.2.X
Homebrew Asset IO/CDN
Toggle main menu visibility
Loading...
Searching...
No Matches
haio_cli.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
haio.hpp
"
4
5
#include <optional>
6
#include <span>
7
#include <string>
8
#include <string_view>
9
#include <vector>
10
11
/**
12
* the convert command line.
13
*
14
* it used to be namespace Haio::Convert, which now belongs to the colour conversion
15
* family -- a name cannot be a namespace and a function template at once.
16
*/
17
namespace
Haio::Cli
{
18
19
enum class
TokenType
{
20
InputFile
,
21
OutputFile
,
22
GeneratorXc
,
23
GeneratorGradient
,
24
FilterCrop
,
25
FilterResize
,
26
FilterRadius
,
27
FilterFormat
,
28
FilterFx
,
29
FilterPalette
,
30
FilterPixFmt
,
31
};
32
33
struct
ParseError
{
34
std::string
message
;
35
std::string
token
;
36
37
explicit
operator
bool() const noexcept;
38
};
39
40
struct
Token
{
41
TokenType
type
=
TokenType::InputFile
;
42
std::string
value
;
43
std::string
arg
;
44
Format
format
=
Format::RAW
;
45
Color
color
=
Color::RGBA8888
;
46
std::optional<Rect>
rect
;
47
std::optional<Size>
size
;
48
int
radius
= 0;
49
int
percent
= 0;
50
Dither
dither
=
Dither::Nearest
;
51
size_t
limit
= 0;
/**< zero means the palette is used whole */
52
Limit
limitHow
=
Limit::Spread
;
53
};
54
55
struct
Command
{
56
ParseError
error
;
57
58
/**
59
* an option that has been read and not yet used by anything.
60
*
61
* settings stack and operations take them, so "-filter bayer -palete cga" works
62
* and "-palete cga -filter bayer" does not: by the time the filter is written
63
* down the palette has already gone by, and nothing after it wants one. a setting
64
* still waiting when the line ends is a mistake worth stopping for, because it
65
* was written in the belief that it would do something.
66
*/
67
struct
Pending
{
68
std::string
option
;
69
std::string
value
;
70
};
71
std::optional<Pending>
pendingFilter
;
72
std::optional<Pending>
pendingLimit
;
73
Limit
pendingLimitHow
=
Limit::Spread
;
/**< only meaningful when pendingLimit is set */
74
75
bool
hasInput
=
false
;
76
bool
hasGenerator
=
false
;
77
bool
outputIsStdout
=
false
;
78
std::string
inputPath
;
79
std::string
outputPath
;
80
std::string
inputFormatName
;
81
std::string
outputFormatName
;
82
Format
inputFormat
=
Format::RAW
;
83
Format
outputFormat
=
Format::RAW
;
84
85
/** which colour to store inside the output, when -pix_fmt named one */
86
std::optional<Color>
outputColor
;
87
std::string
outputColorName
;
88
89
std::vector<Token>
tokens
;
90
};
91
92
Command
parseArgs
(
int
argc,
char
* argv[]);
93
Command
parseCommandLine
(std::string_view text);
94
std::vector<std::string>
lexCommandLine
(std::string_view text);
95
Pipeline
buildPipeline
(
const
Command
& command);
96
int
runCli
(
int
argc,
char
* argv[]);
97
98
bool
parseSizeToken
(std::string_view text,
Size
& out);
99
bool
parseCropGeometryToken
(std::string_view text,
Rect
& out);
100
bool
parseRectToken
(std::string_view text,
Rect
& out);
101
102
}
Haio::Pipeline
Definition
haio_pipeline.hpp:56
haio.hpp
Haio::Cli
Definition
haio_cli.hpp:17
Haio::Cli::parseSizeToken
bool parseSizeToken(std::string_view text, Size &out)
Definition
parser.cpp:516
Haio::Cli::Token::arg
std::string arg
Definition
haio_cli.hpp:43
Haio::Cli::Command::error
ParseError error
Definition
haio_cli.hpp:56
Haio::Cli::Command::inputPath
std::string inputPath
Definition
haio_cli.hpp:78
Haio::Cli::Command::hasInput
bool hasInput
Definition
haio_cli.hpp:75
Haio::Cli::parseCropGeometryToken
bool parseCropGeometryToken(std::string_view text, Rect &out)
Definition
parser.cpp:520
Haio::Cli::parseCommandLine
Command parseCommandLine(std::string_view text)
Definition
parser.cpp:540
Haio::Cli::Token::rect
std::optional< Rect > rect
Definition
haio_cli.hpp:46
Haio::Cli::Command::hasGenerator
bool hasGenerator
Definition
haio_cli.hpp:76
Haio::Cli::Command::outputFormat
Format outputFormat
Definition
haio_cli.hpp:83
Haio::Cli::Token::size
std::optional< Size > size
Definition
haio_cli.hpp:47
Haio::Cli::Command::inputFormatName
std::string inputFormatName
Definition
haio_cli.hpp:80
Haio::Cli::Command::pendingFilter
std::optional< Pending > pendingFilter
Definition
haio_cli.hpp:71
Haio::Cli::Command::pendingLimit
std::optional< Pending > pendingLimit
Definition
haio_cli.hpp:72
Haio::Cli::lexCommandLine
std::vector< std::string > lexCommandLine(std::string_view text)
Definition
parser.cpp:528
Haio::Cli::Token::dither
Dither dither
Definition
haio_cli.hpp:50
Haio::Cli::Token::radius
int radius
Definition
haio_cli.hpp:48
Haio::Cli::Command::tokens
std::vector< Token > tokens
Definition
haio_cli.hpp:89
Haio::Cli::buildPipeline
Pipeline buildPipeline(const Command &command)
Definition
pipeline_builder.cpp:15
Haio::Cli::Token::limitHow
Limit limitHow
Definition
haio_cli.hpp:52
Haio::Cli::Command::Pending::option
std::string option
Definition
haio_cli.hpp:68
Haio::Cli::Command::outputFormatName
std::string outputFormatName
Definition
haio_cli.hpp:81
Haio::Cli::parseArgs
Command parseArgs(int argc, char *argv[])
Definition
parser.cpp:544
Haio::Cli::Command::inputFormat
Format inputFormat
Definition
haio_cli.hpp:82
Haio::Cli::Command::pendingLimitHow
Limit pendingLimitHow
Definition
haio_cli.hpp:73
Haio::Cli::Token::type
TokenType type
Definition
haio_cli.hpp:41
Haio::Cli::TokenType
TokenType
Definition
haio_cli.hpp:19
Haio::Cli::TokenType::FilterCrop
@ FilterCrop
Definition
haio_cli.hpp:24
Haio::Cli::TokenType::FilterResize
@ FilterResize
Definition
haio_cli.hpp:25
Haio::Cli::TokenType::FilterFormat
@ FilterFormat
Definition
haio_cli.hpp:27
Haio::Cli::TokenType::GeneratorXc
@ GeneratorXc
Definition
haio_cli.hpp:22
Haio::Cli::TokenType::GeneratorGradient
@ GeneratorGradient
Definition
haio_cli.hpp:23
Haio::Cli::TokenType::InputFile
@ InputFile
Definition
haio_cli.hpp:20
Haio::Cli::TokenType::FilterPixFmt
@ FilterPixFmt
Definition
haio_cli.hpp:30
Haio::Cli::TokenType::FilterPalette
@ FilterPalette
Definition
haio_cli.hpp:29
Haio::Cli::TokenType::FilterRadius
@ FilterRadius
Definition
haio_cli.hpp:26
Haio::Cli::TokenType::FilterFx
@ FilterFx
Definition
haio_cli.hpp:28
Haio::Cli::TokenType::OutputFile
@ OutputFile
Definition
haio_cli.hpp:21
Haio::Cli::Command::outputColorName
std::string outputColorName
Definition
haio_cli.hpp:87
Haio::Cli::Token::format
Format format
Definition
haio_cli.hpp:44
Haio::Cli::Token::value
std::string value
Definition
haio_cli.hpp:42
Haio::Cli::Command::outputPath
std::string outputPath
Definition
haio_cli.hpp:79
Haio::Cli::runCli
int runCli(int argc, char *argv[])
Definition
cli.cpp:109
Haio::Cli::Command::Pending::value
std::string value
Definition
haio_cli.hpp:69
Haio::Cli::Token::limit
size_t limit
Definition
haio_cli.hpp:51
Haio::Cli::Token::color
Color color
Definition
haio_cli.hpp:45
Haio::Cli::Command::outputColor
std::optional< Color > outputColor
Definition
haio_cli.hpp:86
Haio::Cli::Command::outputIsStdout
bool outputIsStdout
Definition
haio_cli.hpp:77
Haio::Cli::parseRectToken
bool parseRectToken(std::string_view text, Rect &out)
Definition
parser.cpp:524
Haio::Cli::Token::percent
int percent
Definition
haio_cli.hpp:49
Haio::Cli::Command
Definition
haio_cli.hpp:55
Haio::Cli::Command::Pending
Definition
haio_cli.hpp:67
Haio::Cli::Token
Definition
haio_cli.hpp:40
Haio::Limit
Limit
Definition
haio_palette.hpp:71
Haio::Limit::Spread
@ Spread
Definition
haio_palette.hpp:89
Haio::Color
Color
Definition
haio_formats.hpp:106
Haio::Color::RGBA8888
@ RGBA8888
Definition
haio_formats.hpp:107
Haio::Format
Format
Definition
haio_formats.hpp:17
Haio::Format::RAW
@ RAW
Definition
haio_formats.hpp:19
Haio::Dither
Dither
Definition
haio_palette.hpp:44
Haio::Dither::Nearest
@ Nearest
Definition
haio_palette.hpp:45
Haio::Rect
Definition
haio_object.hpp:5
Haio::Size
Definition
haio_object.hpp:12
Haio::Cli::ParseError
Definition
haio_cli.hpp:33
Haio::Cli::ParseError::message
std::string message
Definition
haio_cli.hpp:34
Haio::Cli::ParseError::token
std::string token
Definition
haio_cli.hpp:35
include
haio_cli.hpp
Generated by
1.18.0