0df9c1ef120ca10c8478c0ce9fb3d362e8ced30a
[elisp/flim.git] / TESTPAT
1 ;----------------------------------------------------------------------------
2 ;-------- This sequece of HYPHEN-MINUS is 76 bytes long. --------------------
3 ;----------------------------------------------------------------------------
4
5 ; options:
6 ;encode-sticked-comment-as-atom    ; violate the policy preserving structures
7 ;ignore-75bytes-limit              ; violate RFC2047
8 ;ignore-76bytes-limit              ; violate RFC2047
9 ;permit-sticked-comment            ; violate RFC2047
10 ;permit-sticked-special            ; violate RFC2047
11 ;separate-sticked-comment          ; violate the policy preserving absence of space
12 ;separate-sticked-special          ; violate the policy preserving absence of space
13 ;zero-characters-encoded-word-hack ; violate common sense (very tricky)
14 ;quoted-encoded-word               ; violate character sequence semantics
15
16 ;;; test driver
17
18 (setq decode-test 'decode-flam)
19 (setq encode-test 'encode-flam)
20
21 (setq decode-succ-count 0)
22 (setq decode-all-count 0)
23 (defun decode (src dsts &rest opts)
24   (if (stringp dsts) (setq dsts (list dsts)))
25   (setq decode-all-count (1+ decode-all-count))
26   (let ((res (condition-case nil
27                (apply decode-test src dsts opts)
28                (error nil))))
29     (if (eq res t)
30       (progn
31         (setq decode-succ-count (1+ decode-succ-count))
32         (insert "\n'dsucc"))
33       (insert (format "\n%S\n'dfail" res)))
34     res))
35
36 (setq encode-succ-count 0)
37 (setq encode-all-count 0)
38 (defun encode (src dsts &rest opts)
39   (if (stringp dsts) (setq dsts (list dsts)))
40   (setq encode-all-count (1+ decode-all-count))
41   (let ((res (condition-case nil
42                (apply encode-test src dsts opts)
43                (error nil))))
44     (if (eq res t)
45       (progn
46         (setq encode-succ-count (1+ encode-succ-count))
47         (insert "\n'esucc"))
48       (insert (format "\n%S\n'efail" res)))
49     res))
50
51 (defun report ()
52   (insert
53     (format "\n\"Decode: %d/%d  Encode: %d/%d\""
54       decode-succ-count decode-all-count
55       encode-succ-count encode-all-count)))
56
57 ;;; FLAM specific part (FLIM is OK)
58
59 (defun decode-flam (src dsts &rest opts)
60   (setq eword-lexical-analyze-cache nil)
61   (setq eword-decode-sticked-encoded-word
62     (or (memq 'permit-sticked-comment opts)
63         (memq 'permit-sticked-special opts)))
64   (setq eword-decode-quoted-encoded-word nil)
65   (with-temp-buffer
66     (insert src "\n" mail-header-separator)
67     (eword-decode-header 'us-ascii mail-header-separator)
68     (goto-char (point-min))
69     (std11-narrow-to-header mail-header-separator)
70     (std11-field-end)
71     (let ((result (buffer-substring (point-min) (point))))
72       (if (member result dsts) t result))))
73
74 (defun encode-flam (src dsts &rest opts)
75   (setq eword-lexical-analyze-cache nil)
76   (setq eword-decode-sticked-encoded-word nil)
77   (setq eword-decode-quoted-encoded-word nil)
78   (with-temp-buffer
79     (insert src "\n" mail-header-separator)
80     (goto-char (point-min))
81     (eword-encode-header 'us-ascii)
82     (goto-char (point-min))
83     (std11-narrow-to-header mail-header-separator)
84     (std11-field-end)
85     (let ((result (buffer-substring (point-min) (point))))
86       (if (member result dsts) t result))))
87
88 ;;;start-test;;;
89
90 ;; Section 1: Decoding examples from RFC2047
91
92 (decode
93 "From: =?US-ASCII?Q?Keith_Moore?= <moore@cs.utk.edu>"
94 "From: Keith Moore <moore@cs.utk.edu>")
95
96 (decode
97 "To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>"
98 "To: Keld J\e.A\eNxrn Simonsen <keld@dkuug.dk>")\e*B
99
100 (decode
101 "CC: =?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be>"
102 "CC: Andr\e.A\eNi Pirard <PIRARD@vm1.ulg.ac.be>")\e*B
103
104 (decode
105 "Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
106  =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="
107 "Subject: If you can read this you understand the example.")
108
109 (decode
110 "From: =?ISO-8859-1?Q?Olle_J=E4rnefors?= <ojarnef@admin.kth.se>"
111 "From: Olle J\e.A\eNdrnefors <ojarnef@admin.kth.se>")\e*B
112
113 (decode
114 "From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <paf@nada.kth.se>"
115 "From: Patrik F\e.A\eNdltstr\eNvm <paf@nada.kth.se>")\e*B
116
117 (decode
118 "From: Nathaniel Borenstein <nsb@thumper.bellcore.com>
119         (=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=)"
120 "From: Nathaniel Borenstein <nsb@thumper.bellcore.com>  (\e.H\eNm\eNe\eNl\eNy \eNo\eNa \eNi\eNl\eNh\eNt\eNp)")\e*B
121
122 (decode
123 "From: foo@bar.baz (=?ISO-8859-1?Q?a?=)"
124 "From: foo@bar.baz (a)")
125
126 (decode
127 "From: foo@bar.baz (=?ISO-8859-1?Q?a?= b)"
128 "From: foo@bar.baz (a b)")
129
130 (decode
131 "From: foo@bar.baz (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)"
132 "From: foo@bar.baz (ab)")
133
134 (decode
135 "From: foo@bar.baz (=?ISO-8859-1?Q?a?=  =?ISO-8859-1?Q?b?=)"
136 "From: foo@bar.baz (ab)")
137
138 (decode
139 "From: foo@bar.baz (=?ISO-8859-1?Q?a?=
140         =?ISO-8859-1?Q?b?=)"
141 "From: foo@bar.baz (ab)")
142
143 (decode
144 "From: foo@bar.baz (=?ISO-8859-1?Q?a_b?=)"
145 "From: foo@bar.baz (a b)")
146
147 (decode
148 "From: foo@bar.baz (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)"
149 "From: foo@bar.baz (a b)")
150
151 (decode
152 "Subject: (=?ISO-8859-1?Q?a?=)"
153 "Subject: (=?ISO-8859-1?Q?a?=)")
154
155 (decode
156 "Subject: (=?ISO-8859-1?Q?a?= b)"
157 "Subject: (=?ISO-8859-1?Q?a?= b)")
158
159 (decode
160 "Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)"
161 "Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)")
162
163 (decode
164 "Subject: (=?ISO-8859-1?Q?a?=  =?ISO-8859-1?Q?b?=)"
165 "Subject: (=?ISO-8859-1?Q?a?=  =?ISO-8859-1?Q?b?=)")
166
167 (decode
168 "Subject: (=?ISO-8859-1?Q?a?=
169         =?ISO-8859-1?Q?b?=)"
170 "Subject: (=?ISO-8859-1?Q?a?=   =?ISO-8859-1?Q?b?=)")
171
172 (decode
173 "Subject: (=?ISO-8859-1?Q?a_b?=)"
174 "Subject: (=?ISO-8859-1?Q?a_b?=)")
175
176 (decode
177 "Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)"
178 "Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)")
179
180 ;; Section 2: Decoding trivial inputs.
181
182 (decode
183 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
184 "From: \e$B$"\e(B <akr@jaist.ac.jp>")
185
186 (decode
187 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= =?ISO-2022-JP?B?GyRCJCQbKEI=?=
188  <akr@jaist.ac.jp>"
189 "From: \e$B$"$$\e(B <akr@jaist.ac.jp>")
190
191 (decode
192 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=
193  =?ISO-2022-JP?B?GyRCJCQbKEI=?=
194  <akr@jaist.ac.jp>"
195 "From: \e$B$"$$\e(B <akr@jaist.ac.jp>")
196
197 (decode
198 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=
199         =?ISO-2022-JP?B?GyRCJCQbKEI=?=
200  <akr@jaist.ac.jp>"
201 "From: \e$B$"$$\e(B <akr@jaist.ac.jp>")
202
203 (decode
204 "From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=
205  =?ISO-2022-JP?B?GyhC?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=
206  =?ISO-2022-JP?B?GyhC?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)"
207 "From: akr@jaist.ac.jp (\e$B$"\e(B(\e$B$$\e(B)\e$B$&\e(B)")
208
209 (decode
210 "From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
211 "From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>")
212
213 (decode
214 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b <akr@jaist.ac.jp>"
215 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b <akr@jaist.ac.jp>")
216
217 (decode
218 "From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b <akr@jaist.ac.jp>"
219 "From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b <akr@jaist.ac.jp>")
220
221 (decode
222 "From: \"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\" <akr@jaist.ac.jp>"
223 "From: \"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\" <akr@jaist.ac.jp>")
224
225 (decode
226 "From: \"\\\"\\\\\" =?ISO-2022-JP?B?GyRCJCIbKEI=?= \"\\\"\\\\\" <akr@jaist.ac.jp>"
227 "From: \"\\\"\\\\\" \e$B$"\e(B \"\\\"\\\\\" <akr@jaist.ac.jp>")
228
229 (decode
230 "From: < =?ISO-2022-JP?B?GyRCJCIbKEI=?= @jaist.ac.jp>"
231 "From: < =?ISO-2022-JP?B?GyRCJCIbKEI=?= @jaist.ac.jp>")
232
233 (decode
234 "From: =?ISO-2022-JP?Q?=1B=24BAA=1B=28B?= <akr@jaist.ac.jp>"
235 "From: \e$BAA\e(B <akr@jaist.ac.jp>")
236
237 (decode
238 "From: =?ISO-2022-JP?Q?=1B$BAA=1B(B?= ) <akr@jaist.ac.jp>"
239 "From: =?ISO-2022-JP?Q?=1B$BAA=1B(B?= ) <akr@jaist.ac.jp>")
240
241 (decode
242 "From: (=?US-ASCII?Q?(?=)foo@bar.baz(=?US-ASCII?Q?))baz@bar.foo(?=)"
243 "From: (=?US-ASCII?Q?(?=)foo@bar.baz(=?US-ASCII?Q?))baz@bar.foo(?=)")
244
245 (decode
246 "From: =?ISO-2022-JP?B?GyRCJCIbKEIoGyRCJCIbKEIp?= <akr@jaist.ac.jp>"
247 "From: \"\e$B$"\e(B(\e$B$"\e(B)\" <akr@jaist.ac.jp>")
248
249 (decode
250 "From: =?US-ASCII?Q?=28?= <akr@jaist.ac.jp>, =?US-ASCII?Q?=29?= <akr@jaist.ac.jp>"
251 "From: \"(\" <akr@jaist.ac.jp>, \")\" <akr@jaist.ac.jp>")
252
253 (decode
254 "From: =?ISO-2022-JP?B?YSJiGyRCJCIbKEJjXA==?= <akr@jaist.ac.jp>"
255 "From: \"a\\\"b\e$B$"\e(Bc\\\\\" <akr@jaist.ac.jp>")
256
257 (decode
258 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?="
259 "Subject: \e$B$"\e(B")
260
261 (decode
262 "Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?="
263 "Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
264
265 (decode
266 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b"
267 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b")
268
269 (decode
270 "Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b"
271 "Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b")
272
273 (decode
274 "Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?="
275 "Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
276
277 (decode
278 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)"
279 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)")
280
281 (decode
282 "Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)"
283 "Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)")
284
285 (decode
286 "Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?="
287 "Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
288
289 (decode
290 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\""
291 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\"")
292
293 (decode
294 "Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\""
295 "Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\"")
296
297 (decode
298 "Subject: (Re: =?ISO-2022-JP?B?GyRCJCIbKEI=?=)"
299 "Subject: (Re: =?ISO-2022-JP?B?GyRCJCIbKEI=?=)")
300
301 (decode
302 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:"
303 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:")
304
305 (decode
306 "Subject: =?ISO-2022-JP?B??="
307 "Subject: =?ISO-2022-JP?B??=")
308
309 (decode
310 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= a
311  =?ISO-2022-JP?B?GyRCJCQbKEI=?="
312 "Subject: \e$B$"\e(B a \e$B$$\e(B")
313
314 (decode
315 "Subject: =?ISO-2022-JP?B?GyRCMCQbKEIgICAgICAgICAgICAgICAgICAgICAgICAgICAg?=
316  =?US-ASCII?Q?____________________________________________________________?=
317  =?ISO-2022-JP?B?ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBskQlJfGyhC?="
318 "Subject: \e$B0$\e(B                                                                                                                          \e$BR_\e(B")
319
320 (decode
321 "From: =?ISO-8859-1?Q?abcdefghijklmnopqrst=A1=28=29=22=5C?= <akr@jaist.ac.jp>"
322 "From: \"abcdefghijklmnopqrst\e.A\eN!()\\\"\\\\\" <akr@jaist.ac.jp>")\e*B
323
324 (decode
325 "Subject: ?= =?"
326 "Subject: ?= =?")
327
328 (decode
329 "Subject: \" =?ISO-2022-JP?B?GyRCJCIbKEI=?= \""
330 "Subject: \" \e$B$"\e(B \"")
331
332 (decode
333 "From: \"\\\\\" =?ISO-2022-JP?B?GyRCJCIbKEI=?= \"\" <akr@jaist.ac.jp>"
334 "From: \"\\\\\" \e$B$"\e(B \"\" <akr@jaist.ac.jp>")
335
336 (decode
337 "Subject: =?ISO-2022-JP?Q?=1B$B$\"=1B(B_=1B$B$\"=1B(B?="
338 "Subject: \e$B$"\e(B \e$B$"\e(B")
339
340 (decode
341 "Subject: =?ISO-2022-JP?Q?=1B$B$\"=1B(B =1B$B$\"=1B(B?="
342 "Subject: =?ISO-2022-JP?Q?=1B$B$\"=1B(B =1B$B$\"=1B(B?=")
343
344 (decode
345 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= a =?ISO-8859-8?Q?=E0?="
346 "Subject: \e$B$"\e(B a \e.H\eN`")\e*B
347
348 (decode
349 "Subject: =?ISO-8859-8?Q?=E0?= =?ISO-2022-JP?B?GyRCTm0bKEI=?="
350 "Subject: \e.H\eN`\e$BNm\e(B")\e*B
351
352 (decode
353 "Subject: =?ISO-8859-8?Q?=E0_?= =?ISO-2022-JP?B?GyRCTm0bKEI=?="
354 "Subject: \e.H\eN` \e$BNm\e(B")\e*B
355
356 (decode
357 "Subject: =?ISO-2022-JP-2?B?Gy5GG05DGyRCNFg/dBsoQg==?="
358 "Subject: \e.F\eNC\e$B4X?t\e(B")\e*B
359
360 (decode
361 "Subject: =?ISO-8859-7?Q?=C3?= =?ISO-2022-JP?B?GyRCNFg/dBsoQg==?="
362 "Subject: \e.F\eNC\e$B4X?t\e(B")\e*B
363
364 (decode
365 "Subject: =?Shift_JIS?B?gqA=?="
366 "Subject: \e$B$"\e(B"
367 'quoted-encoded-word)
368
369 (decode
370 "Subject: =?EUC-JP?B?pKI=?="
371 "Subject: \e$B$"\e(B"
372 'quoted-encoded-word)
373
374 (decode
375 "Subject: = =?ISO-2022-JP?B?GyRCJCIbKEI=?="
376 "Subject: = \e$B$"\e(B")
377
378 (decode
379 "Subject: =? =?ISO-2022-JP?B?GyRCJCIbKEI=?="
380 "Subject: =? \e$B$"\e(B")
381
382 (decode
383 "Subject: =?ISO-2022-JP =?ISO-2022-JP?B?GyRCJCIbKEI=?="
384 "Subject: =?ISO-2022-JP \e$B$"\e(B")
385
386 (decode
387 "Subject: =?ISO-2022-JP? =?ISO-2022-JP?B?GyRCJCIbKEI=?="
388 "Subject: =?ISO-2022-JP? \e$B$"\e(B")
389
390 (decode
391 "Subject: =?ISO-2022-JP?B =?ISO-2022-JP?B?GyRCJCIbKEI=?="
392 "Subject: =?ISO-2022-JP?B \e$B$"\e(B")
393
394 (decode
395 "Subject: =?ISO-2022-JP?B? =?ISO-2022-JP?B?GyRCJCIbKEI=?="
396 "Subject: =?ISO-2022-JP?B? \e$B$"\e(B")
397
398 (decode
399 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI =?ISO-2022-JP?B?GyRCJCIbKEI=?="
400 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI \e$B$"\e(B")
401
402 (decode
403 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI= =?ISO-2022-JP?B?GyRCJCIbKEI=?="
404 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI= \e$B$"\e(B")
405
406 (decode
407 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=? =?ISO-2022-JP?B?GyRCJCIbKEI=?="
408 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=? \e$B$"\e(B")
409
410 (decode
411 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= =?ISO-2022-JP?B?GyRCJCIbKEI=?="
412 "Subject: \e$B$"$"\e(B")
413
414 (decode
415 "Subject: ==?ISO-2022-JP?B?GyRCJCIbKEI=?="
416 "Subject: ==?ISO-2022-JP?B?GyRCJCIbKEI=?=")
417
418 (decode
419 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=="
420 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==")
421
422 (decode
423 "From: akr@jaist.ac.jp (\\=?ISO-2022-JP?B?GyRCJCIbKEI=?=)"
424 "From: akr@jaist.ac.jp (\\=?ISO-2022-JP?B?GyRCJCIbKEI=?=)")
425
426 ;; Section 3: Decoding melancholy inputs.
427
428 (decode
429 "From:=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
430 "From:=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>")
431
432 (decode
433 "From: akr@jaist.ac.jp
434  (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\\a=?ISO-2022-JP?B?GyRCJCQbKEI=?=)"
435 "From: akr@jaist.ac.jp (\e$B$"\e(B\\a\e$B$$\e(B)")
436
437 (decode
438 "From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
439 "From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>")
440
441 (decode
442 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) <akr@jaist.ac.jp>"
443 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) <akr@jaist.ac.jp>")
444
445 (decode
446 "From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) <akr@jaist.ac.jp>"
447 "From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) <akr@jaist.ac.jp>")
448
449 (decode
450 "From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
451 "From: (a)\e$B$"\e(B <akr@jaist.ac.jp>"
452 'permit-sticked-comment)
453
454 (decode
455 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) <akr@jaist.ac.jp>"
456 "From: \e$B$"\e(B(b) <akr@jaist.ac.jp>"
457 'permit-sticked-comment)
458
459 (decode
460 "From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) <akr@jaist.ac.jp>"
461 "From: (a)\e$B$"\e(B(b) <akr@jaist.ac.jp>"
462 'permit-sticked-comment)
463
464 (decode
465 "From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
466 "From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>")
467
468 (decode
469 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" <akr@jaist.ac.jp>"
470 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" <akr@jaist.ac.jp>")
471
472 (decode
473 "From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" <akr@jaist.ac.jp>"
474 "From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" <akr@jaist.ac.jp>")
475
476 (decode
477 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)
478  <akr@jaist.ac.jp>"
479 "From: \e$B$"\e(B(\e$B$"\e(B) <akr@jaist.ac.jp>"
480 'permit-sticked-comment)
481
482 (decode
483 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
484 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>")
485
486 (decode
487 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
488 "To: \e$B$"\e(B<akr@jaist.ac.jp>"
489 'permit-sticked-special)
490
491 (decode
492 "To: <akr@jaist.ac.jp>,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
493 "To: <akr@jaist.ac.jp>,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>")
494
495 (decode
496 "To: <akr@jaist.ac.jp>,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
497 "To: <akr@jaist.ac.jp>,\e$B$"\e(B<akr@jaist.ac.jp>"
498 'permit-sticked-special)
499
500 (decode
501 "To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
502 "To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>")
503
504 (decode
505 "To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
506 "To: akr@jaist.ac.jp,\e$B$"\e(B<akr@jaist.ac.jp>"
507 'permit-sticked-special)
508
509 (decode
510 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;"
511 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;")
512
513 (decode
514 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;"
515 "To: \e$B$"\e(B:akr@jaist.ac.jp;"
516 'permit-sticked-special)
517
518 (decode
519 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<akr@jaist.ac.jp>;"
520 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<akr@jaist.ac.jp>;")
521
522 (decode
523 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<akr@jaist.ac.jp>;"
524 "To: \e$B$"\e(B:\e$B$$\e(B<akr@jaist.ac.jp>;"
525 'ignore-76bytes-limit 'permit-sticked-special)
526
527 (decode
528 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<foo@bar>,=?ISO-2022-JP?B?GyRCJCYbKEI=?=<foo@bar>;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=<foo@bar>"
529 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<foo@bar>,=?ISO-2022-JP?B?GyRCJCYbKEI=?=<foo@bar>;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=<foo@bar>")
530
531 (decode
532 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<foo@bar>,=?ISO-2022-JP?B?GyRCJCYbKEI=?=<foo@bar>;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=<foo@bar>"
533 "To: \e$B$"\e(B:\e$B$$\e(B<foo@bar>,\e$B$&\e(B<foo@bar>;,\e$B$(\e(B<foo@bar>"
534 'ignore-76bytes-limit 'permit-sticked-special)
535
536 (decode
537 "Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?="
538 "Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
539
540 (decode
541 "Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?="
542 "Subject:\e$B$"\e(B"
543 'permit-sticked-special)
544
545 ;; Section 4: Decoding invalid inputs.
546
547 (decode
548 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCQbKEI=?=
549  <akr@jaist.ac.jp>"
550 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCQbKEI=?= <akr@jaist.ac.jp>")
551
552 (decode
553 "From: akr@jaist.ac.jp
554  (=?ISO-2022-JP?B?GyRCJCIbKEI=?=a=?ISO-2022-JP?B?GyRCJCQbKEI=?=)"
555 "From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=a=?ISO-2022-JP?B?GyRCJCQbKEI=?=)")
556
557 (decode
558 "From: akr@jaist.ac.jp
559  (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)"
560 "From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)")
561
562 (decode
563 "From: akr@jaist.ac.jp
564  (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)"
565 "From: akr@jaist.ac.jp (\e$B$"\e(B(\e$B$$\e(B)\e$B$&\e(B)"
566 'ignore-76bytes-limit)
567
568 (decode
569 "Subject: =?=?ISO-2022-JP?B?GyRCJCIbKEI=?="
570 "Subject: =?=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
571
572 (decode
573 "Subject: =?ISO-2022-JP=?ISO-2022-JP?B?GyRCJCIbKEI=?="
574 "Subject: =?ISO-2022-JP=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
575
576 (decode
577 "Subject: =?ISO-2022-JP?=?ISO-2022-JP?B?GyRCJCIbKEI=?="
578 "Subject: =?ISO-2022-JP?=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
579
580 (decode
581 "Subject: =?ISO-2022-JP?B=?ISO-2022-JP?B?GyRCJCIbKEI=?="
582 "Subject: =?ISO-2022-JP?B=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
583
584 (decode
585 "Subject: =?ISO-2022-JP?B?=?ISO-2022-JP?B?GyRCJCIbKEI=?="
586 "Subject: =?ISO-2022-JP?B?=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
587
588 (decode
589 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?ISO-2022-JP?B?GyRCJCIbKEI=?="
590 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
591
592 (decode
593 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI==?ISO-2022-JP?B?GyRCJCIbKEI=?="
594 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI==?ISO-2022-JP?B?GyRCJCIbKEI=?=")
595
596 (decode
597 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=?ISO-2022-JP?B?GyRCJCIbKEI=?="
598 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=?ISO-2022-JP?B?GyRCJCIbKEI=?=")
599
600 (decode
601 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCIbKEI=?="
602 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCIbKEI=?=")
603
604 (decode
605 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI?="
606 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI?=")
607
608 (decode
609 "Subject: =?ISO-2022-JP?B?GyRCNFg-dBsoQg==?="
610 "Subject: =?ISO-2022-JP?B?GyRCNFg-dBsoQg==?=")
611
612 ;; Section 5: Encoding trivial inputs.
613
614 (encode
615 "From: \e$B$"\e(B <akr@jaist.ac.jp>"
616 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>")
617
618 (encode
619 "From: \"\e$B$"\e(B(\e$B$"\e(B)\" <akr@jaist.ac.jp>"
620 "From: =?ISO-2022-JP?B?GyRCJCIbKEIoGyRCJCIbKEIp?= <akr@jaist.ac.jp>")
621
622 (encode
623 "From: \"a\\\"b\e$B$"\e(Bc\\\\\" <akr@jaist.ac.jp>"
624 "From: =?ISO-2022-JP?B?YSJiGyRCJCIbKEJjXA==?= <akr@jaist.ac.jp>")
625
626 (encode
627 "Subject: \e$B0$\e(B                                                                                                                          \e$BR_\e(B"
628 "Subject: =?ISO-2022-JP?B?GyRCMCQbKEIgICAgICAgICAgICAgICAgICAgICAgICAgICAg?=
629  =?US-ASCII?Q?____________________________________________________________?=
630  =?ISO-2022-JP?B?ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBskQlJfGyhC?=")
631
632 (encode
633 "Subject: \e$B0$\e(B                                                                                                                          \e$BR_\e(B"
634 "Subject: =?ISO-2022-JP?B?GyQpQrCkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDS3w=="
635 'ignore-76bytes-limit 'ignore-75bytes-limit)
636
637 (encode
638 "From: \e.A\eN! <akr@jaist.ac.jp>"\e*B
639 "From: =?ISO-8859-1?Q?=A1?= <akr@jaist.ac.jp>")
640
641 (encode
642 "From: \"abcdefghijklmnopqrst\e.A\eN!()\\\"\\\\\" <akr@jaist.ac.jp>"\e*B
643 "From: =?ISO-8859-1?Q?abcdefghijklmnopqrst=A1=28=29=22=5C?= <akr@jaist.ac.jp>")
644
645 (encode
646 "From: akr@jaist.ac.jp (abcdefghijklmnopqrst\e.A\eN!\\(\\)\"\\\\)"\e*B
647 "From: akr@jaist.ac.jp (=?ISO-8859-1?Q?abcdefghijklmnopqrst=A1=28=29\"=5C?=)")
648
649 (encode
650 "Subject: \e$B$"\e(B a \e.H\eN`"\e*B
651 "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= a =?ISO-8859-8?Q?=E0?=")
652
653 (encode
654 "Subject: \e.H\eN`\e$BNm\e(B"\e*B
655 "Subject: =?ISO-8859-8?Q?=E0?= =?ISO-2022-JP?B?GyRCTm0bKEI=?=")
656
657 (encode
658 "Subject: \e.H\eN` \e$BNm\e(B"\e*B
659 '("Subject: =?ISO-8859-8?Q?=E0_?= =?ISO-2022-JP?B?GyRCTm0bKEI=?="
660   "Subject: =?ISO-8859-8?Q?=E0?= =?ISO-2022-JP?B?IBskQk5tGyhC?="))
661
662 (encode
663 "Subject: \e.F\eNC\e$B4X?t\e(B"\e*B
664 '("Subject: =?ISO-8859-7?Q?=C3?= =?ISO-2022-JP?B?GyRCNFg/dBsoQg==?="
665   "Subject: =?ISO-2022-JP-2?B?Gy5GG05DGyRCNFg/dBsoQg==?="))
666
667 ;; Section 6: Encoding melancholy inputs.
668
669 (encode
670 "From: akr@jaist.ac.jp (\e$B$"\e(B(\e$B$$\e(B)\e$B$&\e(B)"
671 "From: akr@jaist.ac.jp
672  (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)"
673 'ignore-76bytes-limit)
674
675 (encode
676 "From: akr@jaist.ac.jp (\e$B$"\e(B(\e$B$$\e(B)\e$B$&\e(B)"
677 "From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=
678  =?ISO-2022-JP?B?GyhC?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=
679  =?ISO-2022-JP?B?GyhC?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)"
680 'zero-characters-encoded-word-hack)
681
682 (encode
683 "From: \e$B$"\e(B(\e$B$"\e(B) <akr@jaist.ac.jp>"
684 "From: =?ISO-2022-JP?B?GyRCJCIbKEIoGyRCJCIbKEIp?= <akr@jaist.ac.jp>"
685 'encode-sticked-comment-as-atom)
686
687 (encode
688 "From: \e$B$"\e(B(\e$B$"\e(B) <akr@jaist.ac.jp>"
689 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)
690  <akr@jaist.ac.jp>"
691 'permit-sticked-comment)
692
693 (encode
694 "From: \e$B$"\e(B(\e$B$"\e(B) <akr@jaist.ac.jp>"
695 "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)
696  <akr@jaist.ac.jp>"
697 'separate-sticked-comment)
698
699 (encode
700 "To: \e$B$"\e(B<akr@jaist.ac.jp>"
701 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
702 'permit-sticked-special)
703
704 (encode
705 "To: \e$B$"\e(B<akr@jaist.ac.jp>"
706 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
707 'separate-sticked-special)
708
709 (encode
710 "To: <akr@jaist.ac.jp>,\e$B$"\e(B<akr@jaist.ac.jp>"
711 "To: <akr@jaist.ac.jp>,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
712 'permit-sticked-special)
713
714 (encode
715 "To: <akr@jaist.ac.jp>,\e$B$"\e(B<akr@jaist.ac.jp>"
716 "To: <akr@jaist.ac.jp>, =?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
717 'separate-sticked-special)
718
719 (encode
720 "To: akr@jaist.ac.jp,\e$B$"\e(B<akr@jaist.ac.jp>"
721 "To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=<akr@jaist.ac.jp>"
722 'permit-sticked-special)
723
724 (encode
725 "To: akr@jaist.ac.jp,\e$B$"\e(B<akr@jaist.ac.jp>"
726 "To: akr@jaist.ac.jp, =?ISO-2022-JP?B?GyRCJCIbKEI=?= <akr@jaist.ac.jp>"
727 'separate-sticked-special)
728
729 (encode
730 "To: \e$B$"\e(B:akr@jaist.ac.jp;"
731 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;"
732 'permit-sticked-special)
733
734 (encode
735 "To: \e$B$"\e(B:akr@jaist.ac.jp;"
736 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= :akr@jaist.ac.jp;"
737 'separate-sticked-special)
738
739 (encode
740 "To: \e$B$"\e(B:\e$B$$\e(B<akr@jaist.ac.jp>;"
741 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<akr@jaist.ac.jp>;"
742 'ignore-76bytes-limit 'permit-sticked-special)
743
744 (encode
745 "To: \e$B$"\e(B:\e$B$$\e(B<akr@jaist.ac.jp>;"
746 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=
747  =?ISO-2022-JP?B?GyhC?=<akr@jaist.ac.jp>;"
748 'zero-characters-encoded-word-hack 'permit-sticked-special)
749
750 (encode
751 "To: \e$B$"\e(B:\e$B$$\e(B<akr@jaist.ac.jp>;"
752 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= : =?ISO-2022-JP?B?GyRCJCQbKEI=?=
753  <akr@jaist.ac.jp>;"
754 'separate-sticked-special)
755
756 (encode
757 "To: \e$B$"\e(B:\e$B$$\e(B<foo@bar>,\e$B$&\e(B<foo@bar>;,\e$B$(\e(B<foo@bar>"
758 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=<foo@bar>,=?ISO-2022-JP?B?GyRCJCYbKEI=?=<foo@bar>;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=<foo@bar>"
759 'ignore-76bytes-limit 'permit-sticked-special)
760
761 (encode
762 "To: \e$B$"\e(B:\e$B$$\e(B<foo@bar>,\e$B$&\e(B<foo@bar>;,\e$B$(\e(B<foo@bar>"
763 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=
764  =?ISO-2022-JP?B?GyhC?=<foo@bar>,=?ISO-2022-JP?B?GyRCJCYbKEI=?=
765  =?ISO-2022-JP?B?GyhC?=<foo@bar>;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=<foo@bar>"
766 'zero-characters-encoded-word-hack 'permit-sticked-special)
767
768 (encode
769 "To: \e$B$"\e(B:\e$B$$\e(B<foo@bar>,\e$B$&\e(B<foo@bar>;,\e$B$(\e(B<foo@bar>"
770 "To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= : =?ISO-2022-JP?B?GyRCJCQbKEI=?=
771  <foo@bar>, =?ISO-2022-JP?B?GyRCJCYbKEI=?= <foo@bar>;,
772  =?ISO-2022-JP?B?GyRCJCgbKEI=?= <foo@bar>"
773 'separate-sticked-special)
774
775 ;; Section 7: Using quoted-encoded-words.
776 ;
777 ;; quoted-encoded-word \e$BI=8=\e(B
778
779 ; RFC2047 \e$B$N%G%3!<%@$O@x:_E*$K\e(B(\e$B%G%3!<%I7k2L$G$J$/\e(B) encoded-word \e$B$=$N$b$N$r\e(B
780\e$B=PNO$7$J$1$l$P$J$i$J$$$3$H$,$"$k!#\e(B
781 ;
782 ; 1. \e$BCN$i$J$$\e(B charset \e$B$b$7$/$O\e(B encoding \e$B$,;XDj$5$l$F$$$?$H$-!#\e(B
783 ;  =?unknown-charset?known-encoding?some-encoded-text?=
784 ;  =?known-charset?unknown-encoding?some-encoded-text?=
785 ;  =?unknown-charset?unknown-encoding?some-encoded-text?=
786 ;
787 ; 2. \e$B%G%3!<%I$G$-$F$bFbMF$,7uF]$9$.$k$H$-!#\e(B
788 ;  Non ASCII \e$B3HD%\e(B RFC822 \e$B$NCf$K\e(B =?US-ASCII?Q?=0D=0A=0D=0A?= \e$B$N%G%3!<%I\e(B
789\e$B7k2L$rKd$a9~$`$N$O4m81$9$.$k!#\e(B
790 ;
791\e$B$^$?!"%G%3!<%@$O\e(B encoded-word \e$B$N$h$&$K$_$($k%G%3!<%I7k2L$r=PNO$7$J$1\e(B
792\e$B$l$P$J$i$J$$$3$H$b$"$k!#\e(B
793 ;
794 ;  =?US-ASCII?Q?=3D=3FUS-ASCII=3FQ=3Ftext=3F=3D?=
795 ;
796\e$B%G%3!<%@$,C1$J$kJ8;zNs$r=PNO$9$k>l9g!"C1=c$K$d$k$H\e(B encoded-word \e$B$=$N$b$N$H\e(B
797 ; encoded-word \e$B$N$h$&$K$_$($kJ8;zNs$r6hJL$G$-$J$$!#\e(B
798\e$B$3$3$G$OJ8;zNsCf$G$=$l$i$r3N<B$K6hJL$7$FI=8=$9$kJ}K!$r<($9!#\e(B
799 ;
800 ; rule 1: \e$BJ8;zNsCf$G\e(B =?charset?encoding?text?= \e$B$H$$$&%Q%?!<%s$K\e(B
801 ;  \e$B%^%C%A$7$J$$ItJ,$O$=$NItJ,$N$^$^$NFbMF$rI=$9!#\e(B
802
803 ; rule 2: \e$BJ8;zNsCf$G\e(B =?charset?encoding?text?= \e$B$H$$$&%Q%?!<%s$K\e(B
804 ;  \e$B%^%C%A$9$kItJ,$O\e(B charset \e$B$N@hF,$K\e(B * \e$B$,$$$/$DIU$$$F$$$k$+$GFbMF$N\e(B
805 ;  \e$B2r<a$rJQ$($k!#\e(B
806 ;
807 ;  \e$B6v?t$N>l9g\e(B(0, 2, 4, ...): charset \e$B$N@hF,$N\e(B * \e$B$N?t$rH>J,$K$7$?J8;zNs\e(B
808 ;  \e$B4q?t$N>l9g\e(B(1, 3, 5, ...): charset \e$B$N@hF,$N\e(B * \e$B$N?t$rH>J,\e(B(\e$B>.?tE@0J2<\e(B
809 ;   \e$B@Z<N$F\e(B)\e$B$K$7$F!"$=$l$r\e(B encoded-word \e$B$H;W$C$F%G%3!<%I$7$?J8;zNs!#\e(B
810 ;
811 ; NOTE: * \e$B$r\e(B quoted-encoded-word \e$BI=8=$N\e(B quote \e$BJ8;z$H8F$V!#\e(B
812 ;
813 ; NOTE: \e$B8=;~E@\e(B(1998/07/19)\e$B$G\e(B IANA \e$B$K$O\e(B * \e$B$r4^$`\e(B charset \e$B$O\e(B
814 ;  \e$BEPO?$5$l$F$$$J$$$N$G!"$=$l$i$N\e(B charset \e$B$r;H$C$?\e(B
815 ;  encoded-word \e$B$rI=8=$9$k$K$O\e(B * \e$B$r\e(B 1\e$B$D$D$1$k$3$H$K$J$k!#\e(B
816 ;
817 ;  =?US-ASCII?Q?abcdef?= \e$B$H$$$&\e(Bencoded-word : =?*US-ASCII?Q?abcdef?=
818 ;
819 ;  =?US-ASCII?Q?abcdef?= \e$B$H$$$&J8;zNs\e(B         : =?US-ASCII?Q?abcdef?=
820 ;  =?*US-ASCII?Q?abcdef?= \e$B$H$$$&J8;zNs\e(B        : =?**US-ASCII?Q?abcdef?=
821 ;  =?**US-ASCII?Q?abcdef?= \e$B$H$$$&J8;zNs\e(B     : =?****US-ASCII?Q?abcdef?=
822 ;  =?***US-ASCII?Q?abcdef?= \e$B$H$$$&J8;zNs\e(B    : =?******US-ASCII?Q?abcdef?=
823 ;  =?US-ASCII*?Q?abcdef?= \e$B$H$$$&J8;zNs\e(B      : =?US-ASCII*?Q?abcdef?=
824 ;  =?U*S-ASCII?Q?abcdef?= \e$B$H$$$&J8;zNs\e(B      : =?U*S-ASCII?Q?abcdef?=
825 ;
826 ; NOTE: encoded-word \e$B$K8+$($kJ8;zNs$G\e(B * \e$B$,G\A}$5$l$k$N$O\e(B charset \e$B$N\e(B
827 ;  \e$B@hF,$@$1$G$"$j!"\e(Bencoding \e$B$d\e(B encoded-text \e$B$O$?$H$(\e(B * \e$B$,F~$C$F$$$F$b\e(B
828 ;  \e$BJQ2=$7$J$$!#$^$?!"\e(Bcharset \e$BCf$G$b\e(B \e$B@hF,0J30$N\e(B * \e$B$OJQ2=$7$J$$!#\e(B
829 ;
830 ; rule 3: \e$BJ8;zNsA4BN$NFbMF$O!"\e(Brule 1 \e$B$H\e(B rule 2 \e$B$G2r<a$7$?3FItJ,$N\e(B
831 ;   \e$BJ8;zNs$rC1=c$KO"7k$7$?J8;zNs$H$9$k!#\e(B
832 ;
833 ; NOTE: RFC2047 \e$B$G$O\e(B encoded-word \e$B$,6uGr$G6h@Z$i$l$J$1$l$P$J$i$J$$$H$+!"\e(B
834 ;  encoded-word \e$B$O\e(B 75bytes \e$B0J2<$G$J$1$l$P$J$i$J$$$H$+!"\e(B
835 ;  encoded-word \e$B$,4^$^$l$k9T$O\e(B 76bytes \e$B0J2<$G$J$1$l$P$J$i$J$$$J$I$H$$$&\e(B
836 ;  \e$B5,Ls$,$"$k$,!"\e(Bquoted-encoded-word \e$BI=8=$G$O$=$l$i$O:NMQ$7$J$$!#\e(B
837 ;  \e$BC1=c$K\e(B encoded-word \e$BFbIt$NJ8K!$@$1$rMxMQ$9$k!#\e(B
838 ;  (\e$BK\<AE*$K$O0[$J$kJ8K!$r:NMQ$9$k$3$H$b2DG=$G$"$k$,!"\e(BRFC2047 \e$B$K7I0U$r\e(B
839 ;  \e$BI=$7$F\e(B encoded-word \e$B$NJ8K!$r:NMQ$9$k!#\e(B)
840 ;
841 ; NOTE: quoted-encoded-word \e$BI=8=$7$?J8;zNs$NO"7k$O0BA4$G$O$J$$!#\e(B
842 ;  =?*US-ASCII?Q?ab \e$B$H\e(B cd?= \e$B$H$$$&\e(B quoted-encoded-word \e$BI=8=$7$?J8;zNs$O\e(B
843 ;  \e$B$=$l$>$l$=$NJ8;zNs$=$N$b$N$rI=8=$9$k$,!"$=$l$i$rO"7k$7$?J8;zNs\e(B
844 ;  =?*US-ASCII?Q?abcd?= \e$B$O\e(B abcd \e$B$H$$$&J8;zNs$rI=8=$9$k$3$H$K$J$j!"\e(B
845 ;  \e$B$=$l$>$l$NFbMF$NO"7k$H$O$J$i$J$$!#\e(B
846 ;
847 ;  \e$B$3$l$O$H$/$K\e(B Non ASCII \e$B3HD%\e(B RFC822 \e$B$NCf$K\e(B quoted-encoded-word \e$BI=8=$r\e(B
848 ;  \e$BKd$a9~$`$H$-$K5$$rIU$1$J$1$l$P$J$i$J$$!#\e(B(\e$BKd$a9~$s$@7k2L$O@5$7$$\e(B
849 ;  quoted-encoded-word \e$BI=8=$H$O$J$i$J$$$+$bCN$l$J$$!#\e(B)
850
851 (decode
852 "Subject: =?Unknown-Charset?B?gqA=?="
853 "Subject: =?*Unknown-Charset?B?gqA=?="
854 'quoted-encoded-word)
855
856 (decode
857 "Subject: =?US-ASCII?G?H4sIAMsIsjUCA0tMSk5JTQMA7zmOSwYAAAA?="
858 "Subject: =?*US-ASCII?G?H4sIAMsIsjUCA0tMSk5JTQMA7zmOSwYAAAA?="
859 'quoted-encoded-word)
860
861 (decode
862 "Subject: =?US-ASCII?Unknown-Encoding?H4sIAMsIsjUCA0tMSk5JTQMA7zmOSwYAAAA?="
863 "Subject: =?*US-ASCII?Unknown-Encoding?H4sIAMsIsjUCA0tMSk5JTQMA7zmOSwYAAAA?="
864 'quoted-encoded-word)
865
866 (decode
867 "Subject: =?Unknown-Charset?B?gqA=?= =?Unknown-Charset?B?gqA=?="
868 "Subject: =?*Unknown-Charset?B?gqA=?==?*Unknown-Charset?B?gqA=?="
869 'quoted-encoded-word)
870
871 (decode
872 "Subject: =?Unknown-Charset?B?gqA=?=  =?Unknown-Charset?B?gqA=?="
873 "Subject: =?*Unknown-Charset?B?gqA=?==?*Unknown-Charset?B?gqA=?="
874 'quoted-encoded-word)
875
876 (decode
877 "Subject: =?Unknown-Charset?B?gqA=?=
878  =?Unknown-Charset?B?gqA=?="
879 "Subject: =?*Unknown-Charset?B?gqA=?==?*Unknown-Charset?B?gqA=?="
880 'quoted-encoded-word)
881
882 (decode
883 "Subject: =?Unknown-Charset?B?gqA=?=
884         =?Unknown-Charset?B?gqA=?="
885 "Subject: =?*Unknown-Charset?B?gqA=?==?*Unknown-Charset?B?gqA=?="
886 'quoted-encoded-word)
887
888 (decode
889 "Subject: a=?Unknown-Charset?B?gqA=?="
890 "Subject: a=?Unknown-Charset?B?gqA=?="
891 'quoted-encoded-word)
892
893 (decode
894 "Subject: =?Unknown-Charset?B?gqA=?=b"
895 "Subject: =?Unknown-Charset?B?gqA=?=b"
896 'quoted-encoded-word)
897
898 (decode
899 "Subject: a=?Unknown-Charset?B?gqA=?=b"
900 "Subject: a=?Unknown-Charset?B?gqA=?=b"
901 'quoted-encoded-word)
902
903 (decode
904 "Subject: a =?Unknown-Charset?B?gqA=?= b"
905 "Subject: a =?*Unknown-Charset?B?gqA=?= b"
906 'quoted-encoded-word)
907
908 (decode
909 "Subject: =?ISO-2022-JP?B?DQoNCg==?="
910 "Subject: =?*US-ASCII?Q?=0D=0A=0D=0A?="
911 'quoted-encoded-word)
912
913 (decode
914 "Subject: =?US-ASCII?Q?a=0D=0A_b?="
915 "Subject: a=?*US-ASCII?Q?=0D=0A?= b"
916 'quoted-encoded-word)
917
918 (decode
919 "Subject: =?US-ASCII?Q?a=0D=0Ab?="
920 "Subject: a=?*US-ASCII?Q?=0D=0A?=b"
921 'quoted-encoded-word)
922
923 ;;;end-test;;;
924
925 (report)
926
927 ;----------------------------------------------------------------------------