-
Notifications
You must be signed in to change notification settings - Fork 7
/
encode.cc
130 lines (119 loc) · 6.62 KB
/
encode.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* Copyright (c) 2011 Akamai Technologies, Inc. */
#include "system.hh"
#include "encode.h"
encode::encode(const StringPiece& sp) : sp(sp) {}
static const char uri_hex[][4] = {
{"%00"}, {"%01"}, {"%02"}, {"%03"}, {"%04"}, {"%05"}, {"%06"}, {"%07"},
{"%08"}, {"%09"}, {"%0A"}, {"%0B"}, {"%0C"}, {"%0D"}, {"%0E"}, {"%0F"},
{"%10"}, {"%11"}, {"%12"}, {"%13"}, {"%14"}, {"%15"}, {"%16"}, {"%17"},
{"%18"}, {"%19"}, {"%1A"}, {"%1B"}, {"%1C"}, {"%1D"}, {"%1E"}, {"%1F"},
{"%20"}, {"%21"}, {"%22"}, {"%23"}, {"%24"}, {"%25"}, {"%26"}, {"%27"},
{"%28"}, {"%29"}, {"%2A"}, {"%2B"}, {"%2C"}, {"%2D"}, {"%2E"}, {"%2F"},
{"%30"}, {"%31"}, {"%32"}, {"%33"}, {"%34"}, {"%35"}, {"%36"}, {"%37"},
{"%38"}, {"%39"}, {"%3A"}, {"%3B"}, {"%3C"}, {"%3D"}, {"%3E"}, {"%3F"},
{"%40"}, {"%41"}, {"%42"}, {"%43"}, {"%44"}, {"%45"}, {"%46"}, {"%47"},
{"%48"}, {"%49"}, {"%4A"}, {"%4B"}, {"%4C"}, {"%4D"}, {"%4E"}, {"%4F"},
{"%50"}, {"%51"}, {"%52"}, {"%53"}, {"%54"}, {"%55"}, {"%56"}, {"%57"},
{"%58"}, {"%59"}, {"%5A"}, {"%5B"}, {"%5C"}, {"%5D"}, {"%5E"}, {"%5F"},
{"%60"}, {"%61"}, {"%62"}, {"%63"}, {"%64"}, {"%65"}, {"%66"}, {"%67"},
{"%68"}, {"%69"}, {"%6A"}, {"%6B"}, {"%6C"}, {"%6D"}, {"%6E"}, {"%6F"},
{"%70"}, {"%71"}, {"%72"}, {"%73"}, {"%74"}, {"%75"}, {"%76"}, {"%77"},
{"%78"}, {"%79"}, {"%7A"}, {"%7B"}, {"%7C"}, {"%7D"}, {"%7E"}, {"%7F"},
{"%80"}, {"%81"}, {"%82"}, {"%83"}, {"%84"}, {"%85"}, {"%86"}, {"%87"},
{"%88"}, {"%89"}, {"%8A"}, {"%8B"}, {"%8C"}, {"%8D"}, {"%8E"}, {"%8F"},
{"%90"}, {"%91"}, {"%92"}, {"%93"}, {"%94"}, {"%95"}, {"%96"}, {"%97"},
{"%98"}, {"%99"}, {"%9A"}, {"%9B"}, {"%9C"}, {"%9D"}, {"%9E"}, {"%9F"},
{"%A0"}, {"%A1"}, {"%A2"}, {"%A3"}, {"%A4"}, {"%A5"}, {"%A6"}, {"%A7"},
{"%A8"}, {"%A9"}, {"%AA"}, {"%AB"}, {"%AC"}, {"%AD"}, {"%AE"}, {"%AF"},
{"%B0"}, {"%B1"}, {"%B2"}, {"%B3"}, {"%B4"}, {"%B5"}, {"%B6"}, {"%B7"},
{"%B8"}, {"%B9"}, {"%BA"}, {"%BB"}, {"%BC"}, {"%BD"}, {"%BE"}, {"%BF"},
{"%C0"}, {"%C1"}, {"%C2"}, {"%C3"}, {"%C4"}, {"%C5"}, {"%C6"}, {"%C7"},
{"%C8"}, {"%C9"}, {"%CA"}, {"%CB"}, {"%CC"}, {"%CD"}, {"%CE"}, {"%CF"},
{"%D0"}, {"%D1"}, {"%D2"}, {"%D3"}, {"%D4"}, {"%D5"}, {"%D6"}, {"%D7"},
{"%D8"}, {"%D9"}, {"%DA"}, {"%DB"}, {"%DC"}, {"%DD"}, {"%DE"}, {"%DF"},
{"%E0"}, {"%E1"}, {"%E2"}, {"%E3"}, {"%E4"}, {"%E5"}, {"%E6"}, {"%E7"},
{"%E8"}, {"%E9"}, {"%EA"}, {"%EB"}, {"%EC"}, {"%ED"}, {"%EE"}, {"%EF"},
{"%F0"}, {"%F1"}, {"%F2"}, {"%F3"}, {"%F4"}, {"%F5"}, {"%F6"}, {"%F7"},
{"%F8"}, {"%F9"}, {"%FA"}, {"%FB"}, {"%FC"}, {"%FD"}, {"%FE"}, {"%FF"}};
uri_encode::uri_encode(const StringPiece& sp) : encode(sp) {}
ostream& operator <<(ostream& os, const uri_encode& b)
{
for (StringPiece::const_iterator it = b.sp.begin(), ie = b.sp.end();
it != ie;
++it)
{
char c = *it;
if ((c <= 'z' && c >= 'a') ||
(c <= 'Z' && c >= 'A') ||
(c <= '9' && c >= '0') ||
(c == '/'))
os << c;
else
os << uri_hex[(unsigned char)c];
}
return os;
}
static const char html_hex[][7] = {
{"�"}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {"	"}, {"
"}, {""}, {""}, {"
"}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{" "}, {"!"}, {"""}, {"#"}, {"$"}, {"%"}, {"&"}, {"'"},
{"("}, {")"}, {"*"}, {"+"}, {","}, {"-"}, {"."}, {"/"},
{"0"}, {"1"}, {"2"}, {"3"}, {"4"}, {"5"}, {"6"}, {"7"},
{"8"}, {"9"}, {":"}, {";"}, {"<"}, {"="}, {">"}, {"?"},
{"@"}, {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, {"G"},
{"H"}, {"I"}, {"J"}, {"K"}, {"L"}, {"M"}, {"N"}, {"O"},
{"P"}, {"Q"}, {"R"}, {"S"}, {"T"}, {"U"}, {"V"}, {"W"},
{"X"}, {"Y"}, {"Z"}, {"["}, {"\"}, {"]"}, {"^"}, {"_"},
{"`"}, {"a"}, {"b"}, {"c"}, {"d"}, {"e"}, {"f"}, {"g"},
{"h"}, {"i"}, {"j"}, {"k"}, {"l"}, {"m"}, {"n"}, {"o"},
{"p"}, {"q"}, {"r"}, {"s"}, {"t"}, {"u"}, {"v"}, {"w"},
{"x"}, {"y"}, {"z"}, {"{"}, {"|"}, {"}"}, {"~"}, {""},
{"€"}, {""}, {"‚"}, {"ƒ"}, {"„"}, {"…"}, {"†"}, {"‡"},
{"ˆ"}, {"‰"}, {"Š"}, {"‹"}, {"Œ"}, {""}, {"Ž"}, {""},
{""}, {"‘"}, {"’"}, {"“"}, {"”"}, {"•"}, {"–"}, {"—"},
{"˜"}, {"™"}, {"š"}, {"›"}, {"œ"}, {""}, {"ž"}, {"Ÿ"},
{" "}, {"¡"}, {"¢"}, {"£"}, {"¤"}, {"¥"}, {"¦"}, {"§"},
{"¨"}, {"©"}, {"ª"}, {"«"}, {"¬"}, {"­"}, {"®"}, {"¯"},
{"°"}, {"±"}, {"²"}, {"³"}, {"´"}, {"µ"}, {"¶"}, {"·"},
{"¸"}, {"¹"}, {"º"}, {"»"}, {"¼"}, {"½"}, {"¾"}, {"¿"},
{"À"}, {"Á"}, {"Â"}, {"Ã"}, {"Ä"}, {"Å"}, {"Æ"}, {"Ç"},
{"È"}, {"É"}, {"Ê"}, {"Ë"}, {"Ì"}, {"Í"}, {"Î"}, {"Ï"},
{"Ð"}, {"Ñ"}, {"Ò"}, {"Ó"}, {"Ô"}, {"Õ"}, {"Ö"}, {"×"},
{"Ø"}, {"Ù"}, {"Ú"}, {"Û"}, {"Ü"}, {"Ý"}, {"Þ"}, {"ß"},
{"à"}, {"á"}, {"â"}, {"ã"}, {"ä"}, {"å"}, {"æ"}, {"ç"},
{"è"}, {"é"}, {"ê"}, {"ë"}, {"ì"}, {"í"}, {"î"}, {"ï"},
{"ð"}, {"ñ"}, {"ò"}, {"ó"}, {"ô"}, {"õ"}, {"ö"}, {"÷"},
{"ø"}, {"ù"}, {"ú"}, {"û"}, {"ü"}, {"ý"}, {"þ"}, {"ÿ"}};
html_encode::html_encode(const StringPiece& sp) : encode(sp) {}
ostream& operator <<(ostream& os, const html_encode& b)
{
for (StringPiece::const_iterator it = b.sp.begin(), ie = b.sp.end();
it != ie;
++it)
{
char c = *it;
if (c == '<' || c == '&' || c == '=' || c == '"' || \
c == '\n' || c == '\r' || c == ' ' || c == '(' || c == ')')
os << html_hex[(unsigned char)c];
else
os << c;
}
return os;
}
highlight_encode::highlight_encode(const StringPiece& sp) : encode(sp) {}
ostream& operator <<(ostream& os, const highlight_encode& b)
{
for (StringPiece::const_iterator it = b.sp.begin();
it != b.sp.end();
++it)
{
char c = *it;
if ( c == '`' || c == '~' )
os << html_hex[(unsigned char)c];
else
os << c;
}
return os;
}