Class: TMail::Encoder
- Inherits:
-
Object
- Object
- TMail::Encoder
- Includes:
- TextUtils
- Defined in:
- lib/tmail-pure/encode.rb
Overview
FIXME: This class can handle only (euc-jp/shift_jis -> iso-2022-jp).
Constant Summary collapse
- BENCODE_DEBUG =
false
- SPACER =
"\t"
- MAX_LINE_LEN =
70
- OPTIONS =
{ 'EUC' => '-Ej -m0', 'SJIS' => '-Sj -m0', 'UTF8' => nil, # FIXME 'NONE' => nil }
Class Method Summary collapse
Instance Method Summary collapse
- #dest ⇒ Object
- #encode_value(str) ⇒ Object
- #header_body(str) ⇒ Object
-
#header_line(line) ⇒ Object
add.
- #header_name(name) ⇒ Object
-
#initialize(dest = nil, encoding = nil, eol = "\r\n", limit = nil) ⇒ Encoder
constructor
A new instance of Encoder.
-
#kv_pair(k, v) ⇒ Object
FIXME: implement line folding.
- #lwsp(str) ⇒ Object
- #meta(str) ⇒ Object
- #normalize_encoding(str) ⇒ Object
- #phrase(str) ⇒ Object
- #puts(str = nil) ⇒ Object
- #reset ⇒ Object
- #space ⇒ Object (also: #spc)
- #terminate ⇒ Object
- #text(str) ⇒ Object
- #write(str) ⇒ Object
Constructor Details
#initialize(dest = nil, encoding = nil, eol = "\r\n", limit = nil) ⇒ Encoder
Returns a new instance of Encoder.
170 171 172 173 174 175 |
# File 'lib/tmail-pure/encode.rb', line 170 def initialize(dest = nil, encoding = nil, eol = "\r\n", limit = nil) @f = StrategyInterface.create_dest(dest) @opt = OPTIONS[$KCODE] @eol = eol reset end |
Class Method Details
.encode(str) ⇒ Object
153 154 155 156 157 158 |
# File 'lib/tmail-pure/encode.rb', line 153 def Encoder.encode(str) e = new() e.header_body str e.terminate e.dest.string end |
Instance Method Details
#dest ⇒ Object
195 196 197 |
# File 'lib/tmail-pure/encode.rb', line 195 def dest @f end |
#encode_value(str) ⇒ Object
268 269 270 |
# File 'lib/tmail-pure/encode.rb', line 268 def encode_value(str) str.gsub(RFC2231_UNSAFE) {|s| '%%%02X' % s[0] } end |
#header_body(str) ⇒ Object
222 223 224 |
# File 'lib/tmail-pure/encode.rb', line 222 def header_body(str) scanadd normalize_encoding(str) end |
#header_line(line) ⇒ Object
add
212 213 214 |
# File 'lib/tmail-pure/encode.rb', line 212 def header_line(line) scanadd line end |
#header_name(name) ⇒ Object
216 217 218 219 220 |
# File 'lib/tmail-pure/encode.rb', line 216 def header_name(name) add_text name.split(/-/).map {|i| i.capitalize }.join('-') add_text ':' add_lwsp ' ' end |
#kv_pair(k, v) ⇒ Object
FIXME: implement line folding
255 256 257 258 259 260 261 262 263 264 265 266 |
# File 'lib/tmail-pure/encode.rb', line 255 def kv_pair(k, v) v = normalize_encoding(v) if token_safe?(v) add_text k + '=' + v elsif not CONTROL_CHAR =~ v add_text k + '=' + quote_token(v) else # apply RFC2231 encoding kv = k + '*=' + "iso-2022-jp'ja'" + encode_value(v) add_text kv end end |
#lwsp(str) ⇒ Object
232 233 234 |
# File 'lib/tmail-pure/encode.rb', line 232 def lwsp(str) add_lwsp str.sub(/[\r\n]+[^\r\n]*\z/, '') end |
#meta(str) ⇒ Object
236 237 238 |
# File 'lib/tmail-pure/encode.rb', line 236 def (str) add_text str end |
#normalize_encoding(str) ⇒ Object
177 178 179 180 181 182 |
# File 'lib/tmail-pure/encode.rb', line 177 def normalize_encoding(str) if @opt then NKF.nkf(@opt, str) else str end end |
#phrase(str) ⇒ Object
244 245 246 247 248 249 250 251 |
# File 'lib/tmail-pure/encode.rb', line 244 def phrase(str) str = normalize_encoding(str) if CONTROL_CHAR =~ str scanadd str else add_text quote_phrase(str) end end |
#puts(str = nil) ⇒ Object
199 200 201 202 |
# File 'lib/tmail-pure/encode.rb', line 199 def puts(str = nil) @f << str if str @f << @eol end |
#reset ⇒ Object
184 185 186 187 188 |
# File 'lib/tmail-pure/encode.rb', line 184 def reset @text = '' @lwsp = '' @curlen = 0 end |
#space ⇒ Object Also known as: spc
226 227 228 |
# File 'lib/tmail-pure/encode.rb', line 226 def space add_lwsp ' ' end |
#terminate ⇒ Object
190 191 192 193 |
# File 'lib/tmail-pure/encode.rb', line 190 def terminate add_lwsp '' reset end |
#text(str) ⇒ Object
240 241 242 |
# File 'lib/tmail-pure/encode.rb', line 240 def text(str) scanadd normalize_encoding(str) end |
#write(str) ⇒ Object
204 205 206 |
# File 'lib/tmail-pure/encode.rb', line 204 def write(str) @f << str end |