mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-04-30 04:33:53 +00:00
Add escaping to quoted strings, differentiate between literal and regular strings. The goal is to make string processing in config files as close as possible to toml standards. This means handing escape sequences including unicode, and differentiating between literal strings and regular strings in files and when splitting the command line. Also allowing variable names in the files to be quoted. This PR gets partway there. Removes some hacks from the previous PR to deal with unusual option names and replaces with the quoted names. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
52 lines
1.6 KiB
C++
52 lines
1.6 KiB
C++
// Copyright (c) 2017-2023, University of Cincinnati, developed by Henry Schreiner
|
|
// under NSF AWARD 1414736 and by the respective contributors.
|
|
// All rights reserved.
|
|
//
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
#pragma once
|
|
|
|
// [CLI11:public_includes:set]
|
|
#include <algorithm>
|
|
#include <cctype>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
// [CLI11:public_includes:end]
|
|
|
|
#include "App.hpp"
|
|
#include "ConfigFwd.hpp"
|
|
#include "StringTools.hpp"
|
|
|
|
namespace CLI {
|
|
// [CLI11:config_hpp:verbatim]
|
|
namespace detail {
|
|
|
|
std::string convert_arg_for_ini(const std::string &arg,
|
|
char stringQuote = '"',
|
|
char literalQuote = '\'',
|
|
bool disable_multi_line = false);
|
|
|
|
/// Comma separated join, adds quotes if needed
|
|
std::string ini_join(const std::vector<std::string> &args,
|
|
char sepChar = ',',
|
|
char arrayStart = '[',
|
|
char arrayEnd = ']',
|
|
char stringQuote = '"',
|
|
char literalQuote = '\'');
|
|
|
|
std::vector<std::string> generate_parents(const std::string §ion, std::string &name, char parentSeparator);
|
|
|
|
/// assuming non default segments do a check on the close and open of the segments in a configItem structure
|
|
void checkParentSegments(std::vector<ConfigItem> &output, const std::string ¤tSection, char parentSeparator);
|
|
} // namespace detail
|
|
|
|
// [CLI11:config_hpp:end]
|
|
} // namespace CLI
|
|
|
|
#ifndef CLI11_COMPILE
|
|
#include "impl/Config_inl.hpp"
|
|
#endif
|