Multilabel support & Label refactoring (#17)
All checks were successful
Build ptprnt / build (push) Successful in 3m47s
All checks were successful
Build ptprnt / build (push) Successful in 3m47s
Reviewed-on: moritz/ptouch-prnt#17
This commit was merged in pull request #17.
This commit is contained in:
@@ -43,9 +43,52 @@ int CliParser::parse(int argc, char** argv) {
|
||||
mApp.exit(e);
|
||||
return -1; // Signal: error
|
||||
}
|
||||
|
||||
// Post-process: Re-order commands based on actual command line order
|
||||
// This is needed because CLI11 groups options by type
|
||||
reorderCommandsByArgv(argc, argv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CliParser::reorderCommandsByArgv(int argc, char** argv) {
|
||||
std::vector<Command> reorderedCommands;
|
||||
|
||||
// Parse argv to determine the actual order
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
std::string arg = argv[i];
|
||||
|
||||
if (arg == "--new") {
|
||||
reorderedCommands.emplace_back(CommandType::NewLabel, "");
|
||||
} else if (arg == "-t" || arg == "--text") {
|
||||
if (i + 1 < argc) {
|
||||
reorderedCommands.emplace_back(CommandType::Text, argv[++i]);
|
||||
}
|
||||
} else if (arg == "-f" || arg == "--font") {
|
||||
if (i + 1 < argc) {
|
||||
reorderedCommands.emplace_back(CommandType::Font, argv[++i]);
|
||||
}
|
||||
} else if (arg == "-s" || arg == "--fontsize") {
|
||||
if (i + 1 < argc) {
|
||||
reorderedCommands.emplace_back(CommandType::FontSize, argv[++i]);
|
||||
}
|
||||
} else if (arg == "--valign") {
|
||||
if (i + 1 < argc) {
|
||||
reorderedCommands.emplace_back(CommandType::VAlign, argv[++i]);
|
||||
}
|
||||
} else if (arg == "--halign") {
|
||||
if (i + 1 < argc) {
|
||||
reorderedCommands.emplace_back(CommandType::HAlign, argv[++i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Only replace if we found relevant commands
|
||||
if (!reorderedCommands.empty()) {
|
||||
mOptions.commands = std::move(reorderedCommands);
|
||||
}
|
||||
}
|
||||
|
||||
void CliParser::setupParser() {
|
||||
// Version callback
|
||||
auto printVersion = [this](std::size_t) {
|
||||
@@ -89,6 +132,12 @@ void CliParser::setupParser() {
|
||||
mApp.add_option("--halign", "Horizontal alignment of the following text occurrences")
|
||||
->multi_option_policy(CLI::MultiOptionPolicy::TakeAll)
|
||||
->each([this](const std::string& align) { mOptions.commands.emplace_back(CommandType::HAlign, align); });
|
||||
|
||||
// Label separator - use an option with multi_option_policy to maintain parse order
|
||||
// We need to use a dummy string parameter since .each() expects a string callback
|
||||
mApp.add_flag("--new", "Start a new label (multiple labels will be stitched together)")
|
||||
->multi_option_policy(CLI::MultiOptionPolicy::TakeAll)
|
||||
->each([this](const std::string&) { mOptions.commands.emplace_back(CommandType::NewLabel, ""); });
|
||||
}
|
||||
|
||||
} // namespace ptprnt::cli
|
||||
|
||||
Reference in New Issue
Block a user