36 std::basic_ostream<
wchar_t, std::char_traits<wchar_t>>& os,
40 std::basic_ostream<
char, std::char_traits<char>>& os,
42 template<
class charT,
class traits>
44 std::basic_ostream<charT, traits>& os,
53 catch(std::bad_cast& e)
55 ERROR_LOG(
"Trying to set encoding on a stream buffer that isn't a "\
64 const std::map<char, const std::basic_string<char>>
67 std::make_pair(
'"',
"""),
68 std::make_pair(
'>',
">"),
69 std::make_pair(
'<',
"<"),
70 std::make_pair(
'&',
"&"),
71 std::make_pair(0x27,
"'")
75 const std::map<wchar_t, const std::basic_string<wchar_t>>
78 std::make_pair(
'"', L
"""),
79 std::make_pair(
'>', L
">"),
80 std::make_pair(
'<', L
"<"),
81 std::make_pair(
'&', L
"&"),
82 std::make_pair(0x27, L
"'")
86 const std::map<char, const std::basic_string<char>>
89 std::make_pair(
'!',
"%21"),
90 std::make_pair(
']',
"%5D"),
91 std::make_pair(
'[',
"%5B"),
92 std::make_pair(
'#',
"%23"),
93 std::make_pair(
'?',
"%3F"),
94 std::make_pair(
'/',
"%2F"),
95 std::make_pair(
',',
"%2C"),
96 std::make_pair(
'$',
"%24"),
97 std::make_pair(
'+',
"%2B"),
98 std::make_pair(
'=',
"%3D"),
99 std::make_pair(
'&',
"%26"),
100 std::make_pair(
'@',
"%40"),
101 std::make_pair(
':',
"%3A"),
102 std::make_pair(
';',
"%3B"),
103 std::make_pair(
')',
"%29"),
104 std::make_pair(
'(',
"%28"),
105 std::make_pair(0x27,
"%27"),
106 std::make_pair(
'*',
"%2A"),
107 std::make_pair(
'<',
"%3C"),
108 std::make_pair(
'>',
"%3E"),
109 std::make_pair(
'"',
"%22"),
110 std::make_pair(
' ',
"%20"),
111 std::make_pair(
'%',
"%25")
115 const std::map<wchar_t, const std::basic_string<wchar_t>>
118 std::make_pair(
'!', L
"%21"),
119 std::make_pair(
']', L
"%5D"),
120 std::make_pair(
'[', L
"%5B"),
121 std::make_pair(
'#', L
"%23"),
122 std::make_pair(
'?', L
"%3F"),
123 std::make_pair(
'/', L
"%2F"),
124 std::make_pair(
',', L
"%2C"),
125 std::make_pair(
'$', L
"%24"),
126 std::make_pair(
'+', L
"%2B"),
127 std::make_pair(
'=', L
"%3D"),
128 std::make_pair(
'&', L
"%26"),
129 std::make_pair(
'@', L
"%40"),
130 std::make_pair(
':', L
"%3A"),
131 std::make_pair(
';', L
"%3B"),
132 std::make_pair(
')', L
"%29"),
133 std::make_pair(
'(', L
"%28"),
134 std::make_pair(0x27, L
"%27"),
135 std::make_pair(
'*', L
"%2A"),
136 std::make_pair(
'<', L
"%3C"),
137 std::make_pair(
'>', L
"%3E"),
138 std::make_pair(
'"', L
"%22"),
139 std::make_pair(
' ', L
"%20"),
140 std::make_pair(
'%', L
"%25")
144 template <
class charT,
class traits>
153 if(m_encoding == Encoding::NONE)
155 const std::streamsize actual = std::min(
157 this->epptr()-this->pptr());
158 std::copy(s, s+actual, this->pptr());
164 const std::map<charT, const std::basic_string<charT>>* map;
165 if(m_encoding == Encoding::HTML)
166 map = &htmlCharacters;
168 map = &urlCharacters;
172 const size_t writeSpace = this->epptr() - this->pptr();
173 const auto mapping = map->find(*s);
174 if(mapping == map->cend())
178 *this->pptr() = *s++;
183 if(writeSpace < mapping->second.size())
186 mapping->second.cbegin(),
187 mapping->second.cend(),
189 this->pbump(mapping->second.size());
Encoding
Stream manipulator for setting output encoding.
Encoding m_encoding
Output encoding for stream buffer.
std::basic_streambuf< charT, std::char_traits< charT > >::char_type char_type
Topmost namespace for the fastcgi++ library.
Stream buffer class for output of HTML/Web stream.
std::basic_ostream< charT, traits > & operator<<(std::basic_ostream< charT, traits > &os, const Encoding &encoding)
Declares the WebStreambuf stuff.
#define ERROR_LOG(data)
Log any "errors" that can be recovered from.
Declares the Fastcgipp debugging/logging facilities.
std::streamsize xsputn(const char_type *s, std::streamsize n)
Derived from std::basic_streambuf<charT, traits>