X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=TESTPAT;h=f417c3dd9d7ebfb719aa2dfdc201b46d7c19888e;hb=4a15ad0838f7f2ab125b4f766b127aefc828580c;hp=09b57fc4e3b4aa05aed4ee8291cb07cc4c9e5a47;hpb=1107de851b970443c16b68389504902d5535ef07;p=elisp%2Fflim.git diff --git a/TESTPAT b/TESTPAT index 09b57fc..f417c3d 100644 --- a/TESTPAT +++ b/TESTPAT @@ -1,3 +1,4 @@ +;;; -*- mode: emacs-lisp; coding: iso-2022-7bit-ss2 -*- ;---------------------------------------------------------------------------- ;-------- This sequece of HYPHEN-MINUS is 76 bytes long. -------------------- ;---------------------------------------------------------------------------- @@ -11,76 +12,78 @@ ;;separate-sticked-comment ; violate the policy preserving absence of space ;;separate-sticked-special ; violate the policy preserving absence of space ;;zero-characters-encoded-word-hack ; violate common sense (very tricky) -;;quoted-encoded-word ; violate character sequence semantics +;;embedded-encoded-word ; violate character sequence semantics ;;separate-sticked-tokens-for-fold ; violate the policy preserving absence of space ;;encode-long-ascii-string-for-fold ; violate the policy preserving US-ASCII string -;;divide-atom-for-fold ; violate tne policy preserving absence of space +;;divide-atom-for-fold ; violate tne policy preserving absence of space ;;; test driver -;;; FLIM or FLAM -'(progn -(require 'mime) -(require 'ew-line) - -(if (< max-specpdl-size 1000) - (setq max-specpdl-size 1000)) - -(defun decode-test (src dsts &rest opts) - (setq src (ew-crlf-to-lf src)) - (setq eword-lexical-analyze-cache nil) - (setq eword-decode-sticked-encoded-word - (or (memq 'permit-sticked-comment opts) - (memq 'permit-sticked-special opts))) - (setq eword-decode-quoted-encoded-word nil) - (with-temp-buffer - (insert src "\n" mail-header-separator) - (eword-decode-header 'us-ascii mail-header-separator) - (goto-char (point-min)) - (std11-narrow-to-header mail-header-separator) - (std11-field-end) - (let ((result (std11-unfold-string - (buffer-substring (point-min) (point))))) - (if (member result dsts) t result)))) - -(defun encode-test (src dsts &rest opts) - (setq eword-lexical-analyze-cache nil) - (setq eword-decode-sticked-encoded-word nil) - (setq eword-decode-quoted-encoded-word nil) - (with-temp-buffer - (insert src "\n" mail-header-separator) - (goto-char (point-min)) - (eword-encode-header 'us-ascii) - (goto-char (point-min)) - (std11-narrow-to-header mail-header-separator) - (std11-field-end) - (let ((result (buffer-substring (point-min) (point)))) - (if (member result dsts) t result)))) -) - -;;; EW -(progn -(require 'ew-dec) -(require 'ew-line) - -(defun decode-test (src dsts &rest opts) - (let ((ew-decode-quoted-encoded-word nil) - (ew-ignore-75bytes-limit (memq 'ignore-75bytes-limit opts)) - (ew-ignore-76bytes-limit (memq 'ignore-76bytes-limit opts)) - (ew-permit-sticked-comment (memq 'permit-sticked-comment opts)) - (ew-permit-sticked-special (memq 'permit-sticked-special opts))) - (string-match "\\`[^:]*:" src) - (let* ((field-name (substring src - (match-beginning 0) - (1- (match-end 0)))) - (field-body (substring src (match-end 0))) - (result (ew-crlf-unfold - (concat field-name ":" - (ew-decode-field field-name field-body))))) - (if (member result dsts) t result)))) - -(defun encode-test (src dsts &rest opts) - nil) +(defvar target 'doodle) +(cond + ((eq target 'flim) ; FLIM or FLAM + (require 'mime) + (require 'ew-line) + + (if (< max-specpdl-size 1000) + (setq max-specpdl-size 1000)) + + (defun decode-test (src dsts &rest opts) + (setq src (ew-crlf-to-lf src)) + (setq eword-lexical-analyze-cache nil) + (setq eword-decode-sticked-encoded-word + (or (memq 'permit-sticked-comment opts) + (memq 'permit-sticked-special opts))) + (setq eword-decode-quoted-encoded-word nil) + (with-temp-buffer + (insert src "\n" mail-header-separator) + (eword-decode-header 'us-ascii mail-header-separator) + (goto-char (point-min)) + (std11-narrow-to-header mail-header-separator) + (std11-field-end) + (let ((result (std11-unfold-string + (buffer-substring (point-min) (point))))) + (if (member result dsts) t result)))) + + (defun encode-test (src dsts &rest opts) + (setq eword-lexical-analyze-cache nil) + (setq eword-decode-sticked-encoded-word nil) + (setq eword-decode-quoted-encoded-word nil) + (with-temp-buffer + (insert src "\n" mail-header-separator) + (goto-char (point-min)) + (eword-encode-header 'us-ascii) + (goto-char (point-min)) + (std11-narrow-to-header mail-header-separator) + (std11-field-end) + (let ((result (buffer-substring (point-min) (point)))) + (if (member result dsts) t result))))) + + ((eq target 'doodle) ; DOODLE + (require 'ew-dec) + (require 'ew-line) + + (defun decode-test (src dsts &rest opts) + (setq ew-decode-field-cache-buf nil) + (let ((ew-decode-sticked-encoded-word nil) + (ew-decode-quoted-encoded-word nil) + (ew-ignore-75bytes-limit (memq 'ignore-75bytes-limit opts)) + (ew-ignore-76bytes-limit (memq 'ignore-76bytes-limit opts)) + (ew-permit-sticked-comment (memq 'permit-sticked-comment opts)) + (ew-permit-sticked-special (memq 'permit-sticked-special opts))) + (string-match "\\`[^:]*:" src) + (let* ((field-name (substring src + (match-beginning 0) + (1- (match-end 0)))) + (field-body (substring src (match-end 0))) + (result (ew-crlf-unfold + (concat field-name ":" + (ew-decode-field field-name field-body))))) + (if (member result dsts) t result)))) + + (defun encode-test (src dsts &rest opts) + nil) + ) ) ;;; @@ -116,12 +119,14 @@ res)) (defun report () - (insert - (format "\n\"Decode: %d/%d Encode: %d/%d Total: %d/%d\"" - decode-succ-count decode-all-count - encode-succ-count encode-all-count - (+ decode-succ-count encode-succ-count) - (+ decode-all-count encode-all-count)))) + (let ((report (format "Decode: %d/%d Encode: %d/%d Total: %d/%d" + decode-succ-count decode-all-count + encode-succ-count encode-all-count + (+ decode-succ-count encode-succ-count) + (+ decode-all-count encode-all-count)))) + (if noninteractive + (princ (concat report "\n")) + (insert "\n\"" report "\"")))) ;;;start-test @@ -154,8 +159,8 @@ (decode "From: Nathaniel Borenstein \r - (=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=)" -"From: Nathaniel Borenstein (.HNmNeNlNy NoNa NiNlNhNtNp)")*B +\t(=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=)" +"From: Nathaniel Borenstein \t(.HNmNeNlNy NoNa NiNlNhNtNp)")*B (decode "From: foo@bar.baz (=?ISO-8859-1?Q?a?=)" @@ -175,7 +180,7 @@ (decode "From: foo@bar.baz (=?ISO-8859-1?Q?a?=\r - =?ISO-8859-1?Q?b?=)" +\t=?ISO-8859-1?Q?b?=)" "From: foo@bar.baz (ab)") (decode @@ -204,8 +209,8 @@ (decode "Subject: (=?ISO-8859-1?Q?a?=\r - =?ISO-8859-1?Q?b?=)" -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)") +\t=?ISO-8859-1?Q?b?=)" +"Subject: (=?ISO-8859-1?Q?a?=\t=?ISO-8859-1?Q?b?=)") (decode "Subject: (=?ISO-8859-1?Q?a_b?=)" @@ -234,7 +239,7 @@ (decode "From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyRCJCQbKEI=?=\r +\t=?ISO-2022-JP?B?GyRCJCQbKEI=?=\r " "From: $B$"$$(B ") @@ -406,13 +411,11 @@ (decode "Subject: =?Shift_JIS?B?gqA=?=" -"Subject: $B$"(B" -'quoted-encoded-word) +"Subject: $B$"(B") (decode "Subject: =?EUC-JP?B?pKI=?=" -"Subject: $B$"(B" -'quoted-encoded-word) +"Subject: $B$"(B") (decode "Subject: = =?ISO-2022-JP?B?GyRCJCIbKEI=?=" @@ -587,12 +590,7 @@ (decode "Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject:$B$"(B" -'permit-sticked-special) +"Subject:$B$"(B") ;;; Section 4: Decoding invalid inputs. @@ -1100,9 +1098,9 @@ =?ISO-2022-JP?B?GyRCJCgbKEI=?= " 'separate-sticked-special) -;;; Section 7: Using quoted-encoded-words. +;;; Section 7: Using embedded-encoded-words. ;; -;; quoted-encoded-word $BI=8=(B +;; embedded-encoded-word $BI=8=(B ;; ;; RFC2047 $B$N%G%3!<%@$O@x:_E*$K(B($B%G%3!<%I7k2L$G$J$/(B) encoded-word $B$=$N$b$N$r(B ;; $B=PNO$7$J$1$l$P$J$i$J$$$3$H$,$"$k!#(B @@ -1121,7 +1119,7 @@ ;; ;; =?US-ASCII?Q?=3D=3FUS-ASCII=3FQ=3Ftext=3F=3D?= ;; -;; $B%G%3!<%@$,C1$J$kJ8;zNs$r=PNO$9$k>l9g!"C1=c$K$d$k$H(B encoded-word $B$=$N$b$N$H(B +;; $B%G%3!<%@$,C1$J$kJ8;zNs$r=PNO$9$k>l9g!"C1=c$K$O(B encoded-word $B$=$N$b$N$H(B ;; encoded-word $B$N$h$&$K$_$($kJ8;zNs$r6hJL$G$-$J$$!#(B ;; $B$3$3$G$OJ8;zNsCf$G$=$l$i$r3Nl9g(B(0, 2, 4, ...): charset $B$N@hF,$N(B + $B$N?t$rH>J,$K$7$?J8;zNs(B -;; $B4q?t$N>l9g(B(1, 3, 5, ...): charset $B$N@hF,$N(B + $B$N?t$rH>J,(B($B>.?tE@0J2<(B -;; $B@Zl9g(B(0, 3, 6, ...): charset $B$N@hF,$N(B + $B$N?t$r(B +;; 1/3 $B$K$7$?J8;zNs(B +;; 3$B$rK!$H$7$F(B1$B$HEy$7$$>l9g(B(1, 4, 7, ...): charset $B$N@hF,$N(B + $B$N?t$r(B +;; 1/3 ($B>.?tE@0J2<@Zl9g(B(2, 5, 8, ...): charset $B$N@hF,$N(B + $B$N?t$r(B +;; 1/3 ($B>.?tE@0J2<@Zl9g!"4q?tHVL\$N$b$N$KBP$7$F>e5-$N%k!<%k$rE,MQ$9$k!#(B ;; -;; NOTE: + $B$r(B quoted-encoded-word $BI=8=$N(B quote $BJ8;z$H8F$V!#(B +;; NOTE: + $B$r(B embedded-encoded-word $BI=8=$N(B quote $BJ8;z$H8F$V!#(B ;; ;; NOTE: $B8=;~E@(B(1998/07/19)$B$G(B IANA $B$K$O(B + $B$r4^$`(B charset $B$O(B ;; $BEPO?$5$l$F$$$J$$$N$G!"$=$l$i$N(B charset $B$r;H$C$?(B @@ -1145,114 +1150,191 @@ ;; =?US-ASCII?Q?abcdef?= $B$H$$$&(Bencoded-word : =?+US-ASCII?Q?abcdef?= ;; ;; =?US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?US-ASCII?Q?abcdef?= -;; =?+US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?++US-ASCII?Q?abcdef?= -;; =?++US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?++++US-ASCII?Q?abcdef?= -;; =?+++US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?++++++US-ASCII?Q?abcdef?= +;; =?+US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?+++US-ASCII?Q?abcdef?= +;; =?++US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?++++++US-ASCII?Q?abcdef?= +;; =?+++US-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?+++++++++US-ASCII?Q?abcdef?= ;; =?US-ASCII+?Q?abcdef?= $B$H$$$&J8;zNs(B : =?US-ASCII+?Q?abcdef?= ;; =?U+S-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?U+S-ASCII?Q?abcdef?= ;; -;; NOTE: encoded-word $B$K8+$($kJ8;zNs$G(B + $B$,G\A}$5$l$k$N$O(B charset $B$N(B +;; =?US-ASCII?Q?abcdef? $B$H$$$&J8;zNs(B : =?++US-ASCII?Q?abcdef?= +;; =?+US-ASCII?Q?abcdef? $B$H$$$&J8;zNs(B : =?+++++US-ASCII?Q?abcdef?= +;; =?++US-ASCII?Q?abcdef? $B$H$$$&J8;zNs(B : =?++++++++US-ASCII?Q?abcdef?= +;; =?+++US-ASCII?Q?abcdef? $B$H$$$&J8;zNs(B : =?+++++++++++US-ASCII?Q?abcdef?= +;; +;; NOTE: encoded-word $B$K8+$($kJ8;zNs$G(B + $B$,(B 3$BG\A}$5$l$k$N$O(B charset $B$N(B ;; $B@hF,$@$1$G$"$j!"(Bencoding $B$d(B encoded-text $B$O$?$H$((B + $B$,F~$C$F$$$F$b(B ;; $BJQ2=$7$J$$!#$^$?!"(Bcharset $BCf$G$b(B $B@hF,0J30$N(B + $B$OJQ2=$7$J$$!#(B ;; +;; NOTE: charset $B$H(B encoding $B$K$O(B = $B$O4^$^$l$J$$$N$G(B 1$BJ8;z0J>e=E$J$k$3(B +;; $B$H$O$J$$!#(B +;; ;; rule 3: $BJ8;zNsA4BN$NFbMF$O!"(Brule 1 $B$H(B rule 2 $B$G2r$l$=$NJ8;zNs$=$N$b$N$rI=8=$9$k$,!"$=$l$i$rO"7k$7$?J8;zNs(B ;; =?+US-ASCII?Q?abcd?= $B$O(B abcd $B$H$$$&J8;zNs$rI=8=$9$k$3$H$K$J$j!"(B ;; $B$=$l$>$l$NFbMF$NO"7k$H$O$J$i$J$$!#(B ;; -;; $B$3$l$O$H$/$K(B Non ASCII $B3HD%(B RFC822 $B$NCf$K(B quoted-encoded-word $BI=8=$r(B +;; $B$3$l$O$H$/$K(B Non ASCII $B3HD%(B RFC822 $B$NCf$K(B embedded-encoded-word $BI=8=$r(B ;; $BKd$a9~$`$H$-$K5$$rIU$1$J$1$l$P$J$i$J$$!#(B($BKd$a9~$s$@7k2L$O@5$7$$(B -;; quoted-encoded-word $BI=8=$H$O$J$i$J$$$+$bCN$l$J$$!#(B) +;; embedded-encoded-word $BI=8=$H$O$J$i$J$$$+$bCN$l$J$$!#(B) (decode "Subject: =?Unknown-Charset?B?gqA=?=" "Subject: =?+Unknown-Charset?B?gqA=?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?US-ASCII?G?H4sIACqUszUAA8tIzcnJBwCGphA2BQAAAA==?=" "Subject: =?+US-ASCII?G?H4sIACqUszUAA8tIzcnJBwCGphA2BQAAAA==?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?US-ASCII?Unknown-Encoding?H4sIAGOUszUAAwtyczYyMDEHAEpvqpIHAAAA?=" "Subject: =?+US-ASCII?Unknown-Encoding?H4sIAGOUszUAAwtyczYyMDEHAEpvqpIHAAAA?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?ISO-2022-JP?G?H4sIAGiTszUAA5NWcVIBAhMtaQ0nAGLSaeEMAAAA?=\r =?ISO-2022-JP?G?H4sIAH6TszUAA5NWcVIxV3FTyVbxldZwAgAuIikKDgAAAA==?=" "Subject: =?+ISO-2022-JP?G?H4sIAGiTszUAA5NWcVIBAhMtaQ0nAGLSaeEMAAAA?==?+ISO-2022-JP?G?H4sIAH6TszUAA5NWcVIxV3FTyVbxldZwAgAuIikKDgAAAA==?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?Unknown-Charset?B?gqA=?= =?Unknown-Charset?B?gqA=?=" "Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?Unknown-Charset?B?gqA=?= =?Unknown-Charset?B?gqA=?=" "Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?Unknown-Charset?B?gqA=?=\r =?Unknown-Charset?B?gqA=?=" "Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?Unknown-Charset?B?gqA=?=\r - =?Unknown-Charset?B?gqA=?=" +\t=?Unknown-Charset?B?gqA=?=" "Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: a=?Unknown-Charset?B?gqA=?=" "Subject: a=?Unknown-Charset?B?gqA=?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?Unknown-Charset?B?gqA=?=b" "Subject: =?Unknown-Charset?B?gqA=?=b" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: a=?Unknown-Charset?B?gqA=?=b" "Subject: a=?Unknown-Charset?B?gqA=?=b" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: a =?Unknown-Charset?B?gqA=?= b" "Subject: a =?+Unknown-Charset?B?gqA=?= b" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?ISO-2022-JP?B?DQoNCg==?=" "Subject: =?+US-ASCII?Q?=0D=0A=0D=0A?=" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?US-ASCII?Q?a=0D=0A_b?=" "Subject: a b" -'quoted-encoded-word) +'embedded-encoded-word) (decode "Subject: =?US-ASCII?Q?a=0D=0Ab?=" "Subject: a=?+US-ASCII?Q?=0D=0A?=b" -'quoted-encoded-word) +'embedded-encoded-word) + +;;; Section 8: CR and LF. + +(decode +"From: akr@jaist.ac.jp (\r\\\n)" +"From: akr@jaist.ac.jp (\r\\\n)") + +(decode +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A?= =?US-ASCII?Q?a?=)" +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A?= a)") + +(decode +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A_?=)" +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A_?=)") + +(decode +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A=09?=)" +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A=09?=)") + +(decode +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A?= )" +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A?= )") + +(decode +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A?=\t)" +"From: akr@jaist.ac.jp (\r=?US-ASCII?Q?=0A?=\t)") + +(decode +"From: akr@jaist.ac.jp (\\\r\\\n)" +"From: akr@jaist.ac.jp (\\\r\\\n)") + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A?= =?US-ASCII?Q?a?=)" +"From: akr@jaist.ac.jp (=?+US-ASCII?Q?=0D=0A?=a)" +'embedded-encoded-word) + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0Aa?=)" +"From: akr@jaist.ac.jp (=?+US-ASCII?Q?=0D=0A?=a)" +'embedded-encoded-word) + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A_?=)" +"From: akr@jaist.ac.jp (\\ )") + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A=09?=)" +"From: akr@jaist.ac.jp (\\\t)") + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A?= )" +"From: akr@jaist.ac.jp (\\ )") + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A?=\t)" +"From: akr@jaist.ac.jp (\\\t)") + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A?=\r + =?US-ASCII?Q?=0D=0A?= =?US-ASCII?Q?a?=)" +"From: akr@jaist.ac.jp (=?+US-ASCII?Q?=0D=0A=0D=0A?=a)" +'embedded-encoded-word) + +(decode +"From: akr@jaist.ac.jp (\\\r=?US-ASCII?Q?=0A?=\r + =?US-ASCII?Q?=0D?=\\\n =?US-ASCII?Q?a?=)" +"From: akr@jaist.ac.jp (=?+US-ASCII?Q?=0D=0A?=\r\\ + a)" +'embedded-encoded-word) ;;;end-test