diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:17 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:17 +0300 |
commit | d3a398281c6fd1d3672036cb2d63f842d2cb28c5 (patch) | |
tree | dd4bd3ca0f36b817e96812825ffaf10d645803f2 /library/cpp/html/pcdata/pcdata.cpp | |
parent | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (diff) | |
download | ydb-d3a398281c6fd1d3672036cb2d63f842d2cb28c5.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/html/pcdata/pcdata.cpp')
-rw-r--r-- | library/cpp/html/pcdata/pcdata.cpp | 108 |
1 files changed, 54 insertions, 54 deletions
diff --git a/library/cpp/html/pcdata/pcdata.cpp b/library/cpp/html/pcdata/pcdata.cpp index 1f8d2950de..740c240fd2 100644 --- a/library/cpp/html/pcdata/pcdata.cpp +++ b/library/cpp/html/pcdata/pcdata.cpp @@ -1,54 +1,54 @@ -#include "pcdata.h" - +#include "pcdata.h" + #include <util/string/strspn.h> -static TCompactStrSpn sspn("\"<>&'"); - +static TCompactStrSpn sspn("\"<>&'"); + static void EncodeHtmlPcdataAppendInternal(const TStringBuf str, TString& strout, bool qAmp) { - const char* s = str.data(); - const char* e = s + str.length(); - - for (;;) { - const char* next = sspn.FindFirstOf(s, e); - - strout.AppendNoAlias(s, next - s); - s = next; - + const char* s = str.data(); + const char* e = s + str.length(); + + for (;;) { + const char* next = sspn.FindFirstOf(s, e); + + strout.AppendNoAlias(s, next - s); + s = next; + if (s == e) break; - - switch (*s) { - case '\"': + + switch (*s) { + case '\"': strout += TStringBuf("""); ++s; - break; - - case '<': + break; + + case '<': strout += TStringBuf("<"); ++s; - break; - - case '>': + break; + + case '>': strout += TStringBuf(">"); ++s; - break; - - case '\'': + break; + + case '\'': strout += TStringBuf("'"); ++s; - break; - - case '&': - if (qAmp) + break; + + case '&': + if (qAmp) strout += TStringBuf("&"); - else + else strout += TStringBuf("&"); ++s; - break; - } - } + break; + } + } } - + void EncodeHtmlPcdataAppend(const TStringBuf str, TString& strout) { EncodeHtmlPcdataAppendInternal(str, strout, true); } @@ -56,26 +56,26 @@ void EncodeHtmlPcdataAppend(const TStringBuf str, TString& strout) { TString EncodeHtmlPcdata(const TStringBuf str, bool qAmp) { TString strout; EncodeHtmlPcdataAppendInternal(str, strout, qAmp); - return strout; -} - + return strout; +} + TString DecodeHtmlPcdata(const TString& sz) { TString res; const char* codes[] = {""", "<", ">", "'", "'", "&", "'", nullptr}; - const char chars[] = {'\"', '<', '>', '\'', '\'', '&', '\''}; - for (size_t i = 0; i < sz.length(); ++i) { - char c = sz[i]; - if (c == '&') { - for (const char** p = codes; *p; ++p) { - size_t len = strlen(*p); - if (strncmp(sz.c_str() + i, *p, len) == 0) { - i += len - 1; - c = chars[p - codes]; - break; - } - } - } - res += c; - } - return res; -} + const char chars[] = {'\"', '<', '>', '\'', '\'', '&', '\''}; + for (size_t i = 0; i < sz.length(); ++i) { + char c = sz[i]; + if (c == '&') { + for (const char** p = codes; *p; ++p) { + size_t len = strlen(*p); + if (strncmp(sz.c_str() + i, *p, len) == 0) { + i += len - 1; + c = chars[p - codes]; + break; + } + } + } + res += c; + } + return res; +} |