diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/uri/encodefsm.rl6 | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/uri/encodefsm.rl6')
-rw-r--r-- | library/cpp/uri/encodefsm.rl6 | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/library/cpp/uri/encodefsm.rl6 b/library/cpp/uri/encodefsm.rl6 new file mode 100644 index 0000000000..6a323aa85a --- /dev/null +++ b/library/cpp/uri/encodefsm.rl6 @@ -0,0 +1,51 @@ +#include <library/cpp/uri/encode.h> + +#ifdef __clang__ + #pragma clang diagnostic ignored "-Wunused-variable" +#endif + +namespace NUri { +namespace NEncode { + +%%{ + machine TEncoder; + + hex = ( + digit >{ HexDigit(fc); } | + [A-F] >{ HexUpper(fc); } | + [a-f] >{ HexLower(fc); } + ); + + escaped = ( "%" hex hex ) + > { HexReset(); } + % { DoHex(); }; + + bad_escaped = ( "%" hex ) + % { + DoSym(*(fpc - 2)); + DoSym(*(fpc - 1)); + }; + + sym = (any - bad_escaped - escaped) %{ DoSym(*(fpc - 1)); }; + + main := ( escaped | bad_escaped | sym )**; + + write data; +}%% + +ui64 TEncoder::ReEncode(const TStringBuf &url) +{ + const char *p = url.data(); + const char *pe = p + url.length(); + const char *eof = pe; + int cs; + OutFlags = 0; + + %% write init; + %% write exec; + + return OutFlags; +} + +} +} |