14#include <fmt/format.h>
20std::vector<std::string>
splitString(
const std::string&
src,
char delim)
22 std::stringstream ss(
src);
24 std::vector<std::string> tokens;
26 while (std::getline(ss, token, delim)) {
28 tokens.push_back(std::move(token));
35std::vector<std::string> extractList(
const std::string& slist)
37 auto dots = slist.find(
",");
38 if (dots == std::string::npos) {
44std::vector<std::string> extractRange(std::string
range)
46 auto dots =
range.find(
"..");
47 if (dots == std::string::npos) {
48 return extractList(
range);
51 auto braceStart =
range.find(
"{");
52 auto braceEnd =
range.find(
"}");
55 (braceStart != std::string::npos &&
56 braceEnd == std::string::npos) ||
57 (braceStart == std::string::npos &&
58 braceEnd != std::string::npos)) {
63 std::string intFormat;
66 if (braceStart != std::string::npos &&
67 braceEnd != std::string::npos) {
68 intFormat =
range.substr(braceStart, braceEnd - braceStart + 1);
69 range.erase(braceStart, braceEnd);
70 dots =
range.find(
"..");
71 sa =
range.substr(0, dots);
72 sb =
range.substr(dots + 2);
74 sa =
range.substr(0, dots);
75 sb =
range.substr(dots + 2);
76 auto size = std::max(sa.size(), sb.size());
77 intFormat =
"{:" + fmt::format(
"0{}d",
size) +
"}";
80 auto a = std::stoi(sa);
81 auto b = std::stoi(sb);
82 std::vector<std::string>
result;
84 for (
auto i =
a;
i <=
b;
i++) {
85 auto substituted = fmt::format(fmt::runtime(intFormat),
i);
86 result.push_back(substituted);
96 auto leftBracket =
pattern.find(
"[");
97 auto rightBracket =
pattern.find(
"]");
100 if (leftBracket == std::string::npos && rightBracket == std::string::npos) {
105 if ((leftBracket == std::string::npos &&
106 rightBracket != std::string::npos) ||
107 (leftBracket != std::string::npos &&
108 rightBracket == std::string::npos)) {
111 auto rangeStr =
pattern.substr(leftBracket + 1, rightBracket - leftBracket - 1);
113 auto range = extractRange(rangeStr);
120 auto newPattern =
pattern.substr(0, leftBracket) +
122 pattern.substr(rightBracket + 1);
124 std::vector<std::string>
result;
127 auto substituted = fmt::format(fmt::runtime(newPattern),
r);
128 result.emplace_back(substituted);
134std::vector<std::string>
expandAliases(
const std::vector<std::string>& patternedAliases)
136 std::vector<std::string>
result;
138 for (
auto a : patternedAliases) {
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
std::vector< std::string > expandAliases(const std::vector< std::string > &patternedAliases)
std::vector< std::string > expandAlias(const std::string &pattern)
std::array< uint16_t, 5 > pattern