parent
35ef1e786d
commit
74310304bd
@ -1,26 +1,74 @@ |
|||||||
#include <fmt/core.h> |
#include <fmt/core.h> |
||||||
|
#include <string> |
||||||
|
#include <vector> |
||||||
|
#include <string_view> |
||||||
|
#include <charconv> |
||||||
|
#include "dbc.hpp" |
||||||
|
|
||||||
using namespace fmt; |
using namespace fmt; |
||||||
|
|
||||||
%%{ |
%%{ |
||||||
machine foo; |
machine foo; |
||||||
test1 = 0x1B . "[" . [0-9]+ @{ println("NUM1"); } . ";" . [0-9]+ @{ println("NUM2"); } . "m" 0 @{ res = 1; }; |
|
||||||
test2 = 0x1B "A" [0-9]+ @{ println("NUM1"); } ";" [0-9]+ @{ println("NUM2"); } "m" 0 @{ res = 2; }; |
|
||||||
|
|
||||||
main := (test1 | test2); |
action tstart { |
||||||
|
start = fpc; |
||||||
|
} |
||||||
|
|
||||||
|
action number { |
||||||
|
size_t value = 0; |
||||||
|
auto [ptr, ec] = std::from_chars(start, fpc, value); |
||||||
|
dbc::check(ec == std::errc(), "error in number parsing"); |
||||||
|
println("NUMBER {}", value); |
||||||
|
} |
||||||
|
|
||||||
|
start = 0x1B "["; |
||||||
|
num = digit+ >tstart %number; |
||||||
|
|
||||||
|
color256 = ";5;" (num ";"?)**; |
||||||
|
color24b = ";2;" (num ";"?)**; |
||||||
|
basic = num ";" num; |
||||||
|
single = num; |
||||||
|
|
||||||
|
main := |* |
||||||
|
start => { println("START"); }; |
||||||
|
single => { println("single"); }; |
||||||
|
basic => { println("basic"); }; |
||||||
|
color256 => { println("256 color"); }; |
||||||
|
color24b => { println("true color"); }; |
||||||
|
"m" => { println("END"); }; |
||||||
|
*|; |
||||||
}%% |
}%% |
||||||
|
|
||||||
%% write data; |
%% write data; |
||||||
|
|
||||||
int main() { |
void parse_ansi(std::string_view &codes) { |
||||||
int cs, res = 0; |
const char *start = NULL; |
||||||
char *test = "\x1B[36;46m"; |
int cs = 0; |
||||||
|
size_t act = 0; |
||||||
|
const char *p = codes.data(); |
||||||
|
const char *pe = p + codes.size(); |
||||||
|
const char *ts = p; |
||||||
|
const char *te = pe; |
||||||
|
const char *eof = pe; |
||||||
|
|
||||||
char *p = test; |
|
||||||
char *pe = p + strlen(p) + 1; |
|
||||||
%% write init; |
%% write init; |
||||||
%% write exec; |
%% write exec; |
||||||
|
} |
||||||
|
|
||||||
|
int main() { |
||||||
|
// possibly put alphtype unsigned int? |
||||||
|
std::vector<std::string_view> tests = { |
||||||
|
"\x1B[;5;78;98m", |
||||||
|
"\x1B[;2;36;46;23m", |
||||||
|
"\x1B[36;46m", |
||||||
|
"\x1B[36m", |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
for(auto test : tests) { |
||||||
|
println("--- PARSING"); |
||||||
|
parse_ansi(test); |
||||||
|
} |
||||||
|
|
||||||
fmt::println("result = {}", res); |
|
||||||
return 0; |
return 0; |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue