From cdaf8eec7af55399df541f5d194f4e4f2fa0906d Mon Sep 17 00:00:00 2001 From: tomo Date: Sun, 23 Aug 1998 01:37:40 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'unlabeled-1.7.2.37.2.25.2'. --- COLORS | 3179 ------------------------------------------------------- DOODLE-TIPS | 28 - DOODLE-VERSION | 88 -- FLIM-CFG | 52 - FLIM-ELS | 36 - FLIM-MK | 34 - FLIM-VERSION | 39 - Makefile | 54 - README.en | 120 --- TESTPAT | 1341 ----------------------- automata.el | 499 --------- closure.el | 66 -- digraph.el | 347 ------ ew-data.el | 171 --- ew-dec.el | 480 --------- ew-line.el | 334 ------ ew-parse.el | 796 -------------- ew-parse.scm | 182 ---- ew-quote.el | 193 ---- ew-scan-m.el | 174 --- ew-scan-s.el | 179 ---- ew-scan-u.el | 66 -- ew-unit.el | 81 -- ew-util.el | 19 - ew-var.el | 83 -- eword-decode.el | 813 -------------- eword-encode.el | 635 ----------- ftp.in | 17 - lalr-el.scm | 1623 ---------------------------- lex.el | 315 ------ lr-driver.el | 72 -- mailcap.el | 269 ----- mel-b.el | 362 ------- mel-dl.el | 143 --- mel-g.el | 120 --- mel-q.el | 338 ------ mel-u.el | 143 --- mel.el | 285 ----- mime-def.el | 326 ------ mime-en.sgml | 1267 ---------------------- mime-en.texi | 1474 -------------------------- mime-ja.sgml | 1278 ---------------------- mime-ja.texi | 1480 -------------------------- mime-lib.el | 31 - mime-parse.el | 270 ----- mime.el | 344 ------ mmbuffer.el | 194 ---- mmcooked.el | 75 -- natset.el | 296 ------ rx.el | 394 ------- std11.el | 836 --------------- 51 files changed, 22041 deletions(-) delete mode 100644 COLORS delete mode 100644 DOODLE-TIPS delete mode 100644 DOODLE-VERSION delete mode 100644 FLIM-CFG delete mode 100644 FLIM-ELS delete mode 100644 FLIM-MK delete mode 100644 FLIM-VERSION delete mode 100644 Makefile delete mode 100644 README.en delete mode 100644 TESTPAT delete mode 100644 automata.el delete mode 100644 closure.el delete mode 100644 digraph.el delete mode 100644 ew-data.el delete mode 100644 ew-dec.el delete mode 100644 ew-line.el delete mode 100644 ew-parse.el delete mode 100644 ew-parse.scm delete mode 100644 ew-quote.el delete mode 100644 ew-scan-m.el delete mode 100644 ew-scan-s.el delete mode 100644 ew-scan-u.el delete mode 100644 ew-unit.el delete mode 100644 ew-util.el delete mode 100644 ew-var.el delete mode 100644 eword-decode.el delete mode 100644 eword-encode.el delete mode 100644 ftp.in delete mode 100644 lalr-el.scm delete mode 100644 lex.el delete mode 100644 lr-driver.el delete mode 100644 mailcap.el delete mode 100644 mel-b.el delete mode 100644 mel-dl.el delete mode 100644 mel-g.el delete mode 100644 mel-q.el delete mode 100644 mel-u.el delete mode 100644 mel.el delete mode 100644 mime-def.el delete mode 100644 mime-en.sgml delete mode 100644 mime-en.texi delete mode 100644 mime-ja.sgml delete mode 100644 mime-ja.texi delete mode 100644 mime-lib.el delete mode 100644 mime-parse.el delete mode 100644 mime.el delete mode 100644 mmbuffer.el delete mode 100644 mmcooked.el delete mode 100644 natset.el delete mode 100644 rx.el delete mode 100644 std11.el diff --git a/COLORS b/COLORS deleted file mode 100644 index 909f80b..0000000 --- a/COLORS +++ /dev/null @@ -1,3179 +0,0 @@ -#V C H HVC xyY -9 6 97.5 2.5R9/6 CIExyY:0.3665/0.3183/0.7866 -9 6 0 5R9/6 CIExyY:0.3734/0.3256/0.7866 -9 6 2.5 7.5R9/6 CIExyY:0.3812/0.3348/0.7866 -9 6 5 10R9/6 CIExyY:0.388/0.3439/0.7866 -9 4 97.5 2.5R9/4 CIExyY:0.3445/0.3179/0.7866 -9 4 0 5R9/4 CIExyY:0.3495/0.3226/0.7866 -9 4 2.5 7.5R9/4 CIExyY:0.3551/0.3283/0.7866 -9 4 5 10R9/4 CIExyY:0.36/0.3348/0.7866 -9 2 97.5 2.5R9/2 CIExyY:0.322/0.3168/0.7866 -9 2 0 5R9/2 CIExyY:0.324/0.3188/0.7866 -9 2 2.5 7.5R9/2 CIExyY:0.3263/0.321/0.7866 -9 2 5 10R9/2 CIExyY:0.3284/0.3233/0.7866 -9 1 0 5R9/1 CIExyY:0.3148/0.3173/0.7866 -9 1 5 10R9/1 CIExyY:0.3165/0.3188/0.7866 -8 10 97.5 2.5R8/10 CIExyY:0.4125/0.316/0.591 -8 10 0 5R8/10 CIExyY:0.4249/0.327/0.591 -8 10 2.5 7.5R8/10 CIExyY:0.4388/0.3419/0.591 -8 10 5 10R8/10 CIExyY:0.449/0.3589/0.591 -8 8 97.5 2.5R8/8 CIExyY:0.39/0.3171/0.591 -8 8 0 5R8/8 CIExyY:0.4001/0.3263/0.591 -8 8 2.5 7.5R8/8 CIExyY:0.4118/0.3385/0.591 -8 8 5 10R8/8 CIExyY:0.4212/0.3526/0.591 -8 6 97.5 2.5R8/6 CIExyY:0.3671/0.3175/0.591 -8 6 0 5R8/6 CIExyY:0.3743/0.3248/0.591 -8 6 2.5 7.5R8/6 CIExyY:0.383/0.3335/0.591 -8 6 5 10R8/6 CIExyY:0.391/0.3442/0.591 -8 4 97.5 2.5R8/4 CIExyY:0.346/0.3177/0.591 -8 4 0 5R8/4 CIExyY:0.351/0.3224/0.591 -8 4 2.5 7.5R8/4 CIExyY:0.3564/0.3279/0.591 -8 4 5 10R8/4 CIExyY:0.3621/0.3349/0.591 -8 3 97.5 2.5R8/3 CIExyY:0.3343/0.3174/0.591 -8 3 0 5R8/3 CIExyY:0.3377/0.3205/0.591 -8 3 2.5 7.5R8/3 CIExyY:0.3415/0.3244/0.591 -8 3 5 10R8/3 CIExyY:0.3455/0.3292/0.591 -8 2 97.5 2.5R8/2 CIExyY:0.3236/0.3169/0.591 -8 2 0 5R8/2 CIExyY:0.3254/0.3186/0.591 -8 2 2.5 7.5R8/2 CIExyY:0.3277/0.3211/0.591 -8 2 5 10R8/2 CIExyY:0.3301/0.3237/0.591 -8 1 0 5R8/1 CIExyY:0.3157/0.3171/0.591 -8 1 5 10R8/1 CIExyY:0.3177/0.3192/0.591 -7 16 97.5 2.5R7/16 CIExyY:0.4885/0.3039/0.4306 -7 16 2.5 7.5R7/16 CIExyY:0.5341/0.3452/0.4306 -7 16 5 10R7/16 CIExyY:0.5519/0.3729/0.4306 -7 14 97.5 2.5R7/14 CIExyY:0.466/0.3082/0.4306 -7 14 0 5R7/14 CIExyY:0.4848/0.3238/0.4306 -7 14 2.5 7.5R7/14 CIExyY:0.5059/0.345/0.4306 -7 14 5 10R7/14 CIExyY:0.5234/0.37/0.4306 -7 12 97.5 2.5R7/12 CIExyY:0.4435/0.3119/0.4306 -7 12 0 5R7/12 CIExyY:0.4595/0.3252/0.4306 -7 12 2.5 7.5R7/12 CIExyY:0.4777/0.3435/0.4306 -7 12 5 10R7/12 CIExyY:0.493/0.3659/0.4306 -7 10 97.5 2.5R7/10 CIExyY:0.4183/0.3144/0.4306 -7 10 0 5R7/10 CIExyY:0.432/0.326/0.4306 -7 10 2.5 7.5R7/10 CIExyY:0.447/0.3413/0.4306 -7 10 5 10R7/10 CIExyY:0.46/0.3596/0.4306 -7 8 97.5 2.5R7/8 CIExyY:0.3961/0.316/0.4306 -7 8 0 5R7/8 CIExyY:0.4067/0.3256/0.4306 -7 8 2.5 7.5R7/8 CIExyY:0.4196/0.3382/0.4306 -7 8 5 10R7/8 CIExyY:0.4308/0.3533/0.4306 -7 6 97.5 2.5R7/6 CIExyY:0.3728/0.317/0.4306 -7 6 0 5R7/6 CIExyY:0.3805/0.3244/0.4306 -7 6 2.5 7.5R7/6 CIExyY:0.3888/0.3336/0.4306 -7 6 5 10R7/6 CIExyY:0.3984/0.3452/0.4306 -7 4 97.5 2.5R7/4 CIExyY:0.3499/0.3171/0.4306 -7 4 0 5R7/4 CIExyY:0.3552/0.3222/0.4306 -7 4 2.5 7.5R7/4 CIExyY:0.3611/0.3282/0.4306 -7 4 5 10R7/4 CIExyY:0.3671/0.336/0.4306 -7 3 97.5 2.5R7/3 CIExyY:0.3389/0.3171/0.4306 -7 3 0 5R7/3 CIExyY:0.3426/0.3206/0.4306 -7 3 2.5 7.5R7/3 CIExyY:0.347/0.3251/0.4306 -7 3 5 10R7/3 CIExyY:0.3512/0.3306/0.4306 -7 2 97.5 2.5R7/2 CIExyY:0.3284/0.317/0.4306 -7 2 0 5R7/2 CIExyY:0.3306/0.319/0.4306 -7 2 2.5 7.5R7/2 CIExyY:0.3335/0.322/0.4306 -7 2 5 10R7/2 CIExyY:0.336/0.3253/0.4306 -7 1 0 5R7/1 CIExyY:0.3196/0.3175/0.4306 -7 1 5 10R7/1 CIExyY:0.3221/0.3204/0.4306 -6 18 97.5 2.5R6/18 CIExyY:0.5262/0.2928/0.3005 -6 18 0 5R6/18 CIExyY:0.5552/0.3138/0.3005 -6 18 2.5 7.5R6/18 CIExyY:0.5829/0.3396/0.3005 -6 18 5 10R6/18 CIExyY:0.6009/0.372/0.3005 -6 16 97.5 2.5R6/16 CIExyY:0.5041/0.2983/0.3005 -6 16 0 5R6/16 CIExyY:0.5297/0.3179/0.3005 -6 16 2.5 7.5R6/16 CIExyY:0.556/0.342/0.3005 -6 16 5 10R6/16 CIExyY:0.5741/0.3713/0.3005 -6 14 97.5 2.5R6/14 CIExyY:0.479/0.3041/0.3005 -6 14 0 5R6/14 CIExyY:0.502/0.3212/0.3005 -6 14 2.5 7.5R6/14 CIExyY:0.5265/0.3431/0.3005 -6 14 5 10R6/14 CIExyY:0.5468/0.3697/0.3005 -6 12 97.5 2.5R6/12 CIExyY:0.4568/0.3082/0.3005 -6 12 0 5R6/12 CIExyY:0.476/0.3234/0.3005 -6 12 2.5 7.5R6/12 CIExyY:0.4961/0.3428/0.3005 -6 12 5 10R6/12 CIExyY:0.515/0.3667/0.3005 -6 10 97.5 2.5R6/10 CIExyY:0.432/0.3118/0.3005 -6 10 0 5R6/10 CIExyY:0.448/0.325/0.3005 -6 10 2.5 7.5R6/10 CIExyY:0.4655/0.3412/0.3005 -6 10 5 10R6/10 CIExyY:0.4812/0.3619/0.3005 -6 8 97.5 2.5R6/8 CIExyY:0.4065/0.3144/0.3005 -6 8 0 5R6/8 CIExyY:0.4187/0.3251/0.3005 -6 8 2.5 7.5R6/8 CIExyY:0.4318/0.3383/0.3005 -6 8 5 10R6/8 CIExyY:0.4449/0.355/0.3005 -6 6 97.5 2.5R6/6 CIExyY:0.3832/0.3158/0.3005 -6 6 0 5R6/6 CIExyY:0.3921/0.3244/0.3005 -6 6 2.5 7.5R6/6 CIExyY:0.4/0.334/0.3005 -6 6 5 10R6/6 CIExyY:0.4103/0.3473/0.3005 -6 4 97.5 2.5R6/4 CIExyY:0.3566/0.3163/0.3005 -6 4 0 5R6/4 CIExyY:0.3628/0.3221/0.3005 -6 4 2.5 7.5R6/4 CIExyY:0.3692/0.3291/0.3005 -6 4 5 10R6/4 CIExyY:0.3768/0.3381/0.3005 -6 3 97.5 2.5R6/3 CIExyY:0.3439/0.3165/0.3005 -6 3 0 5R6/3 CIExyY:0.3482/0.3206/0.3005 -6 3 2.5 7.5R6/3 CIExyY:0.3535/0.3261/0.3005 -6 3 5 10R6/3 CIExyY:0.3591/0.3325/0.3005 -6 2 97.5 2.5R6/2 CIExyY:0.3318/0.3166/0.3005 -6 2 0 5R6/2 CIExyY:0.3343/0.319/0.3005 -6 2 2.5 7.5R6/2 CIExyY:0.3381/0.3228/0.3005 -6 2 5 10R6/2 CIExyY:0.3417/0.3268/0.3005 -6 1 0 5R6/1 CIExyY:0.3214/0.3175/0.3005 -6 1 5 10R6/1 CIExyY:0.3251/0.3213/0.3005 -5 20 97.5 2.5R5/20 CIExyY:0.5784/0.2719/0.1977 -5 20 0 5R5/20 CIExyY:0.6142/0.297/0.1977 -5 20 2.5 7.5R5/20 CIExyY:0.6388/0.3216/0.1977 -5 18 97.5 2.5R5/18 CIExyY:0.554/0.2804/0.1977 -5 18 0 5R5/18 CIExyY:0.5918/0.3033/0.1977 -5 18 2.5 7.5R5/18 CIExyY:0.6161/0.3277/0.1977 -5 18 5 10R5/18 CIExyY:0.6297/0.3642/0.1977 -5 16 97.5 2.5R5/16 CIExyY:0.53/0.288/0.1977 -5 16 0 5R5/16 CIExyY:0.5637/0.3102/0.1977 -5 16 2.5 7.5R5/16 CIExyY:0.5901/0.3331/0.1977 -5 16 5 10R5/16 CIExyY:0.6037/0.3657/0.1977 -5 14 97.5 2.5R5/14 CIExyY:0.5047/0.295/0.1977 -5 14 0 5R5/14 CIExyY:0.5341/0.3158/0.1977 -5 14 2.5 7.5R5/14 CIExyY:0.559/0.337/0.1977 -5 14 5 10R5/14 CIExyY:0.5771/0.3664/0.1977 -5 12 97.5 2.5R5/12 CIExyY:0.482/0.3002/0.1977 -5 12 0 5R5/12 CIExyY:0.5071/0.3194/0.1977 -5 12 2.5 7.5R5/12 CIExyY:0.528/0.3389/0.1977 -5 12 5 10R5/12 CIExyY:0.5481/0.366/0.1977 -5 10 97.5 2.5R5/10 CIExyY:0.4533/0.3058/0.1977 -5 10 0 5R5/10 CIExyY:0.4747/0.3227/0.1977 -5 10 2.5 7.5R5/10 CIExyY:0.4927/0.3399/0.1977 -5 10 5 10R5/10 CIExyY:0.5113/0.363/0.1977 -5 8 97.5 2.5R5/8 CIExyY:0.4252/0.3101/0.1977 -5 8 0 5R5/8 CIExyY:0.4413/0.324/0.1977 -5 8 2.5 7.5R5/8 CIExyY:0.4563/0.3387/0.1977 -5 8 5 10R5/8 CIExyY:0.4713/0.3575/0.1977 -5 6 97.5 2.5R5/6 CIExyY:0.396/0.313/0.1977 -5 6 0 5R5/6 CIExyY:0.4078/0.3238/0.1977 -5 6 2.5 7.5R5/6 CIExyY:0.418/0.3348/0.1977 -5 6 5 10R5/6 CIExyY:0.4299/0.3499/0.1977 -5 4 97.5 2.5R5/4 CIExyY:0.366/0.3148/0.1977 -5 4 0 5R5/4 CIExyY:0.374/0.322/0.1977 -5 4 2.5 7.5R5/4 CIExyY:0.3806/0.3294/0.1977 -5 4 5 10R5/4 CIExyY:0.3879/0.3398/0.1977 -5 3 97.5 2.5R5/3 CIExyY:0.3507/0.3154/0.1977 -5 3 0 5R5/3 CIExyY:0.3563/0.3207/0.1977 -5 3 2.5 7.5R5/3 CIExyY:0.3612/0.3262/0.1977 -5 3 5 10R5/3 CIExyY:0.3668/0.3339/0.1977 -5 2 97.5 2.5R5/2 CIExyY:0.336/0.3158/0.1977 -5 2 0 5R5/2 CIExyY:0.3392/0.3192/0.1977 -5 2 2.5 7.5R5/2 CIExyY:0.3425/0.3229/0.1977 -5 2 5 10R5/2 CIExyY:0.3465/0.3278/0.1977 -5 1 0 5R5/1 CIExyY:0.3235/0.3177/0.1977 -5 1 5 10R5/1 CIExyY:0.3274/0.3218/0.1977 -4 20 2.5 7.5R4/20 CIExyY:0.6806/0.2988/0.12 -4 18 97.5 2.5R4/18 CIExyY:0.5898/0.2622/0.12 -4 18 0 5R4/18 CIExyY:0.6329/0.2881/0.12 -4 18 2.5 7.5R4/18 CIExyY:0.6538/0.31/0.12 -4 16 97.5 2.5R4/16 CIExyY:0.562/0.2724/0.12 -4 16 0 5R4/16 CIExyY:0.6039/0.2978/0.12 -4 16 2.5 7.5R4/16 CIExyY:0.626/0.3192/0.12 -4 16 5 10R4/16 CIExyY:0.6409/0.3533/0.12 -4 14 97.5 2.5R4/14 CIExyY:0.5369/0.281/0.12 -4 14 0 5R4/14 CIExyY:0.5734/0.3057/0.12 -4 14 2.5 7.5R4/14 CIExyY:0.5959/0.3269/0.12 -4 14 5 10R4/14 CIExyY:0.6154/0.3568/0.12 -4 12 97.5 2.5R4/12 CIExyY:0.5072/0.2897/0.12 -4 12 0 5R4/12 CIExyY:0.5385/0.3129/0.12 -4 12 2.5 7.5R4/12 CIExyY:0.5603/0.3321/0.12 -4 12 5 10R4/12 CIExyY:0.5801/0.3588/0.12 -4 10 97.5 2.5R4/10 CIExyY:0.4774/0.2969/0.12 -4 10 0 5R4/10 CIExyY:0.5043/0.3176/0.12 -4 10 2.5 7.5R4/10 CIExyY:0.5235/0.3351/0.12 -4 10 5 10R4/10 CIExyY:0.5418/0.358/0.12 -4 8 97.5 2.5R4/8 CIExyY:0.4472/0.3031/0.12 -4 8 0 5R4/8 CIExyY:0.469/0.3209/0.12 -4 8 2.5 7.5R4/8 CIExyY:0.485/0.3359/0.12 -4 8 5 10R4/8 CIExyY:0.4995/0.3557/0.12 -4 6 97.5 2.5R4/6 CIExyY:0.4141/0.3085/0.12 -4 6 0 5R4/6 CIExyY:0.4299/0.3226/0.12 -4 6 2.5 7.5R4/6 CIExyY:0.4415/0.334/0.12 -4 6 5 10R4/6 CIExyY:0.4535/0.35/0.12 -4 4 97.5 2.5R4/4 CIExyY:0.3806/0.3125/0.12 -4 4 0 5R4/4 CIExyY:0.3916/0.3223/0.12 -4 4 2.5 7.5R4/4 CIExyY:0.399/0.33/0.12 -4 4 5 10R4/4 CIExyY:0.4078/0.3412/0.12 -4 3 97.5 2.5R4/3 CIExyY:0.3635/0.3139/0.12 -4 3 0 5R4/3 CIExyY:0.3713/0.3214/0.12 -4 3 2.5 7.5R4/3 CIExyY:0.3765/0.327/0.12 -4 3 5 10R4/3 CIExyY:0.3832/0.3356/0.12 -4 2 97.5 2.5R4/2 CIExyY:0.3461/0.315/0.12 -4 2 0 5R4/2 CIExyY:0.3508/0.32/0.12 -4 2 2.5 7.5R4/2 CIExyY:0.3538/0.3236/0.12 -4 2 5 10R4/2 CIExyY:0.3582/0.3294/0.12 -4 1 0 5R4/1 CIExyY:0.3303/0.3183/0.12 -4 1 5 10R4/1 CIExyY:0.3336/0.3229/0.12 -3 16 97.5 2.5R3/16 CIExyY:0.6116/0.2456/0.06555 -3 16 0 5R3/16 CIExyY:0.652/0.266/0.06555 -3 16 2.5 7.5R3/16 CIExyY:0.6817/0.2872/0.06555 -3 14 97.5 2.5R3/14 CIExyY:0.5828/0.2579/0.06555 -3 14 0 5R3/14 CIExyY:0.6204/0.2789/0.06555 -3 14 2.5 7.5R3/14 CIExyY:0.6492/0.3012/0.06555 -3 14 5 10R3/14 CIExyY:0.6703/0.3249/0.06555 -3 12 97.5 2.5R3/12 CIExyY:0.5536/0.2691/0.06555 -3 12 0 5R3/12 CIExyY:0.5884/0.2904/0.06555 -3 12 2.5 7.5R3/12 CIExyY:0.6158/0.3129/0.06555 -3 12 5 10R3/12 CIExyY:0.6322/0.3361/0.06555 -3 10 97.5 2.5R3/10 CIExyY:0.5191/0.2811/0.06555 -3 10 0 5R3/10 CIExyY:0.55/0.3024/0.06555 -3 10 2.5 7.5R3/10 CIExyY:0.573/0.324/0.06555 -3 10 5 10R3/10 CIExyY:0.5871/0.344/0.06555 -3 8 97.5 2.5R3/8 CIExyY:0.4821/0.2918/0.06555 -3 8 0 5R3/8 CIExyY:0.5064/0.3114/0.06555 -3 8 2.5 7.5R3/8 CIExyY:0.5251/0.3297/0.06555 -3 8 5 10R3/8 CIExyY:0.5393/0.3477/0.06555 -3 6 97.5 2.5R3/6 CIExyY:0.4409/0.3009/0.06555 -3 6 0 5R3/6 CIExyY:0.4592/0.3168/0.06555 -3 6 2.5 7.5R3/6 CIExyY:0.4738/0.3316/0.06555 -3 6 5 10R3/6 CIExyY:0.4854/0.3467/0.06555 -3 4 97.5 2.5R3/4 CIExyY:0.4021/0.3076/0.06555 -3 4 0 5R3/4 CIExyY:0.4148/0.319/0.06555 -3 4 2.5 7.5R3/4 CIExyY:0.424/0.3302/0.06555 -3 4 5 10R3/4 CIExyY:0.4308/0.3412/0.06555 -3 3 97.5 2.5R3/3 CIExyY:0.3812/0.3105/0.06555 -3 3 0 5R3/3 CIExyY:0.3903/0.3193/0.06555 -3 3 2.5 7.5R3/3 CIExyY:0.3971/0.3279/0.06555 -3 3 5 10R3/3 CIExyY:0.4023/0.3369/0.06555 -3 2 97.5 2.5R3/2 CIExyY:0.3591/0.313/0.06555 -3 2 0 5R3/2 CIExyY:0.3645/0.319/0.06555 -3 2 2.5 7.5R3/2 CIExyY:0.369/0.3248/0.06555 -3 2 5 10R3/2 CIExyY:0.3728/0.3314/0.06555 -3 1 0 5R3/1 CIExyY:0.3377/0.318/0.06555 -3 1 5 10R3/1 CIExyY:0.3421/0.3246/0.06555 -2 14 97.5 2.5R2/14 CIExyY:0.5734/0.2083/0.03126 -2 14 0 5R2/14 CIExyY:0.6302/0.2287/0.03126 -2 14 2.5 7.5R2/14 CIExyY:0.6791/0.252/0.03126 -2 14 5 10R2/14 CIExyY:0.7165/0.2734/0.03126 -2 12 97.5 2.5R2/12 CIExyY:0.5438/0.2254/0.03126 -2 12 0 5R2/12 CIExyY:0.593/0.2465/0.03126 -2 12 2.5 7.5R2/12 CIExyY:0.6392/0.2704/0.03126 -2 12 5 10R2/12 CIExyY:0.6732/0.2937/0.03126 -2 10 97.5 2.5R2/10 CIExyY:0.5122/0.2428/0.03126 -2 10 0 5R2/10 CIExyY:0.5557/0.2633/0.03126 -2 10 2.5 7.5R2/10 CIExyY:0.5952/0.2874/0.03126 -2 10 5 10R2/10 CIExyY:0.6247/0.312/0.03126 -2 8 97.5 2.5R2/8 CIExyY:0.4776/0.2593/0.03126 -2 8 0 5R2/8 CIExyY:0.5143/0.28/0.03126 -2 8 2.5 7.5R2/8 CIExyY:0.5433/0.3027/0.03126 -2 8 5 10R2/8 CIExyY:0.5713/0.3259/0.03126 -2 6 97.5 2.5R2/6 CIExyY:0.439/0.276/0.03126 -2 6 0 5R2/6 CIExyY:0.4642/0.2934/0.03126 -2 6 2.5 7.5R2/6 CIExyY:0.4875/0.3123/0.03126 -2 6 5 10R2/6 CIExyY:0.5095/0.3331/0.03126 -2 4 97.5 2.5R2/4 CIExyY:0.4021/0.29/0.03126 -2 4 0 5R2/4 CIExyY:0.4184/0.3032/0.03126 -2 4 2.5 7.5R2/4 CIExyY:0.4335/0.3169/0.03126 -2 4 5 10R2/4 CIExyY:0.4481/0.333/0.03126 -2 3 97.5 2.5R2/3 CIExyY:0.3827/0.2967/0.03126 -2 3 0 5R2/3 CIExyY:0.3946/0.3074/0.03126 -2 3 2.5 7.5R2/3 CIExyY:0.405/0.3179/0.03126 -2 3 5 10R2/3 CIExyY:0.4152/0.3309/0.03126 -2 2 97.5 2.5R2/2 CIExyY:0.3614/0.3033/0.03126 -2 2 0 5R2/2 CIExyY:0.3692/0.3111/0.03126 -2 2 2.5 7.5R2/2 CIExyY:0.3751/0.3181/0.03126 -2 2 5 10R2/2 CIExyY:0.3811/0.3274/0.03126 -2 1 0 5R2/1 CIExyY:0.3413/0.3141/0.03126 -2 1 5 10R2/1 CIExyY:0.346/0.3225/0.03126 -1 10 97.5 2.5R1/10 CIExyY:0.5058/0.19/0.0121 -1 10 0 5R1/10 CIExyY:0.5604/0.21/0.0121 -1 10 2.5 7.5R1/10 CIExyY:0.6111/0.229/0.0121 -1 10 5 10R1/10 CIExyY:0.6661/0.2499/0.0121 -1 8 97.5 2.5R1/8 CIExyY:0.4812/0.2103/0.0121 -1 8 0 5R1/8 CIExyY:0.5282/0.2297/0.0121 -1 8 2.5 7.5R1/8 CIExyY:0.5722/0.2487/0.0121 -1 8 5 10R1/8 CIExyY:0.6178/0.2713/0.0121 -1 6 97.5 2.5R1/6 CIExyY:0.4515/0.2329/0.0121 -1 6 0 5R1/6 CIExyY:0.4885/0.2515/0.0121 -1 6 2.5 7.5R1/6 CIExyY:0.5235/0.2698/0.0121 -1 6 5 10R1/6 CIExyY:0.5584/0.2921/0.0121 -1 4 97.5 2.5R1/4 CIExyY:0.4166/0.2569/0.0121 -1 4 0 5R1/4 CIExyY:0.442/0.2728/0.0121 -1 4 2.5 7.5R1/4 CIExyY:0.466/0.2888/0.0121 -1 4 5 10R1/4 CIExyY:0.4933/0.3068/0.0121 -1 2 97.5 2.5R1/2 CIExyY:0.3768/0.2816/0.0121 -1 2 0 5R1/2 CIExyY:0.3908/0.2929/0.0121 -1 2 2.5 7.5R1/2 CIExyY:0.402/0.3034/0.0121 -1 2 5 10R1/2 CIExyY:0.4128/0.3154/0.0121 -9 8 12.5 7.5YR9/8 CIExyY:0.422/0.393/0.7866 -9 8 15 10YR9/8 CIExyY:0.4199/0.4069/0.7866 -9 6 7.5 2.5YR9/6 CIExyY:0.3927/0.355/0.7866 -9 6 10 5YR9/6 CIExyY:0.3948/0.3659/0.7866 -9 6 12.5 7.5YR9/6 CIExyY:0.395/0.3763/0.7866 -9 6 15 10YR9/6 CIExyY:0.3941/0.3877/0.7866 -9 4 7.5 2.5YR9/4 CIExyY:0.3641/0.3422/0.7866 -9 4 10 5YR9/4 CIExyY:0.3668/0.3509/0.7866 -9 4 12.5 7.5YR9/4 CIExyY:0.3679/0.3585/0.7866 -9 4 15 10YR9/4 CIExyY:0.3677/0.3668/0.7866 -9 3 15 10YR9/3 CIExyY:0.3536/0.3553/0.7866 -9 2 7.5 2.5YR9/2 CIExyY:0.332/0.3273/0.7866 -9 2 10 5YR9/2 CIExyY:0.3353/0.3325/0.7866 -9 2 12.5 7.5YR9/2 CIExyY:0.338/0.3377/0.7866 -9 2 15 10YR9/2 CIExyY:0.3392/0.343/0.7866 -9 1 10 5YR9/1 CIExyY:0.3213/0.3238/0.7866 -9 1 15 10YR9/1 CIExyY:0.3246/0.33/0.7866 -8 20 12.5 7.5YR8/20 CIExyY:0.5391/0.4518/0.591 -8 20 15 10YR8/20 CIExyY:0.5245/0.4709/0.591 -8 18 12.5 7.5YR8/18 CIExyY:0.5316/0.448/0.591 -8 18 15 10YR8/18 CIExyY:0.5179/0.467/0.591 -8 16 12.5 7.5YR8/16 CIExyY:0.5195/0.4424/0.591 -8 16 15 10YR8/16 CIExyY:0.5079/0.4613/0.591 -8 14 10 5YR8/14 CIExyY:0.5088/0.4145/0.591 -8 14 12.5 7.5YR8/14 CIExyY:0.5025/0.4338/0.591 -8 14 15 10YR8/14 CIExyY:0.494/0.453/0.591 -8 12 7.5 2.5YR8/12 CIExyY:0.4852/0.3847/0.591 -8 12 10 5YR8/12 CIExyY:0.4849/0.405/0.591 -8 12 12.5 7.5YR8/12 CIExyY:0.4816/0.4232/0.591 -8 12 15 10YR8/12 CIExyY:0.4753/0.4414/0.591 -8 10 7.5 2.5YR8/10 CIExyY:0.4552/0.3761/0.591 -8 10 10 5YR8/10 CIExyY:0.4576/0.3938/0.591 -8 10 12.5 7.5YR8/10 CIExyY:0.4568/0.41/0.591 -8 10 15 10YR8/10 CIExyY:0.4527/0.4268/0.591 -8 8 7.5 2.5YR8/8 CIExyY:0.4275/0.3662/0.591 -8 8 10 5YR8/8 CIExyY:0.431/0.382/0.591 -8 8 12.5 7.5YR8/8 CIExyY:0.4306/0.3952/0.591 -8 8 15 10YR8/8 CIExyY:0.428/0.4102/0.591 -8 6 7.5 2.5YR8/6 CIExyY:0.396/0.3547/0.591 -8 6 10 5YR8/6 CIExyY:0.3988/0.3663/0.591 -8 6 12.5 7.5YR8/6 CIExyY:0.4/0.377/0.591 -8 6 15 10YR8/6 CIExyY:0.3994/0.3896/0.591 -8 4 7.5 2.5YR8/4 CIExyY:0.3667/0.3429/0.591 -8 4 10 5YR8/4 CIExyY:0.369/0.351/0.591 -8 4 12.5 7.5YR8/4 CIExyY:0.3699/0.3586/0.591 -8 4 15 10YR8/4 CIExyY:0.3701/0.3674/0.591 -8 3 7.5 2.5YR8/3 CIExyY:0.3497/0.3352/0.591 -8 3 10 5YR8/3 CIExyY:0.353/0.3421/0.591 -8 3 12.5 7.5YR8/3 CIExyY:0.3547/0.3484/0.591 -8 3 15 10YR8/3 CIExyY:0.3555/0.3557/0.591 -8 2 7.5 2.5YR8/2 CIExyY:0.3334/0.3276/0.591 -8 2 10 5YR8/2 CIExyY:0.3373/0.333/0.591 -8 2 12.5 7.5YR8/2 CIExyY:0.3395/0.3379/0.591 -8 2 15 10YR8/2 CIExyY:0.3407/0.3434/0.591 -8 1 10 5YR8/1 CIExyY:0.3227/0.3242/0.591 -8 1 15 10YR8/1 CIExyY:0.3256/0.3303/0.591 -7 20 7.5 2.5YR7/20 CIExyY:0.5824/0.4046/0.4306 -7 20 10 5YR7/20 CIExyY:0.5657/0.4298/0.4306 -7 18 7.5 2.5YR7/18 CIExyY:0.5695/0.4024/0.4306 -7 18 10 5YR7/18 CIExyY:0.5564/0.4267/0.4306 -7 18 12.5 7.5YR7/18 CIExyY:0.5417/0.4492/0.4306 -7 18 15 10YR7/18 CIExyY:0.5276/0.47/0.4306 -7 16 7.5 2.5YR7/16 CIExyY:0.5522/0.3989/0.4306 -7 16 10 5YR7/16 CIExyY:0.5437/0.4228/0.4306 -7 16 12.5 7.5YR7/16 CIExyY:0.5319/0.4449/0.4306 -7 16 15 10YR7/16 CIExyY:0.5188/0.465/0.4306 -7 14 7.5 2.5YR7/14 CIExyY:0.5297/0.3938/0.4306 -7 14 10 5YR7/14 CIExyY:0.5252/0.4168/0.4306 -7 14 12.5 7.5YR7/14 CIExyY:0.5174/0.4381/0.4306 -7 14 15 10YR7/14 CIExyY:0.5074/0.4581/0.4306 -7 12 7.5 2.5YR7/12 CIExyY:0.5001/0.3861/0.4306 -7 12 10 5YR7/12 CIExyY:0.5007/0.4081/0.4306 -7 12 12.5 7.5YR7/12 CIExyY:0.497/0.4282/0.4306 -7 12 15 10YR7/12 CIExyY:0.49/0.448/0.4306 -7 10 7.5 2.5YR7/10 CIExyY:0.4671/0.3768/0.4306 -7 10 10 5YR7/10 CIExyY:0.4711/0.3972/0.4306 -7 10 12.5 7.5YR7/10 CIExyY:0.4704/0.4151/0.4306 -7 10 15 10YR7/10 CIExyY:0.4667/0.4335/0.4306 -7 8 7.5 2.5YR7/8 CIExyY:0.4371/0.3679/0.4306 -7 8 10 5YR7/8 CIExyY:0.4402/0.3842/0.4306 -7 8 12.5 7.5YR7/8 CIExyY:0.4415/0.3996/0.4306 -7 8 15 10YR7/8 CIExyY:0.4399/0.4164/0.4306 -7 6 7.5 2.5YR7/6 CIExyY:0.4053/0.357/0.4306 -7 6 10 5YR7/6 CIExyY:0.4091/0.3701/0.4306 -7 6 12.5 7.5YR7/6 CIExyY:0.4107/0.382/0.4306 -7 6 15 10YR7/6 CIExyY:0.4102/0.396/0.4306 -7 4 7.5 2.5YR7/4 CIExyY:0.3715/0.3439/0.4306 -7 4 10 5YR7/4 CIExyY:0.375/0.353/0.4306 -7 4 12.5 7.5YR7/4 CIExyY:0.3772/0.3613/0.4306 -7 4 15 10YR7/4 CIExyY:0.3778/0.3719/0.4306 -7 3 7.5 2.5YR7/3 CIExyY:0.3551/0.3369/0.4306 -7 3 10 5YR7/3 CIExyY:0.3584/0.344/0.4306 -7 3 12.5 7.5YR7/3 CIExyY:0.3605/0.3507/0.4306 -7 3 15 10YR7/3 CIExyY:0.3612/0.359/0.4306 -7 2 7.5 2.5YR7/2 CIExyY:0.3392/0.3298/0.4306 -7 2 10 5YR7/2 CIExyY:0.3421/0.3349/0.4306 -7 2 12.5 7.5YR7/2 CIExyY:0.3437/0.3397/0.4306 -7 2 15 10YR7/2 CIExyY:0.3443/0.3454/0.4306 -7 1 10 5YR7/1 CIExyY:0.326/0.3256/0.4306 -7 1 15 10YR7/1 CIExyY:0.3273/0.3312/0.4306 -6 18 7.5 2.5YR6/18 CIExyY:0.5879/0.4021/0.3005 -6 18 10 5YR6/18 CIExyY:0.5715/0.427/0.3005 -6 16 7.5 2.5YR6/16 CIExyY:0.5698/0.399/0.3005 -6 16 10 5YR6/16 CIExyY:0.5597/0.4239/0.3005 -6 16 12.5 7.5YR6/16 CIExyY:0.5468/0.4478/0.3005 -6 14 7.5 2.5YR6/14 CIExyY:0.5488/0.3947/0.3005 -6 14 10 5YR6/14 CIExyY:0.5423/0.4188/0.3005 -6 14 12.5 7.5YR6/14 CIExyY:0.532/0.4412/0.3005 -6 14 15 10YR6/14 CIExyY:0.52/0.4623/0.3005 -6 12 7.5 2.5YR6/12 CIExyY:0.5215/0.3887/0.3005 -6 12 10 5YR6/12 CIExyY:0.5199/0.4119/0.3005 -6 12 12.5 7.5YR6/12 CIExyY:0.5145/0.4331/0.3005 -6 12 15 10YR6/12 CIExyY:0.505/0.4536/0.3005 -6 10 7.5 2.5YR6/10 CIExyY:0.4891/0.3806/0.3005 -6 10 10 5YR6/10 CIExyY:0.4921/0.4022/0.3005 -6 10 12.5 7.5YR6/10 CIExyY:0.4904/0.422/0.3005 -6 10 15 10YR6/10 CIExyY:0.4843/0.4416/0.3005 -6 8 7.5 2.5YR6/8 CIExyY:0.4533/0.3708/0.3005 -6 8 10 5YR6/8 CIExyY:0.4592/0.39/0.3005 -6 8 12.5 7.5YR6/8 CIExyY:0.4596/0.4064/0.3005 -6 8 15 10YR6/8 CIExyY:0.457/0.4249/0.3005 -6 6 7.5 2.5YR6/6 CIExyY:0.418/0.36/0.3005 -6 6 10 5YR6/6 CIExyY:0.4229/0.375/0.3005 -6 6 12.5 7.5YR6/6 CIExyY:0.4242/0.3876/0.3005 -6 6 15 10YR6/6 CIExyY:0.424/0.403/0.3005 -6 4 7.5 2.5YR6/4 CIExyY:0.3806/0.3467/0.3005 -6 4 10 5YR6/4 CIExyY:0.384/0.3564/0.3005 -6 4 12.5 7.5YR6/4 CIExyY:0.386/0.3652/0.3005 -6 4 15 10YR6/4 CIExyY:0.3861/0.3767/0.3005 -6 3 7.5 2.5YR6/3 CIExyY:0.3628/0.3396/0.3005 -6 3 10 5YR6/3 CIExyY:0.3656/0.347/0.3005 -6 3 12.5 7.5YR6/3 CIExyY:0.3674/0.3539/0.3005 -6 3 15 10YR6/3 CIExyY:0.3677/0.3629/0.3005 -6 2 7.5 2.5YR6/2 CIExyY:0.3453/0.3321/0.3005 -6 2 10 5YR6/2 CIExyY:0.3474/0.3373/0.3005 -6 2 12.5 7.5YR6/2 CIExyY:0.3487/0.3421/0.3005 -6 2 15 10YR6/2 CIExyY:0.3491/0.3483/0.3005 -6 1 10 5YR6/1 CIExyY:0.329/0.3271/0.3005 -6 1 15 10YR6/1 CIExyY:0.33/0.3328/0.3005 -5 16 7.5 2.5YR5/16 CIExyY:0.5933/0.3989/0.1977 -5 14 7.5 2.5YR5/14 CIExyY:0.5731/0.3953/0.1977 -5 14 10 5YR5/14 CIExyY:0.5642/0.4201/0.1977 -5 14 12.5 7.5YR5/14 CIExyY:0.5506/0.445/0.1977 -5 12 7.5 2.5YR5/12 CIExyY:0.5482/0.3909/0.1977 -5 12 10 5YR5/12 CIExyY:0.5422/0.4141/0.1977 -5 12 12.5 7.5YR5/12 CIExyY:0.5335/0.4373/0.1977 -5 12 15 10YR5/12 CIExyY:0.5211/0.46/0.1977 -5 10 7.5 2.5YR5/10 CIExyY:0.5175/0.3844/0.1977 -5 10 10 5YR5/10 CIExyY:0.5161/0.4064/0.1977 -5 10 12.5 7.5YR5/10 CIExyY:0.5108/0.4276/0.1977 -5 10 15 10YR5/10 CIExyY:0.5025/0.4489/0.1977 -5 8 7.5 2.5YR5/8 CIExyY:0.4795/0.3758/0.1977 -5 8 10 5YR5/8 CIExyY:0.483/0.396/0.1977 -5 8 12.5 7.5YR5/8 CIExyY:0.482/0.4141/0.1977 -5 8 15 10YR5/8 CIExyY:0.477/0.4338/0.1977 -5 6 7.5 2.5YR5/6 CIExyY:0.4365/0.364/0.1977 -5 6 10 5YR5/6 CIExyY:0.442/0.3808/0.1977 -5 6 12.5 7.5YR5/6 CIExyY:0.444/0.3954/0.1977 -5 6 15 10YR5/6 CIExyY:0.4428/0.4128/0.1977 -5 4 7.5 2.5YR5/4 CIExyY:0.3925/0.3494/0.1977 -5 4 10 5YR5/4 CIExyY:0.3968/0.3614/0.1977 -5 4 12.5 7.5YR5/4 CIExyY:0.3991/0.3714/0.1977 -5 4 15 10YR5/4 CIExyY:0.3995/0.384/0.1977 -5 3 7.5 2.5YR5/3 CIExyY:0.3713/0.3417/0.1977 -5 3 10 5YR5/3 CIExyY:0.3748/0.3507/0.1977 -5 3 12.5 7.5YR5/3 CIExyY:0.3765/0.3582/0.1977 -5 3 15 10YR5/3 CIExyY:0.3771/0.3681/0.1977 -5 2 7.5 2.5YR5/2 CIExyY:0.3506/0.3337/0.1977 -5 2 10 5YR5/2 CIExyY:0.353/0.3395/0.1977 -5 2 12.5 7.5YR5/2 CIExyY:0.354/0.3445/0.1977 -5 2 15 10YR5/2 CIExyY:0.3546/0.3514/0.1977 -5 1 10 5YR5/1 CIExyY:0.3315/0.328/0.1977 -5 1 15 10YR5/1 CIExyY:0.3322/0.3341/0.1977 -4 12 7.5 2.5YR4/12 CIExyY:0.5809/0.391/0.12 -4 12 10 5YR4/12 CIExyY:0.5729/0.4169/0.12 -4 10 7.5 2.5YR4/10 CIExyY:0.5475/0.3856/0.12 -4 10 10 5YR4/10 CIExyY:0.5432/0.4097/0.12 -4 10 12.5 7.5YR4/10 CIExyY:0.5356/0.4342/0.12 -4 10 15 10YR4/10 CIExyY:0.525/0.4573/0.12 -4 8 7.5 2.5YR4/8 CIExyY:0.5071/0.3777/0.12 -4 8 10 5YR4/8 CIExyY:0.507/0.3994/0.12 -4 8 12.5 7.5YR4/8 CIExyY:0.5038/0.4204/0.12 -4 8 15 10YR4/8 CIExyY:0.4965/0.4414/0.12 -4 6 7.5 2.5YR4/6 CIExyY:0.4612/0.3674/0.12 -4 6 10 5YR4/6 CIExyY:0.4651/0.3859/0.12 -4 6 12.5 7.5YR4/6 CIExyY:0.4655/0.4029/0.12 -4 6 15 10YR4/6 CIExyY:0.4618/0.4213/0.12 -4 4 7.5 2.5YR4/4 CIExyY:0.4141/0.3539/0.12 -4 4 10 5YR4/4 CIExyY:0.4187/0.3679/0.12 -4 4 12.5 7.5YR4/4 CIExyY:0.4208/0.3809/0.12 -4 4 15 10YR4/4 CIExyY:0.4189/0.3948/0.12 -4 3 7.5 2.5YR4/3 CIExyY:0.3886/0.3457/0.12 -4 3 10 5YR4/3 CIExyY:0.3924/0.3567/0.12 -4 3 12.5 7.5YR4/3 CIExyY:0.3942/0.3664/0.12 -4 3 15 10YR4/3 CIExyY:0.3933/0.3779/0.12 -4 2 7.5 2.5YR4/2 CIExyY:0.3624/0.3367/0.12 -4 2 10 5YR4/2 CIExyY:0.3651/0.3442/0.12 -4 2 12.5 7.5YR4/2 CIExyY:0.3662/0.3504/0.12 -4 2 15 10YR4/2 CIExyY:0.366/0.359/0.12 -4 1 10 5YR4/1 CIExyY:0.3374/0.3307/0.12 -4 1 15 10YR4/1 CIExyY:0.338/0.3384/0.12 -3 10 7.5 2.5YR3/10 CIExyY:0.5941/0.3818/0.06555 -3 8 7.5 2.5YR3/8 CIExyY:0.5475/0.3771/0.06555 -3 8 10 5YR3/8 CIExyY:0.5456/0.404/0.06555 -3 8 12.5 7.5YR3/8 CIExyY:0.539/0.4306/0.06555 -3 8 15 10YR3/8 CIExyY:0.5305/0.4559/0.06555 -3 6 7.5 2.5YR3/6 CIExyY:0.4954/0.3692/0.06555 -3 6 10 5YR3/6 CIExyY:0.4966/0.3908/0.06555 -3 6 12.5 7.5YR3/6 CIExyY:0.493/0.4116/0.06555 -3 6 15 10YR3/6 CIExyY:0.4872/0.4326/0.06555 -3 4 7.5 2.5YR3/4 CIExyY:0.436/0.3563/0.06555 -3 4 10 5YR3/4 CIExyY:0.4376/0.3715/0.06555 -3 4 12.5 7.5YR3/4 CIExyY:0.4378/0.3865/0.06555 -3 4 15 10YR3/4 CIExyY:0.4341/0.4018/0.06555 -3 3 7.5 2.5YR3/3 CIExyY:0.4062/0.3483/0.06555 -3 3 10 5YR3/3 CIExyY:0.4079/0.3603/0.06555 -3 3 12.5 7.5YR3/3 CIExyY:0.4082/0.3715/0.06555 -3 3 15 10YR3/3 CIExyY:0.4051/0.3834/0.06555 -3 2 7.5 2.5YR3/2 CIExyY:0.3757/0.3391/0.06555 -3 2 10 5YR3/2 CIExyY:0.3771/0.3476/0.06555 -3 2 12.5 7.5YR3/2 CIExyY:0.3771/0.3549/0.06555 -3 2 15 10YR3/2 CIExyY:0.3747/0.363/0.06555 -3 1 10 5YR3/1 CIExyY:0.3447/0.333/0.06555 -3 1 15 10YR3/1 CIExyY:0.343/0.3406/0.06555 -2 8 7.5 2.5YR2/8 CIExyY:0.5995/0.359/0.03126 -2 6 7.5 2.5YR2/6 CIExyY:0.528/0.3581/0.03126 -2 6 10 5YR2/6 CIExyY:0.5426/0.3925/0.03126 -2 6 12.5 7.5YR2/6 CIExyY:0.5475/0.4271/0.03126 -2 4 7.5 2.5YR2/4 CIExyY:0.4598/0.3508/0.03126 -2 4 10 5YR2/4 CIExyY:0.4674/0.3738/0.03126 -2 4 12.5 7.5YR2/4 CIExyY:0.469/0.3964/0.03126 -2 4 15 10YR2/4 CIExyY:0.4676/0.4168/0.03126 -2 3 10 5YR2/3 CIExyY:0.4279/0.3615/0.03126 -2 3 12.5 7.5YR2/3 CIExyY:0.429/0.3785/0.03126 -2 2 7.5 2.5YR2/2 CIExyY:0.3852/0.3365/0.03126 -2 2 10 5YR2/2 CIExyY:0.388/0.3476/0.03126 -2 2 12.5 7.5YR2/2 CIExyY:0.3889/0.359/0.03126 -2 2 15 10YR2/2 CIExyY:0.3872/0.3688/0.03126 -2 1 10 5YR2/1 CIExyY:0.3485/0.3324/0.03126 -2 1 15 10YR2/1 CIExyY:0.3482/0.3431/0.03126 -1 8 7.5 2.5YR1/8 CIExyY:0.6721/0.3058/0.0121 -1 6 7.5 2.5YR1/6 CIExyY:0.6048/0.327/0.0121 -1 4 7.5 2.5YR1/4 CIExyY:0.5311/0.3371/0.0121 -1 4 10 5YR1/4 CIExyY:0.566/0.3795/0.0121 -1 2 7.5 2.5YR1/2 CIExyY:0.4258/0.3344/0.0121 -1 2 10 5YR1/2 CIExyY:0.4377/0.358/0.0121 -1 2 12.5 7.5YR1/2 CIExyY:0.443/0.3775/0.0121 -1 2 15 10YR1/2 CIExyY:0.4446/0.3982/0.0121 -9 20 20 5Y9/20 CIExyY:0.483/0.5092/0.7866 -9 18 20 5Y9/18 CIExyY:0.4782/0.5049/0.7866 -9 18 22.5 7.5Y9/18 CIExyY:0.4663/0.5188/0.7866 -9 18 25 10Y9/18 CIExyY:0.454/0.532/0.7866 -9 16 20 5Y9/16 CIExyY:0.4711/0.4977/0.7866 -9 16 22.5 7.5Y9/16 CIExyY:0.4595/0.5104/0.7866 -9 16 25 10Y9/16 CIExyY:0.4477/0.5225/0.7866 -9 14 20 5Y9/14 CIExyY:0.4602/0.4869/0.7866 -9 14 22.5 7.5Y9/14 CIExyY:0.4503/0.4993/0.7866 -9 14 25 10Y9/14 CIExyY:0.4393/0.5101/0.7866 -9 12 17.5 2.5Y9/12 CIExyY:0.4569/0.4527/0.7866 -9 12 20 5Y9/12 CIExyY:0.4455/0.4719/0.7866 -9 12 22.5 7.5Y9/12 CIExyY:0.4369/0.4829/0.7866 -9 12 25 10Y9/12 CIExyY:0.4271/0.492/0.7866 -9 10 17.5 2.5Y9/10 CIExyY:0.437/0.4369/0.7866 -9 10 20 5Y9/10 CIExyY:0.4275/0.4529/0.7866 -9 10 22.5 7.5Y9/10 CIExyY:0.4201/0.4622/0.7866 -9 10 25 10Y9/10 CIExyY:0.412/0.4694/0.7866 -9 8 17.5 2.5Y9/8 CIExyY:0.4154/0.4186/0.7866 -9 8 20 5Y9/8 CIExyY:0.408/0.4319/0.7866 -9 8 22.5 7.5Y9/8 CIExyY:0.4019/0.4392/0.7866 -9 8 25 10Y9/8 CIExyY:0.3957/0.445/0.7866 -9 6 17.5 2.5Y9/6 CIExyY:0.391/0.3972/0.7866 -9 6 20 5Y9/6 CIExyY:0.3858/0.4071/0.7866 -9 6 22.5 7.5Y9/6 CIExyY:0.3811/0.4123/0.7866 -9 6 25 10Y9/6 CIExyY:0.3761/0.4155/0.7866 -9 4 17.5 2.5Y9/4 CIExyY:0.3655/0.3738/0.7866 -9 4 20 5Y9/4 CIExyY:0.3621/0.3799/0.7866 -9 4 22.5 7.5Y9/4 CIExyY:0.3591/0.3832/0.7866 -9 4 25 10Y9/4 CIExyY:0.3558/0.3852/0.7866 -9 3 17.5 2.5Y9/3 CIExyY:0.3525/0.361/0.7866 -9 3 20 5Y9/3 CIExyY:0.3502/0.3656/0.7866 -9 3 22.5 7.5Y9/3 CIExyY:0.3481/0.3684/0.7866 -9 3 25 10Y9/3 CIExyY:0.3456/0.3699/0.7866 -9 2 17.5 2.5Y9/2 CIExyY:0.339/0.3472/0.7866 -9 2 20 5Y9/2 CIExyY:0.3378/0.3504/0.7866 -9 2 22.5 7.5Y9/2 CIExyY:0.3365/0.3527/0.7866 -9 2 25 10Y9/2 CIExyY:0.3349/0.3537/0.7866 -9 1 20 5Y9/1 CIExyY:0.3245/0.3341/0.7866 -9 1 25 10Y9/1 CIExyY:0.3232/0.336/0.7866 -8 20 17.5 2.5Y8/20 CIExyY:0.5091/0.49/0.591 -8 18 17.5 2.5Y8/18 CIExyY:0.5033/0.4855/0.591 -8 18 20 5Y8/18 CIExyY:0.4847/0.5069/0.591 -8 18 22.5 7.5Y8/18 CIExyY:0.4709/0.522/0.591 -8 18 25 10Y8/18 CIExyY:0.457/0.5366/0.591 -8 16 17.5 2.5Y8/16 CIExyY:0.4957/0.48/0.591 -8 16 20 5Y8/16 CIExyY:0.4791/0.5012/0.591 -8 16 22.5 7.5Y8/16 CIExyY:0.4658/0.5158/0.591 -8 16 25 10Y8/16 CIExyY:0.4525/0.5295/0.591 -8 14 17.5 2.5Y8/14 CIExyY:0.4842/0.4712/0.591 -8 14 20 5Y8/14 CIExyY:0.4699/0.492/0.591 -8 14 22.5 7.5Y8/14 CIExyY:0.4574/0.5062/0.591 -8 14 25 10Y8/14 CIExyY:0.445/0.5181/0.591 -8 12 17.5 2.5Y8/12 CIExyY:0.4678/0.4589/0.591 -8 12 20 5Y8/12 CIExyY:0.4562/0.4788/0.591 -8 12 22.5 7.5Y8/12 CIExyY:0.4455/0.4917/0.591 -8 12 25 10Y8/12 CIExyY:0.4341/0.502/0.591 -8 10 17.5 2.5Y8/10 CIExyY:0.4469/0.4423/0.591 -8 10 20 5Y8/10 CIExyY:0.4376/0.4601/0.591 -8 10 22.5 7.5Y8/10 CIExyY:0.4283/0.4712/0.591 -8 10 25 10Y8/10 CIExyY:0.419/0.4791/0.591 -8 8 17.5 2.5Y8/8 CIExyY:0.4231/0.4231/0.591 -8 8 20 5Y8/8 CIExyY:0.4158/0.4378/0.591 -8 8 22.5 7.5Y8/8 CIExyY:0.4088/0.4466/0.591 -8 8 25 10Y8/8 CIExyY:0.4008/0.452/0.591 -8 6 17.5 2.5Y8/6 CIExyY:0.3969/0.4009/0.591 -8 6 20 5Y8/6 CIExyY:0.3913/0.4117/0.591 -8 6 22.5 7.5Y8/6 CIExyY:0.3862/0.4175/0.591 -8 6 25 10Y8/6 CIExyY:0.3803/0.4216/0.591 -8 4 17.5 2.5Y8/4 CIExyY:0.3684/0.3751/0.591 -8 4 20 5Y8/4 CIExyY:0.365/0.3826/0.591 -8 4 22.5 7.5Y8/4 CIExyY:0.3622/0.3861/0.591 -8 4 25 10Y8/4 CIExyY:0.3581/0.3883/0.591 -8 3 17.5 2.5Y8/3 CIExyY:0.3546/0.3621/0.591 -8 3 20 5Y8/3 CIExyY:0.3524/0.3676/0.591 -8 3 22.5 7.5Y8/3 CIExyY:0.3503/0.3704/0.591 -8 3 25 10Y8/3 CIExyY:0.3472/0.3721/0.591 -8 2 17.5 2.5Y8/2 CIExyY:0.3406/0.3484/0.591 -8 2 20 5Y8/2 CIExyY:0.3394/0.3518/0.591 -8 2 22.5 7.5Y8/2 CIExyY:0.3379/0.354/0.591 -8 2 25 10Y8/2 CIExyY:0.3359/0.3552/0.591 -8 1 20 5Y8/1 CIExyY:0.3255/0.3348/0.591 -8 1 25 10Y8/1 CIExyY:0.3237/0.3369/0.591 -7 16 17.5 2.5Y7/16 CIExyY:0.5049/0.4843/0.4306 -7 16 20 5Y7/16 CIExyY:0.4875/0.5047/0.4306 -7 16 22.5 7.5Y7/16 CIExyY:0.4728/0.5215/0.4306 -7 16 25 10Y7/16 CIExyY:0.4582/0.5375/0.4306 -7 14 17.5 2.5Y7/14 CIExyY:0.495/0.4773/0.4306 -7 14 20 5Y7/14 CIExyY:0.4791/0.4965/0.4306 -7 14 22.5 7.5Y7/14 CIExyY:0.4652/0.5128/0.4306 -7 14 25 10Y7/14 CIExyY:0.4516/0.5277/0.4306 -7 12 17.5 2.5Y7/12 CIExyY:0.4806/0.4666/0.4306 -7 12 20 5Y7/12 CIExyY:0.4677/0.4857/0.4306 -7 12 22.5 7.5Y7/12 CIExyY:0.4547/0.5005/0.4306 -7 12 25 10Y7/12 CIExyY:0.442/0.5131/0.4306 -7 10 17.5 2.5Y7/10 CIExyY:0.4606/0.4516/0.4306 -7 10 20 5Y7/10 CIExyY:0.4509/0.4696/0.4306 -7 10 22.5 7.5Y7/10 CIExyY:0.44/0.483/0.4306 -7 10 25 10Y7/10 CIExyY:0.4289/0.4937/0.4306 -7 8 17.5 2.5Y7/8 CIExyY:0.4353/0.4312/0.4306 -7 8 20 5Y7/8 CIExyY:0.4271/0.4462/0.4306 -7 8 22.5 7.5Y7/8 CIExyY:0.4184/0.4568/0.4306 -7 8 25 10Y7/8 CIExyY:0.409/0.4641/0.4306 -7 6 17.5 2.5Y7/6 CIExyY:0.4073/0.4073/0.4306 -7 6 20 5Y7/6 CIExyY:0.4009/0.4198/0.4306 -7 6 22.5 7.5Y7/6 CIExyY:0.3943/0.4264/0.4306 -7 6 25 10Y7/6 CIExyY:0.3864/0.4305/0.4306 -7 4 17.5 2.5Y7/4 CIExyY:0.3761/0.38/0.4306 -7 4 20 5Y7/4 CIExyY:0.3718/0.3885/0.4306 -7 4 22.5 7.5Y7/4 CIExyY:0.3677/0.3925/0.4306 -7 4 25 10Y7/4 CIExyY:0.3624/0.3951/0.4306 -7 3 17.5 2.5Y7/3 CIExyY:0.36/0.3658/0.4306 -7 3 20 5Y7/3 CIExyY:0.357/0.3717/0.4306 -7 3 22.5 7.5Y7/3 CIExyY:0.3538/0.3745/0.4306 -7 3 25 10Y7/3 CIExyY:0.3498/0.3763/0.4306 -7 2 17.5 2.5Y7/2 CIExyY:0.3436/0.3507/0.4306 -7 2 20 5Y7/2 CIExyY:0.3419/0.354/0.4306 -7 2 22.5 7.5Y7/2 CIExyY:0.3396/0.3558/0.4306 -7 2 25 10Y7/2 CIExyY:0.3369/0.3569/0.4306 -7 1 20 5Y7/1 CIExyY:0.3263/0.3356/0.4306 -7 1 25 10Y7/1 CIExyY:0.3237/0.3369/0.4306 -6 14 17.5 2.5Y6/14 CIExyY:0.5061/0.4829/0.3005 -6 14 20 5Y6/14 CIExyY:0.4905/0.5038/0.3005 -6 14 22.5 7.5Y6/14 CIExyY:0.4754/0.522/0.3005 -6 14 25 10Y6/14 CIExyY:0.4593/0.5392/0.3005 -6 12 17.5 2.5Y6/12 CIExyY:0.4928/0.473/0.3005 -6 12 20 5Y6/12 CIExyY:0.478/0.492/0.3005 -6 12 22.5 7.5Y6/12 CIExyY:0.4638/0.5087/0.3005 -6 12 25 10Y6/12 CIExyY:0.4488/0.5237/0.3005 -6 10 17.5 2.5Y6/10 CIExyY:0.476/0.4607/0.3005 -6 10 20 5Y6/10 CIExyY:0.4639/0.479/0.3005 -6 10 22.5 7.5Y6/10 CIExyY:0.4512/0.4943/0.3005 -6 10 25 10Y6/10 CIExyY:0.4372/0.5068/0.3005 -6 8 17.5 2.5Y6/8 CIExyY:0.4517/0.4421/0.3005 -6 8 20 5Y6/8 CIExyY:0.4426/0.4588/0.3005 -6 8 22.5 7.5Y6/8 CIExyY:0.4321/0.4719/0.3005 -6 8 25 10Y6/8 CIExyY:0.4201/0.4812/0.3005 -6 6 17.5 2.5Y6/6 CIExyY:0.4203/0.4176/0.3005 -6 6 20 5Y6/6 CIExyY:0.414/0.4305/0.3005 -6 6 22.5 7.5Y6/6 CIExyY:0.406/0.44/0.3005 -6 6 25 10Y6/6 CIExyY:0.396/0.4452/0.3005 -6 4 17.5 2.5Y6/4 CIExyY:0.384/0.3867/0.3005 -6 4 20 5Y6/4 CIExyY:0.3794/0.3955/0.3005 -6 4 22.5 7.5Y6/4 CIExyY:0.3745/0.4004/0.3005 -6 4 25 10Y6/4 CIExyY:0.3679/0.4033/0.3005 -6 3 17.5 2.5Y6/3 CIExyY:0.3661/0.3708/0.3005 -6 3 20 5Y6/3 CIExyY:0.3626/0.3772/0.3005 -6 3 22.5 7.5Y6/3 CIExyY:0.3589/0.3805/0.3005 -6 3 25 10Y6/3 CIExyY:0.354/0.3824/0.3005 -6 2 17.5 2.5Y6/2 CIExyY:0.348/0.354/0.3005 -6 2 20 5Y6/2 CIExyY:0.3457/0.358/0.3005 -6 2 22.5 7.5Y6/2 CIExyY:0.3431/0.3601/0.3005 -6 2 25 10Y6/2 CIExyY:0.3398/0.3611/0.3005 -6 1 20 5Y6/1 CIExyY:0.3283/0.3378/0.3005 -6 1 25 10Y6/1 CIExyY:0.3252/0.3392/0.3005 -5 12 17.5 2.5Y5/12 CIExyY:0.5082/0.4812/0.1977 -5 12 20 5Y5/12 CIExyY:0.4931/0.5019/0.1977 -5 12 22.5 7.5Y5/12 CIExyY:0.4767/0.5208/0.1977 -5 12 25 10Y5/12 CIExyY:0.459/0.539/0.1977 -5 10 17.5 2.5Y5/10 CIExyY:0.4905/0.4683/0.1977 -5 10 20 5Y5/10 CIExyY:0.4777/0.4876/0.1977 -5 10 22.5 7.5Y5/10 CIExyY:0.4632/0.5057/0.1977 -5 10 25 10Y5/10 CIExyY:0.4468/0.5209/0.1977 -5 8 17.5 2.5Y5/8 CIExyY:0.4685/0.4524/0.1977 -5 8 20 5Y5/8 CIExyY:0.4579/0.4692/0.1977 -5 8 22.5 7.5Y5/8 CIExyY:0.445/0.485/0.1977 -5 8 25 10Y5/8 CIExyY:0.4307/0.4967/0.1977 -5 6 17.5 2.5Y5/6 CIExyY:0.438/0.4292/0.1977 -5 6 20 5Y5/6 CIExyY:0.4302/0.4435/0.1977 -5 6 22.5 7.5Y5/6 CIExyY:0.4199/0.4551/0.1977 -5 6 25 10Y5/6 CIExyY:0.4072/0.4621/0.1977 -5 4 17.5 2.5Y5/4 CIExyY:0.3968/0.3954/0.1977 -5 4 20 5Y5/4 CIExyY:0.3915/0.4057/0.1977 -5 4 22.5 7.5Y5/4 CIExyY:0.385/0.412/0.1977 -5 4 25 10Y5/4 CIExyY:0.3762/0.4158/0.1977 -5 3 17.5 2.5Y5/3 CIExyY:0.3752/0.3766/0.1977 -5 3 20 5Y5/3 CIExyY:0.3708/0.3843/0.1977 -5 3 22.5 7.5Y5/3 CIExyY:0.3661/0.3883/0.1977 -5 3 25 10Y5/3 CIExyY:0.3593/0.3904/0.1977 -5 2 17.5 2.5Y5/2 CIExyY:0.3534/0.357/0.1977 -5 2 20 5Y5/2 CIExyY:0.35/0.362/0.1977 -5 2 22.5 7.5Y5/2 CIExyY:0.347/0.364/0.1977 -5 2 25 10Y5/2 CIExyY:0.3422/0.3648/0.1977 -5 1 20 5Y5/1 CIExyY:0.3296/0.3392/0.1977 -5 1 25 10Y5/1 CIExyY:0.3256/0.3398/0.1977 -4 10 17.5 2.5Y4/10 CIExyY:0.512/0.48/0.12 -4 8 17.5 2.5Y4/8 CIExyY:0.4865/0.4625/0.12 -4 8 20 5Y4/8 CIExyY:0.4745/0.481/0.12 -4 8 22.5 7.5Y4/8 CIExyY:0.4595/0.499/0.12 -4 8 25 10Y4/8 CIExyY:0.443/0.5153/0.12 -4 6 17.5 2.5Y4/6 CIExyY:0.4542/0.4391/0.12 -4 6 20 5Y4/6 CIExyY:0.4451/0.455/0.12 -4 6 22.5 7.5Y4/6 CIExyY:0.4331/0.4688/0.12 -4 6 25 10Y4/6 CIExyY:0.419/0.4795/0.12 -4 4 17.5 2.5Y4/4 CIExyY:0.4138/0.4076/0.12 -4 4 20 5Y4/4 CIExyY:0.4069/0.4188/0.12 -4 4 22.5 7.5Y4/4 CIExyY:0.3982/0.4272/0.12 -4 4 25 10Y4/4 CIExyY:0.3871/0.4321/0.12 -4 3 17.5 2.5Y4/3 CIExyY:0.3893/0.3876/0.12 -4 3 20 5Y4/3 CIExyY:0.3836/0.3955/0.12 -4 3 22.5 7.5Y4/3 CIExyY:0.3768/0.4009/0.12 -4 3 25 10Y4/3 CIExyY:0.3677/0.4032/0.12 -4 2 17.5 2.5Y4/2 CIExyY:0.3633/0.3654/0.12 -4 2 20 5Y4/2 CIExyY:0.359/0.3701/0.12 -4 2 22.5 7.5Y4/2 CIExyY:0.3542/0.3727/0.12 -4 2 25 10Y4/2 CIExyY:0.3476/0.3731/0.12 -4 1 20 5Y4/1 CIExyY:0.3341/0.3434/0.12 -4 1 25 10Y4/1 CIExyY:0.328/0.3437/0.12 -3 6 17.5 2.5Y3/6 CIExyY:0.4784/0.4531/0.06555 -3 6 20 5Y3/6 CIExyY:0.467/0.4711/0.06555 -3 6 22.5 7.5Y3/6 CIExyY:0.4526/0.4889/0.06555 -3 6 25 10Y3/6 CIExyY:0.4345/0.5026/0.06555 -3 4 17.5 2.5Y3/4 CIExyY:0.4277/0.4166/0.06555 -3 4 20 5Y3/4 CIExyY:0.4191/0.4283/0.06555 -3 4 22.5 7.5Y3/4 CIExyY:0.4086/0.4379/0.06555 -3 4 25 10Y3/4 CIExyY:0.3961/0.4452/0.06555 -3 3 17.5 2.5Y3/3 CIExyY:0.3996/0.3944/0.06555 -3 3 20 5Y3/3 CIExyY:0.3923/0.4025/0.06555 -3 3 22.5 7.5Y3/3 CIExyY:0.3841/0.4085/0.06555 -3 3 25 10Y3/3 CIExyY:0.3739/0.4124/0.06555 -3 2 17.5 2.5Y3/2 CIExyY:0.3703/0.37/0.06555 -3 2 20 5Y3/2 CIExyY:0.3646/0.3748/0.06555 -3 2 22.5 7.5Y3/2 CIExyY:0.3589/0.3778/0.06555 -3 2 25 10Y3/2 CIExyY:0.3513/0.3789/0.06555 -3 1 20 5Y3/1 CIExyY:0.3369/0.3458/0.06555 -3 1 25 10Y3/1 CIExyY:0.3296/0.3464/0.06555 -2 4 17.5 2.5Y2/4 CIExyY:0.4627/0.4392/0.03126 -2 4 20 5Y2/4 CIExyY:0.4543/0.4573/0.03126 -2 4 22.5 7.5Y2/4 CIExyY:0.4401/0.4723/0.03126 -2 4 25 10Y2/4 CIExyY:0.4188/0.4789/0.03126 -2 2 17.5 2.5Y2/2 CIExyY:0.3825/0.3785/0.03126 -2 2 20 5Y2/2 CIExyY:0.3757/0.3839/0.03126 -2 2 22.5 7.5Y2/2 CIExyY:0.366/0.3858/0.03126 -2 2 25 10Y2/2 CIExyY:0.3556/0.3848/0.03126 -2 1 20 5Y2/1 CIExyY:0.3413/0.3494/0.03126 -2 1 25 10Y2/1 CIExyY:0.3306/0.3474/0.03126 -1 2 17.5 2.5Y1/2 CIExyY:0.4362/0.4177/0.0121 -1 2 20 5Y1/2 CIExyY:0.423/0.4265/0.0121 -1 2 22.5 7.5Y1/2 CIExyY:0.4042/0.4287/0.0121 -1 2 25 10Y1/2 CIExyY:0.3802/0.4212/0.0121 -9 18 27.5 2.5GY9/18 CIExyY:0.4354/0.5508/0.7866 -9 18 30 5GY9/18 CIExyY:0.4108/0.5699/0.7866 -9 18 32.5 7.5GY9/18 CIExyY:0.3602/0.592/0.7866 -9 18 35 10GY9/18 CIExyY:0.3032/0.5748/0.7866 -9 16 27.5 2.5GY9/16 CIExyY:0.4288/0.5383/0.7866 -9 16 30 5GY9/16 CIExyY:0.4058/0.5541/0.7866 -9 16 32.5 7.5GY9/16 CIExyY:0.3581/0.5654/0.7866 -9 16 35 10GY9/16 CIExyY:0.3079/0.544/0.7866 -9 14 27.5 2.5GY9/14 CIExyY:0.4212/0.5237/0.7866 -9 14 30 5GY9/14 CIExyY:0.3993/0.5329/0.7866 -9 14 32.5 7.5GY9/14 CIExyY:0.3551/0.5339/0.7866 -9 14 35 10GY9/14 CIExyY:0.3115/0.5129/0.7866 -9 12 27.5 2.5GY9/12 CIExyY:0.4108/0.5028/0.7866 -9 12 30 5GY9/12 CIExyY:0.3911/0.5082/0.7866 -9 12 32.5 7.5GY9/12 CIExyY:0.3518/0.5042/0.7866 -9 12 35 10GY9/12 CIExyY:0.3139/0.4829/0.7866 -9 10 27.5 2.5GY9/10 CIExyY:0.3973/0.4761/0.7866 -9 10 30 5GY9/10 CIExyY:0.381/0.4791/0.7866 -9 10 32.5 7.5GY9/10 CIExyY:0.3471/0.4735/0.7866 -9 10 35 10GY9/10 CIExyY:0.3155/0.4558/0.7866 -9 8 27.5 2.5GY9/8 CIExyY:0.3834/0.449/0.7866 -9 8 30 5GY9/8 CIExyY:0.3698/0.4497/0.7866 -9 8 32.5 7.5GY9/8 CIExyY:0.3414/0.4415/0.7866 -9 8 35 10GY9/8 CIExyY:0.3157/0.4259/0.7866 -9 6 27.5 2.5GY9/6 CIExyY:0.367/0.4178/0.7866 -9 6 30 5GY9/6 CIExyY:0.3572/0.4179/0.7866 -9 6 32.5 7.5GY9/6 CIExyY:0.3351/0.4111/0.7866 -9 6 35 10GY9/6 CIExyY:0.3153/0.4008/0.7866 -9 4 27.5 2.5GY9/4 CIExyY:0.3499/0.3866/0.7866 -9 4 30 5GY9/4 CIExyY:0.3437/0.3861/0.7866 -9 4 32.5 7.5GY9/4 CIExyY:0.3274/0.3791/0.7866 -9 4 35 10GY9/4 CIExyY:0.3144/0.3711/0.7866 -9 3 27.5 2.5GY9/3 CIExyY:0.3413/0.3707/0.7866 -9 3 30 5GY9/3 CIExyY:0.3364/0.3701/0.7866 -9 3 32.5 7.5GY9/3 CIExyY:0.3237/0.3648/0.7866 -9 3 35 10GY9/3 CIExyY:0.3135/0.3582/0.7866 -9 2 27.5 2.5GY9/2 CIExyY:0.3321/0.3539/0.7866 -9 2 30 5GY9/2 CIExyY:0.3284/0.3534/0.7866 -9 2 32.5 7.5GY9/2 CIExyY:0.3193/0.35/0.7866 -9 2 35 10GY9/2 CIExyY:0.3124/0.3454/0.7866 -9 1 30 5GY9/1 CIExyY:0.3197/0.3356/0.7866 -9 1 35 10GY9/1 CIExyY:0.3112/0.3317/0.7866 -8 24 35 10GY8/24 CIExyY:0.2781/0.684/0.591 -8 22 35 10GY8/22 CIExyY:0.2846/0.6564/0.591 -8 20 30 5GY8/20 CIExyY:0.4127/0.5855/0.591 -8 20 32.5 7.5GY8/20 CIExyY:0.3592/0.6235/0.591 -8 20 35 10GY8/20 CIExyY:0.2918/0.6255/0.591 -8 18 27.5 2.5GY8/18 CIExyY:0.4371/0.5557/0.591 -8 18 30 5GY8/18 CIExyY:0.4104/0.5785/0.591 -8 18 32.5 7.5GY8/18 CIExyY:0.3585/0.6063/0.591 -8 18 35 10GY8/18 CIExyY:0.2987/0.5919/0.591 -8 16 27.5 2.5GY8/16 CIExyY:0.4327/0.5475/0.591 -8 16 30 5GY8/16 CIExyY:0.4061/0.5641/0.591 -8 16 32.5 7.5GY8/16 CIExyY:0.3569/0.5798/0.591 -8 16 35 10GY8/16 CIExyY:0.3043/0.5578/0.591 -8 14 27.5 2.5GY8/14 CIExyY:0.4261/0.5344/0.591 -8 14 30 5GY8/14 CIExyY:0.4011/0.5468/0.591 -8 14 32.5 7.5GY8/14 CIExyY:0.3546/0.549/0.591 -8 14 35 10GY8/14 CIExyY:0.3091/0.5247/0.591 -8 12 27.5 2.5GY8/12 CIExyY:0.4154/0.5133/0.591 -8 12 30 5GY8/12 CIExyY:0.3924/0.5199/0.591 -8 12 32.5 7.5GY8/12 CIExyY:0.3511/0.5144/0.591 -8 12 35 10GY8/12 CIExyY:0.3124/0.4926/0.591 -8 10 27.5 2.5GY8/10 CIExyY:0.4021/0.4869/0.591 -8 10 30 5GY8/10 CIExyY:0.3816/0.4879/0.591 -8 10 32.5 7.5GY8/10 CIExyY:0.3463/0.4791/0.591 -8 10 35 10GY8/10 CIExyY:0.314/0.4601/0.591 -8 8 27.5 2.5GY8/8 CIExyY:0.3858/0.455/0.591 -8 8 30 5GY8/8 CIExyY:0.3696/0.4542/0.591 -8 8 32.5 7.5GY8/8 CIExyY:0.3408/0.4452/0.591 -8 8 35 10GY8/8 CIExyY:0.3149/0.4284/0.591 -8 6 27.5 2.5GY8/6 CIExyY:0.369/0.423/0.591 -8 6 30 5GY8/6 CIExyY:0.3573/0.4214/0.591 -8 6 32.5 7.5GY8/6 CIExyY:0.3339/0.4129/0.591 -8 6 35 10GY8/6 CIExyY:0.315/0.4014/0.591 -8 4 27.5 2.5GY8/4 CIExyY:0.3504/0.3887/0.591 -8 4 30 5GY8/4 CIExyY:0.3433/0.3872/0.591 -8 4 32.5 7.5GY8/4 CIExyY:0.3266/0.3809/0.591 -8 4 35 10GY8/4 CIExyY:0.314/0.3727/0.591 -8 3 27.5 2.5GY8/3 CIExyY:0.3418/0.3724/0.591 -8 3 30 5GY8/3 CIExyY:0.3361/0.3709/0.591 -8 3 32.5 7.5GY8/3 CIExyY:0.3231/0.3657/0.591 -8 3 35 10GY8/3 CIExyY:0.3131/0.3594/0.591 -8 2 27.5 2.5GY8/2 CIExyY:0.3327/0.3555/0.591 -8 2 30 5GY8/2 CIExyY:0.3284/0.3542/0.591 -8 2 32.5 7.5GY8/2 CIExyY:0.3194/0.3502/0.591 -8 2 35 10GY8/2 CIExyY:0.3121/0.3459/0.591 -8 1 30 5GY8/1 CIExyY:0.3193/0.3362/0.591 -8 1 35 10GY8/1 CIExyY:0.3111/0.3317/0.591 -7 22 35 10GY7/22 CIExyY:0.2728/0.6893/0.4306 -7 20 35 10GY7/20 CIExyY:0.2816/0.6563/0.4306 -7 18 32.5 7.5GY7/18 CIExyY:0.3555/0.6242/0.4306 -7 18 35 10GY7/18 CIExyY:0.2905/0.6186/0.4306 -7 16 27.5 2.5GY7/16 CIExyY:0.4366/0.5573/0.4306 -7 16 30 5GY7/16 CIExyY:0.4076/0.5783/0.4306 -7 16 32.5 7.5GY7/16 CIExyY:0.3549/0.6/0.4306 -7 16 35 10GY7/16 CIExyY:0.2981/0.5835/0.4306 -7 14 27.5 2.5GY7/14 CIExyY:0.4309/0.5459/0.4306 -7 14 30 5GY7/14 CIExyY:0.4027/0.5615/0.4306 -7 14 32.5 7.5GY7/14 CIExyY:0.3532/0.57/0.4306 -7 14 35 10GY7/14 CIExyY:0.3047/0.5458/0.4306 -7 12 27.5 2.5GY7/12 CIExyY:0.4213/0.527/0.4306 -7 12 30 5GY7/12 CIExyY:0.3949/0.5367/0.4306 -7 12 32.5 7.5GY7/12 CIExyY:0.3502/0.5328/0.4306 -7 12 35 10GY7/12 CIExyY:0.3092/0.5095/0.4306 -7 10 27.5 2.5GY7/10 CIExyY:0.4091/0.503/0.4306 -7 10 30 5GY7/10 CIExyY:0.3852/0.5051/0.4306 -7 10 32.5 7.5GY7/10 CIExyY:0.3461/0.495/0.4306 -7 10 35 10GY7/10 CIExyY:0.3123/0.4732/0.4306 -7 8 27.5 2.5GY7/8 CIExyY:0.3919/0.4681/0.4306 -7 8 30 5GY7/8 CIExyY:0.3722/0.4669/0.4306 -7 8 32.5 7.5GY7/8 CIExyY:0.3406/0.4558/0.4306 -7 8 35 10GY7/8 CIExyY:0.314/0.4387/0.4306 -7 6 27.5 2.5GY7/6 CIExyY:0.3728/0.4316/0.4306 -7 6 30 5GY7/6 CIExyY:0.3581/0.4291/0.4306 -7 6 32.5 7.5GY7/6 CIExyY:0.3341/0.4191/0.4306 -7 6 35 10GY7/6 CIExyY:0.3142/0.4058/0.4306 -7 4 27.5 2.5GY7/4 CIExyY:0.3534/0.3953/0.4306 -7 4 30 5GY7/4 CIExyY:0.3437/0.3929/0.4306 -7 4 32.5 7.5GY7/4 CIExyY:0.3267/0.3848/0.4306 -7 4 35 10GY7/4 CIExyY:0.3133/0.3764/0.4306 -7 3 27.5 2.5GY7/3 CIExyY:0.3433/0.3764/0.4306 -7 3 30 5GY7/3 CIExyY:0.3363/0.3746/0.4306 -7 3 32.5 7.5GY7/3 CIExyY:0.3229/0.3683/0.4306 -7 3 35 10GY7/3 CIExyY:0.3125/0.3617/0.4306 -7 2 27.5 2.5GY7/2 CIExyY:0.3328/0.3569/0.4306 -7 2 30 5GY7/2 CIExyY:0.3284/0.3559/0.4306 -7 2 32.5 7.5GY7/2 CIExyY:0.319/0.3516/0.4306 -7 2 35 10GY7/2 CIExyY:0.3117/0.3469/0.4306 -7 1 30 5GY7/1 CIExyY:0.3198/0.3365/0.4306 -7 1 35 10GY7/1 CIExyY:0.3109/0.3318/0.4306 -6 20 35 10GY6/20 CIExyY:0.2648/0.7004/0.3005 -6 18 35 10GY6/18 CIExyY:0.2763/0.6616/0.3005 -6 16 32.5 7.5GY6/16 CIExyY:0.3493/0.6282/0.3005 -6 16 35 10GY6/16 CIExyY:0.2872/0.6199/0.3005 -6 14 27.5 2.5GY6/14 CIExyY:0.4354/0.5594/0.3005 -6 14 30 5GY6/14 CIExyY:0.4042/0.5788/0.3005 -6 14 32.5 7.5GY6/14 CIExyY:0.3498/0.5985/0.3005 -6 14 35 10GY6/14 CIExyY:0.2962/0.5802/0.3005 -6 12 27.5 2.5GY6/12 CIExyY:0.4269/0.5414/0.3005 -6 12 30 5GY6/12 CIExyY:0.398/0.5564/0.3005 -6 12 32.5 7.5GY6/12 CIExyY:0.3488/0.5596/0.3005 -6 12 35 10GY6/12 CIExyY:0.3037/0.5358/0.3005 -6 10 27.5 2.5GY6/10 CIExyY:0.4159/0.519/0.3005 -6 10 30 5GY6/10 CIExyY:0.3891/0.5264/0.3005 -6 10 32.5 7.5GY6/10 CIExyY:0.3463/0.5196/0.3005 -6 10 35 10GY6/10 CIExyY:0.3086/0.4949/0.3005 -6 8 27.5 2.5GY6/8 CIExyY:0.4006/0.4885/0.3005 -6 8 30 5GY6/8 CIExyY:0.3772/0.488/0.3005 -6 8 32.5 7.5GY6/8 CIExyY:0.3418/0.4768/0.3005 -6 8 35 10GY6/8 CIExyY:0.3116/0.4563/0.3005 -6 6 27.5 2.5GY6/6 CIExyY:0.3799/0.447/0.3005 -6 6 30 5GY6/6 CIExyY:0.3622/0.4438/0.3005 -6 6 32.5 7.5GY6/6 CIExyY:0.3351/0.4321/0.3005 -6 6 35 10GY6/6 CIExyY:0.3128/0.4175/0.3005 -6 4 27.5 2.5GY6/4 CIExyY:0.3572/0.4038/0.3005 -6 4 30 5GY6/4 CIExyY:0.3461/0.4008/0.3005 -6 4 32.5 7.5GY6/4 CIExyY:0.3275/0.3922/0.3005 -6 4 35 10GY6/4 CIExyY:0.3124/0.3822/0.3005 -6 3 27.5 2.5GY6/3 CIExyY:0.3458/0.3823/0.3005 -6 3 30 5GY6/3 CIExyY:0.3376/0.38/0.3005 -6 3 32.5 7.5GY6/3 CIExyY:0.3235/0.3735/0.3005 -6 3 35 10GY6/3 CIExyY:0.3118/0.3658/0.3005 -6 2 27.5 2.5GY6/2 CIExyY:0.3342/0.3607/0.3005 -6 2 30 5GY6/2 CIExyY:0.3288/0.3592/0.3005 -6 2 32.5 7.5GY6/2 CIExyY:0.3193/0.355/0.3005 -6 2 35 10GY6/2 CIExyY:0.3112/0.3496/0.3005 -6 1 30 5GY6/1 CIExyY:0.3196/0.3381/0.3005 -6 1 35 10GY6/1 CIExyY:0.3106/0.3332/0.3005 -5 18 35 10GY5/18 CIExyY:0.2549/0.7179/0.1977 -5 16 35 10GY5/16 CIExyY:0.2702/0.67/0.1977 -5 14 32.5 7.5GY5/14 CIExyY:0.3429/0.6335/0.1977 -5 14 35 10GY5/14 CIExyY:0.2838/0.6208/0.1977 -5 12 27.5 2.5GY5/12 CIExyY:0.4333/0.5602/0.1977 -5 12 30 5GY5/12 CIExyY:0.4011/0.5802/0.1977 -5 12 32.5 7.5GY5/12 CIExyY:0.345/0.5949/0.1977 -5 12 35 10GY5/12 CIExyY:0.294/0.5751/0.1977 -5 10 27.5 2.5GY5/10 CIExyY:0.4224/0.5369/0.1977 -5 10 30 5GY5/10 CIExyY:0.3928/0.5485/0.1977 -5 10 32.5 7.5GY5/10 CIExyY:0.3451/0.549/0.1977 -5 10 35 10GY5/10 CIExyY:0.3028/0.5237/0.1977 -5 8 27.5 2.5GY5/8 CIExyY:0.4088/0.5068/0.1977 -5 8 30 5GY5/8 CIExyY:0.3815/0.5093/0.1977 -5 8 32.5 7.5GY5/8 CIExyY:0.3412/0.4976/0.1977 -5 8 35 10GY5/8 CIExyY:0.308/0.4759/0.1977 -5 6 27.5 2.5GY5/6 CIExyY:0.3879/0.4646/0.1977 -5 6 30 5GY5/6 CIExyY:0.3663/0.4614/0.1977 -5 6 32.5 7.5GY5/6 CIExyY:0.3354/0.4483/0.1977 -5 6 35 10GY5/6 CIExyY:0.3108/0.4301/0.1977 -5 4 27.5 2.5GY5/4 CIExyY:0.3621/0.4143/0.1977 -5 4 30 5GY5/4 CIExyY:0.3482/0.4097/0.1977 -5 4 32.5 7.5GY5/4 CIExyY:0.3274/0.3994/0.1977 -5 4 35 10GY5/4 CIExyY:0.3111/0.3881/0.1977 -5 3 27.5 2.5GY5/3 CIExyY:0.3486/0.3888/0.1977 -5 3 30 5GY5/3 CIExyY:0.3386/0.385/0.1977 -5 3 32.5 7.5GY5/3 CIExyY:0.3231/0.3771/0.1977 -5 3 35 10GY5/3 CIExyY:0.3111/0.369/0.1977 -5 2 27.5 2.5GY5/2 CIExyY:0.3352/0.3636/0.1977 -5 2 30 5GY5/2 CIExyY:0.3289/0.3612/0.1977 -5 2 32.5 7.5GY5/2 CIExyY:0.3188/0.356/0.1977 -5 2 35 10GY5/2 CIExyY:0.311/0.3508/0.1977 -5 1 30 5GY5/1 CIExyY:0.3193/0.3383/0.1977 -5 1 35 10GY5/1 CIExyY:0.3107/0.3333/0.1977 -4 16 35 10GY4/16 CIExyY:0.2422/0.736/0.12 -4 14 35 10GY4/14 CIExyY:0.259/0.6858/0.12 -4 12 32.5 7.5GY4/12 CIExyY:0.3348/0.6468/0.12 -4 12 35 10GY4/12 CIExyY:0.2758/0.6282/0.12 -4 10 30 5GY4/10 CIExyY:0.3983/0.585/0.12 -4 10 32.5 7.5GY4/10 CIExyY:0.3395/0.5913/0.12 -4 10 35 10GY4/10 CIExyY:0.2908/0.5672/0.12 -4 8 27.5 2.5GY4/8 CIExyY:0.4174/0.53/0.12 -4 8 30 5GY4/8 CIExyY:0.3868/0.5384/0.12 -4 8 32.5 7.5GY4/8 CIExyY:0.34/0.5348/0.12 -4 8 35 10GY4/8 CIExyY:0.3008/0.5095/0.12 -4 6 27.5 2.5GY4/6 CIExyY:0.3968/0.4857/0.12 -4 6 30 5GY4/6 CIExyY:0.3718/0.4852/0.12 -4 6 32.5 7.5GY4/6 CIExyY:0.3355/0.4739/0.12 -4 6 35 10GY4/6 CIExyY:0.3069/0.455/0.12 -4 4 27.5 2.5GY4/4 CIExyY:0.3708/0.4329/0.12 -4 4 30 5GY4/4 CIExyY:0.3538/0.4284/0.12 -4 4 32.5 7.5GY4/4 CIExyY:0.3281/0.4157/0.12 -4 4 35 10GY4/4 CIExyY:0.31/0.4018/0.12 -4 3 27.5 2.5GY4/3 CIExyY:0.3546/0.4018/0.12 -4 3 30 5GY4/3 CIExyY:0.3427/0.3978/0.12 -4 3 32.5 7.5GY4/3 CIExyY:0.3234/0.3872/0.12 -4 3 35 10GY4/3 CIExyY:0.3107/0.3775/0.12 -4 2 27.5 2.5GY4/2 CIExyY:0.3382/0.3706/0.12 -4 2 30 5GY4/2 CIExyY:0.3312/0.3678/0.12 -4 2 32.5 7.5GY4/2 CIExyY:0.3185/0.3604/0.12 -4 2 35 10GY4/2 CIExyY:0.3109/0.355/0.12 -4 1 30 5GY4/1 CIExyY:0.3201/0.3401/0.12 -4 1 35 10GY4/1 CIExyY:0.3107/0.3345/0.12 -3 14 35 10GY3/14 CIExyY:0.2283/0.7423/0.06555 -3 12 35 10GY3/12 CIExyY:0.2531/0.67/0.06555 -3 10 32.5 7.5GY3/10 CIExyY:0.3266/0.6448/0.06555 -3 10 35 10GY3/10 CIExyY:0.2724/0.6026/0.06555 -3 8 30 5GY3/8 CIExyY:0.3924/0.5832/0.06555 -3 8 32.5 7.5GY3/8 CIExyY:0.3341/0.57/0.06555 -3 8 35 10GY3/8 CIExyY:0.2887/0.5361/0.06555 -3 6 27.5 2.5GY3/6 CIExyY:0.4069/0.511/0.06555 -3 6 30 5GY3/6 CIExyY:0.375/0.5109/0.06555 -3 6 32.5 7.5GY3/6 CIExyY:0.3333/0.4967/0.06555 -3 6 35 10GY3/6 CIExyY:0.2992/0.4717/0.06555 -3 4 27.5 2.5GY3/4 CIExyY:0.3772/0.4484/0.06555 -3 4 30 5GY3/4 CIExyY:0.3554/0.4429/0.06555 -3 4 32.5 7.5GY3/4 CIExyY:0.327/0.4288/0.06555 -3 4 35 10GY3/4 CIExyY:0.3053/0.4123/0.06555 -3 3 27.5 2.5GY3/3 CIExyY:0.3593/0.4125/0.06555 -3 3 30 5GY3/3 CIExyY:0.3438/0.4072/0.06555 -3 3 32.5 7.5GY3/3 CIExyY:0.3226/0.3954/0.06555 -3 3 35 10GY3/3 CIExyY:0.3073/0.3839/0.06555 -3 2 27.5 2.5GY3/2 CIExyY:0.3412/0.3768/0.06555 -3 2 30 5GY3/2 CIExyY:0.3319/0.3729/0.06555 -3 2 32.5 7.5GY3/2 CIExyY:0.318/0.3644/0.06555 -3 2 35 10GY3/2 CIExyY:0.3088/0.3578/0.06555 -3 1 30 5GY3/1 CIExyY:0.3204/0.342/0.06555 -3 1 35 10GY3/1 CIExyY:0.3097/0.3349/0.06555 -2 12 35 10GY2/12 CIExyY:0.1907/0.7798/0.03126 -2 10 35 10GY2/10 CIExyY:0.2307/0.6814/0.03126 -2 8 32.5 7.5GY2/8 CIExyY:0.316/0.6509/0.03126 -2 8 35 10GY2/8 CIExyY:0.2628/0.5837/0.03126 -2 6 30 5GY2/6 CIExyY:0.3839/0.5748/0.03126 -2 6 32.5 7.5GY2/6 CIExyY:0.326/0.5379/0.03126 -2 6 35 10GY2/6 CIExyY:0.2852/0.4972/0.03126 -2 4 27.5 2.5GY2/4 CIExyY:0.3881/0.4752/0.03126 -2 4 30 5GY2/4 CIExyY:0.3582/0.465/0.03126 -2 4 32.5 7.5GY2/4 CIExyY:0.3248/0.4457/0.03126 -2 4 35 10GY2/4 CIExyY:0.2986/0.424/0.03126 -2 3 27.5 2.5GY2/3 CIExyY:0.3636/0.4239/0.03126 -2 3 30 5GY2/3 CIExyY:0.3442/0.4164/0.03126 -2 3 32.5 7.5GY2/3 CIExyY:0.321/0.4026/0.03126 -2 3 35 10GY2/3 CIExyY:0.3034/0.389/0.03126 -2 2 27.5 2.5GY2/2 CIExyY:0.3421/0.3803/0.03126 -2 2 30 5GY2/2 CIExyY:0.3309/0.3743/0.03126 -2 2 32.5 7.5GY2/2 CIExyY:0.3165/0.365/0.03126 -2 2 35 10GY2/2 CIExyY:0.3069/0.358/0.03126 -2 1 30 5GY2/1 CIExyY:0.3192/0.3404/0.03126 -2 1 35 10GY2/1 CIExyY:0.3091/0.333/0.03126 -1 6 35 10GY1/6 CIExyY:0.2232/0.6392/0.0121 -1 4 30 5GY1/4 CIExyY:0.3765/0.5942/0.0121 -1 4 32.5 7.5GY1/4 CIExyY:0.3133/0.538/0.0121 -1 4 35 10GY1/4 CIExyY:0.2722/0.4903/0.0121 -1 2 27.5 2.5GY1/2 CIExyY:0.354/0.4088/0.0121 -1 2 30 5GY1/2 CIExyY:0.3359/0.3982/0.0121 -1 2 32.5 7.5GY1/2 CIExyY:0.3154/0.384/0.0121 -1 2 35 10GY1/2 CIExyY:0.3006/0.372/0.0121 -9 16 37.5 2.5G9/16 CIExyY:0.263/0.4966/0.7866 -9 14 37.5 2.5G9/14 CIExyY:0.2711/0.4726/0.7866 -9 12 37.5 2.5G9/12 CIExyY:0.2786/0.4491/0.7866 -9 12 40 5G9/12 CIExyY:0.2528/0.416/0.7866 -9 12 42.5 7.5G9/12 CIExyY:0.2419/0.3985/0.7866 -9 12 45 10G9/12 CIExyY:0.2325/0.3796/0.7866 -9 10 37.5 2.5G9/10 CIExyY:0.2851/0.4275/0.7866 -9 10 40 5G9/10 CIExyY:0.2639/0.4001/0.7866 -9 10 42.5 7.5G9/10 CIExyY:0.2545/0.3855/0.7866 -9 10 45 10G9/10 CIExyY:0.2457/0.3702/0.7866 -9 8 37.5 2.5G9/8 CIExyY:0.2912/0.4054/0.7866 -9 8 40 5G9/8 CIExyY:0.2735/0.3854/0.7866 -9 8 42.5 7.5G9/8 CIExyY:0.2652/0.3738/0.7866 -9 8 45 10G9/8 CIExyY:0.2574/0.3618/0.7866 -9 6 37.5 2.5G9/6 CIExyY:0.2966/0.3846/0.7866 -9 6 40 5G9/6 CIExyY:0.2832/0.3697/0.7866 -9 6 42.5 7.5G9/6 CIExyY:0.2763/0.3607/0.7866 -9 6 45 10G9/6 CIExyY:0.2703/0.3513/0.7866 -9 4 37.5 2.5G9/4 CIExyY:0.3018/0.3606/0.7866 -9 4 40 5G9/4 CIExyY:0.2933/0.3519/0.7866 -9 4 42.5 7.5G9/4 CIExyY:0.2882/0.3461/0.7866 -9 4 45 10G9/4 CIExyY:0.284/0.3402/0.7866 -9 3 37.5 2.5G9/3 CIExyY:0.3039/0.3503/0.7866 -9 2 37.5 2.5G9/2 CIExyY:0.3058/0.34/0.7866 -9 2 40 5G9/2 CIExyY:0.3017/0.3357/0.7866 -9 2 42.5 7.5G9/2 CIExyY:0.2987/0.3323/0.7866 -9 2 45 10G9/2 CIExyY:0.2965/0.3293/0.7866 -9 1 40 5G9/1 CIExyY:0.3058/0.3267/0.7866 -9 1 45 10G9/1 CIExyY:0.303/0.3232/0.7866 -8 24 37.5 2.5G8/24 CIExyY:0.2091/0.6033/0.591 -8 22 37.5 2.5G8/22 CIExyY:0.2221/0.5799/0.591 -8 22 40 5G8/22 CIExyY:0.1821/0.494/0.591 -8 20 37.5 2.5G8/20 CIExyY:0.2339/0.5561/0.591 -8 20 40 5G8/20 CIExyY:0.1956/0.4806/0.591 -8 20 42.5 7.5G8/20 CIExyY:0.1845/0.4492/0.591 -8 20 45 10G8/20 CIExyY:0.1734/0.4164/0.591 -8 18 37.5 2.5G8/18 CIExyY:0.2451/0.5309/0.591 -8 18 40 5G8/18 CIExyY:0.2103/0.4652/0.591 -8 18 42.5 7.5G8/18 CIExyY:0.198/0.4372/0.591 -8 18 45 10G8/18 CIExyY:0.1866/0.4086/0.591 -8 16 37.5 2.5G8/16 CIExyY:0.2563/0.5045/0.591 -8 16 40 5G8/16 CIExyY:0.224/0.45/0.591 -8 16 42.5 7.5G8/16 CIExyY:0.212/0.4252/0.591 -8 16 45 10G8/16 CIExyY:0.2012/0.3992/0.591 -8 14 37.5 2.5G8/14 CIExyY:0.2661/0.478/0.591 -8 14 40 5G8/14 CIExyY:0.2368/0.4348/0.591 -8 14 42.5 7.5G8/14 CIExyY:0.2254/0.4125/0.591 -8 14 45 10G8/14 CIExyY:0.2148/0.3903/0.591 -8 12 37.5 2.5G8/12 CIExyY:0.2743/0.4554/0.591 -8 12 40 5G8/12 CIExyY:0.2489/0.4191/0.591 -8 12 42.5 7.5G8/12 CIExyY:0.238/0.4002/0.591 -8 12 45 10G8/12 CIExyY:0.2282/0.3811/0.591 -8 10 37.5 2.5G8/10 CIExyY:0.2829/0.4301/0.591 -8 10 40 5G8/10 CIExyY:0.2613/0.4026/0.591 -8 10 42.5 7.5G8/10 CIExyY:0.2515/0.3867/0.591 -8 10 45 10G8/10 CIExyY:0.243/0.371/0.591 -8 8 37.5 2.5G8/8 CIExyY:0.2896/0.4065/0.591 -8 8 40 5G8/8 CIExyY:0.2723/0.3865/0.591 -8 8 42.5 7.5G8/8 CIExyY:0.2639/0.3733/0.591 -8 8 45 10G8/8 CIExyY:0.2564/0.3611/0.591 -8 6 37.5 2.5G8/6 CIExyY:0.2952/0.3851/0.591 -8 6 40 5G8/6 CIExyY:0.2822/0.3702/0.591 -8 6 42.5 7.5G8/6 CIExyY:0.2754/0.3608/0.591 -8 6 45 10G8/6 CIExyY:0.2693/0.3512/0.591 -8 4 37.5 2.5G8/4 CIExyY:0.3009/0.3614/0.591 -8 4 40 5G8/4 CIExyY:0.2924/0.3523/0.591 -8 4 42.5 7.5G8/4 CIExyY:0.2874/0.3464/0.591 -8 4 45 10G8/4 CIExyY:0.2828/0.3403/0.591 -8 3 37.5 2.5G8/3 CIExyY:0.3032/0.3509/0.591 -8 3 40 5G8/3 CIExyY:0.2967/0.3442/0.591 -8 3 42.5 7.5G8/3 CIExyY:0.2927/0.3396/0.591 -8 3 45 10G8/3 CIExyY:0.2892/0.3349/0.591 -8 2 37.5 2.5G8/2 CIExyY:0.3053/0.3404/0.591 -8 2 40 5G8/2 CIExyY:0.3009/0.3359/0.591 -8 2 42.5 7.5G8/2 CIExyY:0.2981/0.3326/0.591 -8 2 45 10G8/2 CIExyY:0.2957/0.3293/0.591 -8 1 40 5G8/1 CIExyY:0.3053/0.3268/0.591 -8 1 45 10G8/1 CIExyY:0.3026/0.3232/0.591 -7 26 37.5 2.5G7/26 CIExyY:0.1689/0.6549/0.4306 -7 26 40 5G7/26 CIExyY:0.1397/0.5312/0.4306 -7 26 42.5 7.5G7/26 CIExyY:0.1303/0.4858/0.4306 -7 24 37.5 2.5G7/24 CIExyY:0.1875/0.6265/0.4306 -7 24 40 5G7/24 CIExyY:0.1521/0.52/0.4306 -7 24 42.5 7.5G7/24 CIExyY:0.1415/0.4778/0.4306 -7 24 45 10G7/24 CIExyY:0.131/0.4377/0.4306 -7 22 37.5 2.5G7/22 CIExyY:0.2029/0.6017/0.4306 -7 22 40 5G7/22 CIExyY:0.1659/0.5074/0.4306 -7 22 42.5 7.5G7/22 CIExyY:0.1539/0.4683/0.4306 -7 22 45 10G7/22 CIExyY:0.1434/0.4306/0.4306 -7 20 37.5 2.5G7/20 CIExyY:0.2181/0.5744/0.4306 -7 20 40 5G7/20 CIExyY:0.1805/0.4933/0.4306 -7 20 42.5 7.5G7/20 CIExyY:0.1688/0.457/0.4306 -7 20 45 10G7/20 CIExyY:0.1589/0.422/0.4306 -7 18 37.5 2.5G7/18 CIExyY:0.2328/0.5467/0.4306 -7 18 40 5G7/18 CIExyY:0.1967/0.4771/0.4306 -7 18 42.5 7.5G7/18 CIExyY:0.1841/0.4448/0.4306 -7 18 45 10G7/18 CIExyY:0.1734/0.4135/0.4306 -7 16 37.5 2.5G7/16 CIExyY:0.2448/0.5203/0.4306 -7 16 40 5G7/16 CIExyY:0.2111/0.4616/0.4306 -7 16 42.5 7.5G7/16 CIExyY:0.1982/0.433/0.4306 -7 16 45 10G7/16 CIExyY:0.1881/0.4049/0.4306 -7 14 37.5 2.5G7/14 CIExyY:0.2568/0.4931/0.4306 -7 14 40 5G7/14 CIExyY:0.2262/0.445/0.4306 -7 14 42.5 7.5G7/14 CIExyY:0.2139/0.4199/0.4306 -7 14 45 10G7/14 CIExyY:0.2033/0.3956/0.4306 -7 12 37.5 2.5G7/12 CIExyY:0.2672/0.4667/0.4306 -7 12 40 5G7/12 CIExyY:0.2416/0.4267/0.4306 -7 12 42.5 7.5G7/12 CIExyY:0.2295/0.4058/0.4306 -7 12 45 10G7/12 CIExyY:0.2195/0.3854/0.4306 -7 10 37.5 2.5G7/10 CIExyY:0.2775/0.4395/0.4306 -7 10 40 5G7/10 CIExyY:0.2554/0.4087/0.4306 -7 10 42.5 7.5G7/10 CIExyY:0.2445/0.3914/0.4306 -7 10 45 10G7/10 CIExyY:0.2352/0.3748/0.4306 -7 8 37.5 2.5G7/8 CIExyY:0.2861/0.4129/0.4306 -7 8 40 5G7/8 CIExyY:0.2687/0.3901/0.4306 -7 8 42.5 7.5G7/8 CIExyY:0.2595/0.3764/0.4306 -7 8 45 10G7/8 CIExyY:0.2513/0.3635/0.4306 -7 6 37.5 2.5G7/6 CIExyY:0.2933/0.3873/0.4306 -7 6 40 5G7/6 CIExyY:0.2801/0.3721/0.4306 -7 6 42.5 7.5G7/6 CIExyY:0.2728/0.3622/0.4306 -7 6 45 10G7/6 CIExyY:0.2662/0.3526/0.4306 -7 4 37.5 2.5G7/4 CIExyY:0.2992/0.3644/0.4306 -7 4 40 5G7/4 CIExyY:0.2902/0.3548/0.4306 -7 4 42.5 7.5G7/4 CIExyY:0.285/0.3482/0.4306 -7 4 45 10G7/4 CIExyY:0.2803/0.3415/0.4306 -7 3 37.5 2.5G7/3 CIExyY:0.302/0.353/0.4306 -7 3 40 5G7/3 CIExyY:0.2952/0.3459/0.4306 -7 3 42.5 7.5G7/3 CIExyY:0.2911/0.3409/0.4306 -7 3 45 10G7/3 CIExyY:0.2873/0.3357/0.4306 -7 2 37.5 2.5G7/2 CIExyY:0.3047/0.3413/0.4306 -7 2 40 5G7/2 CIExyY:0.3001/0.3366/0.4306 -7 2 42.5 7.5G7/2 CIExyY:0.2972/0.3333/0.4306 -7 2 45 10G7/2 CIExyY:0.2945/0.3297/0.4306 -7 1 40 5G7/1 CIExyY:0.3051/0.3268/0.4306 -7 1 45 10G7/1 CIExyY:0.302/0.3233/0.4306 -6 28 37.5 2.5G6/28 CIExyY:0.1145/0.7122/0.3005 -6 28 40 5G6/28 CIExyY:0.0908/0.5695/0.3005 -6 28 42.5 7.5G6/28 CIExyY:0.0858/0.5127/0.3005 -6 26 37.5 2.5G6/26 CIExyY:0.134/0.6871/0.3005 -6 26 40 5G6/26 CIExyY:0.1079/0.556/0.3005 -6 26 42.5 7.5G6/26 CIExyY:0.101/0.5018/0.3005 -6 26 45 10G6/26 CIExyY:0.0941/0.452/0.3005 -6 24 37.5 2.5G6/24 CIExyY:0.1536/0.6605/0.3005 -6 24 40 5G6/24 CIExyY:0.1252/0.5408/0.3005 -6 24 42.5 7.5G6/24 CIExyY:0.1159/0.491/0.3005 -6 24 45 10G6/24 CIExyY:0.107/0.4458/0.3005 -6 22 37.5 2.5G6/22 CIExyY:0.1739/0.6318/0.3005 -6 22 40 5G6/22 CIExyY:0.1432/0.5252/0.3005 -6 22 42.5 7.5G6/22 CIExyY:0.1325/0.4795/0.3005 -6 22 45 10G6/22 CIExyY:0.123/0.4378/0.3005 -6 20 37.5 2.5G6/20 CIExyY:0.1922/0.6035/0.3005 -6 20 40 5G6/20 CIExyY:0.1609/0.5091/0.3005 -6 20 42.5 7.5G6/20 CIExyY:0.1485/0.4677/0.3005 -6 20 45 10G6/20 CIExyY:0.1382/0.4299/0.3005 -6 18 37.5 2.5G6/18 CIExyY:0.2102/0.5737/0.3005 -6 18 40 5G6/18 CIExyY:0.1785/0.4924/0.3005 -6 18 42.5 7.5G6/18 CIExyY:0.1654/0.4551/0.3005 -6 18 45 10G6/18 CIExyY:0.1551/0.4208/0.3005 -6 16 37.5 2.5G6/16 CIExyY:0.2278/0.543/0.3005 -6 16 40 5G6/16 CIExyY:0.196/0.4751/0.3005 -6 16 42.5 7.5G6/16 CIExyY:0.1832/0.4414/0.3005 -6 16 45 10G6/16 CIExyY:0.1722/0.4113/0.3005 -6 14 37.5 2.5G6/14 CIExyY:0.2426/0.5133/0.3005 -6 14 40 5G6/14 CIExyY:0.213/0.4571/0.3005 -6 14 42.5 7.5G6/14 CIExyY:0.2001/0.4278/0.3005 -6 14 45 10G6/14 CIExyY:0.1895/0.4015/0.3005 -6 12 37.5 2.5G6/12 CIExyY:0.2574/0.4814/0.3005 -6 12 40 5G6/12 CIExyY:0.2293/0.439/0.3005 -6 12 42.5 7.5G6/12 CIExyY:0.2171/0.4138/0.3005 -6 12 45 10G6/12 CIExyY:0.206/0.3914/0.3005 -6 10 37.5 2.5G6/10 CIExyY:0.269/0.453/0.3005 -6 10 40 5G6/10 CIExyY:0.2466/0.4181/0.3005 -6 10 42.5 7.5G6/10 CIExyY:0.235/0.3979/0.3005 -6 10 45 10G6/10 CIExyY:0.2247/0.3796/0.3005 -6 8 37.5 2.5G6/8 CIExyY:0.2799/0.4239/0.3005 -6 8 40 5G6/8 CIExyY:0.2612/0.399/0.3005 -6 8 42.5 7.5G6/8 CIExyY:0.251/0.3829/0.3005 -6 8 45 10G6/8 CIExyY:0.242/0.3679/0.3005 -6 6 37.5 2.5G6/6 CIExyY:0.2892/0.3963/0.3005 -6 6 40 5G6/6 CIExyY:0.2748/0.3795/0.3005 -6 6 42.5 7.5G6/6 CIExyY:0.2662/0.3672/0.3005 -6 6 45 10G6/6 CIExyY:0.2591/0.3558/0.3005 -6 4 37.5 2.5G6/4 CIExyY:0.2967/0.3695/0.3005 -6 4 40 5G6/4 CIExyY:0.2868/0.3595/0.3005 -6 4 42.5 7.5G6/4 CIExyY:0.2807/0.3522/0.3005 -6 4 45 10G6/4 CIExyY:0.2749/0.3443/0.3005 -6 3 37.5 2.5G6/3 CIExyY:0.3004/0.3566/0.3005 -6 3 40 5G6/3 CIExyY:0.2928/0.349/0.3005 -6 3 42.5 7.5G6/3 CIExyY:0.2883/0.3435/0.3005 -6 3 45 10G6/3 CIExyY:0.2838/0.3375/0.3005 -6 2 37.5 2.5G6/2 CIExyY:0.3039/0.3437/0.3005 -6 2 40 5G6/2 CIExyY:0.2988/0.3382/0.3005 -6 2 42.5 7.5G6/2 CIExyY:0.2958/0.3344/0.3005 -6 2 45 10G6/2 CIExyY:0.2929/0.3303/0.3005 -6 1 40 5G6/1 CIExyY:0.3046/0.3273/0.3005 -6 1 45 10G6/1 CIExyY:0.3018/0.3231/0.3005 -5 28 37.5 2.5G5/28 CIExyY:0.0794/0.7385/0.1977 -5 28 40 5G5/28 CIExyY:0.0609/0.5898/0.1977 -5 28 42.5 7.5G5/28 CIExyY:0.0585/0.5224/0.1977 -5 28 45 10G5/28 CIExyY:0.0572/0.459/0.1977 -5 26 37.5 2.5G5/26 CIExyY:0.0992/0.7155/0.1977 -5 26 40 5G5/26 CIExyY:0.0784/0.5761/0.1977 -5 26 42.5 7.5G5/26 CIExyY:0.073/0.5131/0.1977 -5 26 45 10G5/26 CIExyY:0.069/0.4542/0.1977 -5 24 37.5 2.5G5/24 CIExyY:0.1188/0.6918/0.1977 -5 24 40 5G5/24 CIExyY:0.0953/0.5628/0.1977 -5 24 42.5 7.5G5/24 CIExyY:0.0878/0.5039/0.1977 -5 24 45 10G5/24 CIExyY:0.0811/0.4491/0.1977 -5 22 37.5 2.5G5/22 CIExyY:0.1377/0.6674/0.1977 -5 22 40 5G5/22 CIExyY:0.1144/0.5463/0.1977 -5 22 42.5 7.5G5/22 CIExyY:0.105/0.4927/0.1977 -5 22 45 10G5/22 CIExyY:0.0958/0.4428/0.1977 -5 20 37.5 2.5G5/20 CIExyY:0.1579/0.6392/0.1977 -5 20 40 5G5/20 CIExyY:0.1318/0.5321/0.1977 -5 20 42.5 7.5G5/20 CIExyY:0.1212/0.4817/0.1977 -5 20 45 10G5/20 CIExyY:0.112/0.436/0.1977 -5 18 37.5 2.5G5/18 CIExyY:0.1782/0.6095/0.1977 -5 18 40 5G5/18 CIExyY:0.1489/0.5171/0.1977 -5 18 42.5 7.5G5/18 CIExyY:0.1372/0.4705/0.1977 -5 18 45 10G5/18 CIExyY:0.1275/0.4288/0.1977 -5 16 37.5 2.5G5/16 CIExyY:0.2005/0.5759/0.1977 -5 16 40 5G5/16 CIExyY:0.1695/0.4981/0.1977 -5 16 42.5 7.5G5/16 CIExyY:0.1571/0.4561/0.1977 -5 16 45 10G5/16 CIExyY:0.1469/0.4192/0.1977 -5 14 37.5 2.5G5/14 CIExyY:0.2211/0.5411/0.1977 -5 14 40 5G5/14 CIExyY:0.1912/0.4773/0.1977 -5 14 42.5 7.5G5/14 CIExyY:0.1776/0.4415/0.1977 -5 14 45 10G5/14 CIExyY:0.1671/0.4089/0.1977 -5 12 37.5 2.5G5/12 CIExyY:0.2385/0.5071/0.1977 -5 12 40 5G5/12 CIExyY:0.2104/0.4578/0.1977 -5 12 42.5 7.5G5/12 CIExyY:0.1964/0.4271/0.1977 -5 12 45 10G5/12 CIExyY:0.1852/0.3992/0.1977 -5 10 37.5 2.5G5/10 CIExyY:0.2565/0.4705/0.1977 -5 10 40 5G5/10 CIExyY:0.2329/0.4331/0.1977 -5 10 42.5 7.5G5/10 CIExyY:0.22/0.4082/0.1977 -5 10 45 10G5/10 CIExyY:0.2095/0.3853/0.1977 -5 8 37.5 2.5G5/8 CIExyY:0.271/0.438/0.1977 -5 8 40 5G5/8 CIExyY:0.2511/0.4107/0.1977 -5 8 42.5 7.5G5/8 CIExyY:0.2395/0.3915/0.1977 -5 8 45 10G5/8 CIExyY:0.2297/0.373/0.1977 -5 6 37.5 2.5G5/6 CIExyY:0.2841/0.4045/0.1977 -5 6 40 5G5/6 CIExyY:0.269/0.386/0.1977 -5 6 42.5 7.5G5/6 CIExyY:0.2598/0.3724/0.1977 -5 6 45 10G5/6 CIExyY:0.2519/0.3587/0.1977 -5 4 37.5 2.5G5/4 CIExyY:0.2943/0.3735/0.1977 -5 4 40 5G5/4 CIExyY:0.2841/0.3628/0.1977 -5 4 42.5 7.5G5/4 CIExyY:0.2775/0.3545/0.1977 -5 4 45 10G5/4 CIExyY:0.2711/0.3455/0.1977 -5 3 37.5 2.5G5/3 CIExyY:0.2988/0.3588/0.1977 -5 3 40 5G5/3 CIExyY:0.2911/0.351/0.1977 -5 3 42.5 7.5G5/3 CIExyY:0.2861/0.3451/0.1977 -5 3 45 10G5/3 CIExyY:0.2811/0.3383/0.1977 -5 2 37.5 2.5G5/2 CIExyY:0.303/0.3445/0.1977 -5 2 40 5G5/2 CIExyY:0.2978/0.3392/0.1977 -5 2 42.5 7.5G5/2 CIExyY:0.2945/0.3355/0.1977 -5 2 45 10G5/2 CIExyY:0.291/0.331/0.1977 -5 1 40 5G5/1 CIExyY:0.3041/0.3276/0.1977 -5 1 45 10G5/1 CIExyY:0.3007/0.3236/0.1977 -4 26 37.5 2.5G4/26 CIExyY:0.0528/0.7502/0.12 -4 26 40 5G4/26 CIExyY:0.0407/0.601/0.12 -4 26 42.5 7.5G4/26 CIExyY:0.0392/0.5258/0.12 -4 26 45 10G4/26 CIExyY:0.04/0.4545/0.12 -4 24 37.5 2.5G4/24 CIExyY:0.076/0.725/0.12 -4 24 40 5G4/24 CIExyY:0.0614/0.5857/0.12 -4 24 42.5 7.5G4/24 CIExyY:0.0581/0.5151/0.12 -4 24 45 10G4/24 CIExyY:0.0553/0.4492/0.12 -4 22 37.5 2.5G4/22 CIExyY:0.1009/0.6975/0.12 -4 22 40 5G4/22 CIExyY:0.0841/0.5684/0.12 -4 22 42.5 7.5G4/22 CIExyY:0.077/0.504/0.12 -4 22 45 10G4/22 CIExyY:0.0702/0.444/0.12 -4 20 37.5 2.5G4/20 CIExyY:0.123/0.6706/0.12 -4 20 40 5G4/20 CIExyY:0.1018/0.5543/0.12 -4 20 42.5 7.5G4/20 CIExyY:0.0928/0.4942/0.12 -4 20 45 10G4/20 CIExyY:0.085/0.4388/0.12 -4 18 37.5 2.5G4/18 CIExyY:0.1446/0.6431/0.12 -4 18 40 5G4/18 CIExyY:0.1188/0.54/0.12 -4 18 42.5 7.5G4/18 CIExyY:0.1086/0.4842/0.12 -4 18 45 10G4/18 CIExyY:0.1006/0.433/0.12 -4 16 37.5 2.5G4/16 CIExyY:0.1682/0.6111/0.12 -4 16 40 5G4/16 CIExyY:0.1402/0.5214/0.12 -4 16 42.5 7.5G4/16 CIExyY:0.1293/0.4703/0.12 -4 16 45 10G4/16 CIExyY:0.1212/0.4245/0.12 -4 14 37.5 2.5G4/14 CIExyY:0.1909/0.5779/0.12 -4 14 40 5G4/14 CIExyY:0.1627/0.5015/0.12 -4 14 42.5 7.5G4/14 CIExyY:0.15/0.4562/0.12 -4 14 45 10G4/14 CIExyY:0.1398/0.4168/0.12 -4 12 37.5 2.5G4/12 CIExyY:0.2128/0.5425/0.12 -4 12 40 5G4/12 CIExyY:0.1843/0.4807/0.12 -4 12 42.5 7.5G4/12 CIExyY:0.1706/0.4419/0.12 -4 12 45 10G4/12 CIExyY:0.1602/0.407/0.12 -4 10 37.5 2.5G4/10 CIExyY:0.2355/0.5006/0.12 -4 10 40 5G4/10 CIExyY:0.2115/0.4532/0.12 -4 10 42.5 7.5G4/10 CIExyY:0.1989/0.4219/0.12 -4 10 45 10G4/10 CIExyY:0.1876/0.3933/0.12 -4 8 37.5 2.5G4/8 CIExyY:0.2561/0.4597/0.12 -4 8 40 5G4/8 CIExyY:0.2359/0.4266/0.12 -4 8 42.5 7.5G4/8 CIExyY:0.2232/0.4022/0.12 -4 8 45 10G4/8 CIExyY:0.2124/0.3799/0.12 -4 6 37.5 2.5G4/6 CIExyY:0.2735/0.4215/0.12 -4 6 40 5G4/6 CIExyY:0.2581/0.3992/0.12 -4 6 42.5 7.5G4/6 CIExyY:0.2467/0.3822/0.12 -4 6 45 10G4/6 CIExyY:0.2374/0.3655/0.12 -4 4 37.5 2.5G4/4 CIExyY:0.2891/0.3821/0.12 -4 4 40 5G4/4 CIExyY:0.2781/0.3704/0.12 -4 4 42.5 7.5G4/4 CIExyY:0.2702/0.3602/0.12 -4 4 45 10G4/4 CIExyY:0.2628/0.3498/0.12 -4 3 37.5 2.5G4/3 CIExyY:0.2956/0.364/0.12 -4 3 40 5G4/3 CIExyY:0.2874/0.3558/0.12 -4 3 42.5 7.5G4/3 CIExyY:0.2814/0.3486/0.12 -4 3 45 10G4/3 CIExyY:0.2756/0.3413/0.12 -4 2 37.5 2.5G4/2 CIExyY:0.3012/0.347/0.12 -4 2 40 5G4/2 CIExyY:0.2959/0.3417/0.12 -4 2 42.5 7.5G4/2 CIExyY:0.2919/0.3371/0.12 -4 2 45 10G4/2 CIExyY:0.288/0.3327/0.12 -4 1 40 5G4/1 CIExyY:0.3035/0.3284/0.12 -4 1 45 10G4/1 CIExyY:0.2996/0.3243/0.12 -3 22 37.5 2.5G3/22 CIExyY:0.039/0.7468/0.06555 -3 22 40 5G3/22 CIExyY:0.034/0.6011/0.06555 -3 22 42.5 7.5G3/22 CIExyY:0.0332/0.5206/0.06555 -3 22 45 10G3/22 CIExyY:0.0333/0.4444/0.06555 -3 20 37.5 2.5G3/20 CIExyY:0.072/0.7127/0.06555 -3 20 40 5G3/20 CIExyY:0.062/0.5802/0.06555 -3 20 42.5 7.5G3/20 CIExyY:0.0568/0.5082/0.06555 -3 20 45 10G3/20 CIExyY:0.0528/0.4393/0.06555 -3 18 37.5 2.5G3/18 CIExyY:0.1049/0.6766/0.06555 -3 18 40 5G3/18 CIExyY:0.0882/0.5605/0.06555 -3 18 42.5 7.5G3/18 CIExyY:0.0798/0.4954/0.06555 -3 18 45 10G3/18 CIExyY:0.0718/0.434/0.06555 -3 16 37.5 2.5G3/16 CIExyY:0.1341/0.642/0.06555 -3 16 40 5G3/16 CIExyY:0.112/0.5414/0.06555 -3 16 42.5 7.5G3/16 CIExyY:0.1023/0.4818/0.06555 -3 16 45 10G3/16 CIExyY:0.0925/0.4275/0.06555 -3 14 37.5 2.5G3/14 CIExyY:0.1626/0.6052/0.06555 -3 14 40 5G3/14 CIExyY:0.1382/0.5197/0.06555 -3 14 42.5 7.5G3/14 CIExyY:0.1262/0.4667/0.06555 -3 14 45 10G3/14 CIExyY:0.1161/0.4192/0.06555 -3 12 37.5 2.5G3/12 CIExyY:0.1902/0.5642/0.06555 -3 12 40 5G3/12 CIExyY:0.166/0.4948/0.06555 -3 12 42.5 7.5G3/12 CIExyY:0.1516/0.4505/0.06555 -3 12 45 10G3/12 CIExyY:0.1411/0.4095/0.06555 -3 10 37.5 2.5G3/10 CIExyY:0.217/0.5211/0.06555 -3 10 40 5G3/10 CIExyY:0.1935/0.4682/0.06555 -3 10 42.5 7.5G3/10 CIExyY:0.18/0.431/0.06555 -3 10 45 10G3/10 CIExyY:0.1688/0.3974/0.06555 -3 8 37.5 2.5G3/8 CIExyY:0.2435/0.4752/0.06555 -3 8 40 5G3/8 CIExyY:0.2228/0.438/0.06555 -3 8 42.5 7.5G3/8 CIExyY:0.2088/0.4101/0.06555 -3 8 45 10G3/8 CIExyY:0.197/0.3841/0.06555 -3 6 37.5 2.5G3/6 CIExyY:0.2642/0.4342/0.06555 -3 6 40 5G3/6 CIExyY:0.2471/0.41/0.06555 -3 6 42.5 7.5G3/6 CIExyY:0.2346/0.3901/0.06555 -3 6 45 10G3/6 CIExyY:0.224/0.3699/0.06555 -3 4 37.5 2.5G3/4 CIExyY:0.2836/0.3915/0.06555 -3 4 40 5G3/4 CIExyY:0.2711/0.378/0.06555 -3 4 42.5 7.5G3/4 CIExyY:0.2618/0.3667/0.06555 -3 4 45 10G3/4 CIExyY:0.2525/0.3537/0.06555 -3 3 37.5 2.5G3/3 CIExyY:0.2923/0.3702/0.06555 -3 3 40 5G3/3 CIExyY:0.2828/0.3607/0.06555 -3 3 42.5 7.5G3/3 CIExyY:0.2758/0.3529/0.06555 -3 3 45 10G3/3 CIExyY:0.2686/0.3438/0.06555 -3 2 37.5 2.5G3/2 CIExyY:0.2999/0.35/0.06555 -3 2 40 5G3/2 CIExyY:0.2935/0.3439/0.06555 -3 2 42.5 7.5G3/2 CIExyY:0.289/0.3391/0.06555 -3 2 45 10G3/2 CIExyY:0.2844/0.3337/0.06555 -3 1 40 5G3/1 CIExyY:0.3028/0.3288/0.06555 -3 1 45 10G3/1 CIExyY:0.2986/0.3243/0.06555 -2 16 37.5 2.5G2/16 CIExyY:0.0329/0.7358/0.03126 -2 16 40 5G2/16 CIExyY:0.0277/0.5986/0.03126 -2 16 42.5 7.5G2/16 CIExyY:0.0276/0.5153/0.03126 -2 16 45 10G2/16 CIExyY:0.0285/0.4327/0.03126 -2 14 37.5 2.5G2/14 CIExyY:0.082/0.686/0.03126 -2 14 40 5G2/14 CIExyY:0.0688/0.5691/0.03126 -2 14 42.5 7.5G2/14 CIExyY:0.0629/0.4973/0.03126 -2 14 45 10G2/14 CIExyY:0.0599/0.427/0.03126 -2 12 37.5 2.5G2/12 CIExyY:0.1307/0.6308/0.03126 -2 12 40 5G2/12 CIExyY:0.112/0.5358/0.03126 -2 12 42.5 7.5G2/12 CIExyY:0.1022/0.4759/0.03126 -2 12 45 10G2/12 CIExyY:0.0934/0.4183/0.03126 -2 10 37.5 2.5G2/10 CIExyY:0.1773/0.5698/0.03126 -2 10 40 5G2/10 CIExyY:0.156/0.4981/0.03126 -2 10 42.5 7.5G2/10 CIExyY:0.1442/0.4505/0.03126 -2 10 45 10G2/10 CIExyY:0.1321/0.4059/0.03126 -2 8 37.5 2.5G2/8 CIExyY:0.2192/0.5042/0.03126 -2 8 40 5G2/8 CIExyY:0.1979/0.4583/0.03126 -2 8 42.5 7.5G2/8 CIExyY:0.1842/0.4244/0.03126 -2 8 45 10G2/8 CIExyY:0.1705/0.3911/0.03126 -2 6 37.5 2.5G2/6 CIExyY:0.2493/0.4522/0.03126 -2 6 40 5G2/6 CIExyY:0.2318/0.4231/0.03126 -2 6 42.5 7.5G2/6 CIExyY:0.22/0.3983/0.03126 -2 6 45 10G2/6 CIExyY:0.2092/0.3739/0.03126 -2 4 37.5 2.5G2/4 CIExyY:0.2763/0.3998/0.03126 -2 4 40 5G2/4 CIExyY:0.264/0.3845/0.03126 -2 4 42.5 7.5G2/4 CIExyY:0.254/0.3705/0.03126 -2 4 45 10G2/4 CIExyY:0.2442/0.3559/0.03126 -2 3 37.5 2.5G2/3 CIExyY:0.288/0.3741/0.03126 -2 3 40 5G2/3 CIExyY:0.2788/0.3641/0.03126 -2 3 42.5 7.5G2/3 CIExyY:0.2711/0.355/0.03126 -2 3 45 10G2/3 CIExyY:0.2635/0.345/0.03126 -2 2 37.5 2.5G2/2 CIExyY:0.2978/0.3507/0.03126 -2 2 40 5G2/2 CIExyY:0.2918/0.345/0.03126 -2 2 42.5 7.5G2/2 CIExyY:0.2869/0.34/0.03126 -2 2 45 10G2/2 CIExyY:0.282/0.3341/0.03126 -2 1 40 5G2/1 CIExyY:0.3025/0.3286/0.03126 -2 1 45 10G2/1 CIExyY:0.298/0.3242/0.03126 -1 8 37.5 2.5G1/8 CIExyY:0.062/0.6896/0.0121 -1 8 40 5G1/8 CIExyY:0.0559/0.571/0.0121 -1 8 42.5 7.5G1/8 CIExyY:0.053/0.4943/0.0121 -1 8 45 10G1/8 CIExyY:0.0511/0.4158/0.0121 -1 6 37.5 2.5G1/6 CIExyY:0.1711/0.5619/0.0121 -1 6 40 5G1/6 CIExyY:0.1468/0.4996/0.0121 -1 6 42.5 7.5G1/6 CIExyY:0.1344/0.4505/0.0121 -1 6 45 10G1/6 CIExyY:0.1249/0.4019/0.0121 -1 4 37.5 2.5G1/4 CIExyY:0.2454/0.4489/0.0121 -1 4 40 5G1/4 CIExyY:0.229/0.4218/0.0121 -1 4 42.5 7.5G1/4 CIExyY:0.2159/0.3967/0.0121 -1 4 45 10G1/4 CIExyY:0.204/0.3724/0.0121 -1 2 37.5 2.5G1/2 CIExyY:0.291/0.3634/0.0121 -1 2 40 5G1/2 CIExyY:0.2833/0.3564/0.0121 -1 2 42.5 7.5G1/2 CIExyY:0.2758/0.3484/0.0121 -1 2 45 10G1/2 CIExyY:0.2689/0.3407/0.0121 -9 10 47.5 2.5BG9/10 CIExyY:0.2382/0.3568/0.7866 -9 10 50 5BG9/10 CIExyY:0.2301/0.3405/0.7866 -9 10 52.5 7.5BG9/10 CIExyY:0.2215/0.3226/0.7866 -9 8 47.5 2.5BG9/8 CIExyY:0.2509/0.3507/0.7866 -9 8 50 5BG9/8 CIExyY:0.2437/0.3378/0.7866 -9 8 52.5 7.5BG9/8 CIExyY:0.2361/0.3225/0.7866 -9 6 47.5 2.5BG9/6 CIExyY:0.2652/0.3433/0.7866 -9 6 50 5BG9/6 CIExyY:0.2599/0.3338/0.7866 -9 6 52.5 7.5BG9/6 CIExyY:0.2543/0.322/0.7866 -9 6 55 10BG9/6 CIExyY:0.2501/0.3118/0.7866 -9 4 47.5 2.5BG9/4 CIExyY:0.2805/0.3349/0.7866 -9 4 50 5BG9/4 CIExyY:0.2768/0.3287/0.7866 -9 4 52.5 7.5BG9/4 CIExyY:0.2728/0.3208/0.7866 -9 4 55 10BG9/4 CIExyY:0.27/0.314/0.7866 -9 2 47.5 2.5BG9/2 CIExyY:0.2947/0.3267/0.7866 -9 2 50 5BG9/2 CIExyY:0.293/0.3232/0.7866 -9 2 52.5 7.5BG9/2 CIExyY:0.2911/0.3188/0.7866 -9 2 55 10BG9/2 CIExyY:0.2907/0.3159/0.7866 -9 1 50 5BG9/1 CIExyY:0.3013/0.32/0.7866 -9 1 55 10BG9/1 CIExyY:0.3007/0.3164/0.7866 -8 18 47.5 2.5BG8/18 CIExyY:0.1759/0.3782/0.591 -8 16 47.5 2.5BG8/16 CIExyY:0.1915/0.3732/0.591 -8 16 50 5BG8/16 CIExyY:0.1814/0.345/0.591 -8 16 52.5 7.5BG8/16 CIExyY:0.1721/0.3168/0.591 -8 14 47.5 2.5BG8/14 CIExyY:0.2057/0.3681/0.591 -8 14 50 5BG8/14 CIExyY:0.1958/0.3432/0.591 -8 14 52.5 7.5BG8/14 CIExyY:0.1868/0.3179/0.591 -8 14 55 10BG8/14 CIExyY:0.1788/0.2936/0.591 -8 12 47.5 2.5BG8/12 CIExyY:0.2196/0.363/0.591 -8 12 50 5BG8/12 CIExyY:0.2101/0.3412/0.591 -8 12 52.5 7.5BG8/12 CIExyY:0.201/0.3188/0.591 -8 12 55 10BG8/12 CIExyY:0.1937/0.2978/0.591 -8 10 47.5 2.5BG8/10 CIExyY:0.2352/0.3566/0.591 -8 10 50 5BG8/10 CIExyY:0.2264/0.3383/0.591 -8 10 52.5 7.5BG8/10 CIExyY:0.2184/0.3196/0.591 -8 10 55 10BG8/10 CIExyY:0.212/0.3025/0.591 -8 8 47.5 2.5BG8/8 CIExyY:0.25/0.35/0.591 -8 8 50 5BG8/8 CIExyY:0.2419/0.3352/0.591 -8 8 52.5 7.5BG8/8 CIExyY:0.2352/0.3198/0.591 -8 8 55 10BG8/8 CIExyY:0.2302/0.3063/0.591 -8 6 47.5 2.5BG8/6 CIExyY:0.2647/0.3429/0.591 -8 6 50 5BG8/6 CIExyY:0.2588/0.3318/0.591 -8 6 52.5 7.5BG8/6 CIExyY:0.2525/0.3198/0.591 -8 6 55 10BG8/6 CIExyY:0.2489/0.3099/0.591 -8 4 47.5 2.5BG8/4 CIExyY:0.2791/0.3351/0.591 -8 4 50 5BG8/4 CIExyY:0.2752/0.3278/0.591 -8 4 52.5 7.5BG8/4 CIExyY:0.2718/0.32/0.591 -8 4 55 10BG8/4 CIExyY:0.2686/0.313/0.591 -8 3 47.5 2.5BG8/3 CIExyY:0.2864/0.3311/0.591 -8 3 50 5BG8/3 CIExyY:0.2834/0.3255/0.591 -8 3 52.5 7.5BG8/3 CIExyY:0.2809/0.3193/0.591 -8 3 55 10BG8/3 CIExyY:0.2789/0.3142/0.591 -8 2 47.5 2.5BG8/2 CIExyY:0.294/0.3268/0.591 -8 2 50 5BG8/2 CIExyY:0.2919/0.3228/0.591 -8 2 52.5 7.5BG8/2 CIExyY:0.29/0.3183/0.591 -8 2 55 10BG8/2 CIExyY:0.2894/0.3152/0.591 -8 1 50 5BG8/1 CIExyY:0.3007/0.3198/0.591 -8 1 55 10BG8/1 CIExyY:0.2998/0.3159/0.591 -7 22 47.5 2.5BG7/22 CIExyY:0.1334/0.387/0.4306 -7 20 47.5 2.5BG7/20 CIExyY:0.149/0.3827/0.4306 -7 20 50 5BG7/20 CIExyY:0.138/0.3412/0.4306 -7 18 47.5 2.5BG7/18 CIExyY:0.1626/0.3788/0.4306 -7 18 50 5BG7/18 CIExyY:0.1515/0.341/0.4306 -7 18 52.5 7.5BG7/18 CIExyY:0.1427/0.3076/0.4306 -7 16 47.5 2.5BG7/16 CIExyY:0.1788/0.3739/0.4306 -7 16 50 5BG7/16 CIExyY:0.1675/0.3401/0.4306 -7 16 52.5 7.5BG7/16 CIExyY:0.1584/0.3101/0.4306 -7 16 55 10BG7/16 CIExyY:0.1489/0.2768/0.4306 -7 14 47.5 2.5BG7/14 CIExyY:0.1932/0.3694/0.4306 -7 14 50 5BG7/14 CIExyY:0.1838/0.339/0.4306 -7 14 52.5 7.5BG7/14 CIExyY:0.1751/0.3129/0.4306 -7 14 55 10BG7/14 CIExyY:0.1671/0.2832/0.4306 -7 12 47.5 2.5BG7/12 CIExyY:0.2102/0.3636/0.4306 -7 12 50 5BG7/12 CIExyY:0.1997/0.3379/0.4306 -7 12 52.5 7.5BG7/12 CIExyY:0.1914/0.3148/0.4306 -7 12 55 10BG7/12 CIExyY:0.1841/0.2892/0.4306 -7 10 47.5 2.5BG7/10 CIExyY:0.2264/0.3576/0.4306 -7 10 50 5BG7/10 CIExyY:0.2163/0.3361/0.4306 -7 10 52.5 7.5BG7/10 CIExyY:0.2094/0.3165/0.4306 -7 10 55 10BG7/10 CIExyY:0.2035/0.2956/0.4306 -7 8 47.5 2.5BG7/8 CIExyY:0.2439/0.3508/0.4306 -7 8 50 5BG7/8 CIExyY:0.2354/0.3335/0.4306 -7 8 52.5 7.5BG7/8 CIExyY:0.2292/0.3178/0.4306 -7 8 55 10BG7/8 CIExyY:0.2235/0.3014/0.4306 -7 6 47.5 2.5BG7/6 CIExyY:0.2608/0.343/0.4306 -7 6 50 5BG7/6 CIExyY:0.2543/0.3302/0.4306 -7 6 52.5 7.5BG7/6 CIExyY:0.249/0.3186/0.4306 -7 6 55 10BG7/6 CIExyY:0.2448/0.3069/0.4306 -7 4 47.5 2.5BG7/4 CIExyY:0.2764/0.3354/0.4306 -7 4 50 5BG7/4 CIExyY:0.2712/0.3269/0.4306 -7 4 52.5 7.5BG7/4 CIExyY:0.2671/0.3189/0.4306 -7 4 55 10BG7/4 CIExyY:0.2642/0.3109/0.4306 -7 3 47.5 2.5BG7/3 CIExyY:0.2844/0.3313/0.4306 -7 3 50 5BG7/3 CIExyY:0.2803/0.3249/0.4306 -7 3 52.5 7.5BG7/3 CIExyY:0.2772/0.3187/0.4306 -7 3 55 10BG7/3 CIExyY:0.2753/0.3127/0.4306 -7 2 47.5 2.5BG7/2 CIExyY:0.2927/0.3269/0.4306 -7 2 50 5BG7/2 CIExyY:0.2898/0.3225/0.4306 -7 2 52.5 7.5BG7/2 CIExyY:0.2878/0.3182/0.4306 -7 2 55 10BG7/2 CIExyY:0.2869/0.3143/0.4306 -7 1 50 5BG7/1 CIExyY:0.2997/0.3197/0.4306 -7 1 55 10BG7/1 CIExyY:0.2986/0.3155/0.4306 -6 22 47.5 2.5BG6/22 CIExyY:0.112/0.386/0.3005 -6 20 47.5 2.5BG6/20 CIExyY:0.1269/0.3829/0.3005 -6 20 50 5BG6/20 CIExyY:0.1168/0.3344/0.3005 -6 18 47.5 2.5BG6/18 CIExyY:0.1423/0.379/0.3005 -6 18 50 5BG6/18 CIExyY:0.1325/0.3345/0.3005 -6 18 52.5 7.5BG6/18 CIExyY:0.1248/0.2981/0.3005 -6 18 55 10BG6/18 CIExyY:0.1181/0.2581/0.3005 -6 16 47.5 2.5BG6/16 CIExyY:0.16/0.3748/0.3005 -6 16 50 5BG6/16 CIExyY:0.1491/0.3345/0.3005 -6 16 52.5 7.5BG6/16 CIExyY:0.1408/0.3017/0.3005 -6 16 55 10BG6/16 CIExyY:0.1337/0.2651/0.3005 -6 14 47.5 2.5BG6/14 CIExyY:0.1779/0.3699/0.3005 -6 14 50 5BG6/14 CIExyY:0.1662/0.3343/0.3005 -6 14 52.5 7.5BG6/14 CIExyY:0.1585/0.3052/0.3005 -6 14 55 10BG6/14 CIExyY:0.1518/0.2729/0.3005 -6 12 47.5 2.5BG6/12 CIExyY:0.1954/0.3645/0.3005 -6 12 50 5BG6/12 CIExyY:0.1844/0.3337/0.3005 -6 12 52.5 7.5BG6/12 CIExyY:0.1762/0.3081/0.3005 -6 12 55 10BG6/12 CIExyY:0.1698/0.2802/0.3005 -6 10 47.5 2.5BG6/10 CIExyY:0.2148/0.3584/0.3005 -6 10 50 5BG6/10 CIExyY:0.2037/0.3329/0.3005 -6 10 52.5 7.5BG6/10 CIExyY:0.1961/0.311/0.3005 -6 10 55 10BG6/10 CIExyY:0.1909/0.2881/0.3005 -6 8 47.5 2.5BG6/8 CIExyY:0.2332/0.3522/0.3005 -6 8 50 5BG6/8 CIExyY:0.2236/0.3311/0.3005 -6 8 52.5 7.5BG6/8 CIExyY:0.2171/0.3138/0.3005 -6 8 55 10BG6/8 CIExyY:0.2116/0.295/0.3005 -6 6 47.5 2.5BG6/6 CIExyY:0.2526/0.3448/0.3005 -6 6 50 5BG6/6 CIExyY:0.2441/0.329/0.3005 -6 6 52.5 7.5BG6/6 CIExyY:0.2384/0.3155/0.3005 -6 6 55 10BG6/6 CIExyY:0.2335/0.3015/0.3005 -6 4 47.5 2.5BG6/4 CIExyY:0.2702/0.3369/0.3005 -6 4 50 5BG6/4 CIExyY:0.2648/0.3262/0.3005 -6 4 52.5 7.5BG6/4 CIExyY:0.2604/0.3169/0.3005 -6 4 55 10BG6/4 CIExyY:0.2578/0.3078/0.3005 -6 3 47.5 2.5BG6/3 CIExyY:0.2801/0.332/0.3005 -6 3 50 5BG6/3 CIExyY:0.2759/0.3242/0.3005 -6 3 52.5 7.5BG6/3 CIExyY:0.2725/0.3172/0.3005 -6 3 55 10BG6/3 CIExyY:0.2706/0.3107/0.3005 -6 2 47.5 2.5BG6/2 CIExyY:0.2902/0.3268/0.3005 -6 2 50 5BG6/2 CIExyY:0.2872/0.3219/0.3005 -6 2 52.5 7.5BG6/2 CIExyY:0.2849/0.3172/0.3005 -6 2 55 10BG6/2 CIExyY:0.2837/0.3132/0.3005 -6 1 50 5BG6/1 CIExyY:0.2987/0.3193/0.3005 -6 1 55 10BG6/1 CIExyY:0.2969/0.3151/0.3005 -5 24 47.5 2.5BG5/24 CIExyY:0.0738/0.3851/0.1977 -5 22 47.5 2.5BG5/22 CIExyY:0.0861/0.3832/0.1977 -5 22 50 5BG5/22 CIExyY:0.0781/0.3211/0.1977 -5 20 47.5 2.5BG5/20 CIExyY:0.1005/0.3814/0.1977 -5 20 50 5BG5/20 CIExyY:0.0904/0.3231/0.1977 -5 18 47.5 2.5BG5/18 CIExyY:0.1165/0.3785/0.1977 -5 18 50 5BG5/18 CIExyY:0.1046/0.3244/0.1977 -5 18 52.5 7.5BG5/18 CIExyY:0.0982/0.2828/0.1977 -5 16 47.5 2.5BG5/16 CIExyY:0.1348/0.375/0.1977 -5 16 50 5BG5/16 CIExyY:0.1243/0.3261/0.1977 -5 16 52.5 7.5BG5/16 CIExyY:0.1167/0.288/0.1977 -5 16 55 10BG5/16 CIExyY:0.1108/0.2489/0.1977 -5 14 47.5 2.5BG5/14 CIExyY:0.1559/0.3708/0.1977 -5 14 50 5BG5/14 CIExyY:0.1448/0.3275/0.1977 -5 14 52.5 7.5BG5/14 CIExyY:0.1364/0.2932/0.1977 -5 14 55 10BG5/14 CIExyY:0.1308/0.2582/0.1977 -5 12 47.5 2.5BG5/12 CIExyY:0.1735/0.3668/0.1977 -5 12 50 5BG5/12 CIExyY:0.1614/0.328/0.1977 -5 12 52.5 7.5BG5/12 CIExyY:0.1537/0.2976/0.1977 -5 12 55 10BG5/12 CIExyY:0.1485/0.2662/0.1977 -5 10 47.5 2.5BG5/10 CIExyY:0.198/0.3606/0.1977 -5 10 50 5BG5/10 CIExyY:0.185/0.328/0.1977 -5 10 52.5 7.5BG5/10 CIExyY:0.1776/0.3032/0.1977 -5 10 55 10BG5/10 CIExyY:0.1716/0.276/0.1977 -5 8 47.5 2.5BG5/8 CIExyY:0.2205/0.3537/0.1977 -5 8 50 5BG5/8 CIExyY:0.21/0.328/0.1977 -5 8 52.5 7.5BG5/8 CIExyY:0.203/0.3082/0.1977 -5 8 55 10BG5/8 CIExyY:0.197/0.286/0.1977 -5 6 47.5 2.5BG5/6 CIExyY:0.2448/0.3452/0.1977 -5 6 50 5BG5/6 CIExyY:0.236/0.327/0.1977 -5 6 52.5 7.5BG5/6 CIExyY:0.2292/0.3125/0.1977 -5 6 55 10BG5/6 CIExyY:0.2234/0.2952/0.1977 -5 4 47.5 2.5BG5/4 CIExyY:0.2659/0.3369/0.1977 -5 4 50 5BG5/4 CIExyY:0.2591/0.3246/0.1977 -5 4 52.5 7.5BG5/4 CIExyY:0.255/0.315/0.1977 -5 4 55 10BG5/4 CIExyY:0.2512/0.304/0.1977 -5 3 47.5 2.5BG5/3 CIExyY:0.2769/0.3321/0.1977 -5 3 50 5BG5/3 CIExyY:0.2714/0.3229/0.1977 -5 3 52.5 7.5BG5/3 CIExyY:0.2679/0.3157/0.1977 -5 3 55 10BG5/3 CIExyY:0.2652/0.3078/0.1977 -5 2 47.5 2.5BG5/2 CIExyY:0.288/0.327/0.1977 -5 2 50 5BG5/2 CIExyY:0.2841/0.321/0.1977 -5 2 52.5 7.5BG5/2 CIExyY:0.2812/0.3161/0.1977 -5 2 55 10BG5/2 CIExyY:0.2796/0.3111/0.1977 -5 1 50 5BG5/1 CIExyY:0.297/0.3188/0.1977 -5 1 55 10BG5/1 CIExyY:0.2945/0.3139/0.1977 -4 24 47.5 2.5BG4/24 CIExyY:0.051/0.38/0.12 -4 22 47.5 2.5BG4/22 CIExyY:0.0636/0.3788/0.12 -4 20 47.5 2.5BG4/20 CIExyY:0.0768/0.3773/0.12 -4 20 50 5BG4/20 CIExyY:0.0675/0.3075/0.12 -4 18 47.5 2.5BG4/18 CIExyY:0.0915/0.3754/0.12 -4 18 50 5BG4/18 CIExyY:0.0828/0.3108/0.12 -4 18 52.5 7.5BG4/18 CIExyY:0.0768/0.2667/0.12 -4 16 47.5 2.5BG4/16 CIExyY:0.1102/0.372/0.12 -4 16 50 5BG4/16 CIExyY:0.0992/0.3141/0.12 -4 16 52.5 7.5BG4/16 CIExyY:0.0922/0.2718/0.12 -4 16 55 10BG4/16 CIExyY:0.0888/0.2298/0.12 -4 14 47.5 2.5BG4/14 CIExyY:0.1283/0.3688/0.12 -4 14 50 5BG4/14 CIExyY:0.117/0.317/0.12 -4 14 52.5 7.5BG4/14 CIExyY:0.1092/0.2774/0.12 -4 14 55 10BG4/14 CIExyY:0.1033/0.2376/0.12 -4 12 47.5 2.5BG4/12 CIExyY:0.1492/0.3649/0.12 -4 12 50 5BG4/12 CIExyY:0.1379/0.3193/0.12 -4 12 52.5 7.5BG4/12 CIExyY:0.1298/0.284/0.12 -4 12 55 10BG4/12 CIExyY:0.1248/0.2484/0.12 -4 10 47.5 2.5BG4/10 CIExyY:0.1738/0.36/0.12 -4 10 50 5BG4/10 CIExyY:0.1618/0.3219/0.12 -4 10 52.5 7.5BG4/10 CIExyY:0.154/0.291/0.12 -4 10 55 10BG4/10 CIExyY:0.148/0.26/0.12 -4 8 47.5 2.5BG4/8 CIExyY:0.2006/0.354/0.12 -4 8 50 5BG4/8 CIExyY:0.189/0.3234/0.12 -4 8 52.5 7.5BG4/8 CIExyY:0.1815/0.2985/0.12 -4 8 55 10BG4/8 CIExyY:0.176/0.273/0.12 -4 6 47.5 2.5BG4/6 CIExyY:0.2278/0.3463/0.12 -4 6 50 5BG4/6 CIExyY:0.2182/0.324/0.12 -4 6 52.5 7.5BG4/6 CIExyY:0.2113/0.3052/0.12 -4 6 55 10BG4/6 CIExyY:0.2063/0.2863/0.12 -4 4 47.5 2.5BG4/4 CIExyY:0.2552/0.3375/0.12 -4 4 50 5BG4/4 CIExyY:0.248/0.3232/0.12 -4 4 52.5 7.5BG4/4 CIExyY:0.2429/0.3108/0.12 -4 4 55 10BG4/4 CIExyY:0.2384/0.2984/0.12 -4 3 47.5 2.5BG4/3 CIExyY:0.2697/0.3324/0.12 -4 3 50 5BG4/3 CIExyY:0.2639/0.3222/0.12 -4 3 52.5 7.5BG4/3 CIExyY:0.2595/0.3131/0.12 -4 3 55 10BG4/3 CIExyY:0.2559/0.3041/0.12 -4 2 47.5 2.5BG4/2 CIExyY:0.284/0.327/0.12 -4 2 50 5BG4/2 CIExyY:0.2799/0.3208/0.12 -4 2 52.5 7.5BG4/2 CIExyY:0.2764/0.3148/0.12 -4 2 55 10BG4/2 CIExyY:0.274/0.3091/0.12 -4 1 50 5BG4/1 CIExyY:0.2954/0.3188/0.12 -4 1 55 10BG4/1 CIExyY:0.2922/0.3133/0.12 -3 20 47.5 2.5BG3/20 CIExyY:0.0482/0.3695/0.06555 -3 18 47.5 2.5BG3/18 CIExyY:0.0648/0.3682/0.06555 -3 18 50 5BG3/18 CIExyY:0.058/0.294/0.06555 -3 16 47.5 2.5BG3/16 CIExyY:0.0843/0.3667/0.06555 -3 16 50 5BG3/16 CIExyY:0.0735/0.2979/0.06555 -3 16 52.5 7.5BG3/16 CIExyY:0.0691/0.2559/0.06555 -3 14 47.5 2.5BG3/14 CIExyY:0.1051/0.3648/0.06555 -3 14 50 5BG3/14 CIExyY:0.094/0.3027/0.06555 -3 14 52.5 7.5BG3/14 CIExyY:0.0874/0.2627/0.06555 -3 14 55 10BG3/14 CIExyY:0.0798/0.2151/0.06555 -3 12 47.5 2.5BG3/12 CIExyY:0.1288/0.362/0.06555 -3 12 50 5BG3/12 CIExyY:0.1158/0.3071/0.06555 -3 12 52.5 7.5BG3/12 CIExyY:0.1086/0.2706/0.06555 -3 12 55 10BG3/12 CIExyY:0.1018/0.2281/0.06555 -3 10 47.5 2.5BG3/10 CIExyY:0.1552/0.358/0.06555 -3 10 50 5BG3/10 CIExyY:0.141/0.3118/0.06555 -3 10 52.5 7.5BG3/10 CIExyY:0.1326/0.2784/0.06555 -3 10 55 10BG3/10 CIExyY:0.125/0.2411/0.06555 -3 8 47.5 2.5BG3/8 CIExyY:0.1845/0.3531/0.06555 -3 8 50 5BG3/8 CIExyY:0.1703/0.3159/0.06555 -3 8 52.5 7.5BG3/8 CIExyY:0.162/0.2872/0.06555 -3 8 55 10BG3/8 CIExyY:0.1551/0.2571/0.06555 -3 6 47.5 2.5BG3/6 CIExyY:0.2132/0.3468/0.06555 -3 6 50 5BG3/6 CIExyY:0.202/0.3188/0.06555 -3 6 52.5 7.5BG3/6 CIExyY:0.1928/0.2958/0.06555 -3 6 55 10BG3/6 CIExyY:0.1861/0.2722/0.06555 -3 4 47.5 2.5BG3/4 CIExyY:0.2437/0.3386/0.06555 -3 4 50 5BG3/4 CIExyY:0.2343/0.32/0.06555 -3 4 52.5 7.5BG3/4 CIExyY:0.2272/0.3041/0.06555 -3 4 55 10BG3/4 CIExyY:0.2221/0.2886/0.06555 -3 3 47.5 2.5BG3/3 CIExyY:0.2618/0.333/0.06555 -3 3 50 5BG3/3 CIExyY:0.254/0.3199/0.06555 -3 3 52.5 7.5BG3/3 CIExyY:0.2482/0.3083/0.06555 -3 3 55 10BG3/3 CIExyY:0.2435/0.2971/0.06555 -3 2 47.5 2.5BG3/2 CIExyY:0.2799/0.3271/0.06555 -3 2 50 5BG3/2 CIExyY:0.2742/0.3192/0.06555 -3 2 52.5 7.5BG3/2 CIExyY:0.2699/0.312/0.06555 -3 2 55 10BG3/2 CIExyY:0.266/0.305/0.06555 -3 1 50 5BG3/1 CIExyY:0.2934/0.318/0.06555 -3 1 55 10BG3/1 CIExyY:0.2885/0.3116/0.06555 -2 14 47.5 2.5BG2/14 CIExyY:0.0555/0.3588/0.03126 -2 12 47.5 2.5BG2/12 CIExyY:0.0851/0.3576/0.03126 -2 12 50 5BG2/12 CIExyY:0.0769/0.288/0.03126 -2 12 52.5 7.5BG2/12 CIExyY:0.0724/0.2478/0.03126 -2 10 47.5 2.5BG2/10 CIExyY:0.119/0.3551/0.03126 -2 10 50 5BG2/10 CIExyY:0.105/0.2956/0.03126 -2 10 52.5 7.5BG2/10 CIExyY:0.0991/0.2582/0.03126 -2 10 55 10BG2/10 CIExyY:0.0929/0.2133/0.03126 -2 8 47.5 2.5BG2/8 CIExyY:0.1557/0.3517/0.03126 -2 8 50 5BG2/8 CIExyY:0.1405/0.3037/0.03126 -2 8 52.5 7.5BG2/8 CIExyY:0.1325/0.271/0.03126 -2 8 55 10BG2/8 CIExyY:0.1258/0.2331/0.03126 -2 6 47.5 2.5BG2/6 CIExyY:0.1971/0.3452/0.03126 -2 6 50 5BG2/6 CIExyY:0.1843/0.311/0.03126 -2 6 52.5 7.5BG2/6 CIExyY:0.1747/0.2853/0.03126 -2 6 55 10BG2/6 CIExyY:0.1669/0.257/0.03126 -2 4 47.5 2.5BG2/4 CIExyY:0.2343/0.3378/0.03126 -2 4 50 5BG2/4 CIExyY:0.2234/0.315/0.03126 -2 4 52.5 7.5BG2/4 CIExyY:0.2162/0.2981/0.03126 -2 4 55 10BG2/4 CIExyY:0.2096/0.279/0.03126 -2 3 47.5 2.5BG2/3 CIExyY:0.2556/0.3327/0.03126 -2 3 50 5BG2/3 CIExyY:0.2465/0.3166/0.03126 -2 3 52.5 7.5BG2/3 CIExyY:0.2404/0.3043/0.03126 -2 3 55 10BG2/3 CIExyY:0.2347/0.2904/0.03126 -2 2 47.5 2.5BG2/2 CIExyY:0.2765/0.3271/0.03126 -2 2 50 5BG2/2 CIExyY:0.2697/0.3175/0.03126 -2 2 52.5 7.5BG2/2 CIExyY:0.2651/0.3098/0.03126 -2 2 55 10BG2/2 CIExyY:0.2606/0.301/0.03126 -2 1 50 5BG2/1 CIExyY:0.2915/0.3175/0.03126 -2 1 55 10BG2/1 CIExyY:0.2861/0.3099/0.03126 -1 8 47.5 2.5BG1/8 CIExyY:0.0476/0.3458/0.0121 -1 6 47.5 2.5BG1/6 CIExyY:0.1169/0.3452/0.0121 -1 6 50 5BG1/6 CIExyY:0.1093/0.286/0.0121 -1 6 52.5 7.5BG1/6 CIExyY:0.1059/0.2485/0.0121 -1 6 55 10BG1/6 CIExyY:0.1074/0.2129/0.0121 -1 4 47.5 2.5BG1/4 CIExyY:0.1883/0.3406/0.0121 -1 4 50 5BG1/4 CIExyY:0.1753/0.3021/0.0121 -1 4 52.5 7.5BG1/4 CIExyY:0.1702/0.2768/0.0121 -1 4 55 10BG1/4 CIExyY:0.1658/0.2496/0.0121 -1 2 47.5 2.5BG1/2 CIExyY:0.26/0.3289/0.0121 -1 2 50 5BG1/2 CIExyY:0.25/0.3141/0.0121 -1 2 52.5 7.5BG1/2 CIExyY:0.243/0.3023/0.0121 -1 2 55 10BG1/2 CIExyY:0.2362/0.2882/0.0121 -9 4 57.5 2.5B9/4 CIExyY:0.268/0.3073/0.7866 -9 4 60 5B9/4 CIExyY:0.2675/0.3005/0.7866 -9 4 62.5 7.5B9/4 CIExyY:0.2688/0.2961/0.7866 -9 4 65 10B9/4 CIExyY:0.2712/0.2924/0.7866 -9 2 57.5 2.5B9/2 CIExyY:0.2909/0.3125/0.7866 -9 2 60 5B9/2 CIExyY:0.2919/0.3102/0.7866 -9 2 62.5 7.5B9/2 CIExyY:0.2937/0.3087/0.7866 -9 2 65 10B9/2 CIExyY:0.2949/0.3076/0.7866 -9 1 60 5B9/1 CIExyY:0.3018/0.3137/0.7866 -9 1 65 10B9/1 CIExyY:0.3036/0.3128/0.7866 -8 12 57.5 2.5B8/12 CIExyY:0.1877/0.2752/0.591 -8 10 57.5 2.5B8/10 CIExyY:0.2066/0.2839/0.591 -8 8 57.5 2.5B8/8 CIExyY:0.2264/0.2923/0.591 -8 8 60 5B8/8 CIExyY:0.2237/0.2761/0.591 -8 8 62.5 7.5B8/8 CIExyY:0.2252/0.2668/0.591 -8 8 65 10B8/8 CIExyY:0.2294/0.2587/0.591 -8 6 57.5 2.5B8/6 CIExyY:0.2462/0.3/0.591 -8 6 60 5B8/6 CIExyY:0.2457/0.2888/0.591 -8 6 62.5 7.5B8/6 CIExyY:0.2472/0.2821/0.591 -8 6 65 10B8/6 CIExyY:0.2512/0.276/0.591 -8 4 57.5 2.5B8/4 CIExyY:0.2668/0.3067/0.591 -8 4 60 5B8/4 CIExyY:0.2671/0.2998/0.591 -8 4 62.5 7.5B8/4 CIExyY:0.2688/0.2956/0.591 -8 4 65 10B8/4 CIExyY:0.2718/0.2911/0.591 -8 3 57.5 2.5B8/3 CIExyY:0.2783/0.3097/0.591 -8 3 60 5B8/3 CIExyY:0.2791/0.305/0.591 -8 3 62.5 7.5B8/3 CIExyY:0.2807/0.302/0.591 -8 3 65 10B8/3 CIExyY:0.2829/0.299/0.591 -8 2 57.5 2.5B8/2 CIExyY:0.2897/0.3124/0.591 -8 2 60 5B8/2 CIExyY:0.2908/0.3096/0.591 -8 2 62.5 7.5B8/2 CIExyY:0.2922/0.3077/0.591 -8 2 65 10B8/2 CIExyY:0.2935/0.3062/0.591 -8 1 60 5B8/1 CIExyY:0.3014/0.3135/0.591 -8 1 65 10B8/1 CIExyY:0.3028/0.3122/0.591 -7 16 57.5 2.5B7/16 CIExyY:0.1435/0.2472/0.4306 -7 14 57.5 2.5B7/14 CIExyY:0.1624/0.2581/0.4306 -7 14 60 5B7/14 CIExyY:0.1615/0.2307/0.4306 -7 12 57.5 2.5B7/12 CIExyY:0.1797/0.2672/0.4306 -7 12 60 5B7/12 CIExyY:0.1778/0.243/0.4306 -7 12 62.5 7.5B7/12 CIExyY:0.1818/0.2303/0.4306 -7 12 65 10B7/12 CIExyY:0.1883/0.2203/0.4306 -7 10 57.5 2.5B7/10 CIExyY:0.1994/0.2775/0.4306 -7 10 60 5B7/10 CIExyY:0.1986/0.2579/0.4306 -7 10 62.5 7.5B7/10 CIExyY:0.2016/0.2466/0.4306 -7 10 65 10B7/10 CIExyY:0.2078/0.2382/0.4306 -7 8 57.5 2.5B7/8 CIExyY:0.2208/0.2871/0.4306 -7 8 60 5B7/8 CIExyY:0.2204/0.2729/0.4306 -7 8 62.5 7.5B7/8 CIExyY:0.2225/0.2631/0.4306 -7 8 65 10B7/8 CIExyY:0.2277/0.2559/0.4306 -7 6 57.5 2.5B7/6 CIExyY:0.2418/0.296/0.4306 -7 6 60 5B7/6 CIExyY:0.241/0.2854/0.4306 -7 6 62.5 7.5B7/6 CIExyY:0.2436/0.2787/0.4306 -7 6 65 10B7/6 CIExyY:0.2478/0.2728/0.4306 -7 4 57.5 2.5B7/4 CIExyY:0.2629/0.3038/0.4306 -7 4 60 5B7/4 CIExyY:0.2633/0.2972/0.4306 -7 4 62.5 7.5B7/4 CIExyY:0.2651/0.2927/0.4306 -7 4 65 10B7/4 CIExyY:0.2685/0.2886/0.4306 -7 3 57.5 2.5B7/3 CIExyY:0.2747/0.3076/0.4306 -7 3 60 5B7/3 CIExyY:0.2754/0.3027/0.4306 -7 3 62.5 7.5B7/3 CIExyY:0.277/0.2995/0.4306 -7 3 65 10B7/3 CIExyY:0.2797/0.2965/0.4306 -7 2 57.5 2.5B7/2 CIExyY:0.2867/0.311/0.4306 -7 2 60 5B7/2 CIExyY:0.2875/0.3078/0.4306 -7 2 62.5 7.5B7/2 CIExyY:0.2888/0.3058/0.4306 -7 2 65 10B7/2 CIExyY:0.2908/0.3039/0.4306 -7 1 60 5B7/1 CIExyY:0.2992/0.3124/0.4306 -7 1 65 10B7/1 CIExyY:0.3011/0.3106/0.4306 -6 16 57.5 2.5B6/16 CIExyY:0.1294/0.2348/0.3005 -6 16 60 5B6/16 CIExyY:0.131/0.2048/0.3005 -6 16 62.5 7.5B6/16 CIExyY:0.1376/0.1879/0.3005 -6 16 65 10B6/16 CIExyY:0.1454/0.1778/0.3005 -6 14 57.5 2.5B6/14 CIExyY:0.148/0.2459/0.3005 -6 14 60 5B6/14 CIExyY:0.1496/0.2193/0.3005 -6 14 62.5 7.5B6/14 CIExyY:0.1556/0.2043/0.3005 -6 14 65 10B6/14 CIExyY:0.1629/0.1947/0.3005 -6 12 57.5 2.5B6/12 CIExyY:0.166/0.2561/0.3005 -6 12 60 5B6/12 CIExyY:0.1685/0.2339/0.3005 -6 12 62.5 7.5B6/12 CIExyY:0.1734/0.2203/0.3005 -6 12 65 10B6/12 CIExyY:0.1803/0.2114/0.3005 -6 10 57.5 2.5B6/10 CIExyY:0.1879/0.2682/0.3005 -6 10 60 5B6/10 CIExyY:0.1883/0.2487/0.3005 -6 10 62.5 7.5B6/10 CIExyY:0.1934/0.2374/0.3005 -6 10 65 10B6/10 CIExyY:0.2/0.2298/0.3005 -6 8 57.5 2.5B6/8 CIExyY:0.208/0.2789/0.3005 -6 8 60 5B6/8 CIExyY:0.2088/0.2635/0.3005 -6 8 62.5 7.5B6/8 CIExyY:0.2132/0.2537/0.3005 -6 8 65 10B6/8 CIExyY:0.2189/0.2468/0.3005 -6 6 57.5 2.5B6/6 CIExyY:0.2312/0.2899/0.3005 -6 6 60 5B6/6 CIExyY:0.232/0.2789/0.3005 -6 6 62.5 7.5B6/6 CIExyY:0.2352/0.2708/0.3005 -6 6 65 10B6/6 CIExyY:0.2399/0.265/0.3005 -6 4 57.5 2.5B6/4 CIExyY:0.2571/0.3008/0.3005 -6 4 60 5B6/4 CIExyY:0.2579/0.2938/0.3005 -6 4 62.5 7.5B6/4 CIExyY:0.2602/0.2881/0.3005 -6 4 65 10B6/4 CIExyY:0.2637/0.284/0.3005 -6 3 57.5 2.5B6/3 CIExyY:0.2703/0.3055/0.3005 -6 3 60 5B6/3 CIExyY:0.2711/0.3004/0.3005 -6 3 62.5 7.5B6/3 CIExyY:0.2728/0.2962/0.3005 -6 3 65 10B6/3 CIExyY:0.2755/0.2928/0.3005 -6 2 57.5 2.5B6/2 CIExyY:0.2835/0.3097/0.3005 -6 2 60 5B6/2 CIExyY:0.2842/0.3063/0.3005 -6 2 62.5 7.5B6/2 CIExyY:0.2854/0.3037/0.3005 -6 2 65 10B6/2 CIExyY:0.2871/0.3012/0.3005 -6 1 60 5B6/1 CIExyY:0.2972/0.3116/0.3005 -6 1 65 10B6/1 CIExyY:0.2987/0.309/0.3005 -5 18 65 10B5/18 CIExyY:0.1203/0.1505/0.1977 -5 16 57.5 2.5B5/16 CIExyY:0.109/0.2166/0.1977 -5 16 60 5B5/16 CIExyY:0.1132/0.1863/0.1977 -5 16 62.5 7.5B5/16 CIExyY:0.123/0.1711/0.1977 -5 16 65 10B5/16 CIExyY:0.1326/0.1632/0.1977 -5 14 57.5 2.5B5/14 CIExyY:0.1283/0.2292/0.1977 -5 14 60 5B5/14 CIExyY:0.132/0.2021/0.1977 -5 14 62.5 7.5B5/14 CIExyY:0.1404/0.1878/0.1977 -5 14 65 10B5/14 CIExyY:0.1492/0.1797/0.1977 -5 12 57.5 2.5B5/12 CIExyY:0.1461/0.2406/0.1977 -5 12 60 5B5/12 CIExyY:0.1505/0.2172/0.1977 -5 12 62.5 7.5B5/12 CIExyY:0.1584/0.2042/0.1977 -5 12 65 10B5/12 CIExyY:0.1666/0.1964/0.1977 -5 10 57.5 2.5B5/10 CIExyY:0.1697/0.2549/0.1977 -5 10 60 5B5/10 CIExyY:0.1729/0.2347/0.1977 -5 10 62.5 7.5B5/10 CIExyY:0.1792/0.223/0.1977 -5 10 65 10B5/10 CIExyY:0.186/0.2149/0.1977 -5 8 57.5 2.5B5/8 CIExyY:0.1947/0.2687/0.1977 -5 8 60 5B5/8 CIExyY:0.1958/0.2519/0.1977 -5 8 62.5 7.5B5/8 CIExyY:0.2007/0.2417/0.1977 -5 8 65 10B5/8 CIExyY:0.2067/0.2344/0.1977 -5 6 57.5 2.5B5/6 CIExyY:0.221/0.2823/0.1977 -5 6 60 5B5/6 CIExyY:0.2215/0.2701/0.1977 -5 6 62.5 7.5B5/6 CIExyY:0.2248/0.2612/0.1977 -5 6 65 10B5/6 CIExyY:0.2299/0.2548/0.1977 -5 4 57.5 2.5B5/4 CIExyY:0.2492/0.2954/0.1977 -5 4 60 5B5/4 CIExyY:0.2493/0.2879/0.1977 -5 4 62.5 7.5B5/4 CIExyY:0.2511/0.2808/0.1977 -5 4 65 10B5/4 CIExyY:0.2547/0.2757/0.1977 -5 3 57.5 2.5B5/3 CIExyY:0.264/0.3015/0.1977 -5 3 60 5B5/3 CIExyY:0.2642/0.2958/0.1977 -5 3 62.5 7.5B5/3 CIExyY:0.2655/0.2906/0.1977 -5 3 65 10B5/3 CIExyY:0.2682/0.2862/0.1977 -5 2 57.5 2.5B5/2 CIExyY:0.2791/0.3071/0.1977 -5 2 60 5B5/2 CIExyY:0.2794/0.3032/0.1977 -5 2 62.5 7.5B5/2 CIExyY:0.2803/0.3/0.1977 -5 2 65 10B5/2 CIExyY:0.2821/0.2966/0.1977 -5 1 60 5B5/1 CIExyY:0.2948/0.31/0.1977 -5 1 65 10B5/1 CIExyY:0.2961/0.3067/0.1977 -4 16 57.5 2.5B4/16 CIExyY:0.09/0.1973/0.12 -4 16 65 10B4/16 CIExyY:0.1155/0.1416/0.12 -4 14 57.5 2.5B4/14 CIExyY:0.1027/0.2057/0.12 -4 14 60 5B4/14 CIExyY:0.1098/0.1785/0.12 -4 14 62.5 7.5B4/14 CIExyY:0.1204/0.1655/0.12 -4 14 65 10B4/14 CIExyY:0.131/0.158/0.12 -4 12 57.5 2.5B4/12 CIExyY:0.1247/0.2209/0.12 -4 12 60 5B4/12 CIExyY:0.1299/0.1963/0.12 -4 12 62.5 7.5B4/12 CIExyY:0.1393/0.1837/0.12 -4 12 65 10B4/12 CIExyY:0.1487/0.176/0.12 -4 10 57.5 2.5B4/10 CIExyY:0.1463/0.2354/0.12 -4 10 60 5B4/10 CIExyY:0.1512/0.2148/0.12 -4 10 62.5 7.5B4/10 CIExyY:0.1601/0.2028/0.12 -4 10 65 10B4/10 CIExyY:0.1681/0.1954/0.12 -4 8 57.5 2.5B4/8 CIExyY:0.1737/0.2524/0.12 -4 8 60 5B4/8 CIExyY:0.1759/0.2345/0.12 -4 8 62.5 7.5B4/8 CIExyY:0.1821/0.2232/0.12 -4 8 65 10B4/8 CIExyY:0.1893/0.216/0.12 -4 6 57.5 2.5B4/6 CIExyY:0.2048/0.2708/0.12 -4 6 60 5B4/6 CIExyY:0.206/0.2572/0.12 -4 6 62.5 7.5B4/6 CIExyY:0.2102/0.247/0.12 -4 6 65 10B4/6 CIExyY:0.2157/0.2407/0.12 -4 4 57.5 2.5B4/4 CIExyY:0.236/0.2872/0.12 -4 4 60 5B4/4 CIExyY:0.2363/0.2782/0.12 -4 4 62.5 7.5B4/4 CIExyY:0.2388/0.2704/0.12 -4 4 65 10B4/4 CIExyY:0.2429/0.2648/0.12 -4 3 57.5 2.5B4/3 CIExyY:0.254/0.2957/0.12 -4 3 60 5B4/3 CIExyY:0.2538/0.2889/0.12 -4 3 62.5 7.5B4/3 CIExyY:0.2555/0.2827/0.12 -4 3 65 10B4/3 CIExyY:0.2586/0.2778/0.12 -4 2 57.5 2.5B4/2 CIExyY:0.2727/0.3038/0.12 -4 2 60 5B4/2 CIExyY:0.2723/0.2992/0.12 -4 2 62.5 7.5B4/2 CIExyY:0.2733/0.2947/0.12 -4 2 65 10B4/2 CIExyY:0.2753/0.291/0.12 -4 1 60 5B4/1 CIExyY:0.2912/0.3085/0.12 -4 1 65 10B4/1 CIExyY:0.2926/0.304/0.12 -3 14 65 10B3/14 CIExyY:0.1065/0.1285/0.06555 -3 12 57.5 2.5B3/12 CIExyY:0.0989/0.1963/0.06555 -3 12 60 5B3/12 CIExyY:0.1042/0.1681/0.06555 -3 12 62.5 7.5B3/12 CIExyY:0.1131/0.1542/0.06555 -3 12 65 10B3/12 CIExyY:0.1228/0.146/0.06555 -3 10 57.5 2.5B3/10 CIExyY:0.122/0.2132/0.06555 -3 10 60 5B3/10 CIExyY:0.1259/0.1879/0.06555 -3 10 62.5 7.5B3/10 CIExyY:0.1343/0.1756/0.06555 -3 10 65 10B3/10 CIExyY:0.1432/0.1675/0.06555 -3 8 57.5 2.5B3/8 CIExyY:0.1511/0.2331/0.06555 -3 8 60 5B3/8 CIExyY:0.1527/0.2119/0.06555 -3 8 62.5 7.5B3/8 CIExyY:0.1583/0.1987/0.06555 -3 8 65 10B3/8 CIExyY:0.1658/0.1905/0.06555 -3 6 57.5 2.5B3/6 CIExyY:0.1826/0.2536/0.06555 -3 6 60 5B3/6 CIExyY:0.1835/0.2375/0.06555 -3 6 62.5 7.5B3/6 CIExyY:0.1875/0.2258/0.06555 -3 6 65 10B3/6 CIExyY:0.1933/0.2173/0.06555 -3 4 57.5 2.5B3/4 CIExyY:0.2183/0.2748/0.06555 -3 4 60 5B3/4 CIExyY:0.2176/0.2632/0.06555 -3 4 62.5 7.5B3/4 CIExyY:0.22/0.2536/0.06555 -3 4 65 10B3/4 CIExyY:0.2246/0.2467/0.06555 -3 3 57.5 2.5B3/3 CIExyY:0.2403/0.2868/0.06555 -3 3 60 5B3/3 CIExyY:0.2388/0.2777/0.06555 -3 3 62.5 7.5B3/3 CIExyY:0.2398/0.2695/0.06555 -3 3 65 10B3/3 CIExyY:0.2429/0.263/0.06555 -3 2 57.5 2.5B3/2 CIExyY:0.2636/0.2983/0.06555 -3 2 60 5B3/2 CIExyY:0.2617/0.2921/0.06555 -3 2 62.5 7.5B3/2 CIExyY:0.2616/0.2857/0.06555 -3 2 65 10B3/2 CIExyY:0.2631/0.2801/0.06555 -3 1 60 5B3/1 CIExyY:0.2857/0.3053/0.06555 -3 1 65 10B3/1 CIExyY:0.2855/0.2979/0.06555 -2 10 57.5 2.5B2/10 CIExyY:0.0911/0.1828/0.03126 -2 10 60 5B2/10 CIExyY:0.0965/0.1558/0.03126 -2 10 62.5 7.5B2/10 CIExyY:0.1051/0.1422/0.03126 -2 10 65 10B2/10 CIExyY:0.1157/0.1346/0.03126 -2 8 57.5 2.5B2/8 CIExyY:0.123/0.2076/0.03126 -2 8 60 5B2/8 CIExyY:0.1245/0.1827/0.03126 -2 8 62.5 7.5B2/8 CIExyY:0.1313/0.1692/0.03126 -2 8 65 10B2/8 CIExyY:0.1396/0.1603/0.03126 -2 6 57.5 2.5B2/6 CIExyY:0.1621/0.2358/0.03126 -2 6 60 5B2/6 CIExyY:0.1617/0.2162/0.03126 -2 6 62.5 7.5B2/6 CIExyY:0.1658/0.2026/0.03126 -2 6 65 10B2/6 CIExyY:0.1716/0.1937/0.03126 -2 4 57.5 2.5B2/4 CIExyY:0.206/0.2649/0.03126 -2 4 60 5B2/4 CIExyY:0.2048/0.2518/0.03126 -2 4 62.5 7.5B2/4 CIExyY:0.2063/0.24/0.03126 -2 4 65 10B2/4 CIExyY:0.2102/0.2313/0.03126 -2 3 57.5 2.5B2/3 CIExyY:0.2314/0.2799/0.03126 -2 3 60 5B2/3 CIExyY:0.2297/0.27/0.03126 -2 3 62.5 7.5B2/3 CIExyY:0.2295/0.26/0.03126 -2 3 65 10B2/3 CIExyY:0.232/0.2515/0.03126 -2 2 57.5 2.5B2/2 CIExyY:0.2578/0.294/0.03126 -2 2 60 5B2/2 CIExyY:0.2559/0.2874/0.03126 -2 2 62.5 7.5B2/2 CIExyY:0.2545/0.2799/0.03126 -2 2 65 10B2/2 CIExyY:0.2558/0.2725/0.03126 -2 1 60 5B2/1 CIExyY:0.2829/0.3031/0.03126 -2 1 65 10B2/1 CIExyY:0.2818/0.2941/0.03126 -1 8 62.5 7.5B1/8 CIExyY:0.0968/0.128/0.0121 -1 8 65 10B1/8 CIExyY:0.1077/0.1218/0.0121 -1 6 57.5 2.5B1/6 CIExyY:0.1118/0.1908/0.0121 -1 6 60 5B1/6 CIExyY:0.1212/0.1745/0.0121 -1 6 62.5 7.5B1/6 CIExyY:0.1303/0.1639/0.0121 -1 6 65 10B1/6 CIExyY:0.1392/0.1563/0.0121 -1 4 57.5 2.5B1/4 CIExyY:0.1649/0.2324/0.0121 -1 4 60 5B1/4 CIExyY:0.1667/0.2168/0.0121 -1 4 62.5 7.5B1/4 CIExyY:0.1716/0.2048/0.0121 -1 4 65 10B1/4 CIExyY:0.1783/0.1974/0.0121 -1 2 57.5 2.5B1/2 CIExyY:0.2322/0.2781/0.0121 -1 2 60 5B1/2 CIExyY:0.2291/0.2677/0.0121 -1 2 62.5 7.5B1/2 CIExyY:0.2291/0.2579/0.0121 -1 2 65 10B1/2 CIExyY:0.2309/0.2491/0.0121 -9 4 75 10PB9/4 CIExyY:0.291/0.285/0.7866 -9 2 67.5 2.5PB9/2 CIExyY:0.2975/0.3063/0.7866 -9 2 70 5PB9/2 CIExyY:0.2991/0.3057/0.7866 -9 2 72.5 7.5PB9/2 CIExyY:0.3015/0.3052/0.7866 -9 2 75 10PB9/2 CIExyY:0.3038/0.3054/0.7866 -9 1 70 5PB9/1 CIExyY:0.3046/0.311/0.7866 -9 1 75 10PB9/1 CIExyY:0.3078/0.312/0.7866 -8 8 75 10PB8/8 CIExyY:0.2677/0.2443/0.591 -8 6 67.5 2.5PB8/6 CIExyY:0.2562/0.2709/0.591 -8 6 70 5PB8/6 CIExyY:0.2614/0.267/0.591 -8 6 72.5 7.5PB8/6 CIExyY:0.2702/0.2648/0.591 -8 6 75 10PB8/6 CIExyY:0.2792/0.2649/0.591 -8 4 67.5 2.5PB8/4 CIExyY:0.2758/0.2879/0.591 -8 4 70 5PB8/4 CIExyY:0.2798/0.2861/0.591 -8 4 72.5 7.5PB8/4 CIExyY:0.2856/0.2846/0.591 -8 4 75 10PB8/4 CIExyY:0.2911/0.2848/0.591 -8 3 67.5 2.5PB8/3 CIExyY:0.2861/0.2966/0.591 -8 3 70 5PB8/3 CIExyY:0.289/0.2954/0.591 -8 3 72.5 7.5PB8/3 CIExyY:0.2933/0.2944/0.591 -8 3 75 10PB8/3 CIExyY:0.2972/0.2946/0.591 -8 2 67.5 2.5PB8/2 CIExyY:0.2957/0.3047/0.591 -8 2 70 5PB8/2 CIExyY:0.2974/0.3039/0.591 -8 2 72.5 7.5PB8/2 CIExyY:0.3003/0.3034/0.591 -8 2 75 10PB8/2 CIExyY:0.3027/0.3035/0.591 -8 1 70 5PB8/1 CIExyY:0.3046/0.311/0.591 -8 1 75 10PB8/1 CIExyY:0.3072/0.3109/0.591 -7 12 75 10PB7/12 CIExyY:0.2465/0.2058/0.4306 -7 10 67.5 2.5PB7/10 CIExyY:0.2162/0.2309/0.4306 -7 10 70 5PB7/10 CIExyY:0.2254/0.2267/0.4306 -7 10 72.5 7.5PB7/10 CIExyY:0.241/0.2224/0.4306 -7 10 75 10PB7/10 CIExyY:0.2563/0.224/0.4306 -7 8 67.5 2.5PB7/8 CIExyY:0.2352/0.2498/0.4306 -7 8 70 5PB7/8 CIExyY:0.2427/0.2458/0.4306 -7 8 72.5 7.5PB7/8 CIExyY:0.2546/0.2418/0.4306 -7 8 75 10PB7/8 CIExyY:0.267/0.2425/0.4306 -7 6 67.5 2.5PB7/6 CIExyY:0.2538/0.2677/0.4306 -7 6 70 5PB7/6 CIExyY:0.2596/0.2643/0.4306 -7 6 72.5 7.5PB7/6 CIExyY:0.2687/0.2612/0.4306 -7 6 75 10PB7/6 CIExyY:0.2776/0.2612/0.4306 -7 4 67.5 2.5PB7/4 CIExyY:0.2729/0.2848/0.4306 -7 4 70 5PB7/4 CIExyY:0.2773/0.2828/0.4306 -7 4 72.5 7.5PB7/4 CIExyY:0.2833/0.2809/0.4306 -7 4 75 10PB7/4 CIExyY:0.2886/0.2801/0.4306 -7 3 67.5 2.5PB7/3 CIExyY:0.2832/0.2939/0.4306 -7 3 70 5PB7/3 CIExyY:0.2864/0.2922/0.4306 -7 3 72.5 7.5PB7/3 CIExyY:0.2909/0.2908/0.4306 -7 3 75 10PB7/3 CIExyY:0.2946/0.2902/0.4306 -7 2 67.5 2.5PB7/2 CIExyY:0.2932/0.3025/0.4306 -7 2 70 5PB7/2 CIExyY:0.2952/0.3011/0.4306 -7 2 72.5 7.5PB7/2 CIExyY:0.2982/0.3003/0.4306 -7 2 75 10PB7/2 CIExyY:0.3005/0.3/0.4306 -7 1 70 5PB7/1 CIExyY:0.3032/0.3093/0.4306 -7 1 75 10PB7/1 CIExyY:0.3058/0.3089/0.4306 -6 16 75 10PB6/16 CIExyY:0.2265/0.1671/0.3005 -6 14 67.5 2.5PB6/14 CIExyY:0.1754/0.1868/0.3005 -6 14 70 5PB6/14 CIExyY:0.1873/0.1822/0.3005 -6 14 72.5 7.5PB6/14 CIExyY:0.2119/0.1799/0.3005 -6 14 75 10PB6/14 CIExyY:0.2352/0.1839/0.3005 -6 12 67.5 2.5PB6/12 CIExyY:0.1913/0.2038/0.3005 -6 12 70 5PB6/12 CIExyY:0.2026/0.1999/0.3005 -6 12 72.5 7.5PB6/12 CIExyY:0.2241/0.1975/0.3005 -6 12 75 10PB6/12 CIExyY:0.244/0.1998/0.3005 -6 10 67.5 2.5PB6/10 CIExyY:0.2095/0.2225/0.3005 -6 10 70 5PB6/10 CIExyY:0.2197/0.2188/0.3005 -6 10 72.5 7.5PB6/10 CIExyY:0.2378/0.2168/0.3005 -6 10 75 10PB6/10 CIExyY:0.254/0.2176/0.3005 -6 8 67.5 2.5PB6/8 CIExyY:0.2274/0.2406/0.3005 -6 8 70 5PB6/8 CIExyY:0.236/0.2365/0.3005 -6 8 72.5 7.5PB6/8 CIExyY:0.2505/0.2347/0.3005 -6 8 75 10PB6/8 CIExyY:0.2637/0.2352/0.3005 -6 6 67.5 2.5PB6/6 CIExyY:0.2465/0.2599/0.3005 -6 6 70 5PB6/6 CIExyY:0.2533/0.2558/0.3005 -6 6 72.5 7.5PB6/6 CIExyY:0.2638/0.2531/0.3005 -6 6 75 10PB6/6 CIExyY:0.274/0.2533/0.3005 -6 4 67.5 2.5PB6/4 CIExyY:0.2684/0.2804/0.3005 -6 4 70 5PB6/4 CIExyY:0.2734/0.2778/0.3005 -6 4 72.5 7.5PB6/4 CIExyY:0.2798/0.2752/0.3005 -6 4 75 10PB6/4 CIExyY:0.2863/0.2747/0.3005 -6 3 67.5 2.5PB6/3 CIExyY:0.2791/0.29/0.3005 -6 3 70 5PB6/3 CIExyY:0.283/0.288/0.3005 -6 3 72.5 7.5PB6/3 CIExyY:0.2877/0.2859/0.3005 -6 3 75 10PB6/3 CIExyY:0.2926/0.2855/0.3005 -6 2 67.5 2.5PB6/2 CIExyY:0.2897/0.2991/0.3005 -6 2 70 5PB6/2 CIExyY:0.2923/0.2978/0.3005 -6 2 72.5 7.5PB6/2 CIExyY:0.2955/0.2963/0.3005 -6 2 75 10PB6/2 CIExyY:0.2988/0.2961/0.3005 -6 1 70 5PB6/1 CIExyY:0.3013/0.3072/0.3005 -6 1 75 10PB6/1 CIExyY:0.3047/0.3064/0.3005 -5 22 75 10PB5/22 CIExyY:0.2082/0.1225/0.1977 -5 20 72.5 7.5PB5/20 CIExyY:0.1794/0.1239/0.1977 -5 20 75 10PB5/20 CIExyY:0.2121/0.1329/0.1977 -5 18 67.5 2.5PB5/18 CIExyY:0.1363/0.141/0.1977 -5 18 70 5PB5/18 CIExyY:0.1518/0.1365/0.1977 -5 18 72.5 7.5PB5/18 CIExyY:0.1862/0.1365/0.1977 -5 18 75 10PB5/18 CIExyY:0.2174/0.1444/0.1977 -5 16 67.5 2.5PB5/16 CIExyY:0.1495/0.1559/0.1977 -5 16 70 5PB5/16 CIExyY:0.1638/0.1521/0.1977 -5 16 72.5 7.5PB5/16 CIExyY:0.1945/0.1511/0.1977 -5 16 75 10PB5/16 CIExyY:0.2224/0.1555/0.1977 -5 14 67.5 2.5PB5/14 CIExyY:0.1642/0.1723/0.1977 -5 14 70 5PB5/14 CIExyY:0.1773/0.1689/0.1977 -5 14 72.5 7.5PB5/14 CIExyY:0.2042/0.1661/0.1977 -5 14 75 10PB5/14 CIExyY:0.2299/0.1698/0.1977 -5 12 67.5 2.5PB5/12 CIExyY:0.1793/0.1894/0.1977 -5 12 70 5PB5/12 CIExyY:0.1918/0.1858/0.1977 -5 12 72.5 7.5PB5/12 CIExyY:0.2157/0.183/0.1977 -5 12 75 10PB5/12 CIExyY:0.2384/0.1857/0.1977 -5 10 67.5 2.5PB5/10 CIExyY:0.1968/0.2078/0.1977 -5 10 70 5PB5/10 CIExyY:0.208/0.2041/0.1977 -5 10 72.5 7.5PB5/10 CIExyY:0.2285/0.202/0.1977 -5 10 75 10PB5/10 CIExyY:0.2478/0.203/0.1977 -5 8 67.5 2.5PB5/8 CIExyY:0.2157/0.2278/0.1977 -5 8 70 5PB5/8 CIExyY:0.2255/0.2239/0.1977 -5 8 72.5 7.5PB5/8 CIExyY:0.2417/0.2204/0.1977 -5 8 75 10PB5/8 CIExyY:0.2572/0.2211/0.1977 -5 6 67.5 2.5PB5/6 CIExyY:0.2365/0.2488/0.1977 -5 6 70 5PB5/6 CIExyY:0.2447/0.2449/0.1977 -5 6 72.5 7.5PB5/6 CIExyY:0.2563/0.2417/0.1977 -5 6 75 10PB5/6 CIExyY:0.2686/0.2412/0.1977 -5 4 67.5 2.5PB5/4 CIExyY:0.26/0.272/0.1977 -5 4 70 5PB5/4 CIExyY:0.2662/0.2687/0.1977 -5 4 72.5 7.5PB5/4 CIExyY:0.2739/0.2666/0.1977 -5 4 75 10PB5/4 CIExyY:0.2821/0.2659/0.1977 -5 3 67.5 2.5PB5/3 CIExyY:0.2722/0.2832/0.1977 -5 3 70 5PB5/3 CIExyY:0.2772/0.2805/0.1977 -5 3 72.5 7.5PB5/3 CIExyY:0.2828/0.2787/0.1977 -5 3 75 10PB5/3 CIExyY:0.289/0.2781/0.1977 -5 2 67.5 2.5PB5/2 CIExyY:0.2847/0.2942/0.1977 -5 2 70 5PB5/2 CIExyY:0.2882/0.2923/0.1977 -5 2 72.5 7.5PB5/2 CIExyY:0.2918/0.2908/0.1977 -5 2 75 10PB5/2 CIExyY:0.2959/0.2905/0.1977 -5 1 70 5PB5/1 CIExyY:0.2992/0.3042/0.1977 -5 1 75 10PB5/1 CIExyY:0.3029/0.3032/0.1977 -4 30 75 10PB4/30 CIExyY:0.1952/0.0778/0.12 -4 28 75 10PB4/28 CIExyY:0.1971/0.084/0.12 -4 26 72.5 7.5PB4/26 CIExyY:0.1659/0.0825/0.12 -4 26 75 10PB4/26 CIExyY:0.1994/0.0904/0.12 -4 24 72.5 7.5PB4/24 CIExyY:0.1684/0.0899/0.12 -4 24 75 10PB4/24 CIExyY:0.202/0.0985/0.12 -4 22 72.5 7.5PB4/22 CIExyY:0.1713/0.098/0.12 -4 22 75 10PB4/22 CIExyY:0.2048/0.1064/0.12 -4 20 70 5PB4/20 CIExyY:0.1288/0.1027/0.12 -4 20 72.5 7.5PB4/20 CIExyY:0.1742/0.1058/0.12 -4 20 75 10PB4/20 CIExyY:0.2075/0.114/0.12 -4 18 67.5 2.5PB4/18 CIExyY:0.1218/0.1203/0.12 -4 18 70 5PB4/18 CIExyY:0.1392/0.1167/0.12 -4 18 72.5 7.5PB4/18 CIExyY:0.1798/0.1185/0.12 -4 18 75 10PB4/18 CIExyY:0.212/0.1256/0.12 -4 16 67.5 2.5PB4/16 CIExyY:0.1336/0.1349/0.12 -4 16 70 5PB4/16 CIExyY:0.1504/0.1317/0.12 -4 16 72.5 7.5PB4/16 CIExyY:0.1861/0.1316/0.12 -4 16 75 10PB4/16 CIExyY:0.217/0.1373/0.12 -4 14 67.5 2.5PB4/14 CIExyY:0.1473/0.1513/0.12 -4 14 70 5PB4/14 CIExyY:0.1627/0.1479/0.12 -4 14 72.5 7.5PB4/14 CIExyY:0.1941/0.1468/0.12 -4 14 75 10PB4/14 CIExyY:0.222/0.1503/0.12 -4 12 67.5 2.5PB4/12 CIExyY:0.1634/0.1698/0.12 -4 12 70 5PB4/12 CIExyY:0.1773/0.1659/0.12 -4 12 72.5 7.5PB4/12 CIExyY:0.2037/0.1629/0.12 -4 12 75 10PB4/12 CIExyY:0.2298/0.1659/0.12 -4 10 67.5 2.5PB4/10 CIExyY:0.1805/0.1888/0.12 -4 10 70 5PB4/10 CIExyY:0.1925/0.1843/0.12 -4 10 72.5 7.5PB4/10 CIExyY:0.2158/0.1811/0.12 -4 10 75 10PB4/10 CIExyY:0.2388/0.1837/0.12 -4 8 67.5 2.5PB4/8 CIExyY:0.1995/0.2094/0.12 -4 8 70 5PB4/8 CIExyY:0.2103/0.205/0.12 -4 8 72.5 7.5PB4/8 CIExyY:0.2304/0.2023/0.12 -4 8 75 10PB4/8 CIExyY:0.2497/0.2038/0.12 -4 6 67.5 2.5PB4/6 CIExyY:0.2235/0.2343/0.12 -4 6 70 5PB4/6 CIExyY:0.2325/0.23/0.12 -4 6 72.5 7.5PB4/6 CIExyY:0.2471/0.2266/0.12 -4 6 75 10PB4/6 CIExyY:0.2618/0.2263/0.12 -4 4 67.5 2.5PB4/4 CIExyY:0.2487/0.2597/0.12 -4 4 70 5PB4/4 CIExyY:0.2562/0.256/0.12 -4 4 72.5 7.5PB4/4 CIExyY:0.2657/0.2528/0.12 -4 4 75 10PB4/4 CIExyY:0.2759/0.2522/0.12 -4 3 67.5 2.5PB4/3 CIExyY:0.263/0.2734/0.12 -4 3 70 5PB4/3 CIExyY:0.2686/0.2697/0.12 -4 3 72.5 7.5PB4/3 CIExyY:0.2756/0.2668/0.12 -4 3 75 10PB4/3 CIExyY:0.2832/0.2657/0.12 -4 2 67.5 2.5PB4/2 CIExyY:0.2782/0.2876/0.12 -4 2 70 5PB4/2 CIExyY:0.2816/0.2842/0.12 -4 2 72.5 7.5PB4/2 CIExyY:0.2861/0.2819/0.12 -4 2 75 10PB4/2 CIExyY:0.2911/0.2804/0.12 -4 1 70 5PB4/1 CIExyY:0.2954/0.2997/0.12 -4 1 75 10PB4/1 CIExyY:0.3/0.2971/0.12 -3 34 72.5 7.5PB3/34 CIExyY:0.1608/0.048/0.06555 -3 34 75 10PB3/34 CIExyY:0.1918/0.0503/0.06555 -3 32 72.5 7.5PB3/32 CIExyY:0.1612/0.0511/0.06555 -3 32 75 10PB3/32 CIExyY:0.1926/0.0542/0.06555 -3 30 72.5 7.5PB3/30 CIExyY:0.1621/0.0556/0.06555 -3 30 75 10PB3/30 CIExyY:0.1938/0.0599/0.06555 -3 28 72.5 7.5PB3/28 CIExyY:0.1632/0.0609/0.06555 -3 28 75 10PB3/28 CIExyY:0.195/0.065/0.06555 -3 26 72.5 7.5PB3/26 CIExyY:0.1642/0.0655/0.06555 -3 26 75 10PB3/26 CIExyY:0.1963/0.0708/0.06555 -3 24 72.5 7.5PB3/24 CIExyY:0.1658/0.0711/0.06555 -3 24 75 10PB3/24 CIExyY:0.1982/0.0772/0.06555 -3 22 72.5 7.5PB3/22 CIExyY:0.1677/0.0782/0.06555 -3 22 75 10PB3/22 CIExyY:0.2004/0.0847/0.06555 -3 20 72.5 7.5PB3/20 CIExyY:0.1702/0.0867/0.06555 -3 20 75 10PB3/20 CIExyY:0.203/0.093/0.06555 -3 18 70 5PB3/18 CIExyY:0.1228/0.0895/0.06555 -3 18 72.5 7.5PB3/18 CIExyY:0.173/0.0948/0.06555 -3 18 75 10PB3/18 CIExyY:0.206/0.102/0.06555 -3 16 70 5PB3/16 CIExyY:0.1318/0.1024/0.06555 -3 16 72.5 7.5PB3/16 CIExyY:0.1765/0.1048/0.06555 -3 16 75 10PB3/16 CIExyY:0.2092/0.1118/0.06555 -3 14 67.5 2.5PB3/14 CIExyY:0.1251/0.1218/0.06555 -3 14 70 5PB3/14 CIExyY:0.1431/0.1184/0.06555 -3 14 72.5 7.5PB3/14 CIExyY:0.1824/0.1188/0.06555 -3 14 75 10PB3/14 CIExyY:0.2142/0.125/0.06555 -3 12 67.5 2.5PB3/12 CIExyY:0.1398/0.1395/0.06555 -3 12 70 5PB3/12 CIExyY:0.1557/0.1356/0.06555 -3 12 72.5 7.5PB3/12 CIExyY:0.1903/0.1353/0.06555 -3 12 75 10PB3/12 CIExyY:0.2206/0.1407/0.06555 -3 10 67.5 2.5PB3/10 CIExyY:0.1576/0.16/0.06555 -3 10 70 5PB3/10 CIExyY:0.1718/0.1562/0.06555 -3 10 72.5 7.5PB3/10 CIExyY:0.2005/0.1536/0.06555 -3 10 75 10PB3/10 CIExyY:0.2278/0.1565/0.06555 -3 8 67.5 2.5PB3/8 CIExyY:0.178/0.1833/0.06555 -3 8 70 5PB3/8 CIExyY:0.1908/0.1799/0.06555 -3 8 72.5 7.5PB3/8 CIExyY:0.2149/0.1761/0.06555 -3 8 75 10PB3/8 CIExyY:0.2387/0.1786/0.06555 -3 6 67.5 2.5PB3/6 CIExyY:0.2022/0.2101/0.06555 -3 6 70 5PB3/6 CIExyY:0.2122/0.2052/0.06555 -3 6 72.5 7.5PB3/6 CIExyY:0.2311/0.201/0.06555 -3 6 75 10PB3/6 CIExyY:0.2511/0.2031/0.06555 -3 4 67.5 2.5PB3/4 CIExyY:0.2312/0.2405/0.06555 -3 4 70 5PB3/4 CIExyY:0.2393/0.2361/0.06555 -3 4 72.5 7.5PB3/4 CIExyY:0.252/0.2319/0.06555 -3 4 75 10PB3/4 CIExyY:0.266/0.2319/0.06555 -3 3 67.5 2.5PB3/3 CIExyY:0.2478/0.2574/0.06555 -3 3 70 5PB3/3 CIExyY:0.2543/0.2532/0.06555 -3 3 72.5 7.5PB3/3 CIExyY:0.2641/0.2493/0.06555 -3 3 75 10PB3/3 CIExyY:0.2747/0.2482/0.06555 -3 2 67.5 2.5PB3/2 CIExyY:0.2663/0.2756/0.06555 -3 2 70 5PB3/2 CIExyY:0.2708/0.2719/0.06555 -3 2 72.5 7.5PB3/2 CIExyY:0.2777/0.2687/0.06555 -3 2 75 10PB3/2 CIExyY:0.2847/0.267/0.06555 -3 1 70 5PB3/1 CIExyY:0.2893/0.2928/0.06555 -3 1 75 10PB3/1 CIExyY:0.2964/0.2894/0.06555 -2 38 72.5 7.5PB2/38 CIExyY:0.1623/0.028/0.03126 -2 36 72.5 7.5PB2/36 CIExyY:0.1628/0.031/0.03126 -2 34 72.5 7.5PB2/34 CIExyY:0.163/0.034/0.03126 -2 34 75 10PB2/34 CIExyY:0.1911/0.0344/0.03126 -2 32 72.5 7.5PB2/32 CIExyY:0.1635/0.0373/0.03126 -2 32 75 10PB2/32 CIExyY:0.1918/0.0379/0.03126 -2 30 72.5 7.5PB2/30 CIExyY:0.164/0.0409/0.03126 -2 30 75 10PB2/30 CIExyY:0.1925/0.042/0.03126 -2 28 72.5 7.5PB2/28 CIExyY:0.1647/0.0451/0.03126 -2 28 75 10PB2/28 CIExyY:0.1937/0.0471/0.03126 -2 26 72.5 7.5PB2/26 CIExyY:0.1653/0.0492/0.03126 -2 26 75 10PB2/26 CIExyY:0.1949/0.052/0.03126 -2 24 72.5 7.5PB2/24 CIExyY:0.166/0.0538/0.03126 -2 24 75 10PB2/24 CIExyY:0.1962/0.0578/0.03126 -2 22 72.5 7.5PB2/22 CIExyY:0.167/0.0594/0.03126 -2 22 75 10PB2/22 CIExyY:0.1978/0.0643/0.03126 -2 20 72.5 7.5PB2/20 CIExyY:0.1685/0.0666/0.03126 -2 20 75 10PB2/20 CIExyY:0.1998/0.0718/0.03126 -2 18 72.5 7.5PB2/18 CIExyY:0.1701/0.0742/0.03126 -2 18 75 10PB2/18 CIExyY:0.2021/0.0808/0.03126 -2 16 72.5 7.5PB2/16 CIExyY:0.1728/0.0839/0.03126 -2 16 75 10PB2/16 CIExyY:0.2052/0.091/0.03126 -2 14 70 5PB2/14 CIExyY:0.1253/0.0873/0.03126 -2 14 72.5 7.5PB2/14 CIExyY:0.1762/0.0955/0.03126 -2 14 75 10PB2/14 CIExyY:0.2087/0.1026/0.03126 -2 12 67.5 2.5PB2/12 CIExyY:0.1166/0.1076/0.03126 -2 12 70 5PB2/12 CIExyY:0.1363/0.1048/0.03126 -2 12 72.5 7.5PB2/12 CIExyY:0.1813/0.1094/0.03126 -2 12 75 10PB2/12 CIExyY:0.2139/0.117/0.03126 -2 10 67.5 2.5PB2/10 CIExyY:0.1332/0.1278/0.03126 -2 10 70 5PB2/10 CIExyY:0.15/0.124/0.03126 -2 10 72.5 7.5PB2/10 CIExyY:0.1882/0.1258/0.03126 -2 10 75 10PB2/10 CIExyY:0.22/0.133/0.03126 -2 8 67.5 2.5PB2/8 CIExyY:0.154/0.153/0.03126 -2 8 70 5PB2/8 CIExyY:0.1685/0.1491/0.03126 -2 8 72.5 7.5PB2/8 CIExyY:0.2005/0.1495/0.03126 -2 8 75 10PB2/8 CIExyY:0.2294/0.1551/0.03126 -2 6 67.5 2.5PB2/6 CIExyY:0.1825/0.1857/0.03126 -2 6 70 5PB2/6 CIExyY:0.1942/0.1811/0.03126 -2 6 72.5 7.5PB2/6 CIExyY:0.2189/0.179/0.03126 -2 6 75 10PB2/6 CIExyY:0.244/0.184/0.03126 -2 4 67.5 2.5PB2/4 CIExyY:0.2175/0.2245/0.03126 -2 4 70 5PB2/4 CIExyY:0.2263/0.2192/0.03126 -2 4 72.5 7.5PB2/4 CIExyY:0.242/0.2148/0.03126 -2 4 75 10PB2/4 CIExyY:0.26/0.2162/0.03126 -2 3 67.5 2.5PB2/3 CIExyY:0.2374/0.2454/0.03126 -2 3 70 5PB2/3 CIExyY:0.2442/0.2398/0.03126 -2 3 72.5 7.5PB2/3 CIExyY:0.2556/0.2351/0.03126 -2 3 75 10PB2/3 CIExyY:0.2693/0.2347/0.03126 -2 2 67.5 2.5PB2/2 CIExyY:0.2592/0.2675/0.03126 -2 2 70 5PB2/2 CIExyY:0.2638/0.2624/0.03126 -2 2 72.5 7.5PB2/2 CIExyY:0.2712/0.2582/0.03126 -2 2 75 10PB2/2 CIExyY:0.2803/0.2567/0.03126 -2 1 70 5PB2/1 CIExyY:0.2856/0.2877/0.03126 -2 1 75 10PB2/1 CIExyY:0.2937/0.2834/0.03126 -1 38 72.5 7.5PB1/38 CIExyY:0.168/0.014/0.0121 -1 36 72.5 7.5PB1/36 CIExyY:0.1681/0.016/0.0121 -1 34 72.5 7.5PB1/34 CIExyY:0.1682/0.018/0.0121 -1 32 72.5 7.5PB1/32 CIExyY:0.1682/0.0202/0.0121 -1 30 72.5 7.5PB1/30 CIExyY:0.1684/0.0234/0.0121 -1 30 75 10PB1/30 CIExyY:0.1928/0.024/0.0121 -1 28 72.5 7.5PB1/28 CIExyY:0.1686/0.027/0.0121 -1 28 75 10PB1/28 CIExyY:0.1936/0.0281/0.0121 -1 26 72.5 7.5PB1/26 CIExyY:0.1689/0.0309/0.0121 -1 26 75 10PB1/26 CIExyY:0.1942/0.0326/0.0121 -1 24 72.5 7.5PB1/24 CIExyY:0.1691/0.0352/0.0121 -1 24 75 10PB1/24 CIExyY:0.1952/0.038/0.0121 -1 22 72.5 7.5PB1/22 CIExyY:0.1696/0.0402/0.0121 -1 22 75 10PB1/22 CIExyY:0.1965/0.0436/0.0121 -1 20 72.5 7.5PB1/20 CIExyY:0.1701/0.0454/0.0121 -1 20 75 10PB1/20 CIExyY:0.1976/0.0493/0.0121 -1 18 72.5 7.5PB1/18 CIExyY:0.1709/0.0518/0.0121 -1 18 75 10PB1/18 CIExyY:0.1991/0.0564/0.0121 -1 16 72.5 7.5PB1/16 CIExyY:0.172/0.0583/0.0121 -1 16 75 10PB1/16 CIExyY:0.2003/0.0638/0.0121 -1 14 72.5 7.5PB1/14 CIExyY:0.1738/0.0688/0.0121 -1 14 75 10PB1/14 CIExyY:0.2038/0.0745/0.0121 -1 12 72.5 7.5PB1/12 CIExyY:0.1763/0.0804/0.0121 -1 12 75 10PB1/12 CIExyY:0.207/0.0869/0.0121 -1 10 70 5PB1/10 CIExyY:0.1285/0.087/0.0121 -1 10 72.5 7.5PB1/10 CIExyY:0.1804/0.095/0.0121 -1 10 75 10PB1/10 CIExyY:0.212/0.1029/0.0121 -1 8 67.5 2.5PB1/8 CIExyY:0.1273/0.1157/0.0121 -1 8 70 5PB1/8 CIExyY:0.1447/0.1124/0.0121 -1 8 72.5 7.5PB1/8 CIExyY:0.1872/0.1141/0.0121 -1 8 75 10PB1/8 CIExyY:0.219/0.1228/0.0121 -1 6 67.5 2.5PB1/6 CIExyY:0.1539/0.1491/0.0121 -1 6 70 5PB1/6 CIExyY:0.1678/0.1447/0.0121 -1 6 72.5 7.5PB1/6 CIExyY:0.2/0.1422/0.0121 -1 6 75 10PB1/6 CIExyY:0.229/0.147/0.0121 -1 4 67.5 2.5PB1/4 CIExyY:0.1895/0.1911/0.0121 -1 4 70 5PB1/4 CIExyY:0.2012/0.1867/0.0121 -1 4 72.5 7.5PB1/4 CIExyY:0.2232/0.1821/0.0121 -1 4 75 10PB1/4 CIExyY:0.2459/0.1828/0.0121 -1 2 67.5 2.5PB1/2 CIExyY:0.236/0.242/0.0121 -1 2 70 5PB1/2 CIExyY:0.2427/0.2368/0.0121 -1 2 72.5 7.5PB1/2 CIExyY:0.2547/0.231/0.0121 -1 2 75 10PB1/2 CIExyY:0.2677/0.228/0.0121 -9 6 82.5 7.5P9/6 CIExyY:0.312/0.2788/0.7866 -9 6 85 10P9/6 CIExyY:0.3218/0.2845/0.7866 -9 4 77.5 2.5P9/4 CIExyY:0.2963/0.2865/0.7866 -9 4 80 5P9/4 CIExyY:0.3003/0.287/0.7866 -9 4 82.5 7.5P9/4 CIExyY:0.3117/0.2928/0.7866 -9 4 85 10P9/4 CIExyY:0.3176/0.2966/0.7866 -9 2 77.5 2.5P9/2 CIExyY:0.305/0.3051/0.7866 -9 2 80 5P9/2 CIExyY:0.3067/0.306/0.7866 -9 2 82.5 7.5P9/2 CIExyY:0.3107/0.3081/0.7866 -9 2 85 10P9/2 CIExyY:0.3128/0.3094/0.7866 -9 1 80 5P9/1 CIExyY:0.3088/0.3122/0.7866 -9 1 85 10P9/1 CIExyY:0.311/0.314/0.7866 -8 14 85 10P8/14 CIExyY:0.3342/0.2349/0.591 -8 12 82.5 7.5P8/12 CIExyY:0.3117/0.237/0.591 -8 12 85 10P8/12 CIExyY:0.3312/0.247/0.591 -8 10 80 5P8/10 CIExyY:0.287/0.238/0.591 -8 10 82.5 7.5P8/10 CIExyY:0.3116/0.2497/0.591 -8 10 85 10P8/10 CIExyY:0.3282/0.2582/0.591 -8 8 77.5 2.5P8/8 CIExyY:0.28/0.2488/0.591 -8 8 80 5P8/8 CIExyY:0.2914/0.2534/0.591 -8 8 82.5 7.5P8/8 CIExyY:0.3116/0.2626/0.591 -8 8 85 10P8/8 CIExyY:0.325/0.27/0.591 -8 6 77.5 2.5P8/6 CIExyY:0.2881/0.2671/0.591 -8 6 80 5P8/6 CIExyY:0.2963/0.2704/0.591 -8 6 82.5 7.5P8/6 CIExyY:0.3114/0.2785/0.591 -8 6 85 10P8/6 CIExyY:0.3213/0.2829/0.591 -8 4 77.5 2.5P8/4 CIExyY:0.2962/0.285/0.591 -8 4 80 5P8/4 CIExyY:0.3012/0.2868/0.591 -8 4 82.5 7.5P8/4 CIExyY:0.3114/0.2915/0.591 -8 4 85 10P8/4 CIExyY:0.3175/0.2955/0.591 -8 3 77.5 2.5P8/3 CIExyY:0.3007/0.2949/0.591 -8 3 80 5P8/3 CIExyY:0.3039/0.2961/0.591 -8 3 82.5 7.5P8/3 CIExyY:0.3111/0.2995/0.591 -8 3 85 10P8/3 CIExyY:0.3152/0.3022/0.591 -8 2 77.5 2.5P8/2 CIExyY:0.3048/0.304/0.591 -8 2 80 5P8/2 CIExyY:0.3065/0.3047/0.591 -8 2 82.5 7.5P8/2 CIExyY:0.3107/0.307/0.591 -8 2 85 10P8/2 CIExyY:0.3131/0.3084/0.591 -8 1 80 5P8/1 CIExyY:0.3086/0.3118/0.591 -8 1 85 10P8/1 CIExyY:0.3113/0.3133/0.591 -7 22 85 10P7/22 CIExyY:0.343/0.1883/0.4306 -7 20 85 10P7/20 CIExyY:0.341/0.1988/0.4306 -7 18 82.5 7.5P7/18 CIExyY:0.3093/0.1962/0.4306 -7 18 85 10P7/18 CIExyY:0.3391/0.2088/0.4306 -7 16 82.5 7.5P7/16 CIExyY:0.3099/0.2074/0.4306 -7 16 85 10P7/16 CIExyY:0.3368/0.2192/0.4306 -7 14 80 5P7/14 CIExyY:0.2801/0.2068/0.4306 -7 14 82.5 7.5P7/14 CIExyY:0.3101/0.2192/0.4306 -7 14 85 10P7/14 CIExyY:0.3341/0.2308/0.4306 -7 12 77.5 2.5P7/12 CIExyY:0.2664/0.2127/0.4306 -7 12 80 5P7/12 CIExyY:0.2833/0.2197/0.4306 -7 12 82.5 7.5P7/12 CIExyY:0.3104/0.232/0.4306 -7 12 85 10P7/12 CIExyY:0.3314/0.2423/0.4306 -7 10 77.5 2.5P7/10 CIExyY:0.2729/0.2289/0.4306 -7 10 80 5P7/10 CIExyY:0.2872/0.2343/0.4306 -7 10 82.5 7.5P7/10 CIExyY:0.3108/0.2442/0.4306 -7 10 85 10P7/10 CIExyY:0.3288/0.2531/0.4306 -7 8 77.5 2.5P7/8 CIExyY:0.2799/0.2459/0.4306 -7 8 80 5P7/8 CIExyY:0.2918/0.2504/0.4306 -7 8 82.5 7.5P7/8 CIExyY:0.3109/0.2584/0.4306 -7 8 85 10P7/8 CIExyY:0.3256/0.2654/0.4306 -7 6 77.5 2.5P7/6 CIExyY:0.2873/0.2633/0.4306 -7 6 80 5P7/6 CIExyY:0.2961/0.2663/0.4306 -7 6 82.5 7.5P7/6 CIExyY:0.3111/0.273/0.4306 -7 6 85 10P7/6 CIExyY:0.3221/0.2786/0.4306 -7 4 77.5 2.5P7/4 CIExyY:0.295/0.281/0.4306 -7 4 80 5P7/4 CIExyY:0.3009/0.2831/0.4306 -7 4 82.5 7.5P7/4 CIExyY:0.3111/0.288/0.4306 -7 4 85 10P7/4 CIExyY:0.3181/0.292/0.4306 -7 3 77.5 2.5P7/3 CIExyY:0.2991/0.2906/0.4306 -7 3 80 5P7/3 CIExyY:0.3034/0.2921/0.4306 -7 3 82.5 7.5P7/3 CIExyY:0.3111/0.296/0.4306 -7 3 85 10P7/3 CIExyY:0.3159/0.2989/0.4306 -7 2 77.5 2.5P7/2 CIExyY:0.3031/0.3/0.4306 -7 2 80 5P7/2 CIExyY:0.3059/0.301/0.4306 -7 2 82.5 7.5P7/2 CIExyY:0.3109/0.3037/0.4306 -7 2 85 10P7/2 CIExyY:0.3138/0.3054/0.4306 -7 1 80 5P7/1 CIExyY:0.3082/0.3092/0.4306 -7 1 85 10P7/1 CIExyY:0.3118/0.3113/0.4306 -6 26 85 10P6/26 CIExyY:0.3457/0.1604/0.3005 -6 24 82.5 7.5P6/24 CIExyY:0.3058/0.1547/0.3005 -6 24 85 10P6/24 CIExyY:0.3441/0.1698/0.3005 -6 22 82.5 7.5P6/22 CIExyY:0.3062/0.1638/0.3005 -6 22 85 10P6/22 CIExyY:0.3426/0.1785/0.3005 -6 20 80 5P6/20 CIExyY:0.2702/0.1621/0.3005 -6 20 82.5 7.5P6/20 CIExyY:0.3069/0.1745/0.3005 -6 20 85 10P6/20 CIExyY:0.3409/0.1882/0.3005 -6 18 77.5 2.5P6/18 CIExyY:0.2504/0.1658/0.3005 -6 18 80 5P6/18 CIExyY:0.2731/0.1738/0.3005 -6 18 82.5 7.5P6/18 CIExyY:0.3075/0.187/0.3005 -6 18 85 10P6/18 CIExyY:0.3388/0.1995/0.3005 -6 16 77.5 2.5P6/16 CIExyY:0.2548/0.1768/0.3005 -6 16 80 5P6/16 CIExyY:0.2761/0.1852/0.3005 -6 16 82.5 7.5P6/16 CIExyY:0.308/0.1976/0.3005 -6 16 85 10P6/16 CIExyY:0.337/0.2095/0.3005 -6 14 77.5 2.5P6/14 CIExyY:0.2593/0.1909/0.3005 -6 14 80 5P6/14 CIExyY:0.2794/0.1979/0.3005 -6 14 82.5 7.5P6/14 CIExyY:0.3084/0.2095/0.3005 -6 14 85 10P6/14 CIExyY:0.3349/0.2203/0.3005 -6 12 77.5 2.5P6/12 CIExyY:0.2647/0.2052/0.3005 -6 12 80 5P6/12 CIExyY:0.2829/0.2121/0.3005 -6 12 82.5 7.5P6/12 CIExyY:0.309/0.2222/0.3005 -6 12 85 10P6/12 CIExyY:0.3321/0.2329/0.3005 -6 10 77.5 2.5P6/10 CIExyY:0.2703/0.2204/0.3005 -6 10 80 5P6/10 CIExyY:0.2862/0.226/0.3005 -6 10 82.5 7.5P6/10 CIExyY:0.3092/0.235/0.3005 -6 10 85 10P6/10 CIExyY:0.3293/0.245/0.3005 -6 8 77.5 2.5P6/8 CIExyY:0.277/0.2372/0.3005 -6 8 80 5P6/8 CIExyY:0.2905/0.2421/0.3005 -6 8 82.5 7.5P6/8 CIExyY:0.3099/0.2502/0.3005 -6 8 85 10P6/8 CIExyY:0.3259/0.2584/0.3005 -6 6 77.5 2.5P6/6 CIExyY:0.2842/0.255/0.3005 -6 6 80 5P6/6 CIExyY:0.295/0.2585/0.3005 -6 6 82.5 7.5P6/6 CIExyY:0.3101/0.265/0.3005 -6 6 85 10P6/6 CIExyY:0.3226/0.2716/0.3005 -6 4 77.5 2.5P6/4 CIExyY:0.2932/0.2759/0.3005 -6 4 80 5P6/4 CIExyY:0.3001/0.2778/0.3005 -6 4 82.5 7.5P6/4 CIExyY:0.3107/0.2831/0.3005 -6 4 85 10P6/4 CIExyY:0.3181/0.2871/0.3005 -6 3 77.5 2.5P6/3 CIExyY:0.2974/0.286/0.3005 -6 3 80 5P6/3 CIExyY:0.3025/0.2872/0.3005 -6 3 82.5 7.5P6/3 CIExyY:0.3108/0.2913/0.3005 -6 3 85 10P6/3 CIExyY:0.3164/0.2945/0.3005 -6 2 77.5 2.5P6/2 CIExyY:0.3016/0.296/0.3005 -6 2 80 5P6/2 CIExyY:0.305/0.2967/0.3005 -6 2 82.5 7.5P6/2 CIExyY:0.3107/0.2993/0.3005 -6 2 85 10P6/2 CIExyY:0.3146/0.3018/0.3005 -6 1 80 5P6/1 CIExyY:0.3075/0.3063/0.3005 -6 1 85 10P6/1 CIExyY:0.3126/0.309/0.3005 -5 30 82.5 7.5P5/30 CIExyY:0.301/0.117/0.1977 -5 30 85 10P5/30 CIExyY:0.349/0.1308/0.1977 -5 28 80 5P5/28 CIExyY:0.2618/0.1135/0.1977 -5 28 82.5 7.5P5/28 CIExyY:0.3018/0.1253/0.1977 -5 28 85 10P5/28 CIExyY:0.3478/0.1388/0.1977 -5 26 77.5 2.5P5/26 CIExyY:0.2348/0.114/0.1977 -5 26 80 5P5/26 CIExyY:0.2635/0.1224/0.1977 -5 26 82.5 7.5P5/26 CIExyY:0.3022/0.1331/0.1977 -5 26 85 10P5/26 CIExyY:0.3468/0.146/0.1977 -5 24 77.5 2.5P5/24 CIExyY:0.2372/0.1223/0.1977 -5 24 80 5P5/24 CIExyY:0.2652/0.1304/0.1977 -5 24 82.5 7.5P5/24 CIExyY:0.303/0.1423/0.1977 -5 24 85 10P5/24 CIExyY:0.345/0.1555/0.1977 -5 22 77.5 2.5P5/22 CIExyY:0.2402/0.1315/0.1977 -5 22 80 5P5/22 CIExyY:0.2673/0.1398/0.1977 -5 22 82.5 7.5P5/22 CIExyY:0.3038/0.15/0.1977 -5 22 85 10P5/22 CIExyY:0.3437/0.1644/0.1977 -5 20 77.5 2.5P5/20 CIExyY:0.2438/0.1419/0.1977 -5 20 80 5P5/20 CIExyY:0.2694/0.1499/0.1977 -5 20 82.5 7.5P5/20 CIExyY:0.3042/0.1606/0.1977 -5 20 85 10P5/20 CIExyY:0.3422/0.1735/0.1977 -5 18 77.5 2.5P5/18 CIExyY:0.2476/0.1532/0.1977 -5 18 80 5P5/18 CIExyY:0.2718/0.1604/0.1977 -5 18 82.5 7.5P5/18 CIExyY:0.3052/0.1711/0.1977 -5 18 85 10P5/18 CIExyY:0.3401/0.184/0.1977 -5 16 77.5 2.5P5/16 CIExyY:0.2515/0.1644/0.1977 -5 16 80 5P5/16 CIExyY:0.2744/0.1718/0.1977 -5 16 82.5 7.5P5/16 CIExyY:0.306/0.183/0.1977 -5 16 85 10P5/16 CIExyY:0.3382/0.1951/0.1977 -5 14 77.5 2.5P5/14 CIExyY:0.256/0.1774/0.1977 -5 14 80 5P5/14 CIExyY:0.2775/0.1847/0.1977 -5 14 82.5 7.5P5/14 CIExyY:0.3068/0.1951/0.1977 -5 14 85 10P5/14 CIExyY:0.336/0.2067/0.1977 -5 12 77.5 2.5P5/12 CIExyY:0.2608/0.1913/0.1977 -5 12 80 5P5/12 CIExyY:0.2806/0.1977/0.1977 -5 12 82.5 7.5P5/12 CIExyY:0.3071/0.208/0.1977 -5 12 85 10P5/12 CIExyY:0.3338/0.2186/0.1977 -5 10 77.5 2.5P5/10 CIExyY:0.2665/0.2075/0.1977 -5 10 80 5P5/10 CIExyY:0.2845/0.2137/0.1977 -5 10 82.5 7.5P5/10 CIExyY:0.308/0.223/0.1977 -5 10 85 10P5/10 CIExyY:0.3308/0.2328/0.1977 -5 8 77.5 2.5P5/8 CIExyY:0.2728/0.224/0.1977 -5 8 80 5P5/8 CIExyY:0.2885/0.2296/0.1977 -5 8 82.5 7.5P5/8 CIExyY:0.3087/0.2375/0.1977 -5 8 85 10P5/8 CIExyY:0.328/0.2464/0.1977 -5 6 77.5 2.5P5/6 CIExyY:0.2806/0.2444/0.1977 -5 6 80 5P5/6 CIExyY:0.2932/0.2487/0.1977 -5 6 82.5 7.5P5/6 CIExyY:0.3093/0.2555/0.1977 -5 6 85 10P5/6 CIExyY:0.3243/0.263/0.1977 -5 4 77.5 2.5P5/4 CIExyY:0.2898/0.2667/0.1977 -5 4 80 5P5/4 CIExyY:0.2986/0.2699/0.1977 -5 4 82.5 7.5P5/4 CIExyY:0.31/0.275/0.1977 -5 4 85 10P5/4 CIExyY:0.3193/0.2807/0.1977 -5 3 77.5 2.5P5/3 CIExyY:0.2948/0.2788/0.1977 -5 3 80 5P5/3 CIExyY:0.3015/0.2812/0.1977 -5 3 82.5 7.5P5/3 CIExyY:0.3102/0.2854/0.1977 -5 3 85 10P5/3 CIExyY:0.3173/0.2897/0.1977 -5 2 77.5 2.5P5/2 CIExyY:0.3/0.2912/0.1977 -5 2 80 5P5/2 CIExyY:0.3045/0.2928/0.1977 -5 2 82.5 7.5P5/2 CIExyY:0.3103/0.2959/0.1977 -5 2 85 10P5/2 CIExyY:0.3148/0.2986/0.1977 -5 1 80 5P5/1 CIExyY:0.3074/0.3045/0.1977 -5 1 85 10P5/1 CIExyY:0.3124/0.3075/0.1977 -4 32 77.5 2.5P4/32 CIExyY:0.2265/0.0774/0.12 -4 32 80 5P4/32 CIExyY:0.2574/0.0833/0.12 -4 32 82.5 7.5P4/32 CIExyY:0.2962/0.0906/0.12 -4 30 77.5 2.5P4/30 CIExyY:0.2285/0.0847/0.12 -4 30 80 5P4/30 CIExyY:0.2588/0.0907/0.12 -4 30 82.5 7.5P4/30 CIExyY:0.2969/0.0979/0.12 -4 30 85 10P4/30 CIExyY:0.344/0.108/0.12 -4 28 77.5 2.5P4/28 CIExyY:0.2302/0.0909/0.12 -4 28 80 5P4/28 CIExyY:0.26/0.0971/0.12 -4 28 82.5 7.5P4/28 CIExyY:0.2979/0.1062/0.12 -4 28 85 10P4/28 CIExyY:0.3432/0.1172/0.12 -4 26 77.5 2.5P4/26 CIExyY:0.2322/0.0978/0.12 -4 26 80 5P4/26 CIExyY:0.2618/0.1052/0.12 -4 26 82.5 7.5P4/26 CIExyY:0.2986/0.1135/0.12 -4 26 85 10P4/26 CIExyY:0.3428/0.1248/0.12 -4 24 77.5 2.5P4/24 CIExyY:0.2348/0.1062/0.12 -4 24 80 5P4/24 CIExyY:0.2635/0.1132/0.12 -4 24 82.5 7.5P4/24 CIExyY:0.2993/0.1225/0.12 -4 24 85 10P4/24 CIExyY:0.3421/0.1337/0.12 -4 22 77.5 2.5P4/22 CIExyY:0.2371/0.1143/0.12 -4 22 80 5P4/22 CIExyY:0.2652/0.1218/0.12 -4 22 82.5 7.5P4/22 CIExyY:0.3001/0.1306/0.12 -4 22 85 10P4/22 CIExyY:0.3411/0.1424/0.12 -4 20 77.5 2.5P4/20 CIExyY:0.2394/0.1221/0.12 -4 20 80 5P4/20 CIExyY:0.267/0.13/0.12 -4 20 82.5 7.5P4/20 CIExyY:0.301/0.1396/0.12 -4 20 85 10P4/20 CIExyY:0.34/0.15/0.12 -4 18 77.5 2.5P4/18 CIExyY:0.243/0.1332/0.12 -4 18 80 5P4/18 CIExyY:0.2693/0.1408/0.12 -4 18 82.5 7.5P4/18 CIExyY:0.3016/0.15/0.12 -4 18 85 10P4/18 CIExyY:0.3386/0.1626/0.12 -4 16 77.5 2.5P4/16 CIExyY:0.2467/0.1452/0.12 -4 16 80 5P4/16 CIExyY:0.2718/0.152/0.12 -4 16 82.5 7.5P4/16 CIExyY:0.3028/0.1621/0.12 -4 16 85 10P4/16 CIExyY:0.337/0.1756/0.12 -4 14 77.5 2.5P4/14 CIExyY:0.2509/0.1585/0.12 -4 14 80 5P4/14 CIExyY:0.2747/0.166/0.12 -4 14 82.5 7.5P4/14 CIExyY:0.3035/0.1755/0.12 -4 14 85 10P4/14 CIExyY:0.3351/0.1875/0.12 -4 12 77.5 2.5P4/12 CIExyY:0.2559/0.173/0.12 -4 12 80 5P4/12 CIExyY:0.2778/0.1808/0.12 -4 12 82.5 7.5P4/12 CIExyY:0.3048/0.1905/0.12 -4 12 85 10P4/12 CIExyY:0.3331/0.2014/0.12 -4 10 77.5 2.5P4/10 CIExyY:0.2619/0.1903/0.12 -4 10 80 5P4/10 CIExyY:0.2814/0.1967/0.12 -4 10 82.5 7.5P4/10 CIExyY:0.3056/0.206/0.12 -4 10 85 10P4/10 CIExyY:0.3306/0.2162/0.12 -4 8 77.5 2.5P4/8 CIExyY:0.2685/0.2089/0.12 -4 8 80 5P4/8 CIExyY:0.2855/0.215/0.12 -4 8 82.5 7.5P4/8 CIExyY:0.3066/0.2228/0.12 -4 8 85 10P4/8 CIExyY:0.328/0.2318/0.12 -4 6 77.5 2.5P4/6 CIExyY:0.2763/0.23/0.12 -4 6 80 5P4/6 CIExyY:0.2903/0.2347/0.12 -4 6 82.5 7.5P4/6 CIExyY:0.3076/0.2416/0.12 -4 6 85 10P4/6 CIExyY:0.3248/0.2493/0.12 -4 4 77.5 2.5P4/4 CIExyY:0.2855/0.2531/0.12 -4 4 80 5P4/4 CIExyY:0.2958/0.2565/0.12 -4 4 82.5 7.5P4/4 CIExyY:0.3084/0.2622/0.12 -4 4 85 10P4/4 CIExyY:0.321/0.2686/0.12 -4 3 77.5 2.5P4/3 CIExyY:0.2906/0.2661/0.12 -4 3 80 5P4/3 CIExyY:0.2989/0.2688/0.12 -4 3 82.5 7.5P4/3 CIExyY:0.3089/0.2734/0.12 -4 3 85 10P4/3 CIExyY:0.3187/0.279/0.12 -4 2 77.5 2.5P4/2 CIExyY:0.2962/0.2807/0.12 -4 2 80 5P4/2 CIExyY:0.3022/0.2825/0.12 -4 2 82.5 7.5P4/2 CIExyY:0.3093/0.2859/0.12 -4 2 85 10P4/2 CIExyY:0.3162/0.2902/0.12 -4 1 80 5P4/1 CIExyY:0.3059/0.2982/0.12 -4 1 85 10P4/1 CIExyY:0.3133/0.3026/0.12 -3 34 77.5 2.5P3/34 CIExyY:0.223/0.0543/0.06555 -3 32 77.5 2.5P3/32 CIExyY:0.2242/0.0587/0.06555 -3 32 80 5P3/32 CIExyY:0.2557/0.063/0.06555 -3 30 77.5 2.5P3/30 CIExyY:0.2252/0.0638/0.06555 -3 30 80 5P3/30 CIExyY:0.2568/0.069/0.06555 -3 30 82.5 7.5P3/30 CIExyY:0.2922/0.075/0.06555 -3 28 77.5 2.5P3/28 CIExyY:0.2268/0.0698/0.06555 -3 28 80 5P3/28 CIExyY:0.2579/0.075/0.06555 -3 28 82.5 7.5P3/28 CIExyY:0.293/0.0812/0.06555 -3 26 77.5 2.5P3/26 CIExyY:0.2286/0.0765/0.06555 -3 26 80 5P3/26 CIExyY:0.259/0.0822/0.06555 -3 26 82.5 7.5P3/26 CIExyY:0.2938/0.0892/0.06555 -3 26 85 10P3/26 CIExyY:0.3343/0.0978/0.06555 -3 24 77.5 2.5P3/24 CIExyY:0.2305/0.0832/0.06555 -3 24 80 5P3/24 CIExyY:0.2602/0.0891/0.06555 -3 24 82.5 7.5P3/24 CIExyY:0.2944/0.0967/0.06555 -3 24 85 10P3/24 CIExyY:0.3341/0.1055/0.06555 -3 22 77.5 2.5P3/22 CIExyY:0.2329/0.0911/0.06555 -3 22 80 5P3/22 CIExyY:0.262/0.0978/0.06555 -3 22 82.5 7.5P3/22 CIExyY:0.2953/0.1057/0.06555 -3 22 85 10P3/22 CIExyY:0.334/0.1146/0.06555 -3 20 77.5 2.5P3/20 CIExyY:0.2354/0.1003/0.06555 -3 20 80 5P3/20 CIExyY:0.2639/0.1074/0.06555 -3 20 82.5 7.5P3/20 CIExyY:0.2961/0.1151/0.06555 -3 20 85 10P3/20 CIExyY:0.3332/0.124/0.06555 -3 18 77.5 2.5P3/18 CIExyY:0.238/0.1094/0.06555 -3 18 80 5P3/18 CIExyY:0.2657/0.1163/0.06555 -3 18 82.5 7.5P3/18 CIExyY:0.2969/0.1239/0.06555 -3 18 85 10P3/18 CIExyY:0.3329/0.1332/0.06555 -3 16 77.5 2.5P3/16 CIExyY:0.241/0.1198/0.06555 -3 16 80 5P3/16 CIExyY:0.268/0.1272/0.06555 -3 16 82.5 7.5P3/16 CIExyY:0.2981/0.1356/0.06555 -3 16 85 10P3/16 CIExyY:0.332/0.1456/0.06555 -3 14 77.5 2.5P3/14 CIExyY:0.2449/0.1325/0.06555 -3 14 80 5P3/14 CIExyY:0.2707/0.1397/0.06555 -3 14 82.5 7.5P3/14 CIExyY:0.2992/0.1475/0.06555 -3 14 85 10P3/14 CIExyY:0.3309/0.1572/0.06555 -3 12 77.5 2.5P3/12 CIExyY:0.2498/0.148/0.06555 -3 12 80 5P3/12 CIExyY:0.2739/0.1539/0.06555 -3 12 82.5 7.5P3/12 CIExyY:0.3003/0.1618/0.06555 -3 12 85 10P3/12 CIExyY:0.3301/0.1715/0.06555 -3 10 77.5 2.5P3/10 CIExyY:0.2548/0.1638/0.06555 -3 10 80 5P3/10 CIExyY:0.2772/0.1707/0.06555 -3 10 82.5 7.5P3/10 CIExyY:0.302/0.1794/0.06555 -3 10 85 10P3/10 CIExyY:0.3286/0.1889/0.06555 -3 8 77.5 2.5P3/8 CIExyY:0.2615/0.1845/0.06555 -3 8 80 5P3/8 CIExyY:0.2819/0.191/0.06555 -3 8 82.5 7.5P3/8 CIExyY:0.3037/0.1981/0.06555 -3 8 85 10P3/8 CIExyY:0.3269/0.2075/0.06555 -3 6 77.5 2.5P3/6 CIExyY:0.2691/0.2072/0.06555 -3 6 80 5P3/6 CIExyY:0.287/0.2135/0.06555 -3 6 82.5 7.5P3/6 CIExyY:0.3057/0.2208/0.06555 -3 6 85 10P3/6 CIExyY:0.3243/0.2293/0.06555 -3 4 77.5 2.5P3/4 CIExyY:0.2792/0.2342/0.06555 -3 4 80 5P3/4 CIExyY:0.2928/0.2386/0.06555 -3 4 82.5 7.5P3/4 CIExyY:0.3072/0.2448/0.06555 -3 4 85 10P3/4 CIExyY:0.3214/0.2517/0.06555 -3 3 77.5 2.5P3/3 CIExyY:0.2852/0.2498/0.06555 -3 3 80 5P3/3 CIExyY:0.296/0.253/0.06555 -3 3 82.5 7.5P3/3 CIExyY:0.308/0.2583/0.06555 -3 3 85 10P3/3 CIExyY:0.3195/0.2644/0.06555 -3 2 77.5 2.5P3/2 CIExyY:0.2922/0.268/0.06555 -3 2 80 5P3/2 CIExyY:0.2997/0.27/0.06555 -3 2 82.5 7.5P3/2 CIExyY:0.3088/0.274/0.06555 -3 2 85 10P3/2 CIExyY:0.317/0.279/0.06555 -3 1 80 5P3/1 CIExyY:0.3043/0.2908/0.06555 -3 1 85 10P3/1 CIExyY:0.3139/0.2961/0.06555 -2 30 77.5 2.5P2/30 CIExyY:0.2231/0.0432/0.03126 -2 28 77.5 2.5P2/28 CIExyY:0.2245/0.0491/0.03126 -2 28 80 5P2/28 CIExyY:0.2559/0.0525/0.03126 -2 26 77.5 2.5P2/26 CIExyY:0.226/0.0555/0.03126 -2 26 80 5P2/26 CIExyY:0.2569/0.0594/0.03126 -2 24 77.5 2.5P2/24 CIExyY:0.2277/0.0621/0.03126 -2 24 80 5P2/24 CIExyY:0.2582/0.0669/0.03126 -2 24 82.5 7.5P2/24 CIExyY:0.2882/0.0719/0.03126 -2 22 77.5 2.5P2/22 CIExyY:0.2298/0.0696/0.03126 -2 22 80 5P2/22 CIExyY:0.2597/0.075/0.03126 -2 22 82.5 7.5P2/22 CIExyY:0.289/0.0799/0.03126 -2 22 85 10P2/22 CIExyY:0.323/0.0861/0.03126 -2 20 77.5 2.5P2/20 CIExyY:0.232/0.0779/0.03126 -2 20 80 5P2/20 CIExyY:0.2612/0.0838/0.03126 -2 20 82.5 7.5P2/20 CIExyY:0.2902/0.0901/0.03126 -2 20 85 10P2/20 CIExyY:0.3231/0.0962/0.03126 -2 18 77.5 2.5P2/18 CIExyY:0.2345/0.0873/0.03126 -2 18 80 5P2/18 CIExyY:0.2632/0.0935/0.03126 -2 18 82.5 7.5P2/18 CIExyY:0.2912/0.0995/0.03126 -2 18 85 10P2/18 CIExyY:0.3233/0.1063/0.03126 -2 16 77.5 2.5P2/16 CIExyY:0.2372/0.098/0.03126 -2 16 80 5P2/16 CIExyY:0.2652/0.1045/0.03126 -2 16 82.5 7.5P2/16 CIExyY:0.2922/0.1106/0.03126 -2 16 85 10P2/16 CIExyY:0.3235/0.1181/0.03126 -2 14 77.5 2.5P2/14 CIExyY:0.2406/0.11/0.03126 -2 14 80 5P2/14 CIExyY:0.2676/0.1163/0.03126 -2 14 82.5 7.5P2/14 CIExyY:0.2938/0.1235/0.03126 -2 14 85 10P2/14 CIExyY:0.3235/0.1317/0.03126 -2 12 77.5 2.5P2/12 CIExyY:0.2449/0.1245/0.03126 -2 12 80 5P2/12 CIExyY:0.2709/0.132/0.03126 -2 12 82.5 7.5P2/12 CIExyY:0.2956/0.1392/0.03126 -2 12 85 10P2/12 CIExyY:0.3233/0.1477/0.03126 -2 10 77.5 2.5P2/10 CIExyY:0.2501/0.1422/0.03126 -2 10 80 5P2/10 CIExyY:0.2743/0.15/0.03126 -2 10 82.5 7.5P2/10 CIExyY:0.2979/0.1569/0.03126 -2 10 85 10P2/10 CIExyY:0.323/0.1659/0.03126 -2 8 77.5 2.5P2/8 CIExyY:0.257/0.1635/0.03126 -2 8 80 5P2/8 CIExyY:0.2791/0.1707/0.03126 -2 8 82.5 7.5P2/8 CIExyY:0.3/0.1781/0.03126 -2 8 85 10P2/8 CIExyY:0.3219/0.1862/0.03126 -2 6 77.5 2.5P2/6 CIExyY:0.2661/0.1921/0.03126 -2 6 80 5P2/6 CIExyY:0.285/0.1992/0.03126 -2 6 82.5 7.5P2/6 CIExyY:0.3025/0.2058/0.03126 -2 6 85 10P2/6 CIExyY:0.3207/0.2132/0.03126 -2 4 77.5 2.5P2/4 CIExyY:0.2758/0.2208/0.03126 -2 4 80 5P2/4 CIExyY:0.2908/0.2261/0.03126 -2 4 82.5 7.5P2/4 CIExyY:0.3048/0.2321/0.03126 -2 4 85 10P2/4 CIExyY:0.3189/0.239/0.03126 -2 3 77.5 2.5P2/3 CIExyY:0.2818/0.2377/0.03126 -2 3 80 5P2/3 CIExyY:0.2942/0.2419/0.03126 -2 3 82.5 7.5P2/3 CIExyY:0.3059/0.2468/0.03126 -2 3 85 10P2/3 CIExyY:0.3178/0.2527/0.03126 -2 2 77.5 2.5P2/2 CIExyY:0.2892/0.2583/0.03126 -2 2 80 5P2/2 CIExyY:0.2984/0.2612/0.03126 -2 2 82.5 7.5P2/2 CIExyY:0.3071/0.2647/0.03126 -2 2 85 10P2/2 CIExyY:0.3161/0.2691/0.03126 -2 1 80 5P2/1 CIExyY:0.3036/0.2855/0.03126 -2 1 85 10P2/1 CIExyY:0.3136/0.2893/0.03126 -1 26 77.5 2.5P1/26 CIExyY:0.2251/0.0355/0.0121 -1 24 77.5 2.5P1/24 CIExyY:0.2266/0.0418/0.0121 -1 22 77.5 2.5P1/22 CIExyY:0.2279/0.0473/0.0121 -1 22 80 5P1/22 CIExyY:0.259/0.0509/0.0121 -1 20 77.5 2.5P1/20 CIExyY:0.2295/0.0542/0.0121 -1 20 80 5P1/20 CIExyY:0.2601/0.0586/0.0121 -1 20 82.5 7.5P1/20 CIExyY:0.2831/0.0625/0.0121 -1 18 77.5 2.5P1/18 CIExyY:0.2312/0.0618/0.0121 -1 18 80 5P1/18 CIExyY:0.2612/0.0667/0.0121 -1 18 82.5 7.5P1/18 CIExyY:0.2841/0.0706/0.0121 -1 18 85 10P1/18 CIExyY:0.3069/0.0748/0.0121 -1 16 77.5 2.5P1/16 CIExyY:0.2331/0.0696/0.0121 -1 16 80 5P1/16 CIExyY:0.2625/0.0746/0.0121 -1 16 82.5 7.5P1/16 CIExyY:0.2852/0.079/0.0121 -1 16 85 10P1/16 CIExyY:0.3078/0.0839/0.0121 -1 14 77.5 2.5P1/14 CIExyY:0.2361/0.081/0.0121 -1 14 80 5P1/14 CIExyY:0.2645/0.0863/0.0121 -1 14 82.5 7.5P1/14 CIExyY:0.2868/0.0903/0.0121 -1 14 85 10P1/14 CIExyY:0.3084/0.0952/0.0121 -1 12 77.5 2.5P1/12 CIExyY:0.2394/0.094/0.0121 -1 12 80 5P1/12 CIExyY:0.267/0.1006/0.0121 -1 12 82.5 7.5P1/12 CIExyY:0.2884/0.1059/0.0121 -1 12 85 10P1/12 CIExyY:0.3094/0.111/0.0121 -1 10 77.5 2.5P1/10 CIExyY:0.2441/0.1112/0.0121 -1 10 80 5P1/10 CIExyY:0.2701/0.1173/0.0121 -1 10 82.5 7.5P1/10 CIExyY:0.2905/0.1229/0.0121 -1 10 85 10P1/10 CIExyY:0.3102/0.1282/0.0121 -1 8 77.5 2.5P1/8 CIExyY:0.2496/0.1303/0.0121 -1 8 80 5P1/8 CIExyY:0.2742/0.1375/0.0121 -1 8 82.5 7.5P1/8 CIExyY:0.2932/0.1429/0.0121 -1 8 85 10P1/8 CIExyY:0.3114/0.1481/0.0121 -1 6 77.5 2.5P1/6 CIExyY:0.257/0.1559/0.0121 -1 6 80 5P1/6 CIExyY:0.2794/0.1628/0.0121 -1 6 82.5 7.5P1/6 CIExyY:0.296/0.1682/0.0121 -1 6 85 10P1/6 CIExyY:0.3126/0.1737/0.0121 -1 4 77.5 2.5P1/4 CIExyY:0.2668/0.1874/0.0121 -1 4 80 5P1/4 CIExyY:0.2854/0.1927/0.0121 -1 4 82.5 7.5P1/4 CIExyY:0.2991/0.1974/0.0121 -1 4 85 10P1/4 CIExyY:0.3132/0.2032/0.0121 -1 2 77.5 2.5P1/2 CIExyY:0.2808/0.2296/0.0121 -1 2 80 5P1/2 CIExyY:0.2936/0.233/0.0121 -1 2 82.5 7.5P1/2 CIExyY:0.303/0.2361/0.0121 -1 2 85 10P1/2 CIExyY:0.3132/0.2404/0.0121 -9 6 87.5 2.5RP9/6 CIExyY:0.3322/0.291/0.7866 -9 6 90 5RP9/6 CIExyY:0.3431/0.2988/0.7866 -9 6 92.5 7.5RP9/6 CIExyY:0.3512/0.3052/0.7866 -9 6 95 10RP9/6 CIExyY:0.359/0.3118/0.7866 -9 4 87.5 2.5RP9/4 CIExyY:0.3234/0.301/0.7866 -9 4 90 5RP9/4 CIExyY:0.3301/0.306/0.7866 -9 4 92.5 7.5RP9/4 CIExyY:0.335/0.3099/0.7866 -9 4 95 10RP9/4 CIExyY:0.34/0.314/0.7866 -9 2 87.5 2.5RP9/2 CIExyY:0.3149/0.3108/0.7866 -9 2 90 5RP9/2 CIExyY:0.3172/0.3126/0.7866 -9 2 92.5 7.5RP9/2 CIExyY:0.319/0.3141/0.7866 -9 2 95 10RP9/2 CIExyY:0.3205/0.3155/0.7866 -9 1 90 5RP9/1 CIExyY:0.3126/0.315/0.7866 -9 1 95 10RP9/1 CIExyY:0.3136/0.316/0.7866 -8 14 87.5 2.5RP8/14 CIExyY:0.3621/0.2496/0.591 -8 12 87.5 2.5RP8/12 CIExyY:0.3552/0.2594/0.591 -8 12 90 5RP8/12 CIExyY:0.3818/0.2742/0.591 -8 12 92.5 7.5RP8/12 CIExyY:0.4002/0.2859/0.591 -8 10 87.5 2.5RP8/10 CIExyY:0.3479/0.2699/0.591 -8 10 90 5RP8/10 CIExyY:0.3685/0.2828/0.591 -8 10 92.5 7.5RP8/10 CIExyY:0.383/0.293/0.591 -8 10 95 10RP8/10 CIExyY:0.3983/0.3049/0.591 -8 8 87.5 2.5RP8/8 CIExyY:0.3406/0.2793/0.591 -8 8 90 5RP8/8 CIExyY:0.357/0.29/0.591 -8 8 92.5 7.5RP8/8 CIExyY:0.3682/0.2983/0.591 -8 8 95 10RP8/8 CIExyY:0.38/0.3082/0.591 -8 6 87.5 2.5RP8/6 CIExyY:0.3327/0.2898/0.591 -8 6 90 5RP8/6 CIExyY:0.344/0.2978/0.591 -8 6 92.5 7.5RP8/6 CIExyY:0.3521/0.3042/0.591 -8 6 95 10RP8/6 CIExyY:0.36/0.3112/0.591 -8 4 87.5 2.5RP8/4 CIExyY:0.3239/0.3/0.591 -8 4 90 5RP8/4 CIExyY:0.3303/0.3052/0.591 -8 4 92.5 7.5RP8/4 CIExyY:0.336/0.3092/0.591 -8 4 95 10RP8/4 CIExyY:0.3412/0.3135/0.591 -8 3 87.5 2.5RP8/3 CIExyY:0.3194/0.3052/0.591 -8 3 90 5RP8/3 CIExyY:0.3241/0.3088/0.591 -8 3 92.5 7.5RP8/3 CIExyY:0.3276/0.3115/0.591 -8 3 95 10RP8/3 CIExyY:0.3311/0.3144/0.591 -8 2 87.5 2.5RP8/2 CIExyY:0.3154/0.31/0.591 -8 2 90 5RP8/2 CIExyY:0.318/0.312/0.591 -8 2 92.5 7.5RP8/2 CIExyY:0.32/0.3136/0.591 -8 2 95 10RP8/2 CIExyY:0.3218/0.3152/0.591 -8 1 90 5RP8/1 CIExyY:0.3132/0.3146/0.591 -8 1 95 10RP8/1 CIExyY:0.3145/0.3158/0.591 -7 20 87.5 2.5RP7/20 CIExyY:0.3811/0.2143/0.4306 -7 18 87.5 2.5RP7/18 CIExyY:0.3751/0.2241/0.4306 -7 18 90 5RP7/18 CIExyY:0.4186/0.2459/0.4306 -7 16 87.5 2.5RP7/16 CIExyY:0.3688/0.2342/0.4306 -7 16 90 5RP7/16 CIExyY:0.4076/0.254/0.4306 -7 16 92.5 7.5RP7/16 CIExyY:0.4346/0.2689/0.4306 -7 16 95 10RP7/16 CIExyY:0.4648/0.2878/0.4306 -7 14 87.5 2.5RP7/14 CIExyY:0.362/0.2448/0.4306 -7 14 90 5RP7/14 CIExyY:0.3958/0.2628/0.4306 -7 14 92.5 7.5RP7/14 CIExyY:0.4195/0.2762/0.4306 -7 14 95 10RP7/14 CIExyY:0.4456/0.2931/0.4306 -7 12 87.5 2.5RP7/12 CIExyY:0.3555/0.2545/0.4306 -7 12 90 5RP7/12 CIExyY:0.3841/0.271/0.4306 -7 12 92.5 7.5RP7/12 CIExyY:0.404/0.2834/0.4306 -7 12 95 10RP7/12 CIExyY:0.426/0.298/0.4306 -7 10 87.5 2.5RP7/10 CIExyY:0.3487/0.2648/0.4306 -7 10 90 5RP7/10 CIExyY:0.3713/0.2798/0.4306 -7 10 92.5 7.5RP7/10 CIExyY:0.3871/0.2906/0.4306 -7 10 95 10RP7/10 CIExyY:0.404/0.303/0.4306 -7 8 87.5 2.5RP7/8 CIExyY:0.3417/0.2745/0.4306 -7 8 90 5RP7/8 CIExyY:0.3603/0.2869/0.4306 -7 8 92.5 7.5RP7/8 CIExyY:0.3722/0.2963/0.4306 -7 8 95 10RP7/8 CIExyY:0.3851/0.3067/0.4306 -7 6 87.5 2.5RP7/6 CIExyY:0.3338/0.2854/0.4306 -7 6 90 5RP7/6 CIExyY:0.347/0.2949/0.4306 -7 6 92.5 7.5RP7/6 CIExyY:0.3562/0.3022/0.4306 -7 6 95 10RP7/6 CIExyY:0.3648/0.3098/0.4306 -7 4 87.5 2.5RP7/4 CIExyY:0.3254/0.2971/0.4306 -7 4 90 5RP7/4 CIExyY:0.3332/0.3032/0.4306 -7 4 92.5 7.5RP7/4 CIExyY:0.3389/0.3079/0.4306 -7 4 95 10RP7/4 CIExyY:0.3446/0.3125/0.4306 -7 3 87.5 2.5RP7/3 CIExyY:0.3211/0.3025/0.4306 -7 3 90 5RP7/3 CIExyY:0.3267/0.307/0.4306 -7 3 92.5 7.5RP7/3 CIExyY:0.3308/0.3103/0.4306 -7 3 95 10RP7/3 CIExyY:0.3349/0.3137/0.4306 -7 2 87.5 2.5RP7/2 CIExyY:0.317/0.3076/0.4306 -7 2 90 5RP7/2 CIExyY:0.3206/0.3104/0.4306 -7 2 92.5 7.5RP7/2 CIExyY:0.3232/0.3125/0.4306 -7 2 95 10RP7/2 CIExyY:0.3258/0.3148/0.4306 -7 1 90 5RP7/1 CIExyY:0.315/0.3135/0.4306 -7 1 95 10RP7/1 CIExyY:0.3175/0.3157/0.4306 -6 24 87.5 2.5RP6/24 CIExyY:0.3927/0.1892/0.3005 -6 22 87.5 2.5RP6/22 CIExyY:0.3877/0.1978/0.3005 -6 22 90 5RP6/22 CIExyY:0.4449/0.2219/0.3005 -6 20 87.5 2.5RP6/20 CIExyY:0.3833/0.2056/0.3005 -6 20 90 5RP6/20 CIExyY:0.4368/0.2283/0.3005 -6 20 92.5 7.5RP6/20 CIExyY:0.4735/0.2464/0.3005 -6 18 87.5 2.5RP6/18 CIExyY:0.3773/0.2158/0.3005 -6 18 90 5RP6/18 CIExyY:0.4245/0.2382/0.3005 -6 18 92.5 7.5RP6/18 CIExyY:0.4581/0.2549/0.3005 -6 18 95 10RP6/18 CIExyY:0.4961/0.2751/0.3005 -6 16 87.5 2.5RP6/16 CIExyY:0.3718/0.2251/0.3005 -6 16 90 5RP6/16 CIExyY:0.4136/0.2467/0.3005 -6 16 92.5 7.5RP6/16 CIExyY:0.4448/0.2622/0.3005 -6 16 95 10RP6/16 CIExyY:0.4781/0.2812/0.3005 -6 14 87.5 2.5RP6/14 CIExyY:0.3652/0.2355/0.3005 -6 14 90 5RP6/14 CIExyY:0.4023/0.2552/0.3005 -6 14 92.5 7.5RP6/14 CIExyY:0.4285/0.2702/0.3005 -6 14 95 10RP6/14 CIExyY:0.4552/0.2881/0.3005 -6 12 87.5 2.5RP6/12 CIExyY:0.3582/0.2462/0.3005 -6 12 90 5RP6/12 CIExyY:0.39/0.2646/0.3005 -6 12 92.5 7.5RP6/12 CIExyY:0.4125/0.2784/0.3005 -6 12 95 10RP6/12 CIExyY:0.436/0.2936/0.3005 -6 10 87.5 2.5RP6/10 CIExyY:0.3509/0.2578/0.3005 -6 10 90 5RP6/10 CIExyY:0.3769/0.2738/0.3005 -6 10 92.5 7.5RP6/10 CIExyY:0.396/0.286/0.3005 -6 10 95 10RP6/10 CIExyY:0.415/0.2989/0.3005 -6 8 87.5 2.5RP6/8 CIExyY:0.3437/0.2688/0.3005 -6 8 90 5RP6/8 CIExyY:0.3648/0.282/0.3005 -6 8 92.5 7.5RP6/8 CIExyY:0.3791/0.2929/0.3005 -6 8 95 10RP6/8 CIExyY:0.393/0.3038/0.3005 -6 6 87.5 2.5RP6/6 CIExyY:0.3362/0.2799/0.3005 -6 6 90 5RP6/6 CIExyY:0.352/0.2904/0.3005 -6 6 92.5 7.5RP6/6 CIExyY:0.3635/0.2987/0.3005 -6 6 95 10RP6/6 CIExyY:0.374/0.3074/0.3005 -6 4 87.5 2.5RP6/4 CIExyY:0.3272/0.2929/0.3005 -6 4 90 5RP6/4 CIExyY:0.3371/0.3001/0.3005 -6 4 92.5 7.5RP6/4 CIExyY:0.3439/0.3056/0.3005 -6 4 95 10RP6/4 CIExyY:0.3503/0.3112/0.3005 -6 3 87.5 2.5RP6/3 CIExyY:0.323/0.2989/0.3005 -6 3 90 5RP6/3 CIExyY:0.33/0.3044/0.3005 -6 3 92.5 7.5RP6/3 CIExyY:0.3348/0.3086/0.3005 -6 3 95 10RP6/3 CIExyY:0.3397/0.3127/0.3005 -6 2 87.5 2.5RP6/2 CIExyY:0.3188/0.3048/0.3005 -6 2 90 5RP6/2 CIExyY:0.3232/0.3085/0.3005 -6 2 92.5 7.5RP6/2 CIExyY:0.3261/0.3113/0.3005 -6 2 95 10RP6/2 CIExyY:0.3292/0.3141/0.3005 -6 1 90 5RP6/1 CIExyY:0.3166/0.3124/0.3005 -6 1 95 10RP6/1 CIExyY:0.3193/0.3153/0.3005 -5 26 87.5 2.5RP5/26 CIExyY:0.4011/0.1652/0.1977 -5 24 87.5 2.5RP5/24 CIExyY:0.3965/0.1738/0.1977 -5 24 90 5RP5/24 CIExyY:0.4683/0.1978/0.1977 -5 22 87.5 2.5RP5/22 CIExyY:0.3924/0.1814/0.1977 -5 22 90 5RP5/22 CIExyY:0.4581/0.2068/0.1977 -5 22 92.5 7.5RP5/22 CIExyY:0.5045/0.2248/0.1977 -5 20 87.5 2.5RP5/20 CIExyY:0.3873/0.1909/0.1977 -5 20 90 5RP5/20 CIExyY:0.4484/0.215/0.1977 -5 20 92.5 7.5RP5/20 CIExyY:0.4915/0.233/0.1977 -5 20 95 10RP5/20 CIExyY:0.5396/0.2535/0.1977 -5 18 87.5 2.5RP5/18 CIExyY:0.3821/0.2007/0.1977 -5 18 90 5RP5/18 CIExyY:0.4372/0.2242/0.1977 -5 18 92.5 7.5RP5/18 CIExyY:0.4761/0.2421/0.1977 -5 18 95 10RP5/18 CIExyY:0.5185/0.262/0.1977 -5 16 87.5 2.5RP5/16 CIExyY:0.3763/0.2108/0.1977 -5 16 90 5RP5/16 CIExyY:0.4261/0.2331/0.1977 -5 16 92.5 7.5RP5/16 CIExyY:0.4617/0.2506/0.1977 -5 16 95 10RP5/16 CIExyY:0.4986/0.2685/0.1977 -5 14 87.5 2.5RP5/14 CIExyY:0.3703/0.2211/0.1977 -5 14 90 5RP5/14 CIExyY:0.4142/0.2428/0.1977 -5 14 92.5 7.5RP5/14 CIExyY:0.4454/0.2596/0.1977 -5 14 95 10RP5/14 CIExyY:0.4767/0.2776/0.1977 -5 12 87.5 2.5RP5/12 CIExyY:0.3635/0.2325/0.1977 -5 12 90 5RP5/12 CIExyY:0.4022/0.2523/0.1977 -5 12 92.5 7.5RP5/12 CIExyY:0.4303/0.2675/0.1977 -5 12 95 10RP5/12 CIExyY:0.4579/0.2841/0.1977 -5 10 87.5 2.5RP5/10 CIExyY:0.356/0.2452/0.1977 -5 10 90 5RP5/10 CIExyY:0.388/0.263/0.1977 -5 10 92.5 7.5RP5/10 CIExyY:0.4108/0.2773/0.1977 -5 10 95 10RP5/10 CIExyY:0.4332/0.2918/0.1977 -5 8 87.5 2.5RP5/8 CIExyY:0.349/0.257/0.1977 -5 8 90 5RP5/8 CIExyY:0.3748/0.2729/0.1977 -5 8 92.5 7.5RP5/8 CIExyY:0.3932/0.2852/0.1977 -5 8 95 10RP5/8 CIExyY:0.4105/0.298/0.1977 -5 6 87.5 2.5RP5/6 CIExyY:0.3396/0.2718/0.1977 -5 6 90 5RP5/6 CIExyY:0.3585/0.2842/0.1977 -5 6 92.5 7.5RP5/6 CIExyY:0.3726/0.2941/0.1977 -5 6 95 10RP5/6 CIExyY:0.3851/0.3039/0.1977 -5 4 87.5 2.5RP5/4 CIExyY:0.3298/0.2869/0.1977 -5 4 90 5RP5/4 CIExyY:0.3421/0.2954/0.1977 -5 4 92.5 7.5RP5/4 CIExyY:0.3515/0.3024/0.1977 -5 4 95 10RP5/4 CIExyY:0.3594/0.309/0.1977 -5 3 87.5 2.5RP5/3 CIExyY:0.3248/0.2944/0.1977 -5 3 90 5RP5/3 CIExyY:0.3338/0.301/0.1977 -5 3 92.5 7.5RP5/3 CIExyY:0.3404/0.3062/0.1977 -5 3 95 10RP5/3 CIExyY:0.3461/0.3112/0.1977 -5 2 87.5 2.5RP5/2 CIExyY:0.3199/0.3019/0.1977 -5 2 90 5RP5/2 CIExyY:0.3256/0.3065/0.1977 -5 2 92.5 7.5RP5/2 CIExyY:0.3296/0.3098/0.1977 -5 2 95 10RP5/2 CIExyY:0.3332/0.3131/0.1977 -5 1 90 5RP5/1 CIExyY:0.3177/0.3116/0.1977 -5 1 95 10RP5/1 CIExyY:0.321/0.3148/0.1977 -4 26 87.5 2.5RP4/26 CIExyY:0.4048/0.1428/0.12 -4 24 87.5 2.5RP4/24 CIExyY:0.4011/0.1504/0.12 -4 22 87.5 2.5RP4/22 CIExyY:0.3967/0.1593/0.12 -4 22 90 5RP4/22 CIExyY:0.4656/0.1821/0.12 -4 20 87.5 2.5RP4/20 CIExyY:0.3926/0.1679/0.12 -4 20 90 5RP4/20 CIExyY:0.4571/0.1906/0.12 -4 20 92.5 7.5RP4/20 CIExyY:0.513/0.2101/0.12 -4 20 95 10RP4/20 CIExyY:0.5674/0.2319/0.12 -4 18 87.5 2.5RP4/18 CIExyY:0.3865/0.1802/0.12 -4 18 90 5RP4/18 CIExyY:0.4455/0.2023/0.12 -4 18 92.5 7.5RP4/18 CIExyY:0.4965/0.2217/0.12 -4 18 95 10RP4/18 CIExyY:0.5466/0.2424/0.12 -4 16 87.5 2.5RP4/16 CIExyY:0.3807/0.1923/0.12 -4 16 90 5RP4/16 CIExyY:0.4339/0.2139/0.12 -4 16 92.5 7.5RP4/16 CIExyY:0.4799/0.2329/0.12 -4 16 95 10RP4/16 CIExyY:0.5234/0.253/0.12 -4 14 87.5 2.5RP4/14 CIExyY:0.3748/0.2039/0.12 -4 14 90 5RP4/14 CIExyY:0.4225/0.2249/0.12 -4 14 92.5 7.5RP4/14 CIExyY:0.4629/0.2437/0.12 -4 14 95 10RP4/14 CIExyY:0.502/0.2623/0.12 -4 12 87.5 2.5RP4/12 CIExyY:0.3683/0.2162/0.12 -4 12 90 5RP4/12 CIExyY:0.4104/0.2361/0.12 -4 12 92.5 7.5RP4/12 CIExyY:0.445/0.2541/0.12 -4 12 95 10RP4/12 CIExyY:0.4789/0.2717/0.12 -4 10 87.5 2.5RP4/10 CIExyY:0.3608/0.2301/0.12 -4 10 90 5RP4/10 CIExyY:0.396/0.2489/0.12 -4 10 92.5 7.5RP4/10 CIExyY:0.4259/0.2651/0.12 -4 10 95 10RP4/10 CIExyY:0.4528/0.2811/0.12 -4 8 87.5 2.5RP4/8 CIExyY:0.3533/0.2438/0.12 -4 8 90 5RP4/8 CIExyY:0.3833/0.26/0.12 -4 8 92.5 7.5RP4/8 CIExyY:0.4072/0.275/0.12 -4 8 95 10RP4/8 CIExyY:0.4282/0.289/0.12 -4 6 87.5 2.5RP4/6 CIExyY:0.3442/0.2595/0.12 -4 6 90 5RP4/6 CIExyY:0.3671/0.2733/0.12 -4 6 92.5 7.5RP4/6 CIExyY:0.385/0.2859/0.12 -4 6 95 10RP4/6 CIExyY:0.3999/0.2972/0.12 -4 4 87.5 2.5RP4/4 CIExyY:0.334/0.277/0.12 -4 4 90 5RP4/4 CIExyY:0.3491/0.2872/0.12 -4 4 92.5 7.5RP4/4 CIExyY:0.3612/0.2963/0.12 -4 4 95 10RP4/4 CIExyY:0.3715/0.3042/0.12 -4 3 87.5 2.5RP4/3 CIExyY:0.3287/0.2858/0.12 -4 3 90 5RP4/3 CIExyY:0.3402/0.294/0.12 -4 3 92.5 7.5RP4/3 CIExyY:0.3494/0.3012/0.12 -4 3 95 10RP4/3 CIExyY:0.3568/0.3075/0.12 -4 2 87.5 2.5RP4/2 CIExyY:0.3231/0.2951/0.12 -4 2 90 5RP4/2 CIExyY:0.331/0.301/0.12 -4 2 92.5 7.5RP4/2 CIExyY:0.3371/0.3061/0.12 -4 2 95 10RP4/2 CIExyY:0.3417/0.3106/0.12 -4 1 90 5RP4/1 CIExyY:0.3211/0.3084/0.12 -4 1 95 10RP4/1 CIExyY:0.3261/0.3135/0.12 -3 22 87.5 2.5RP3/22 CIExyY:0.4018/0.1304/0.06555 -3 20 87.5 2.5RP3/20 CIExyY:0.3969/0.1413/0.06555 -3 20 90 5RP3/20 CIExyY:0.4577/0.1593/0.06555 -3 18 87.5 2.5RP3/18 CIExyY:0.3929/0.1506/0.06555 -3 18 90 5RP3/18 CIExyY:0.4503/0.1695/0.06555 -3 18 92.5 7.5RP3/18 CIExyY:0.513/0.1893/0.06555 -3 16 87.5 2.5RP3/16 CIExyY:0.3876/0.1629/0.06555 -3 16 90 5RP3/16 CIExyY:0.4418/0.1809/0.06555 -3 16 92.5 7.5RP3/16 CIExyY:0.4991/0.2011/0.06555 -3 16 95 10RP3/16 CIExyY:0.5628/0.2241/0.06555 -3 14 87.5 2.5RP3/14 CIExyY:0.3818/0.1758/0.06555 -3 14 90 5RP3/14 CIExyY:0.4313/0.1944/0.06555 -3 14 92.5 7.5RP3/14 CIExyY:0.4831/0.214/0.06555 -3 14 95 10RP3/14 CIExyY:0.538/0.2369/0.06555 -3 12 87.5 2.5RP3/12 CIExyY:0.3754/0.1898/0.06555 -3 12 90 5RP3/12 CIExyY:0.4199/0.2089/0.06555 -3 12 92.5 7.5RP3/12 CIExyY:0.4654/0.2273/0.06555 -3 12 95 10RP3/12 CIExyY:0.5139/0.2489/0.06555 -3 10 87.5 2.5RP3/10 CIExyY:0.3681/0.2054/0.06555 -3 10 90 5RP3/10 CIExyY:0.4073/0.2235/0.06555 -3 10 92.5 7.5RP3/10 CIExyY:0.4445/0.2419/0.06555 -3 10 95 10RP3/10 CIExyY:0.4851/0.2618/0.06555 -3 8 87.5 2.5RP3/8 CIExyY:0.3598/0.2233/0.06555 -3 8 90 5RP3/8 CIExyY:0.393/0.2395/0.06555 -3 8 92.5 7.5RP3/8 CIExyY:0.4234/0.2556/0.06555 -3 8 95 10RP3/8 CIExyY:0.4552/0.2741/0.06555 -3 6 87.5 2.5RP3/6 CIExyY:0.3501/0.2425/0.06555 -3 6 90 5RP3/6 CIExyY:0.3765/0.2569/0.06555 -3 6 92.5 7.5RP3/6 CIExyY:0.399/0.2708/0.06555 -3 6 95 10RP3/6 CIExyY:0.4218/0.2864/0.06555 -3 4 87.5 2.5RP3/4 CIExyY:0.34/0.2624/0.06555 -3 4 90 5RP3/4 CIExyY:0.3586/0.2742/0.06555 -3 4 92.5 7.5RP3/4 CIExyY:0.3739/0.2851/0.06555 -3 4 95 10RP3/4 CIExyY:0.3889/0.2969/0.06555 -3 3 87.5 2.5RP3/3 CIExyY:0.334/0.2736/0.06555 -3 3 90 5RP3/3 CIExyY:0.3484/0.2838/0.06555 -3 3 92.5 7.5RP3/3 CIExyY:0.3601/0.2925/0.06555 -3 3 95 10RP3/3 CIExyY:0.3714/0.3019/0.06555 -3 2 87.5 2.5RP3/2 CIExyY:0.3272/0.2861/0.06555 -3 2 90 5RP3/2 CIExyY:0.337/0.294/0.06555 -3 2 92.5 7.5RP3/2 CIExyY:0.345/0.3001/0.06555 -3 2 95 10RP3/2 CIExyY:0.3526/0.3068/0.06555 -3 1 90 5RP3/1 CIExyY:0.3243/0.3048/0.06555 -3 1 95 10RP3/1 CIExyY:0.3323/0.3116/0.06555 -2 20 87.5 2.5RP2/20 CIExyY:0.3802/0.108/0.03126 -2 18 87.5 2.5RP2/18 CIExyY:0.3778/0.1188/0.03126 -2 18 90 5RP2/18 CIExyY:0.4338/0.134/0.03126 -2 16 87.5 2.5RP2/16 CIExyY:0.3748/0.131/0.03126 -2 16 90 5RP2/16 CIExyY:0.4269/0.1454/0.03126 -2 16 92.5 7.5RP2/16 CIExyY:0.4744/0.1595/0.03126 -2 14 87.5 2.5RP2/14 CIExyY:0.3711/0.1449/0.03126 -2 14 90 5RP2/14 CIExyY:0.418/0.1598/0.03126 -2 14 92.5 7.5RP2/14 CIExyY:0.4624/0.1737/0.03126 -2 14 95 10RP2/14 CIExyY:0.5129/0.1888/0.03126 -2 12 87.5 2.5RP2/12 CIExyY:0.3668/0.1618/0.03126 -2 12 90 5RP2/12 CIExyY:0.408/0.1764/0.03126 -2 12 92.5 7.5RP2/12 CIExyY:0.4481/0.1903/0.03126 -2 12 95 10RP2/12 CIExyY:0.4911/0.206/0.03126 -2 10 87.5 2.5RP2/10 CIExyY:0.3617/0.18/0.03126 -2 10 90 5RP2/10 CIExyY:0.3971/0.1939/0.03126 -2 10 92.5 7.5RP2/10 CIExyY:0.4321/0.2082/0.03126 -2 10 95 10RP2/10 CIExyY:0.4678/0.2237/0.03126 -2 8 87.5 2.5RP2/8 CIExyY:0.3555/0.2003/0.03126 -2 8 90 5RP2/8 CIExyY:0.3858/0.214/0.03126 -2 8 92.5 7.5RP2/8 CIExyY:0.4137/0.2276/0.03126 -2 8 95 10RP2/8 CIExyY:0.4428/0.2419/0.03126 -2 6 87.5 2.5RP2/6 CIExyY:0.347/0.2259/0.03126 -2 6 90 5RP2/6 CIExyY:0.3708/0.238/0.03126 -2 6 92.5 7.5RP2/6 CIExyY:0.3918/0.249/0.03126 -2 6 95 10RP2/6 CIExyY:0.4139/0.2608/0.03126 -2 4 87.5 2.5RP2/4 CIExyY:0.3382/0.2496/0.03126 -2 4 90 5RP2/4 CIExyY:0.3558/0.2597/0.03126 -2 4 92.5 7.5RP2/4 CIExyY:0.3702/0.2683/0.03126 -2 4 95 10RP2/4 CIExyY:0.385/0.2778/0.03126 -2 3 87.5 2.5RP2/3 CIExyY:0.3336/0.2614/0.03126 -2 3 90 5RP2/3 CIExyY:0.3479/0.2706/0.03126 -2 3 92.5 7.5RP2/3 CIExyY:0.3589/0.2783/0.03126 -2 3 95 10RP2/3 CIExyY:0.37/0.2865/0.03126 -2 2 87.5 2.5RP2/2 CIExyY:0.3279/0.2754/0.03126 -2 2 90 5RP2/2 CIExyY:0.3383/0.2829/0.03126 -2 2 92.5 7.5RP2/2 CIExyY:0.3459/0.2892/0.03126 -2 2 95 10RP2/2 CIExyY:0.3532/0.2957/0.03126 -2 1 90 5RP2/1 CIExyY:0.326/0.2978/0.03126 -2 1 95 10RP2/1 CIExyY:0.3336/0.3056/0.03126 -1 16 87.5 2.5RP1/16 CIExyY:0.3368/0.0902/0.0121 -1 14 87.5 2.5RP1/14 CIExyY:0.3368/0.102/0.0121 -1 14 90 5RP1/14 CIExyY:0.3811/0.1138/0.0121 -1 12 87.5 2.5RP1/12 CIExyY:0.3361/0.1181/0.0121 -1 12 90 5RP1/12 CIExyY:0.3772/0.1283/0.0121 -1 12 92.5 7.5RP1/12 CIExyY:0.424/0.14/0.0121 -1 12 95 10RP1/12 CIExyY:0.4668/0.1514/0.0121 -1 10 87.5 2.5RP1/10 CIExyY:0.3354/0.1351/0.0121 -1 10 90 5RP1/10 CIExyY:0.3727/0.1458/0.0121 -1 10 92.5 7.5RP1/10 CIExyY:0.4132/0.158/0.0121 -1 10 95 10RP1/10 CIExyY:0.4521/0.171/0.0121 -1 8 87.5 2.5RP1/8 CIExyY:0.3342/0.1551/0.0121 -1 8 90 5RP1/8 CIExyY:0.366/0.1662/0.0121 -1 8 92.5 7.5RP1/8 CIExyY:0.4005/0.1793/0.0121 -1 8 95 10RP1/8 CIExyY:0.4357/0.1921/0.0121 -1 6 87.5 2.5RP1/6 CIExyY:0.3321/0.1811/0.0121 -1 6 90 5RP1/6 CIExyY:0.3588/0.192/0.0121 -1 6 92.5 7.5RP1/6 CIExyY:0.3865/0.2036/0.0121 -1 6 95 10RP1/6 CIExyY:0.4151/0.2169/0.0121 -1 4 87.5 2.5RP1/4 CIExyY:0.329/0.2095/0.0121 -1 4 90 5RP1/4 CIExyY:0.3503/0.2196/0.0121 -1 4 92.5 7.5RP1/4 CIExyY:0.3705/0.23/0.0121 -1 4 95 10RP1/4 CIExyY:0.392/0.2423/0.0121 -1 2 87.5 2.5RP1/2 CIExyY:0.324/0.2459/0.0121 -1 2 90 5RP1/2 CIExyY:0.3378/0.2542/0.0121 -1 2 92.5 7.5RP1/2 CIExyY:0.3498/0.2617/0.0121 -1 2 95 10RP1/2 CIExyY:0.3629/0.271/0.0121 diff --git a/DOODLE-TIPS b/DOODLE-TIPS deleted file mode 100644 index 4491261..0000000 --- a/DOODLE-TIPS +++ /dev/null @@ -1,28 +0,0 @@ -* You should byte-compile(make). -Because DOODLE uses very complex macro. - -Especialy ew-line.el, ew-scan-m.el, ew-scan-s.el and ew-scan-u.el that are require 'lex. -(lex is scanner generator.) - -* Multiline field-bodies fetched from XOVER is already concatinated, -you should set ew-ignore-76bytes-limit to true. -Currentry Gnus use these variables to decode and "Subject" and "From", -tell it here. Unless doing it, DOODLE does not decode atoms in phrase -because DOODLE cannot decide whether an atom is in phrase or not without -field name information. - -(setq gnus-unstructured-field-decoder - (lambda (string) - (if (fboundp 'ew-decode-field) - (let ((ew-ignore-76bytes-limit t)) - (ew-cut-cr-lf (ew-decode-field "Subject" (ew-lf-crlf-to-crlf string)))) - (eword-decode-and-unfold-structured-field string)))) - -(setq gnus-structured-field-decoder - (lambda (string) - (if (fboundp 'ew-decode-field) - (let ((ew-ignore-76bytes-limit t)) - (ew-cut-cr-lf (ew-decode-field "From" (ew-lf-crlf-to-crlf string)))) - (eword-decode-unstructured-field-body (std11-unfold-string string) 'must-unfold)))) - -* Ignore warnings about args-eword-* when byte-compiling. diff --git a/DOODLE-VERSION b/DOODLE-VERSION deleted file mode 100644 index 8d0333a..0000000 --- a/DOODLE-VERSION +++ /dev/null @@ -1,88 +0,0 @@ -FLIM: Faithful Library about Internet Message -FLAM: Faithful Library About MIME -DOODLE: Definition Oriented Obsessive Decoding Library for Encoded-word - -Order is not significant. - - 1 $BAIK'(B $B$9$[$&(B 2.5R3.0/3.0 FLIM-FLAM 1.0.0 - 2 $B9HG_(B $B$3$&$P$$(B 2.5R7.0/8.0 FLIM-FLAM 1.0.1 - 3 $B4Z9H2V(B $B$+$i$/$l$J$p(B 4.0R4.0/14.0 FLIM-FLAM 1.1.0 - 4 $BEm2V(B $B$b$b(B 2.5R6.0/10.0 FLIM-FLAM 1.2.0 - 5 $B:y(B $B$5$/$i(B 2.5R7.0/7.0 FLIM-FLAM 1.2.1 - 6 $BFy(B $B$K$/(B 2.5YR8.0/4.0 FLIM-FLAM 1.3.0 - 7 $B@VAIK'(B $B$"$+$9$[$&(B 7.5R4.0/14.0 FLIM-FLAM 1.8.0 - 8 $B6d.F&(B $B$"$:$-(B 2.5R3.5/5.0 - 20 $BIrF:Cc(B $B$($S$A$c(B 5.0R4.0/11.0 - 21 $B??GCc(B $B$3$2$A$c(B 10R3.0/2.0 - 26 $B7*Hi(B $B$/$j$+$O(B 10R3.0/4.0 - 27 $BFP(B $B$H$S(B 10R4.0/7.0 - 28 $B3w(B $B$+$P(B 10R4.0/5.0 - 29 $B2+H'@w(B $B$3$&$m$;$s(B 2.5Y5.0/4.0 - 30 $BCz;RCc(B $B$A$g$&$8$A$c(B 5.0YR4.0/4.0 - 31 $B>MU(B $B$^$D$P(B 7.5G5.0/5.0 - 54 $B;3Mu@"(B $B$d$^$"$$$:$j(B 5.0BG/4.0/4.0 - 55 $B3$>>(B $B$_$k(B 2.5GY3.5/2.0 - 56 $BU;Cc(B $B$3$S$A$c(B 10Y4.0/2.0 - 57 $B@DGrFK(B $B$"$*$7$m$D$k$P$_(B 5.0GY7.5/3.0 - 58 $B2X;R:0(B $B$J$9$3$s(B 7.5PB/2.3/3.0 - 59 $B:0(B $B$3$s(B 7.5PB3.0/3.0 - 60 $BG<8M(B $B$J$s$I(B 5.0PB3.0/4.0 - 61 $B:0@D(B $B$3$s$8$g$&(B 8.5PB3.0/12.0 - 62 $BN0M~(B $B$k$j(B 7.5PB3.0/12.0 - 63 $B72@D(B $B$0$s$8$g$&(B 6.0PB3.5/12.0 - 64 $BGr72(B $B$S$c$/$0$s(B 7.5B6.0/4.0 - 65 $Be](B $B$O$J$@(B 10B3.5/5.0 - 66 $B@u2+(B $B$"$5$.(B 10BG6.0/3.0 - 67 $BLG;g(B $B$a$C$7(B 5.0P2.5/4.0 - 68 $B?<;g(B $B$3$`$i$5$-(B 5.0P2.5/4.0 - 69 $BFsMu(B $B$U$?$"$$(B 5.0P4.0/3.0 - 70 $B;g(B $B$`$i$5$-(B 7.5P3.5/4.0 - 71 $BIrF:(B $B$($S(B 7.5P3.5/6.0 - 72 $B? JR, $(B5~ET;T8rDL6I(B -1.1.0 T-Dòji-A $(BEl;{(B -1.2.0 J-Dþjò-A $(B==>r(B -1.2.1 Kamitobaguchi $(B>eD;1)8}(B -1.2.2 Takeda $(BC]ED(B ; = $(B5~ET;T8rDL6I(B $(B1(4]@~(B -1.3.0 Fushimi $(BIz8+(B -1.4.0 Kintetsu-Tanbabashi $(B6aE4C0GH66(B ; <=> $(B5~:e(B $(BC0GH66(B -1.4.1 Momoyama-Gory-Dòmae-A $(BEm;38fNMA0(B -1.5.0 Mukaijima $(B8~Eg(B -1.6.0 Ogura $(B>.AR(B -1.7.0 Iseda $(B0K@*ED(B -1.8.0 -DÒkubo-A $(BBg5WJ](B -1.8.1 Kutsukawa $(B5WDE@n(B -1.9.0 Terada $(B;{ED(B - - -[Chao Version names] - -;;------------------------------------------------------------------------- -;; Kyoto Municipal Transfer Bureau -;; $(B5~ET;T8rDL6I(B -;; http://www.city.kyoto.jp/kotsu/main.htm -;; Karasuma Line $(B1(4]@~(B -;;------------------------------------------------------------------------- -1.2.0 Takeda $(BC]ED(B ; = $(B6aE4(B $(B5~ET@~(B -1.3.0 Kuinabashi $(B$/$$$J66(B -1.4.0 J-Dþjò-A $(B==>r(B -1.6.0 Kuj-Dò-A $(B6e>r(B -1.6.1 Ky-Dòto-A $(B5~ET(B ; <=> JR, $(B6aE4(B -1.7.0 Goj-Dò-A $(B8^>r(B -1.8.0 Shij-Dò-A $(B;M>r(B diff --git a/Makefile b/Makefile deleted file mode 100644 index beba984..0000000 --- a/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -# -# Makefile for FLIM. -# - -PACKAGE = flim -VERSION = 1.9.0 - -TAR = tar -RM = /bin/rm -f -CP = /bin/cp -p - -EMACS = emacs -FLAGS = -batch -q -no-site-file -l FLIM-MK - -PREFIX = NONE -LISPDIR = NONE - -GOMI = *.elc -FILES = README.?? Makefile FLIM-MK FLIM-CFG FLIM-ELS *.el ChangeLog - - -elc: ew-parse.el - $(EMACS) $(FLAGS) -f compile-flim $(PREFIX) $(LISPDIR) - -install: elc - $(EMACS) $(FLAGS) -f install-flim $(PREFIX) $(LISPDIR) - -clean: - -$(RM) $(GOMI) - cd ../tl && make clean - - -tar: - cvs commit - sh -c 'cvs tag -RF $(PACKAGE)-`echo $(VERSION) \ - | sed s/\\\\./_/ | sed s/\\\\./_/`; \ - cd /tmp; \ - cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \ - export -d $(PACKAGE)-$(VERSION) \ - -r $(PACKAGE)-`echo $(VERSION) | sed s/\\\\./_/ | sed s/\\\\./_/` \ - flim' - cd /tmp; $(RM) $(PACKAGE)-$(VERSION)/ftp.in ; \ - $(TAR) cvzf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION) - cd /tmp; $(RM) -r $(PACKAGE)-$(VERSION) - sed "s/VERSION/$(VERSION)/" < ftp.in > ftp - -release: - -$(RM) /pub/GNU/elisp/apel/$(PACKAGE)-$(VERSION).tar.gz - mv /tmp/$(PACKAGE)-$(VERSION).tar.gz /pub/GNU/elisp/flim/ - cd /pub/GNU/elisp/semi/ ; \ - ln -s ../flim/$(PACKAGE)-$(VERSION).tar.gz . - -ew-parse.el: ew-parse.scm lalr-el.scm - -scm -f lalr-el.scm -f ew-parse.scm > ew-parse.out diff --git a/README.en b/README.en deleted file mode 100644 index 74bf582..0000000 --- a/README.en +++ /dev/null @@ -1,120 +0,0 @@ -[README for FLIM (English Version)] - -What's FLIM -=========== - - FLIM is a library to provide basic features about message - representation or encoding. It consists of following - modules: - - std11.el --- STD 11 (RFC 822) parser and utility - - mime.el --- MIME library - - mime-def.el --- Definitions about MIME format - - mime-parse.el --- MIME parser - - mel.el --- MIME encoder/decoder - mel-dl.el --- base64 (b-encoding) encoder/decoder - (for Emacs 20 with dynamic loading support) - mel-b.el --- base64 (b-encoding) encoder/decoder - (for other emacsen) - mel-q.el --- quoted-printable and q-encoding encoder/decoder - mel-u.el --- unofficial module for uuencode - mel-g.el --- unofficial module for gzip64 - - eword-decode.el --- encoded-word decoder - eword-encode.el --- encoded-word encoder - - mailcap.el --- mailcap parser and utility - - -Installation -============ - -(0) before installing it, please install APEL package. APEL package - is available at: - - ftp://ftp.jaist.ac.jp/pub/GNU/elisp/apel/ - -(1-a) run in expanded place - - If you don't want to install other directories, please do only - following: - - % make - - You can specify the emacs command name, for example - - % make install EMACS=xemacs - - If `EMACS=...' is omitted, EMACS=emacs is used. - -(1-b) make install - - If you want to install other directories, please do following: - - % make install - - You can specify the emacs command name, for example - - % make install EMACS=xemacs - - If `EMACS=...' is omitted, EMACS=emacs is used. - - You can specify the prefix of the directory tree for Emacs Lisp - programs and shell scripts, for example: - - % make install PREFIX=~/ - - If `PREFIX=...' is omitted, the prefix of the directory tree of the - specified emacs command is used (perhaps /usr/local). - - For example, if PREFIX=/usr/local and EMACS 19.34 is specified, it - will create the following directory tree: - - /usr/local/share/emacs/site-lisp/flim/ --- FLIM - - You can specify site-lisp directory, for example - - % make install LISPDIR=~/share/emacs/lisp - - If `LISPDIR=...' is omitted, site-lisp directory of the specified - emacs command is used (perhaps /usr/local/share/emacs/site-lisp or - /usr/local/lib/xemacs/site-lisp). - - You can specify other optional settings by editing the file - FLIM-CFG. Please read comments in it. - - -load-path (for Emacs or MULE) -============================= - - If you are using Emacs or Mule, please add directory of FLIM to - load-path. If you install by default setting, you can write - subdirs.el for example: - - -------------------------------------------------------------------- - (normal-top-level-add-to-load-path '("apel" "flim")) - -------------------------------------------------------------------- - - If you are using XEmacs, there are no need of setting about - load-path. - - -Bug reports -=========== - - If you write bug-reports and/or suggestions for improvement, please - send them to the tm Mailing List: - - bug-tm-en@chamonix.jaist.ac.jp (English) - bug-tm-ja@chamonix.jaist.ac.jp (Japanese) - - Via the tm ML, you can report FLIM bugs, obtain the latest release - of FLIM, and discuss future enhancements to FLIM. To join the tm ML, - send an empty e-mail to - - tm-en-help@chamonix.jaist.ac.jp (English) - tm-ja-help@chamonix.jaist.ac.jp (Japanese) diff --git a/TESTPAT b/TESTPAT deleted file mode 100644 index 1290c99..0000000 --- a/TESTPAT +++ /dev/null @@ -1,1341 +0,0 @@ -;;; -*- mode: emacs-lisp; coding: iso-2022-7bit-ss2 -*- -;---------------------------------------------------------------------------- -;-------- This sequece of HYPHEN-MINUS is 76 bytes long. -------------------- -;---------------------------------------------------------------------------- - -;;; options: -;;encode-sticked-comment-as-atom ; violate the policy preserving structures -;;ignore-75bytes-limit ; violate RFC2047 -;;ignore-76bytes-limit ; violate RFC2047 -;;permit-sticked-comment ; violate RFC2047 -;;permit-sticked-special ; violate RFC2047 -;;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) -;;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 - -;;; 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) - (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) -) - -;;; - -(setq decode-succ-count 0) -(setq decode-all-count 0) -(defun decode (src dsts &rest opts) - (if (stringp dsts) (setq dsts (list dsts))) - (setq decode-all-count (1+ decode-all-count)) - (let ((res (condition-case nil - (apply 'decode-test src dsts opts) - (error nil)))) - (if (eq res t) - (progn - (setq decode-succ-count (1+ decode-succ-count)) - (insert "\n'dsucc")) - (insert (format "\n%S\n'dfail" res))) - res)) - -(setq encode-succ-count 0) -(setq encode-all-count 0) -(defun encode (src dsts &rest opts) - (if (stringp dsts) (setq dsts (list dsts))) - (setq encode-all-count (1+ encode-all-count)) - (let ((res (condition-case nil - (apply 'encode-test src dsts opts) - (error nil)))) - (if (eq res t) - (progn - (setq encode-succ-count (1+ encode-succ-count)) - (insert "\n'esucc")) - (insert (format "\n%S\n'efail" res))) - 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)))) - -;;;start-test - -;;; Section 1: Decoding examples from RFC2047 - -(decode -"From: =?US-ASCII?Q?Keith_Moore?= " -"From: Keith Moore ") - -(decode -"To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= " -"To: Keld J.ANxrn Simonsen ")*B - -(decode -"CC: =?ISO-8859-1?Q?Andr=E9?= Pirard " -"CC: Andr.ANi Pirard ")*B - -(decode -"Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\r - =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=" -"Subject: If you can read this you understand the example.") - -(decode -"From: =?ISO-8859-1?Q?Olle_J=E4rnefors?= " -"From: Olle J.ANdrnefors ")*B - -(decode -"From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= " -"From: Patrik F.ANdltstrNvm ")*B - -(decode -"From: Nathaniel Borenstein \r -\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?=)" -"From: foo@bar.baz (a)") - -(decode -"From: foo@bar.baz (=?ISO-8859-1?Q?a?= b)" -"From: foo@bar.baz (a b)") - -(decode -"From: foo@bar.baz (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)" -"From: foo@bar.baz (ab)") - -(decode -"From: foo@bar.baz (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)" -"From: foo@bar.baz (ab)") - -(decode -"From: foo@bar.baz (=?ISO-8859-1?Q?a?=\r -\t=?ISO-8859-1?Q?b?=)" -"From: foo@bar.baz (ab)") - -(decode -"From: foo@bar.baz (=?ISO-8859-1?Q?a_b?=)" -"From: foo@bar.baz (a b)") - -(decode -"From: foo@bar.baz (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)" -"From: foo@bar.baz (a b)") - -(decode -"Subject: (=?ISO-8859-1?Q?a?=)" -"Subject: (=?ISO-8859-1?Q?a?=)") - -(decode -"Subject: (=?ISO-8859-1?Q?a?= b)" -"Subject: (=?ISO-8859-1?Q?a?= b)") - -(decode -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)" -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)") - -(decode -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)" -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)") - -(decode -"Subject: (=?ISO-8859-1?Q?a?=\r -\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?=)" -"Subject: (=?ISO-8859-1?Q?a_b?=)") - -(decode -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)" -"Subject: (=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)") - -;;; Section 2: Decoding proper inputs. - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= " -"From: $B$"(B ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= =?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - " -"From: $B$"$$(B ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - " -"From: $B$"$$(B ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r -\t=?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - " -"From: $B$"$$(B ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= \"ja \\\"a\\\"\" " -"From: $B$"(B \"ja \\\"a\\\"\" ") - -(decode -"From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)" -"From: akr@jaist.ac.jp ($B$"(B($B$$(B)$B$&(B)") - -(decode -"From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?= " -"From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?= ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b ") - -(decode -"From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b " -"From: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b ") - -(decode -"From: \"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\" " -"From: \"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\" ") - -(decode -"From: \"\\\"\\\\\" =?ISO-2022-JP?B?GyRCJCIbKEI=?= \"\\\"\\\\\" " -"From: \"\\\"\\\\\" $B$"(B \"\\\"\\\\\" ") - -(decode -"From: < =?ISO-2022-JP?B?GyRCJCIbKEI=?= @jaist.ac.jp>" -"From: < =?ISO-2022-JP?B?GyRCJCIbKEI=?= @jaist.ac.jp>") - -(decode -"From: =?ISO-2022-JP?Q?=1B=24BAA=1B=28B?= " -"From: $BAA(B ") - -(decode -"From: =?ISO-2022-JP?Q?=1B$BAA=1B(B?= ) " -"From: =?ISO-2022-JP?Q?=1B$BAA=1B(B?= ) ") - -(decode -"From: (=?US-ASCII?Q?(?=)foo@bar.baz(=?US-ASCII?Q?))baz@bar.foo(?=)" -"From: (=?US-ASCII?Q?(?=)foo@bar.baz(=?US-ASCII?Q?))baz@bar.foo(?=)") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEIoGyRCJCIbKEIp?= " -"From: \"$B$"(B($B$"(B)\" ") - -(decode -"From: =?US-ASCII?Q?=28?= , =?US-ASCII?Q?=29?= " -"From: \"(\" , \")\" " -'ignore-76bytes-limit) - -(decode -"From: =?ISO-2022-JP?B?YSJiGyRCJCIbKEJjXA==?= " -"From: \"a\\\"b$B$"(Bc\\\\\" ") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: $B$"(B") - -(decode -"Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=b") - -(decode -"Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b" -"Subject: a=?ISO-2022-JP?B?GyRCJCIbKEI=?=b") - -(decode -"Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)") - -(decode -"Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)" -"Subject: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b)") - -(decode -"Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\"" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\"") - -(decode -"Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\"" -"Subject: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\"") - -(decode -"Subject: (Re: =?ISO-2022-JP?B?GyRCJCIbKEI=?=)" -"Subject: (Re: =?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:") - -(decode -"Subject: =?ISO-2022-JP?B??=" -"Subject: =?ISO-2022-JP?B??=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= a\r - =?ISO-2022-JP?B?GyRCJCQbKEI=?=" -"Subject: $B$"(B a $B$$(B") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCMCQbKEIgICAgICAgICAgICAgICAgICAgICAgICAgICAg?=\r - =?US-ASCII?Q?____________________________________________________________?=\r - =?ISO-2022-JP?B?ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBskQlJfGyhC?=" -"Subject: $B0$(B $BR_(B") - -(decode -"From: =?ISO-8859-1?Q?abcdefghijklmnopqrst=A1=28=29=22=5C?= " -"From: \"abcdefghijklmnopqrst.AN!()\\\"\\\\\" ")*B - -(decode -"Subject: ?= =?" -"Subject: ?= =?") - -(decode -"Subject: \" =?ISO-2022-JP?B?GyRCJCIbKEI=?= \"" -"Subject: \" $B$"(B \"") - -(decode -"From: \"\\\\\" =?ISO-2022-JP?B?GyRCJCIbKEI=?= \"\" " -"From: \"\\\\\" $B$"(B \"\" ") - -(decode -"Subject: =?ISO-2022-JP?Q?=1B$B$\"=1B(B_=1B$B$\"=1B(B?=" -"Subject: $B$"(B $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?Q?=1B$B$\"=1B(B =1B$B$\"=1B(B?=" -"Subject: =?ISO-2022-JP?Q?=1B$B$\"=1B(B =1B$B$\"=1B(B?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= a =?ISO-8859-8?Q?=E0?=" -"Subject: $B$"(B a .HN`")*B - -(decode -"Subject: =?ISO-8859-8?Q?=E0?= =?ISO-2022-JP?B?GyRCTm0bKEI=?=" -"Subject: .HN`$BNm(B")*B - -(decode -"Subject: =?ISO-8859-8?Q?=E0_?= =?ISO-2022-JP?B?GyRCTm0bKEI=?=" -"Subject: .HN` $BNm(B")*B - -(decode -"Subject: =?ISO-2022-JP-2?B?Gy5GG05DGyRCNFg/dBsoQg==?=" -"Subject: .FNC$B4X?t(B")*B - -(decode -"Subject: =?ISO-8859-7?Q?=C3?= =?ISO-2022-JP?B?GyRCNFg/dBsoQg==?=" -"Subject: .FNC$B4X?t(B")*B - -(decode -"Subject: =?Shift_JIS?B?gqA=?=" -"Subject: $B$"(B") - -(decode -"Subject: =?EUC-JP?B?pKI=?=" -"Subject: $B$"(B") - -(decode -"Subject: = =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: = $B$"(B") - -(decode -"Subject: =? =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =? $B$"(B") - -(decode -"Subject: =?ISO-2022-JP =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP $B$"(B") - -(decode -"Subject: =?ISO-2022-JP? =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP? $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?B =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?B? =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B? $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI= =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI= $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=? =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=? $B$"(B") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: $B$"$"(B") - -(decode -"Subject: ==?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: ==?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==") - -(decode -"From: akr@jaist.ac.jp (\\=?ISO-2022-JP?B?GyRCJCIbKEI=?=)" -"From: akr@jaist.ac.jp (\\=?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -(decode -"=?ISO-2022-JP?B?GyRCJCIbKEI=?=: test" -"=?ISO-2022-JP?B?GyRCJCIbKEI=?=: test") - -(decode -"=?ISO-2022-JP?B?GyRCJCIbKEI=?=: test" -"=?ISO-2022-JP?B?GyRCJCIbKEI=?=: test" -'permit-sticked-special) - -;;; Section 3: Decoding melancholic inputs. - -(decode -"From:=?ISO-2022-JP?B?GyRCJCIbKEI=?= " -"From:$B$"(B ") - -(decode -"From: akr@jaist.ac.jp\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\\a=?ISO-2022-JP?B?GyRCJCQbKEI=?=)" -"From: akr@jaist.ac.jp ($B$"(B\\a$B$$(B)") - -(decode -"From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?= " -"From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?= ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) ") - -(decode -"From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) " -"From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) ") - -(decode -"From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?= " -"From: (a)$B$"(B " -'permit-sticked-comment) - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) " -"From: $B$"(B(b) " -'permit-sticked-comment) - -(decode -"From: (a)=?ISO-2022-JP?B?GyRCJCIbKEI=?=(b) " -"From: (a)$B$"(B(b) " -'permit-sticked-comment) - -(decode -"From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?= " -"From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?= ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" ") - -(decode -"From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" " -"From: \"a\"=?ISO-2022-JP?B?GyRCJCIbKEI=?=\"b\" ") - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)\r - " -"From: $B$"(B($B$"(B) " -'permit-sticked-comment) - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"To: $B$"(B" -'permit-sticked-special) - -(decode -"To: ,=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"To: ,=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"To: ,=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"To: ,$B$"(B" -'permit-sticked-special) - -(decode -"To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"To: akr@jaist.ac.jp,$B$"(B" -'permit-sticked-special) - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;") - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;" -"To: $B$"(B:akr@jaist.ac.jp;" -'permit-sticked-special) - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=;") - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=;" -"To: $B$"(B:$B$$(B;" -'ignore-76bytes-limit 'permit-sticked-special) - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=,=?ISO-2022-JP?B?GyRCJCYbKEI=?=;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=,=?ISO-2022-JP?B?GyRCJCYbKEI=?=;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=") - -(decode -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=,=?ISO-2022-JP?B?GyRCJCYbKEI=?=;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=" -"To: $B$"(B:$B$$(B,$B$&(B;,$B$((B" -'ignore-76bytes-limit 'permit-sticked-special) - -(decode -"Subject:=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject:$B$"(B") - -;;; Section 4: Decoding invalid inputs. - -(decode -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCQbKEI=?= ") - -(decode -"From: akr@jaist.ac.jp\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=a=?ISO-2022-JP?B?GyRCJCQbKEI=?=)" -"From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=a=?ISO-2022-JP?B?GyRCJCQbKEI=?=)") - -(decode -"From: akr@jaist.ac.jp\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)" -"From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)") - -(decode -"From: akr@jaist.ac.jp\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)" -"From: akr@jaist.ac.jp ($B$"(B($B$$(B)$B$&(B)" -'ignore-76bytes-limit) - -(decode -"Subject: =?=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI==?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI==?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?==?ISO-2022-JP?B?GyRCJCIbKEI=?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI?=" -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCNFg-dBsoQg==?=" -"Subject: =?ISO-2022-JP?B?GyRCNFg-dBsoQg==?=") - -(decode -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= =?= =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -"Subject: $B$"(B=?=$B$"(B") - -;;; Section 5: Encoding proper inputs. - -(encode -"From: $B$"(B " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= ") - -(encode -"From: $B$"$$(B " -"From: =?ISO-2022-JP?B?GyRCJCIkJBsoQg==?= ") - -(encode -"From: $B$"(B $B$$(B " -"From: =?ISO-2022-JP?B?GyRCJCIbKEIgGyRCJCQbKEI=?= ") - -(encode -"From: .AN! N! "*B -"From: =?ISO-8859-1?Q?=A1_=A1?= ") - -(encode -"From: \"$B$"(B($B$"(B)\" " -"From: =?ISO-2022-JP?B?GyRCJCIbKEIoGyRCJCIbKEIp?= ") - -(encode -"From: \"a\\\"b$B$"(Bc\\\\\" " -"From: =?ISO-2022-JP?B?YSJiGyRCJCIbKEJjXA==?= ") - -(encode -"Subject: $B0$(B $BR_(B" -"Subject: =?ISO-2022-JP?B?GyRCMCQbKEIgICAgICAgICAgICAgICAgICAgICAgICAgICAg?=\r - =?US-ASCII?Q?____________________________________________________________?=\r - =?ISO-2022-JP?B?ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBskQlJfGyhC?=") - -(encode -"Subject: $B0$(B $BR_(B" -"Subject: =?ISO-2022-JP?B?GyQpQrCkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDS3w==" -'ignore-76bytes-limit 'ignore-75bytes-limit) - -(encode -"From: .AN! "*B -"From: =?ISO-8859-1?Q?=A1?= ") - -(encode -"From: \"abcdefghijklmnopqrst.AN!()\\\"\\\\\" "*B -"From: =?ISO-8859-1?Q?abcdefghijklmnopqrst=A1=28=29=22=5C?= ") - -(encode -"From: akr@jaist.ac.jp (abcdefghijklmnopqrst.AN!\\(\\)\"\\\\)"*B -"From: akr@jaist.ac.jp (=?ISO-8859-1?Q?abcdefghijklmnopqrst=A1=28=29\"=5C?=)") - -(encode -"Subject: $B$"(B a .HN`"*B -"Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?= a =?ISO-8859-8?Q?=E0?=") - -(encode -"Subject: .HN`$BNm(B"*B -"Subject: =?ISO-8859-8?Q?=E0?= =?ISO-2022-JP?B?GyRCTm0bKEI=?=") - -(encode -"Subject: .HN` $BNm(B"*B -'("Subject: =?ISO-8859-8?Q?=E0_?= =?ISO-2022-JP?B?GyRCTm0bKEI=?=" - "Subject: =?ISO-8859-8?Q?=E0?= =?ISO-2022-JP?B?IBskQk5tGyhC?=")) - -(encode -"Subject: .FNC$B4X?t(B"*B -'("Subject: =?ISO-8859-7?Q?=C3?= =?ISO-2022-JP?B?GyRCNFg/dBsoQg==?=" - "Subject: =?ISO-2022-JP-2?B?Gy5GG05DGyRCNFg/dBsoQg==?=")) - -(encode -"From: aaaaaaaaaaaaaaaaaaaaa($B$"$$(B)aaaaaaaaaaaaaaaaaaaa " -"From: aaaaaaaaaaaaaaaaaaaaa(=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyRCJCQbKEI=?=)aaaaaaaaaaaaaaaaaaaa ") - -(encode -"From: aaaaaaaaaaaaaaaaaaaaa ($B$"$$(B)aaaaaaaaaaaaaaaaaaaa " -'("From: aaaaaaaaaaaaaaaaaaaaa - (=?ISO-2022-JP?B?GyRCJCIkJBsoQg==?=)aaaaaaaaaaaaaaaaaaaa " - "From: aaaaaaaaaaaaaaaaaaaaa (=?ISO-2022-JP?B?GyRCJCIbKEI=?= - =?ISO-2022-JP?B?GyRCJCQbKEI=?=)aaaaaaaaaaaaaaaaaaaa ")) - -(encode -"From: aaaaaaaaaaaaaaaaaaaaa( $B$"$$(B)aaaaaaaaaaaaaaaaaaaa " -'("From: aaaaaaaaaaaaaaaaaaaaa( - =?ISO-2022-JP?B?GyRCJCIkJBsoQg==?=)aaaaaaaaaaaaaaaaaaaa " - "From: aaaaaaaaaaaaaaaaaaaaa( =?ISO-2022-JP?B?GyRCJCIbKEI=?= - =?ISO-2022-JP?B?GyRCJCQbKEI=?=)aaaaaaaaaaaaaaaaaaaa ")) - -(encode -"From: aaaaaaaaaaaaaaaaaaaaa($B$"$$(B )aaaaaaaaaaaaaaaaaaaa " -'("From: aaaaaaaaaaaaaaaaaaaaa(=?ISO-2022-JP?B?GyRCJCIkJBsoQg==?= - )aaaaaaaaaaaaaaaaaaaa " - "From: aaaaaaaaaaaaaaaaaaaaa(=?ISO-2022-JP?B?GyRCJCIbKEI=?= - =?ISO-2022-JP?B?GyRCJCQbKEI=?= )aaaaaaaaaaaaaaaaaaaa ")) - -(encode -"From: aaaaaaaaaaaaaaaaaaaaa($B$"$$(B) aaaaaaaaaaaaaaaaaaaa " -"From: aaaaaaaaaaaaaaaaaaaaa(=?ISO-2022-JP?B?GyRCJCIkJBsoQg==?=)\r - aaaaaaaaaaaaaaaaaaaa ") - -(encode -"From: aaaaaaaaaaaaaaaaaaaaa($B$"(B $B$$(B)aaaaaaaaaaaaaaaaaaaa " -"From: aaaaaaaaaaaaaaaaaaaaa(=?ISO-2022-JP?B?GyRCJCIbKEIgCg==?=\r - =?ISO-2022-JP?B?GyRCJCQbKEI=?=)aaaaaaaaaaaaaaaaaaaa ") - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaa ") - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaa\r - ") - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - ") - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From:\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - ") - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From:\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - ") - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)\r - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -'separate-sticked-tokens-for-fold) - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)=?US-ASCII?Q?aaaaaaaaaaaaaaaaaaaaaaa?=\r - =?US-ASCII?Q?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?= " -'encode-long-ascii-string-for-fold 'permit-sticked-special) - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - aaaaaaaaaaaaaaaa " -'divide-atom-for-fold) - -(encode -"From: ($B$"(B)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " -'("From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " - "From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - ") -'ignore-76bytes-limit) - -(encode -"From: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa($B$"(B)aa " -"From: =?US-ASCII?Q?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?=\r - =?US-ASCII?Q?a?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aa " -'encode-long-ascii-string-for-fold) - -(encode -"From: $B$"(B aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa($B$"(B)aa " -"From: =?ISO-2022-JP?B?GyRCJCIbKEIgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ==?=\r - =?US-ASCII?Q?aaaaaaaaaaaaaaa?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)aa" -'encode-long-ascii-string-for-fold) - -(encode -"From: ($B$"(B) " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=) ") - -(encode -"From: (((((((((((((((((((((((((((((((((((((((($B$"(B)))))))))))))))))))))))))))))))))))))))) " -"From: ((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ((((((((((((((((((((((((((((((((((((((((($B$"(B))))))))))))))))))))))))))))))))))))))))) " -"From: (((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=)))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: (((((((((((((((((((((((((((((((((((((((((((((($B$"(B)))))))))))))))))))))))))))))))))))))))))))))) " -"From: ((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=))))))))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ((((((((((((((((((((((((((((((((((((((((((((((($B$"(B))))))))))))))))))))))))))))))))))))))))))))))) " -"From: (((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)))))))))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: (((((((((((((((((((((((((((((((((((((((((((((((($B$"(B)))))))))))))))))))))))))))))))))))))))))))))))) " -"From:\r - ((((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: (((((((((((((((((((((((((((((((((((((((((((((((((((((($B$"(B)))))))))))))))))))))))))))))))))))))))))))))))))))))) " -"From:\r - ((((((((((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ((((((((((((((((((((((((((((((((((((((((((($B$"(B))))))))))))))))))))))))))))))))))))))))))) " -"From:\r - ((((((((((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ((((((((((((((((((((((((((((((((((((((((((((((((((((((($B$"(B))))))))))))))))))))))))))))))))))))))))))))))))))))))) " -"From:\r - ((((((((((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyhC?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))))))))))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: (((((((((((((((((((((((((((((((((((((((((((((((((((((((($B$"(B)))))))))))))))))))))))))))))))))))))))))))))))))))))))) " -"From:\r - ((((((((((((((((((((((((((((((((((((((((((((((((((((((=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyhC?=((=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))))))))))=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyhC?=))))))))))))))))))))))))\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ()($B$"(B)() " -"From: ()(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)() ") - -(encode -"From: ($B$"(B)()()()()()()()()()()()()()()()()()()() " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)()()()()()()()()()()()()()()()()()()()\r - ") - -(encode -"From: ($B$"(B)()()()()()()()()()()()()()()()()()()()()()() " -"From:\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)()()()()()()()()()()()()()()()()()()()()()()\r - ") - -(encode -"From: ($B$"(B)()()()()()()()()()()()()()()()()()()()()()()() " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)()()()()()()()()()()()()()()()()()()()()()()()\r - " -'zero-characters-encoded-word-hack) - -(encode -"From: ($B$"(B)()()()()()()()()()()()()()()()()()()()()()()()()()()() " -"From: (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)()()()()()()()()()()()()()()()(=?ISO-2022-JP?B?GyhC?=\r - =?ISO-2022-JP?B?GyhC?=)()()()()()()()()()()() " -'zero-characters-encoded-word-hack) - -(encode -"To: l@d ($B$"(B aaa)($B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEI=?= aaa)(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -(encode -"To: l@d ($B$"(B aaaa)($B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - aaaa)(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -(encode -"To: l@d ($B$"(B aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)($B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -(encode -"To: l@d ($B$"(B aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)($B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEIgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE=?=\r - =?US-ASCII?Q?aaaaaaaaaaaaaaaaaa?=)(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)" -'encode-long-ascii-string-for-fold) - -(encode -"To: l@d ($B$"(B aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()$B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEIgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE=?=\r - =?US-ASCII?Q?aaaaaaaaaaaaaaaaaa?=()=?ISO-2022-JP?B?GyRCJCIbKEI=?=)" -'encode-long-ascii-string-for-fold) - -(encode -"To: l@d ($B$"(B aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa $B$"(B)($B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEI=?= aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=)(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -(encode -"To: l@d ($B$"(B aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa $B$"(B)($B$"(B)" -"To: l@d (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r - =?ISO-2022-JP?B?GyRCJCIbKEI=?=)(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)") - -;---------------------------------------------------------------------------- - -;;; Section 6: Encoding melancholic inputs. - -(encode -"From: akr@jaist.ac.jp ($B$"(B($B$$(B)$B$&(B)" -"From: akr@jaist.ac.jp\r - (=?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)" -'ignore-76bytes-limit) - -(encode -"From: akr@jaist.ac.jp ($B$"(B($B$$(B)$B$&(B)" -"From: akr@jaist.ac.jp (=?ISO-2022-JP?B?GyRCJCIbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=(=?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=)=?ISO-2022-JP?B?GyRCJCYbKEI=?=)" -'zero-characters-encoded-word-hack) - -(encode -"From: $B$"(B($B$"(B) " -"From: =?ISO-2022-JP?B?GyRCJCIbKEIoGyRCJCIbKEIp?= " -'encode-sticked-comment-as-atom) - -(encode -"From: $B$"(B($B$"(B) " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?=(=?ISO-2022-JP?B?GyRCJCIbKEI=?=)\r - " -'permit-sticked-comment) - -(encode -"From: $B$"(B($B$"(B) " -"From: =?ISO-2022-JP?B?GyRCJCIbKEI=?= (=?ISO-2022-JP?B?GyRCJCIbKEI=?=)\r - " -'separate-sticked-comment) - -(encode -"To: $B$"(B" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=" -'permit-sticked-special) - -(encode -"To: $B$"(B" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= " -'separate-sticked-special) - -(encode -"To: ,$B$"(B" -"To: ,=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -'permit-sticked-special) - -(encode -"To: ,$B$"(B" -"To: , =?ISO-2022-JP?B?GyRCJCIbKEI=?= " -'separate-sticked-special) - -(encode -"To: akr@jaist.ac.jp,$B$"(B" -"To: akr@jaist.ac.jp,=?ISO-2022-JP?B?GyRCJCIbKEI=?=" -'permit-sticked-special) - -(encode -"To: akr@jaist.ac.jp,$B$"(B" -"To: akr@jaist.ac.jp, =?ISO-2022-JP?B?GyRCJCIbKEI=?= " -'separate-sticked-special) - -(encode -"To: $B$"(B:akr@jaist.ac.jp;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:akr@jaist.ac.jp;" -'permit-sticked-special) - -(encode -"To: $B$"(B:akr@jaist.ac.jp;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= :akr@jaist.ac.jp;" -'separate-sticked-special) - -(encode -"To: $B$"(B:$B$$(B;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=;" -'ignore-76bytes-limit 'permit-sticked-special) - -(encode -"To: $B$"(B:$B$$(B;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=;" -'zero-characters-encoded-word-hack 'permit-sticked-special) - -(encode -"To: $B$"(B:$B$$(B;" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= : =?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - ;" -'separate-sticked-special) - -(encode -"To: $B$"(B:$B$$(B,$B$&(B;,$B$((B" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=,=?ISO-2022-JP?B?GyRCJCYbKEI=?=;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=" -'ignore-76bytes-limit 'permit-sticked-special) - -(encode -"To: $B$"(B:$B$$(B,$B$&(B;,$B$((B" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?=:=?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=,=?ISO-2022-JP?B?GyRCJCYbKEI=?=\r - =?ISO-2022-JP?B?GyhC?=;,=?ISO-2022-JP?B?GyRCJCgbKEI=?=" -'zero-characters-encoded-word-hack 'permit-sticked-special) - -(encode -"To: $B$"(B:$B$$(B,$B$&(B;,$B$((B" -"To: =?ISO-2022-JP?B?GyRCJCIbKEI=?= : =?ISO-2022-JP?B?GyRCJCQbKEI=?=\r - , =?ISO-2022-JP?B?GyRCJCYbKEI=?= ;,\r - =?ISO-2022-JP?B?GyRCJCgbKEI=?= " -'separate-sticked-special) - -;;; Section 7: Using embedded-encoded-words. -;; -;; 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 -;; -;; 1. $BCN$i$J$$(B charset $B$b$7$/$O(B encoding $B$,;XDj$5$l$F$$$?$H$-!#(B -;; =?unknown-charset?known-encoding?some-encoded-text?= -;; =?known-charset?unknown-encoding?some-encoded-text?= -;; =?unknown-charset?unknown-encoding?some-encoded-text?= -;; -;; 2. $B%G%3!<%I$G$-$F$bFbMF$,7uF]$9$.$k$H$-!#(B -;; Non ASCII $B3HD%(B RFC822 $B$NCf$K(B =?US-ASCII?Q?=0D=0A=0D=0A?= $B$N%G%3!<%I(B -;; $B7k2L$rKd$a9~$`$N$O4m81$9$.$k!#(B -;; -;; $B$^$?!"%G%3!<%@$O(B encoded-word $B$N$h$&$K$_$($k%G%3!<%I7k2L$r=PNO$7$J$1(B -;; $B$l$P$J$i$J$$$3$H$b$"$k!#(B -;; -;; =?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$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, 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 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 -;; encoded-word $B$rI=8=$9$k$K$O(B + $B$r(B 1$B$D$D$1$k$3$H$K$J$k!#(B -;; -;; =?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?= -;; =?U+S-ASCII?Q?abcdef?= $B$H$$$&J8;zNs(B : =?U+S-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?= -;; -;; 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 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 -;; 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=?=" -'embedded-encoded-word) - -(decode -"Subject: =?US-ASCII?G?H4sIACqUszUAA8tIzcnJBwCGphA2BQAAAA==?=" -"Subject: =?+US-ASCII?G?H4sIACqUszUAA8tIzcnJBwCGphA2BQAAAA==?=" -'embedded-encoded-word) - -(decode -"Subject: =?US-ASCII?Unknown-Encoding?H4sIAGOUszUAAwtyczYyMDEHAEpvqpIHAAAA?=" -"Subject: =?+US-ASCII?Unknown-Encoding?H4sIAGOUszUAAwtyczYyMDEHAEpvqpIHAAAA?=" -'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==?=" -'embedded-encoded-word) - -(decode -"Subject: =?Unknown-Charset?B?gqA=?= =?Unknown-Charset?B?gqA=?=" -"Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'embedded-encoded-word) - -(decode -"Subject: =?Unknown-Charset?B?gqA=?= =?Unknown-Charset?B?gqA=?=" -"Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'embedded-encoded-word) - -(decode -"Subject: =?Unknown-Charset?B?gqA=?=\r - =?Unknown-Charset?B?gqA=?=" -"Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'embedded-encoded-word) - -(decode -"Subject: =?Unknown-Charset?B?gqA=?=\r -\t=?Unknown-Charset?B?gqA=?=" -"Subject: =?+Unknown-Charset?B?gqA=?==?+Unknown-Charset?B?gqA=?=" -'embedded-encoded-word) - -(decode -"Subject: a=?Unknown-Charset?B?gqA=?=" -"Subject: a=?Unknown-Charset?B?gqA=?=" -'embedded-encoded-word) - -(decode -"Subject: =?Unknown-Charset?B?gqA=?=b" -"Subject: =?Unknown-Charset?B?gqA=?=b" -'embedded-encoded-word) - -(decode -"Subject: a=?Unknown-Charset?B?gqA=?=b" -"Subject: a=?Unknown-Charset?B?gqA=?=b" -'embedded-encoded-word) - -(decode -"Subject: a =?Unknown-Charset?B?gqA=?= b" -"Subject: a =?+Unknown-Charset?B?gqA=?= b" -'embedded-encoded-word) - -(decode -"Subject: =?ISO-2022-JP?B?DQoNCg==?=" -"Subject: =?+US-ASCII?Q?=0D=0A=0D=0A?=" -'embedded-encoded-word) - -(decode -"Subject: =?US-ASCII?Q?a=0D=0A_b?=" -"Subject: a b" -'embedded-encoded-word) - -(decode -"Subject: =?US-ASCII?Q?a=0D=0Ab?=" -"Subject: a=?+US-ASCII?Q?=0D=0A?=b" -'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 - -(report) - -;---------------------------------------------------------------------------- diff --git a/automata.el b/automata.el deleted file mode 100644 index eac194f..0000000 --- a/automata.el +++ /dev/null @@ -1,499 +0,0 @@ - -(require 'digraph) -(require 'natset) -(provide 'automata) - -(defvar automata-never-fail (make-symbol "automata-never-fail")) -(defvar automata-state-var (make-symbol "automata-state")) - -(defmacro automata (in-var start-tag &rest clauses) - (let* ((org-len (length clauses)) - (org-graph (make-vector org-len nil)) - (tag-to-org-alist nil) - forest org-to-forest forest-to-org - i j tmp trans) - (setq tmp clauses - i 0) - (while tmp - (setq tag-to-org-alist (cons (cons (caar tmp) i) tag-to-org-alist) - i (1+ i) - tmp (cdr tmp))) - (setq tmp clauses - i 0) - (while tmp - (setq trans (cddr (cdar tmp))) - (while trans - (setq j (cdr (assoc (cadr (car trans)) tag-to-org-alist))) - (if (not (member j (aref org-graph i))) - (aset org-graph i (cons j (aref org-graph i)))) - (setq trans (cdr trans))) - (setq i (1+ i) - tmp (cdr tmp))) - ;;(error "%s" org-graph) - (setq tmp (digraph-split-as-forest org-graph) - forest (aref tmp 0) - org-to-forest (aref tmp 1) - forest-to-org (aref tmp 2)) - (setq clauses - (mapcar - (lambda (c) - (let ((tag (car c)) - (action (cadr c)) - (fail (nth 2 c)) - (trs (nthcdr 3 c))) - (setq trs - (mapcar - (lambda (next) - (list - (apply - 'natset-union - (mapcar - (lambda (tr) (if (equal (cadr tr) next) (car tr) (natset-empty))) - trs)) - next)) - (natset-enum (apply 'natset-single (mapcar 'cadr trs))))) - (cons tag (cons action (cons fail trs))))) - clauses)) - `(let ((,automata-state-var ,(cdr (assoc start-tag tag-to-org-alist)))) - ,@(automata-exp-seq - (automata-gen-state - in-var clauses - org-len - (list (cdr (assoc start-tag tag-to-org-alist))) - tag-to-org-alist - (aref org-to-forest (cdr (assoc start-tag tag-to-org-alist))) - forest org-to-forest forest-to-org))))) - -(defun automata-gen-state (in-var clauses - org-len - start-states - tag-to-org-alist - forest-state forest org-to-forest forest-to-org) - (let* ((org-states (aref forest-to-org forest-state)) - (forest-states (digraph-descents forest forest-state)) - (branch-length (+ (length org-states) (length forest-states))) - (branch-to-org - (vconcat - (mapcar 'list org-states) - (mapcar (lambda (forest-state) - (aref forest-to-org forest-state)) - forest-states))) - (org-to-branch - (let ((org-to-branch (make-vector org-len nil)) - (i 0) tmp) - (while (< i branch-length) - (setq tmp (aref branch-to-org i)) - (while tmp - (aset org-to-branch (car tmp) i) - (setq tmp (cdr tmp))) - (setq i (1+ i))) - org-to-branch)) - (branch-to-forest - (vconcat - (make-list (length org-states) nil) - forest-states)) - (branch-state-range - (vconcat - (mapcar 'natset-single org-states) - (mapcar (lambda (forest-state) - (apply 'natset-single - (aref forest-to-org forest-state))) - forest-states))) - (branch-descents - (vconcat - (mapcar (lambda (org-state) - (let* ((c (nth org-state clauses)) - (trs (nthcdr 3 c))) - (apply 'natset-union - (mapcar (lambda (tr) - (natset-single - (cdr (assoc (cadr tr) tag-to-org-alist)))) - trs)))) - org-states) - (mapcar (lambda (forest-state) ()) - forest-states))) - (all-descents (apply 'natset-union (append branch-descents ()))) - (branch-ascents - (let* ((branch-ascents (make-vector branch-length 0)) - (i 0) j) - (while (< i branch-length) - (setq j 0) - (while (< j branch-length) - (if (natset-has-intersection-p (aref branch-state-range i) - (aref branch-descents j)) - (aset branch-ascents i - (1+ (aref branch-ascents i)))) - (setq j (1+ j))) - (setq i (1+ i))) - branch-ascents)) - (start-inline nil) - (branch-inline - (let* ((branch-inline (make-vector branch-length nil)) - (start-ns (apply 'natset-single start-states)) - (i 0)) - (while (< i branch-length) - (if (natset-has-intersection-p (aref branch-state-range i) start-ns) - (if (and (= (length start-states) 1) - (= (aref branch-ascents i) 0)) - (progn - (setq start-inline i) - (aset branch-inline i t)) - nil) - (if (= (aref branch-ascents i) 1) - (aset branch-inline i t))) - (setq i (1+ i))) - branch-inline)) - (branch-gen nil) - (_ - (setq branch-gen - (vconcat - (mapcar - (lambda (org-state) - (cons - (lambda (org-state) - `(,(natset-single org-state) - nil ; don't duplicate. - ,@(let* ((c (nth org-state clauses))) - (automata-exp-seq - (nth 1 c) ; action - (if (null (nthcdr 3 c)) - (nth 2 c) - `(automata-branch - ,in-var ; input variable - ,(natset-full) ; input is unpredictable. - ,(nth 2 c) ; fail action - ,@(let ((trs (nthcdr 3 c))) - (mapcar - (lambda (next-branch) - (let ((input-range - (apply 'natset-union - (mapcar - (lambda (tr) - (if (member (cdr (assoc (cadr tr) tag-to-org-alist)) - (aref branch-to-org next-branch)) - (car tr) - (natset-empty))) - trs)))) - `(,input-range ; input range - ,(not (aref branch-inline next-branch)) ; duplicatable unless inlining. - ,(let ((goto-list (apply - 'append - (mapcar - (lambda (tr) - (let ((range (natset-intersection (car tr) input-range))) - (if range - `((,range - t - (automata-goto - ,automata-state-var - ,org-state - ,(cdr (assoc (cadr tr) tag-to-org-alist))))) - ()))) - trs)))) - (if (= (length goto-list) 1) - (car (cddr (car goto-list))) - `(automata-branch - ,in-var - ,input-range - ,automata-never-fail - ,@goto-list))) - ,@(if (aref branch-inline next-branch) - (automata-exp-seq - `(progn ,@(cddr (funcall (car (aref branch-gen next-branch)) - (cdr (aref branch-gen next-branch)))))) - ())))) - (natset-enum - (apply 'natset-union - (mapcar - (lambda (tr) - (natset-single - (aref org-to-branch - (cdr (assoc (cadr tr) tag-to-org-alist))))) - trs)))) - ))))))) - org-state)) - org-states) - (mapcar - (lambda (forest-state) - (cons - (lambda (forest-state) - `(,(natset-intersection - (apply 'natset-single (aref forest-to-org forest-state)) - all-descents) ; state range - nil ; don't duplicate. - ,@(automata-exp-seq - (automata-gen-state - in-var clauses - org-len - (aref forest-to-org forest-state) - tag-to-org-alist - forest-state forest org-to-forest forest-to-org)))) - forest-state)) - forest-states)))) - (branches - (let* ((branches ()) - (i branch-length)) - (while (< 0 i) - (setq i (1- i)) - (if (not (aref branch-inline i)) - (setq branches - (cons - (funcall (car (aref branch-gen i)) - (cdr (aref branch-gen i))) - branches)))) - branches)) - ) - ;;(error "err") - (if start-inline - (apply - 'automata-seq-exp - `(progn ,@(cddr (funcall (car (aref branch-gen start-inline)) - (cdr (aref branch-gen start-inline))))) - (cond - ((null branches) ()) - ((null (cdr branches)) - (cddr (car branches))) - (t - `((while t - (automata-branch - ,automata-state-var ,(natset-full) ,automata-never-fail - ,@branches)))))) - (if (= (length branches) 1) - `(while t ,@(cddr (car branches))) - `(while t ; ,branch-inline ,branch-state-range ,branch-descents ,branch-ascents - (automata-branch - ,automata-state-var ,(natset-full) ,automata-never-fail - ,@branches)))))) - -(defun automata-seq-exp (&rest seq) - (cond - ((null seq) nil) - ((null (cdr seq)) - (car seq)) - (t - (setq seq - (apply - 'append - (mapcar - (lambda (exp) (if (and (consp exp) (eq (car exp) 'progn)) - (cdr exp) - (list exp))) - seq))) - (let ((rseq (reverse seq))) - (cons 'progn - (apply - 'append - (apply - 'append - (mapcar - (lambda (exp) (if (null exp) () (list exp))) - (nreverse (cdr rseq)))) - (list (list (car rseq))))))))) - -(defun automata-exp-seq (&rest seq) - (let ((exp (apply 'automata-seq-exp seq))) - (if (and (consp exp) (eq (car exp) 'progn)) - (cdr exp) - (list exp)))) - -(defmacro automata-goto (var curr next) - (if (eq curr next) - nil - `(setq ,var ,next))) - -(defmacro automata-branch (var range fail &rest clauses) - (when (eq fail automata-never-fail) - (setq range (natset-intersection - (apply 'natset-union (mapcar 'car clauses)) - range))) - (let ((len (length clauses)) - ns-list dup-list body-list tmp ns) - (setq tmp clauses - ns (natset-negate range)) - (while tmp - (setq ns-list (cons (natset-sub (caar tmp) ns) ns-list) - dup-list (cons (cadr (car tmp)) dup-list) - body-list (cons (cddr (car tmp)) body-list) - ns (natset-union ns (caar tmp)) - tmp (cdr tmp)) - (if (natset-empty-p (car ns-list)) - (setq ns-list (cdr ns-list) - dup-list (cdr dup-list) - body-list (cdr body-list)))) - (setq ns-list (nreverse ns-list) - dup-list (nreverse dup-list) - body-list (nreverse body-list)) - (automata-branch-i var range fail ns-list dup-list body-list))) - -(defun automata-branch-i (var range fail ns-list dup-list body-list) - (cond - ((null ns-list) fail) - ((null (cdr ns-list)) - (if (natset-include-p (car ns-list) range) - (apply 'automata-seq-exp (car body-list)) - `(if ,(natset-gen-pred-exp (car ns-list) var range) - ,(apply 'automata-seq-exp (car body-list)) - ,fail))) - (t - (let (tmp tmpn tmpd cut) - (setq tmpn ns-list - cut (natset-empty)) - (while tmpn - (setq cut (natset-union cut (natset-boundary-set (car tmpn))) - tmpn (cdr tmpn))) - (setq tmpn ns-list - tmpd dup-list) - (while tmpn - (if (not (car tmpd)) - (setq tmp (natset-minmax (car tmpn)) - tmp (natset-sub tmp (natset-start-set tmp)) - cut (natset-sub cut tmp))) - (setq tmpn (cdr tmpn) - tmpd (cdr tmpd))) - (setq cut (natset-sub cut (natset-boundary-set (natset-minmax range)))) - (if (null (setq cut (natset-enum cut))) - `(if ,(natset-gen-pred-exp (car ns-list) var range) - ,(apply 'automata-seq-exp (car body-list)) - ,(automata-branch-i var - (natset-sub range (car ns-list)) - fail - (cdr ns-list) - (cdr dup-list) - (cdr body-list))) - (let* ((mid (nth (/ (length cut) 2) cut)) - (lower (natset-seg 0 (1- mid))) - (higher (natset-seg mid)) - ns-list1 dup-list1 body-list1 - ns-list2 dup-list2 body-list2 - ) - (while ns-list - (if (natset-has-intersection-p lower (car ns-list)) - (setq ns-list1 (cons (natset-intersection (car ns-list) lower) ns-list1) - dup-list1 (cons (car dup-list) dup-list1) - body-list1 (cons (car body-list) body-list1))) - (if (natset-has-intersection-p higher (car ns-list)) - (setq ns-list2 (cons (natset-intersection (car ns-list) higher) ns-list2) - dup-list2 (cons (car dup-list) dup-list2) - body-list2 (cons (car body-list) body-list2))) - (setq ns-list (cdr ns-list) - dup-list (cdr dup-list) - body-list (cdr body-list))) - ;;(if (or (null ns-list1) (null ns-list2)) (error "divide fail")) - `(if (< ,var ,mid) - ,(automata-branch-i var - (natset-intersection range lower) - fail ns-list1 dup-list1 body-list1) - ,(automata-branch-i var - (natset-intersection range higher) - fail ns-list2 dup-list2 body-list2)))))))) - - -'( -(npp (macroexpand ' -(automata pc 0 - (1 - (progn - (lex-match 1) - (lex-scan-unibyte-save)) - (lex-fail)) - (5 - (progn - (lex-match 2) - (lex-scan-unibyte-save)) - (lex-fail)) - (4 - (progn - (lex-scan-unibyte-read pc)) - (lex-fail) - ((9 10) 5) ((32 33) 5)) - (2 - (progn - (lex-match 3) - (lex-scan-unibyte-save) - (lex-scan-unibyte-read pc)) - (lex-fail) - ((13 14) 2) - ((0 9) 3) ((11 13) 3) ((14 32) 3) ((33) 3) - ((10 11) 4)) - (3 - (progn - (lex-match 3) - (lex-scan-unibyte-save) - (lex-scan-unibyte-read pc)) - (lex-fail) - ((0 9) 3) ((10 11) 3) ((11 13) 3) ((14 32) 3) ((33) 3) - ((13 14) 2) - ) - (0 - (progn - (lex-match 3) - (lex-scan-unibyte-save) - (lex-scan-unibyte-read pc)) - (lex-fail) - ((0 9) 3) ((10 11) 3) ((11 13) 3) ((14 32) 3) ((33) 3) - ((13 14) 2) - ((9 10) 1) ((32 33) 1))))) - -(npp (macroexpand ' -(automata pc 0 - (0 - (progn - (lex-match 3) - (lex-scan-unibyte-save) - (lex-scan-unibyte-read pc)) - (lex-fail) - ((0 9) 3) ((10 11) 3) ((11 13) 3) ((14 32) 3) ((33) 3) - ((13 14) 2) - ((9 10) 1) ((32 33) 1)) - (1 - (progn - (lex-match 1) - (lex-scan-unibyte-save)) - (lex-fail)) - (2 - (progn - (lex-match 3) - (lex-scan-unibyte-save) - (lex-scan-unibyte-read pc)) - (lex-fail) - ((13 14) 2) - ((0 9) 3) ((11 13) 3) ((14 32) 3) ((33) 3) - ((10 11) 4)) - (3 - (progn - (lex-match 3) - (lex-scan-unibyte-save) - (lex-scan-unibyte-read pc)) - (lex-fail) - ((0 9) 3) ((10 11) 3) ((11 13) 3) ((14 32) 3) ((33) 3) - ((13 14) 2) - ) - (4 - (progn - (lex-scan-unibyte-read pc)) - (lex-fail) - ((9 10) 5) ((32 33) 5)) - (5 - (progn - (lex-match 2) - (lex-scan-unibyte-save)) - (lex-fail)) -))) - -(npp -(automata-gen-state -'pc -'((0 (progn (lex-match 3) (lex-scan-unibyte-save) (lex-scan-unibyte-read pc)) (lex-fail) ((9 10 32 33) 1) ((13 14) 2) ((0 9 10 13 14 32 33) 3)) - (1 (progn (lex-match 1) (lex-scan-unibyte-save)) (lex-fail)) - (2 (progn (lex-match 3) (lex-scan-unibyte-save) (lex-scan-unibyte-read pc)) (lex-fail) ((13 14) 2) ((0 9 11 13 14 32 33) 3) ((10 11) 4)) - (3 (progn (lex-match 3) (lex-scan-unibyte-save) (lex-scan-unibyte-read pc)) (lex-fail) ((13 14) 2) ((0 9 10 13 14 32 33) 3)) - (4 (progn (lex-scan-unibyte-read pc)) (lex-fail) ((9 10 32 33) 5)) - (5 (progn (lex-match 2) (lex-scan-unibyte-save)) (lex-fail))) -6 -'(0) -'((5 . 5) (4 . 4) (3 . 3) (2 . 2) (1 . 1) (0 . 0)) -0 -[(4 1) (2) (3) nil nil] -[0 4 1 1 2 3] -[(0) (3 2) (4) (5) (1)])) -) \ No newline at end of file diff --git a/closure.el b/closure.el deleted file mode 100644 index 8220628..0000000 --- a/closure.el +++ /dev/null @@ -1,66 +0,0 @@ -(provide 'closure) - -;; closure is one of following forms. -;; FUNCTION -;; (WRAPPER FUNCTION FV1 . FVS) -;; (PARTIAL-ARGS CLOSURE) - -(defmacro closure-make (fun &rest fvs) - "Make a closure from a function FUN and free variables FVS. -CAUTION: Do not assign to free variables." - (if (null fvs) - fun - (let* ((funv (make-symbol "funv")) - (args (make-symbol "args"))) - `(list - (lambda (,funv ,args ,@fvs) - (apply ,funv ,args)) - ,fun - ,@fvs)))) - -(defmacro closure-partial-call (clo &rest args) - "Call partially." - `(list (list ,@args) ,clo)) - -(defun closure-call (clo &rest args) - "Call closure." - (while - (and - (not (functionp clo)) - (if (cddr clo) - (progn - (setq args (cons (cadr clo) (cons args (cddr clo))) - clo (car clo)) - nil) - t)) - (setq args (append (car clo) args) - clo (cadr clo))) - (apply clo args)) - -(defun closure-compose (c1 c2) - "Compose C1 and C2. - -If either C1 or C2 is nil, another one is returned. -If C1 and C2 is non-nil, C1 must be closure with one argument." - (cond - ((null c1) c2) - ((null c2) c1) - (t - (closure-make - (lambda (&rest args) - (closure-call c1 (apply 'closure-call c2 args))) - c1 c2)))) - -'( - -(setq c1 (let ((a 1)) (closure-make (lambda (b) (+ a b)) a))) -(closure-call c1 2) ; => 3 - -(let ((a 1)) (setq plus1 (closure-make (lambda (b) (+ a b)) a))) -(let ((a 2)) (setq plus2 (closure-make (lambda (b) (+ a b)) a))) -(setq plus3 (closure-compose plus1 plus2)) -(closure-call plus3 4) ; => 7 - -(closure-call (closure-partial-call (closure-partial-call '+ 1 2 3) 4 5 6) 7 8 9) ;=> 45 - -) \ No newline at end of file diff --git a/digraph.el b/digraph.el deleted file mode 100644 index 2a463d1..0000000 --- a/digraph.el +++ /dev/null @@ -1,347 +0,0 @@ -;;; directed graph package. -(provide 'digraph) - -;; A directed graph is represented as vector of lists of integers. -;; The number of nodes in the graph is length of the vector. -;; -;; i'th list of the vector contains j <=> there is the edge from i to j. - -(defalias 'digraph-descents 'aref) - -(defun digraph-split-as-dag (g) - "Returns 3 element vector of follows. - -0. Directed acyclic graph generated by mergeing each strongly connected -components in G as new nodes. - -1. Map from a node in g to a node in result. - -2. Map from a node in result to nodes in g." - (let* ((old-len (length g)) - (new-to-olds (vconcat (digraph-tsort g))) - (new-len (length new-to-olds)) - (old-to-new (make-vector old-len ())) - (i 0) - js res) - (while (< i new-len) - (setq js (aref new-to-olds i)) - (while js - (aset old-to-new (car js) i) - (setq js (cdr js))) - (setq i (1+ i))) - (setq i (1- new-len)) - (while (<= 0 i) - (setq res (cons - (digraph-list-uniq - (apply - 'nconc - (mapcar - (lambda (old) - (apply - 'nconc - (mapcar - (lambda (old) - (if (= i (aref old-to-new old)) - () - (list (aref old-to-new old)))) - (aref g old)))) - (aref new-to-olds i)))) - res) - i (1- i))) - (vector - (vconcat res) - old-to-new - new-to-olds))) - -(defun digraph-split-as-forest (g) - "Returns 3 element vector of follows. - -0. Tree generated by merging nodes which have common descent node. - -1. Map from a node in g to a node in result. - -2. Map from a node in result to nodes in g." - (let* ((tmp (digraph-split-as-dag g)) - (d (aref tmp 0)) - (g-to-d (aref tmp 1)) - (d-to-g (aref tmp 2)) - ;;(_ (error "%s" tmp)) - (tmp (digraph-dag-to-forest d)) - (f (aref tmp 0)) - (d-to-f (aref tmp 1)) - (f-to-d (aref tmp 2)) - old-indices - new-indices - i) - (setq i (1- (length g))) - (while (<= 0 i) - (setq old-indices (cons i old-indices) - i (1- i))) - (setq i (1- (length f))) - (while (<= 0 i) - (setq new-indices (cons i new-indices) - i (1- i))) - (vector - f - (vconcat - (mapcar - (lambda (gi) (aref d-to-f (aref g-to-d gi))) - old-indices)) - (vconcat - (mapcar - (lambda (fi) - (apply - 'nconc - (mapcar - (lambda (di) (aref d-to-g di)) - (aref f-to-d fi)))) - new-indices))))) - -(defun digraph-tsort (dep) - "Sort nodes in a graph toporogicaly. - -DEP is a vector of lists of integers and -digraph-tsort returns list of lists of integers. - -The graph has (length DEP) nodes. - -Dependency for i'th node is represented by i'th element of DEP. -If (aref DEP i) is a list (j1 j2 ... jn), it represents that i'th node -depends to j1, j2, ... and jn'th nodes of the graph. - -A result of digraph-tsort is a sequence of sets of indexes for each -strongly connected nodes ordered by indepenedent to dependent as list -of lists of integers. - -If (nth n result) contains an integer i, it represents the fact as -follows. - -1. For all j in (nth n result) and j != i, i'th node depends to j'th -node and vice versa. - -2. For all m < n and j in (nth m result), i'th nodes does not depend -to j'th node." - (let* ((len (length dep)) - (ord (make-vector len nil)) - (i 0) - (res ())) - (while (< i len) - (if (not (aref ord i)) - (setq res (nth 3 (digraph-tsort-visit dep len ord i 0 () res)))) - (setq i (1+ i))) - res)) - -(defun digraph-tsort-visit (dep len ord i id stk res) - (aset ord i id) - (let ((js (aref dep i)) - (m id) - (nid (1+ id)) - (stk (cons i stk)) - (res res)) - (while js - (let* ((j (car js)) (jo (aref ord j))) - (if jo - (setq m (if (< m jo) m jo)) - (let* ((tmp (digraph-tsort-visit dep len ord j nid stk res)) - (m0 (nth 0 tmp))) - (setq m (if (< m m0) m m0) - nid (nth 1 tmp) - stk (nth 2 tmp) - res (nth 3 tmp))))) - (setq js (cdr js))) - (if (= m id) - (let* ((p (member i stk)) - (nstk (cdr p)) - (tmp stk)) - (setcdr p ()) - (while tmp - (aset ord (car tmp) len) - (setq tmp (cdr tmp))) - (list m nid nstk (cons stk res))) - (list m nid stk res)))) - -(defun digraph-reverse (g) - "Return graph with reversed edge." - (let* ((len (length g)) - (rev (make-vector len nil)) - (i 0)) - (while (< i len) - (let ((links (aref g i))) - (while links - (if (not (member i (aref rev (car links)))) - (aset rev (car links) (cons i (aref rev (car links))))) - (setq links (cdr links)))) - (setq i (1+ i))) - rev)) - -(defun digraph-leaves (g) - "Return list of leaves of G." - (let* ((i (length g)) - (res ())) - (while (< 0 i) - (setq i (1- i)) - (if (null (aref g i)) - (setq res (cons i res)))) - res)) - -(defun digraph-roots (g) - "Return list of roots of G." - (digraph-leaves (digraph-reverse g))) - -;;; forest - -(defun digraph-dag-to-forest (dag) - "Convert a DAG(directed acyclic graph) to forest(set of trees)." - (let* ((len (length dag)) - (rev (digraph-reverse dag)) - (forest (digraph-forest-make len)) - (i 0)) - (while (< i len) - (digraph-dag-forest-add-node forest i (aref rev i)) - (setq i (1+ i))) - ;;(error "%s" forest) - (digraph-forest-to-graph forest))) - -(defun digraph-dag-forest-add-node (forest node links) - (if (null links) - (digraph-forest-add-tree forest node) - (let ((parent (car links))) - (setq links (cdr links)) - (digraph-forest-add-node forest parent node) - (while links - (digraph-forest-merge-node forest parent (car links)) - (setq links (cdr links))))) - forest) - -;; forest = [last-tree-id node-merge-map node-parent-map] -(defun digraph-forest-make (num) - (vector 0 (make-vector num nil) (make-vector num nil))) -(defsubst digraph-forest-merge-map (forest) (aref forest 1)) -(defsubst digraph-forest-parent-map (forest) (aref forest 2)) - -(defun digraph-forest-add-tree (forest node) - (aset (digraph-forest-parent-map forest) - node - (aset forest 0 (1- (aref forest 0))))) - -(defun digraph-forest-add-node (forest parent node) - (aset (digraph-forest-parent-map forest) node parent)) - -(defun digraph-forest-node-id (forest node) - (let ((merge-map (digraph-forest-merge-map forest)) tmp) - (while (setq tmp (aref merge-map node)) - (setq node tmp)) - node)) - -(defun digraph-forest-tree-id (forest node) - (setq node (digraph-forest-node-id forest node)) - (let ((parent-map (digraph-forest-parent-map forest)) - tmp) - (while (<= 0 (setq tmp (aref parent-map node))) - (setq node (digraph-forest-node-id forest tmp))) - tmp)) - -(defun digraph-forest-root-p (forest node) - (setq node (digraph-forest-node-id forest node)) - (< (aref (digraph-forest-parent-map forest) node) 0)) - -(defun digraph-forest-path-to-root (forest node) - (setq node (digraph-forest-node-id forest node)) - (let ((parent-map (digraph-forest-parent-map forest)) - (path (list node))) - (while (not (digraph-forest-root-p forest node)) - (setq node (digraph-forest-node-id forest (aref parent-map node)) - path (cons node path))) - path)) - -(defun digraph-forest-merge-node (forest n1 n2) - (setq n1 (digraph-forest-node-id forest n1) - n2 (digraph-forest-node-id forest n2)) - (let ((t1 (digraph-forest-tree-id forest n1)) - (t2 (digraph-forest-tree-id forest n2))) - (if (= t1 t2) - (let ((merge-map (digraph-forest-merge-map forest)) - (p1 (digraph-forest-path-to-root forest n1)) - (p2 (digraph-forest-path-to-root forest n2)) - top) - (while (and p1 p2 - (= (car p1) (car p2))) - (setq top (car p1) - p1 (cdr p1) - p2 (cdr p2))) - (setq p1 (nreverse p1)) - (setq p2 (nreverse p2)) - (while (and p1 p2) - (aset merge-map (car p2) (car p1)) - (setq p1 (cdr p1) - p2 (cdr p2))) - (if (or p1 p2) - (let ((ns (nconc p1 p2)) n) - (while ns - (aset merge-map (car ns) top) - (setq ns (cdr ns)))))) - (let ((merge-map (digraph-forest-merge-map forest)) - (parent-map (digraph-forest-parent-map forest))) - (while (and (not (digraph-forest-root-p forest n1)) - (not (digraph-forest-root-p forest n2))) - (aset merge-map n2 n1) - (setq n1 (digraph-forest-node-id forest (aref parent-map n1)) - n2 (digraph-forest-node-id forest (aref parent-map n2)))) - (if (digraph-forest-root-p forest n2) - (aset merge-map n2 n1) - (aset merge-map n1 n2))))) - forest) - -(defun digraph-forest-to-graph (forest) - (let* ((merge-map (digraph-forest-merge-map forest)) - (parent-map (digraph-forest-parent-map forest)) - (old-len (length merge-map)) - (old-to-new (make-vector old-len nil)) - new-to-olds - (new-len 0) - (i 0) - j - graph - ) - (while (< i old-len) - (setq j (digraph-forest-node-id forest i)) - (if (aref old-to-new j) - (aset old-to-new i (aref old-to-new j)) - (progn - (aset old-to-new j new-len) - (aset old-to-new i new-len) - (setq new-len (1+ new-len)))) - (setq i (1+ i))) - (setq new-to-olds (make-vector new-len nil) - graph (make-vector new-len nil)) - (setq i (1- old-len)) - (while (<= 0 i) - (setq j (aref old-to-new i)) - (aset new-to-olds j - (cons i (aref new-to-olds j))) - (setq i (1- i))) - (setq i 0) - (while (< i new-len) - (setq j (aref parent-map (digraph-forest-node-id forest (car (aref new-to-olds i))))) - (if (<= 0 j) (aset graph (aref old-to-new j) - (cons i (aref graph (aref old-to-new j))))) - (setq i (1+ i))) - (vector graph old-to-new new-to-olds))) - -;;; utilities - -(defun digraph-list-uniq (il) - (if (null il) - () - (if (member (car il) (cdr il)) - (digraph-list-uniq (cdr il)) - (cons (car il) (digraph-list-uniq (cdr il)))))) - -'( -(digraph-split-as-forest [nil nil nil nil nil nil nil nil nil nil (10) nil nil (12) (13) (0 1 2 3 4 5 6 7 8 9 10 11 13 14)]) -[ - [(14 13 12 11 10 9 8 7 6 5 4 3 1) (2) nil nil nil nil nil nil nil nil nil nil nil nil nil] - [14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0] - [(15) (14) (13) (12) (11) (10) (9) (8) (7) (6) (5) (4) (3) (2) (1) (0)]] - -) \ No newline at end of file diff --git a/ew-data.el b/ew-data.el deleted file mode 100644 index 436b014..0000000 --- a/ew-data.el +++ /dev/null @@ -1,171 +0,0 @@ -(require 'ew-var) -(require 'ew-util) -(provide 'ew-data) - -(defun ew-make-anchor (column str) - (let ((anchor (make-symbol str))) - (put anchor 'anchor anchor) - (put anchor 'type 'ew:*anchor*) - (put anchor 'prev-frag anchor) - (put anchor 'next-frag anchor) - (put anchor 'column column) - (put anchor 'line-length 0) - anchor)) - -(defun ew-terminate (anchor) - (let ((frag (get anchor 'prev-frag)) - (line-length (get anchor 'column))) - (while (null (get frag 'line-length)) - (put frag 'line-length line-length) - (setq frag (get frag 'prev-frag))))) - -(defsubst ew-add-frag (anchor start end type) - (let ((frag (make-symbol (substring (symbol-name anchor) start end)))) - (put frag 'anchor anchor) - (put frag 'type type) - (put frag 'prev-frag (get anchor 'prev-frag)) - (put frag 'next-frag anchor) - (put (get anchor 'prev-frag) 'next-frag frag) - (put anchor 'prev-frag frag) - (put frag 'decode (or (get type 'decode) 'ew-decode-none)) - (if (string-match "\r\n\\(.*\r\n\\)*" (symbol-name frag)) - (let ((prev-line-length (+ (get anchor 'column) (match-beginning 0))) - (next-line-column (- (length (symbol-name frag)) (match-end 0))) - (tmp frag)) - (while (null (get tmp 'line-length)) - (put tmp 'line-length prev-line-length) - (setq tmp (get tmp 'prev-frag))) - (put anchor 'column next-line-column)) - (put anchor 'column (+ (get anchor 'column) (length (symbol-name frag))))) - frag)) - -;;; listup - -(defun ew-frag-list (anchor) - (let ((res ()) - (tmp (get anchor 'prev-frag))) - (while (not (eq anchor tmp)) - (setq res (cons tmp res) - tmp (get tmp 'prev-frag))) - res)) - -(defun ew-pair-list (anchor) - (mapcar - (lambda (frag) - (cons (symbol-value (get frag 'type)) - frag)) - (ew-frag-list anchor))) - -(defun ew-separate-eword (frag1 frag2 targets) - (while (not (eq frag1 frag2)) - (when (and (memq (get frag1 'type) targets) - (string-match ew-encoded-word-regexp - (symbol-name frag1)) - (or (< 0 (match-beginning 0)) - (< (match-end 0) (length (symbol-name frag1))))) - (let ((atom (symbol-name frag1)) - (start (match-end 0)) - result - frag) - (when (< 0 (match-beginning 0)) - (setq frag (make-symbol (substring atom 0 (match-beginning 0))) - result (ew-rcons* result frag))) - (setq frag (make-symbol (substring atom (match-beginning 0) (match-end 0))) - result (ew-rcons* result frag)) - (when (cdr result) - (put frag 'prev-frag (cadr result)) - (put (cadr result) 'next-frag frag) - (setq frag (cadr result))) - (put frag 'prev-frag (get frag1 'prev-frag)) - (put (get frag1 'prev-frag) 'next-frag frag) - (while (string-match ew-encoded-word-regexp atom start) - (when (< start (match-beginning 0)) - (setq frag (make-symbol (substring atom start (match-beginning 0))) - result (ew-rcons* result frag)) - (put frag 'prev-frag (cadr result)) - (put (cadr result) 'next-frag frag)) - (setq frag (make-symbol (substring atom (match-beginning 0) (match-end 0))) - result (ew-rcons* result frag) - start (match-end 0)) - (put frag 'prev-frag (cadr result)) - (put (cadr result) 'next-frag frag)) - (when (< start (length (symbol-name frag1))) - (setq frag (make-symbol (substring atom start)) - result (ew-rcons* result frag)) - (put frag 'prev-frag (cadr result)) - (put (cadr result) 'next-frag frag)) - (setq frag (car result)) - (put frag 'next-frag (get frag1 'next-frag)) - (put (get frag1 'next-frag) 'prev-frag frag) - (while result - (setq frag (car result) - result (cdr result)) - (put frag 'anchor (get frag1 'anchor)) - (put frag 'type (get frag1 'type)) - (put frag 'decode (get frag1 'decode)) - (put frag 'line-length (get frag1 'line-length))))) - (setq frag1 (get frag1 'next-frag)))) - -;;; phrase marking - -(defun ew-mark-phrase (frag1 frag2) - (when ew-decode-sticked-encoded-word - (ew-separate-eword - frag1 frag2 - (if ew-decode-quoted-encoded-word - '(ew:atom - ew:qs-texts) - '(ew:atom))) - (setq frag1 (get (get frag1 'prev-frag) 'next-frag))) - (while (not (eq frag1 frag2)) - (setq frag2 (get frag2 'prev-frag)) - (unless (ew-comment-frag-p frag2) - (put frag2 'decode 'ew-decode-phrase))) - (while (not (ew-token-last-frag-p - (setq frag2 (get frag2 'prev-frag)))) - (unless (ew-comment-frag-p frag2) - (put frag2 'decode 'ew-decode-phrase)))) - -;;; frag predicate - -(defun ew-token-last-frag-p (frag) - (member (get frag 'type) - '(ew:*anchor* - ew:lt - ew:gt - ew:at - ew:comma - ew:semicolon - ew:colon - ew:dot - ew:atom - ew:qs-end - ew:dl-end))) - -(defun ew-comment-frag-p (frag) - (member (get frag 'type) - '(ew:cm-begin - ew:cm-end - ew:cm-nested-begin - ew:cm-nested-end - ew:cm-texts - ew:cm-wsp - ew:cm-fold - ew:cm-qfold - ew:cm-qpair))) - -(defun ew-special-frag-p (frag) - (member (get frag 'type) - '(ew:lt - ew:gt - ew:at - ew:comma - ew:semicolon - ew:colon - ew:dot - ew:qs-begin - ew:qs-end - ew:dl-begin - ew:dl-end - ew:cm-begin - ew:cm-end))) diff --git a/ew-dec.el b/ew-dec.el deleted file mode 100644 index fa80a83..0000000 --- a/ew-dec.el +++ /dev/null @@ -1,480 +0,0 @@ -(require 'emu) -(require 'ew-var) -(require 'ew-unit) -(require 'ew-scan-s) -(require 'ew-scan-m) -(require 'ew-scan-u) -(require 'ew-parse) -(provide 'ew-dec) - -(defvar ew-decode-field-cache-buf '()) -(defvar ew-decode-field-cache-num 300) - -(defun ew-decode-field (field-name field-body) - "Decode MIME RFC2047 encoded-words in a field. -FIELD-NAME is a name of the field such as \"To\", \"Subject\" etc. and -used to selecting syntax of body of the field and deciding first -column of body of the field. -FIELD-BODY is a body of the field. - -If FIELD-BODY has multiple lines, each line is separated by CRLF as -pure network representation. Also if the result has multiple lines, -each line is separated by CRLF." - (let* ((key (ew-cons* field-name field-body - (ew-dynamic-options))) - (tmp (assoc key ew-decode-field-cache-buf))) - (if tmp - (cdr tmp) - (progn - (setq tmp (nthcdr ew-decode-field-cache-num - ew-decode-field-cache-buf)) - (if (cdr tmp) - (progn - (setcdr (cdr tmp) ew-decode-field-cache-buf) - (setq ew-decode-field-cache-buf (cdr tmp)) - (setcdr tmp nil)) - (setq ew-decode-field-cache-buf - (cons (cons nil nil) - ew-decode-field-cache-buf))) - (setcar (car ew-decode-field-cache-buf) key) - (setcdr (car ew-decode-field-cache-buf) - (ew-decode-field-no-cache - field-name field-body)) - (cdar ew-decode-field-cache-buf))))) - -(defun ew-analyze-field-to-decode (field-name field-body) - "Analyze FIELD-BODY to decode." - (let ((tmp (assq (intern (downcase field-name)) ew-decode-field-syntax-alist)) - anchor) - (if tmp - (setq tmp (cdr tmp)) - (setq tmp ew-decode-field-default-syntax)) - (setq anchor (funcall (car tmp) (1+ (length field-name)) field-body)) - (put anchor 'field-name field-name) - (put anchor 'scanner (car tmp)) - (put anchor 'marker (cdr tmp)) - anchor)) - -(defun ew-decode-analyzed-field (anchor) - "Decode analyzed field." - (or (get anchor 'decoded) - (let (tmp frag1 frag2 decode) - (when ew-decode-sticked-encoded-word - (ew-separate-eword - (get anchor 'next-frag) - anchor - (if (eq (get anchor 'scanner) 'ew-scan-unibyte-unstructured) - '(ew:us-texts) - '(ew:cm-texts)))) - (when (get anchor 'marker) - (ew-mark (get anchor 'marker) anchor)) - (setq frag1 (get anchor 'next-frag)) - (while (not (eq frag1 anchor)) - (setq decode (get frag1 'decode)) - (setq frag2 (get frag1 'next-frag)) - (while (and (not (eq frag2 anchor)) - (eq decode (get frag2 'decode))) - (setq frag2 (get frag2 'next-frag))) - (funcall decode anchor frag1 frag2) - (setq frag1 frag2)) - (setq frag1 (get anchor 'prev-frag) - tmp ()) - (while (not (eq frag1 anchor)) - (setq tmp (cons (or (get frag1 'decoded) (symbol-name frag1)) tmp) - frag1 (get frag1 'prev-frag))) - (put anchor 'decoded (apply 'concat tmp))))) - -(defun ew-decode-field-no-cache (field-name field-body) - "No caching version of ew-decode-field." - (ew-decode-analyzed-field - (ew-analyze-field-to-decode field-name field-body))) - -(defun ew-mark (tag anchor) - (let ((tlist (cons (list (symbol-value tag)) (ew-pair-list anchor)))) - ;;(insert (format "%s" tlist)) - (ew-parse - (lambda () - (if (null tlist) - (cons 0 anchor) - (prog1 (car tlist) (setq tlist (cdr tlist))))) - (lambda (msg tok) - (message "%s%s : %s" msg tok anchor) - (when (< 0 ew-parse-error-sit-for-seconds) - (sit-for ew-parse-error-sit-for-seconds)))))) - -(defsubst ew-decode-us-ascii (str) - (decode-mime-charset-string str ew-default-mime-charset 'LF)) - -(defun ew-decode-none (anchor frag end) - (while (not (eq frag end)) - (put frag 'decoded (ew-decode-us-ascii (symbol-name frag))) - (setq frag (get frag 'next-frag)))) - -(defsubst ew-proper-eword-p (frag) - (and - (or ew-ignore-75bytes-limit - (<= (length (symbol-name frag)) 75)) - (or ew-ignore-76bytes-limit - (<= (get frag 'line-length) 76)) - (cond - ((eq (get frag 'type) 'ew:cm-texts) - (ew-eword-p (symbol-name frag))) - ((eq (get frag 'type) 'ew:qs-texts) - (ew-eword-p (symbol-name frag))) - ((eq (get frag 'type) 'ew:atom) - (and - (or ew-permit-sticked-comment - (and - (not (ew-comment-frag-p (get frag 'prev-frag))) - (not (ew-comment-frag-p (get frag 'next-frag))))) - (or ew-permit-sticked-special - (and - (or (ew-comment-frag-p (get frag 'prev-frag)) - (not (ew-special-frag-p (get frag 'prev-frag)))) - (or (ew-comment-frag-p (get frag 'next-frag)) - (not (ew-special-frag-p (get frag 'next-frag)))))) - (ew-eword-p (symbol-name frag)))) - ((eq (get frag 'type) 'ew:us-texts) - (and - (or ew-permit-sticked-special - (not (ew-special-frag-p (get frag 'prev-frag)))) - (ew-eword-p (symbol-name frag)))) - (t - nil)))) - -(defun ew-decode-generic (anchor start end - decode-ewords - decode-others - eword gap all) - (let ((frag start) (start-others start) type f) - (while (not (eq frag end)) - (setq type (get frag 'type)) - (cond - ((and (memq type eword) - (ew-proper-eword-p frag)) - (when (not (eq start-others frag)) - (funcall decode-others start-others frag)) - (let ((first frag) (ewords (list frag))) - (while (progn - (setq f (get frag 'next-frag)) - (while (and (not (eq f end)) - (memq (get f 'type) gap)) - (setq f (get f 'next-frag))) - (and (not (eq f end)) - (ew-proper-eword-p f))) - (setq frag (get frag 'next-frag)) - (while (not (eq frag f)) - (put frag 'decoded "") - (setq frag (get frag 'next-frag))) - (setq ewords (ew-rcons* ewords f) - frag f)) - (funcall decode-ewords - (nreverse ewords))) - (setq start-others (get frag 'next-frag))) - ((memq type all) - nil) - (t - (error "unexpected token: %s (%s)" frag type))) - (setq frag (get frag 'next-frag))) - (when (not (eq start-others end)) - (funcall decode-others start-others end)))) - -(defun ew-decode-generic-others (start end puncts quotes targets) - (let ((frag start) (start-nonpunct start) type buff tmp) - (while (not (eq frag end)) - (setq type (get frag 'type)) - (cond - ((memq type puncts) - (when buff - (setq buff (apply 'concat (nreverse buff)) - tmp (ew-decode-us-ascii buff)) - (if (equal buff tmp) - (while (not (eq start-nonpunct frag)) - (put start-nonpunct 'decoded (symbol-name start-nonpunct)) - (setq start-nonpunct (get start-nonpunct 'next-frag))) - (progn - (put start-nonpunct 'decoded tmp) - (setq start-nonpunct (get start-nonpunct 'next-frag)) - (while (not (eq start-nonpunct frag)) - (put start-nonpunct 'decoded "") - (setq start-nonpunct (get start-nonpunct 'next-frag))))) - (setq buff ())) - (put frag 'decoded (symbol-name frag)) - (setq start-nonpunct (get frag 'next-frag))) - ((memq type quotes) - (setq buff (ew-rcons* buff - (substring (symbol-name frag) 1)))) - ((memq type targets) - (setq buff (ew-rcons* buff - (symbol-name frag)))) - (t (error "something wrong: unexpected token: %s (%s)" frag type))) - (setq frag (get frag 'next-frag))) - (when buff - (setq buff (apply 'concat (nreverse buff)) - tmp (ew-decode-us-ascii buff)) - (if (equal buff tmp) - (while (not (eq start-nonpunct frag)) - (put start-nonpunct 'decoded (symbol-name start-nonpunct)) - (setq start-nonpunct (get start-nonpunct 'next-frag))) - (progn - (put start-nonpunct 'decoded tmp) - (setq start-nonpunct (get start-nonpunct 'next-frag)) - (while (not (eq start-nonpunct frag)) - (put start-nonpunct 'decoded "") - (setq start-nonpunct (get start-nonpunct 'next-frag)))))))) - -(defun ew-decode-unstructured-ewords (ewords) - (while ewords - (put (car ewords) - 'decoded - (list (ew-decode-eword (symbol-name (car ewords))))) - (setq ewords (cdr ewords)))) - -(defun ew-decode-unstructured-others (start end) - (let (strs) - (while (not (eq start end)) - (put start 'decoded "") - (setq strs (ew-rcons* strs - (symbol-name start)) - start (get start 'next-frag))) - (put (get end 'prev-frag) - 'decoded - (ew-decode-us-ascii - (apply 'concat (nreverse strs)))))) - -(defun ew-decode-unstructured (anchor start end) - (ew-decode-generic - anchor start end - 'ew-decode-unstructured-ewords - 'ew-decode-unstructured-others - '(ew:us-texts) - '(ew:us-wsp - ew:us-fold) - '(ew:us-texts - ew:us-wsp - ew:us-fold)) - (let ((frag end) tmp) - (while (not (eq frag start)) - (setq frag (get frag 'prev-frag) - tmp (cons (get frag 'decoded) tmp)) - (put frag 'decoded "")) - (put start 'decoded (ew-encode-crlf (apply 'ew-quote-concat tmp))))) - -(defun ew-decode-phrase-ewords (ewords) - (let* ((qs (eq (get (car ewords) 'type) 'ew:qs-texts)) - (regexp (if qs "[\\\\\\\"]" "[][()<>@,;:\\\\\\\".\000-\037]")) - has-dangerous-char - tmp decoded) - (setq tmp ewords) - (while tmp - (put (car tmp) - 'decoded - (list (setq decoded (ew-decode-eword (symbol-name (car tmp)))))) - (setq tmp (cdr tmp) - has-dangerous-char (or has-dangerous-char - (string-match regexp decoded)))) - (when has-dangerous-char - (setq tmp ewords) - (while tmp - (setq decoded (get (car tmp) 'decoded)) - (setcar decoded (ew-embed-in-quoted-string (car decoded))) - (setq tmp (cdr tmp))) - (when (not qs) - (setq decoded (get (car ewords) 'decoded)) - (setcar decoded (concat "\"" (car decoded))) - (setq decoded (get (car (last ewords)) 'decoded)) - (setcar decoded (concat (car decoded) "\"")))))) - -(defun ew-decode-phrase-others (start end) - (ew-decode-generic-others - start end - '(ew:qs-begin - ew:qs-end) - '(ew:qs-qfold - ew:qs-qpair) - '(ew:atom - ew:wsp - ew:fold - ew:qs-texts - ew:qs-wsp - ew:qs-fold))) - -(defmacro ew-rotate (var val len) - (let ((tmp (make-symbol "tmp"))) - `(let ((,tmp (nthcdr ,(- len 2) ,var))) - (if (cdr ,tmp) - (progn - (setcdr (cdr ,tmp) ,var) - (setq ,var (cdr ,tmp)) - (setcdr ,tmp nil)) - (setq ,var (cons nil ,var))) - (setcar ,var ,val)))) - -(defun ew-decode-phrase (anchor start end) - (ew-decode-generic - anchor start end - 'ew-decode-phrase-ewords - 'ew-decode-phrase-others - (if ew-decode-quoted-encoded-word - '(ew:atom ew:qs-texts) - '(ew:atom)) - '(ew:wsp - ew:fold - ew:qs-wsp - ew:qs-fold) - '(ew:atom - ew:wsp - ew:fold - ew:qs-begin - ew:qs-end - ew:qs-texts - ew:qs-wsp - ew:qs-fold - ew:qs-qfold - ew:qs-qpair)) - (let ((frag start) decoded str len idx char - chars frags - tmp) - (while (not (eq frag end)) - (setq decoded (get frag 'decoded) - str (or (car-safe decoded) decoded) - len (length str) - idx 0) - (while (< idx len) - (setq char (sref str idx)) - (ew-rotate chars char 3) - (ew-rotate frags frag 3) - (when (and (not (memq char '(?\t ?\ ))) - (equal (cdr chars) '(?\n ?\r)) - (eq (get (setq tmp (nth 2 frags)) 'type) 'ew:qs-qpair) - (eq (symbol-name tmp) (get tmp 'decoded))) - (put tmp 'decoded "\r")) - (setq idx (char-next-index char idx))) - (setq frag (get frag 'next-frag))) - (setq frag end - tmp ()) - (while (not (eq frag start)) - (setq frag (get frag 'prev-frag) - tmp (cons (get frag 'decoded) tmp)) - (put frag 'decoded "")) - (put start 'decoded (ew-encode-crlf (apply 'ew-quote-concat tmp))))) - -(defun ew-decode-comment-ewords (ewords) - (let* ((regexp "[()\\\\]") - has-dangerous-char - tmp decoded) - (setq tmp ewords) - (while tmp - (put (car tmp) - 'decoded - (list (setq decoded (ew-decode-eword (symbol-name (car tmp)))))) - (setq tmp (cdr tmp) - has-dangerous-char (or has-dangerous-char - (string-match regexp decoded)))) - (when has-dangerous-char - (setq tmp ewords) - (while tmp - (setq decoded (get (car tmp) 'decoded)) - (setcar decoded (ew-embed-in-comment (car decoded))) - (setq tmp (cdr tmp)))))) - -(defun ew-decode-comment-others (start end) - (ew-decode-generic-others - start end - '() - '(ew:cm-qfold - ew:cm-qpair) - '(ew:cm-texts - ew:cm-wsp - ew:cm-fold))) - -(defun ew-decode-comment (anchor start end) - (ew-decode-generic - anchor start end - 'ew-decode-comment-ewords - 'ew-decode-comment-others - '(ew:cm-texts) - '(ew:cm-wsp - ew:cm-fold) - '(ew:cm-texts - ew:cm-wsp - ew:cm-fold - ew:cm-qfold - ew:cm-qpair)) - (let ((frag start) decoded str len idx char - chars frags tmp) - (while (not (eq frag end)) - (setq decoded (get frag 'decoded) - str (or (car-safe decoded) decoded) - len (length str) - idx 0) - (while (< idx len) - (setq char (sref str idx)) - (ew-rotate chars char 3) - (ew-rotate frags frag 3) - (when (and (not (memq char '(?\t ?\ ))) - (equal (cdr chars) '(?\n ?\r)) - (eq (get (setq tmp (nth 2 frags)) 'type) 'ew:cm-qpair) - (eq (symbol-name tmp) (get tmp 'decoded))) - (put tmp 'decoded "\r")) - (setq idx (char-next-index char idx))) - (setq frag (get frag 'next-frag))) - (setq frag end - tmp ()) - (while (not (eq frag start)) - (setq frag (get frag 'prev-frag) - tmp (cons (get frag 'decoded) tmp)) - (put frag 'decoded "")) - (put start 'decoded (ew-encode-crlf (apply 'ew-quote-concat tmp))))) - -;;; - -(defun ew-embed-in-phrase (str) - (concat "\"" (ew-embed-in-quoted-string str) "\"")) - -(defun ew-embed-in-quoted-string (str) - (ew-quote-as-quoted-pair str '(?\\ ?\"))) - -(defun ew-embed-in-comment (str) - (ew-quote-as-quoted-pair str '(?\\ ?\( ?\)))) - -(defun ew-quote-as-quoted-pair (str specials) - (let ((i 0) (j 0) (l (length str)) result) - (while (< j l) - (when (member (aref str j) specials) - (setq result (ew-rcons* - result - (substring str i j) - "\\") - i j)) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -;;; - -(defun ew-contain-non-ascii-p (str) - (not (eq (charsets-to-mime-charset (find-charset-string str)) 'us-ascii))) - -'( - -(ew-decode-field "To" " =?US-ASCII?Q?phrase?= ") -(ew-decode-field "To" " =?US-ASCII?Q?phrase?= < =?US-ASCII?Q?akr?= @jaist.ac.jp>") -(ew-decode-field "To" " =?US-ASCII?Q?akr?= @jaist.ac.jp") -(ew-decode-field "Subject" " =?ISO-2022-JP?B?GyRCJCIbKEI=?=") -(ew-decode-field "Content-Type" " text/vnd.latex-z(=?US-ASCII?Q?What=3F?=);charset=ISO-2022-JP") - -(ew-decode-field "To" " =?US-ASCII?Q?A=22B=5CC?= ") -(let ((ew-decode-quoted-encoded-word t)) - (ew-decode-field "To" " \"=?US-ASCII?Q?A=22B=5CC?=\" ")) - -(ew-decode-field "To" " akr@jaist.ac.jp (=?US-ASCII?Q?=28A=29B=5C?=)") - -(ew-decode-field "To" "\"A\\BC\e$B\\\"\\\\\e(B\" ") -(ew-decode-field "To" "\"A\\BC\" ") -(ew-decode-field "To" "\"\e\\$\\B\\$\\\"\e\\(\\B\" ") - -) diff --git a/ew-line.el b/ew-line.el deleted file mode 100644 index 226935a..0000000 --- a/ew-line.el +++ /dev/null @@ -1,334 +0,0 @@ -(require 'lex) -(require 'ew-util) -(provide 'ew-line) - -(put 'ew-crlf-line-generic 'lisp-indent-function 1) -(put 'ew-crlf-line-convert 'lisp-indent-function 1) -(put 'ew-lf-line-generic 'lisp-indent-function 1) -(put 'ew-lf-line-convert 'lisp-indent-function 1) - -(defun ew-tab-to-space (str) - (let ((i 0) (j 0) (l (length str)) result) - (while (< j l) - (when (equal (aref str j) ?\t) - (setq result (ew-rcons* - result - (substring str i j) - " ") - i j)) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-lf-to-crlf (str) - (let ((i 0) (j 0) (l (length str)) result) - (while (< j l) - (when (equal (aref str j) ?\n) - (setq result (ew-rcons* - result - (substring str i j) - "\r") - i j)) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-crlf-to-lf (str) - (let* ((i 0) (j 0) (l (length str)) (l- (1- l)) result) - (while (< j l-) - (when (and (equal (aref str j) ?\r) - (equal (aref str (1+ j)) ?\n)) - (setq result (ew-rcons* - result - (substring str i j)) - j (1+ j) - i j)) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-lf-crlf-to-crlf (str) - (let* ((i 0) (j 0) (l (length str)) (l- (1- l)) result) - (while (< j l) - (cond - ((and (< j l-) - (equal (aref str j) ?\r) - (equal (aref str (1+ j)) ?\n)) - (setq j (1+ j))) - ((equal (aref str j) ?\n) - (setq result (ew-rcons* - result - (substring str i j) - "\r") - i j))) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-crlf-unfold (str) - (let* ((i 0) (j 0) (l (length str)) (l- (- l 2)) result) - (while (< j l-) - (when (and (equal (aref str j) ?\r) - (equal (aref str (1+ j)) ?\n) - (member (aref str (+ j 2)) '(?\t ?\ ))) - (setq result (ew-rcons* - result - (substring str i j)) - j (+ j 2) - i j)) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-lf-unfold (str) - (let* ((i 0) (j 0) (l (length str)) (l- (- l 1)) result) - (while (< j l-) - (when (and (equal (aref str j) ?\n) - (member (aref str (+ j 1)) '(?\t ?\ ))) - (setq result (ew-rcons* - result - (substring str i j)) - j (+ j 1) - i j)) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-cut-generic (str chars) - (let ((i 0) (j 0) (l (length str)) result) - (while (< j l) - (when (member (aref str j) chars) - (setq result (ew-rcons* - result - (substring str i j)) - i (1+ j))) - (setq j (1+ j))) - (when (< i l) - (setq result (ew-rcons* - result - (substring str i)))) - (apply 'concat (nreverse result)))) - -(defun ew-cut-cr-lf (str) (ew-cut-generic str '(?\r ?\n))) -(defun ew-cut-cr (str) (ew-cut-generic str '(?\r))) -(defun ew-cut-lf (str) (ew-cut-generic str '(?\n))) - -(defmacro ew-crlf-generic-define () - (let ((str (make-symbol "str")) - (others-fun (make-symbol "others-fun")) - (fold-fun (make-symbol "fold-fun")) - (nl-fun (make-symbol "nl-fun")) - (cr-fun (make-symbol "cr-fun")) - (lf-fun (make-symbol "lf-fun")) - (p (make-symbol "p")) - (q (make-symbol "q")) - (r (make-symbol "r"))) - `(defun ew-crlf-generic - (,str ,others-fun ,fold-fun ,nl-fun ,cr-fun ,lf-fun) - (let ((,p 0) (,q (length ,str)) ,r) - (while (< ,p ,q) - (setq ,r ,p) - (lex-scan-unibyte ,str ,p ,q - ((+ [^ "\r\n"]) (when ,others-fun (funcall ,others-fun ,r ,p))) - ((?\r ?\n [" \t"]) (when ,fold-fun (funcall ,fold-fun ,r ,p))) - ((?\r ?\n) (when ,nl-fun (funcall ,nl-fun ,r ,p))) - ((?\r) (when ,cr-fun (funcall ,cr-fun ,r ,p))) - ((?\n) (when ,lf-fun (funcall ,lf-fun ,r ,p))) - (() (error "something wrong")))) - ,q)))) -(ew-crlf-generic-define) - -(defmacro ew-crlf-line-generic-define () - (let ((str (make-symbol "str")) - (others-fun (make-symbol "others-fun")) - (fold-fun (make-symbol "fold-fun")) - (nl-fun (make-symbol "nl-fun")) - (p (make-symbol "p")) - (q (make-symbol "q")) - (r (make-symbol "r"))) - `(defun ew-crlf-line-generic - (,str ,others-fun ,fold-fun ,nl-fun) - (let ((,p 0) (,q (length ,str)) ,r) - (while (< ,p ,q) - (setq ,r ,p) - (lex-scan-unibyte ,str ,p ,q - (() (error "something wrong")) - (((* [^ "\r"]) - (* (+ ?\r) [^ "\r\n"] (* [^ "\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (and ,others-fun (< ,r (- ,p 3))) (funcall ,others-fun ,r (- ,p 3))) - (when ,fold-fun (funcall ,fold-fun (- ,p 3) ,p))) - (((* [^ "\r"]) - (* (+ ?\r) [^ "\r\n"] (* [^ "\r"])) - (* ?\r) - (?\r ?\n)) - (when (and ,others-fun (< ,r (- ,p 2))) (funcall ,others-fun ,r (- ,p 2))) - (when ,nl-fun (funcall ,nl-fun (- ,p 2) ,p))) - (((* [^ "\r"]) - (* (+ ?\r) [^ "\r\n"] (* [^ "\r"])) - (* ?\r)) - (when ,others-fun (funcall ,others-fun ,r ,p))))) - ,q)))) -(ew-crlf-line-generic-define) - -(defmacro ew-lf-generic-define () - (let ((str (make-symbol "str")) - (others-fun (make-symbol "others-fun")) - (fold-fun (make-symbol "fold-fun")) - (nl-fun (make-symbol "nl-fun")) - (cr-fun (make-symbol "cr-fun")) - (p (make-symbol "p")) - (q (make-symbol "q")) - (r (make-symbol "r"))) - `(defun ew-lf-generic - (,str ,others-fun ,fold-fun ,nl-fun ,cr-fun) - (let ((,p 0) (,q (length ,str)) ,r) - (while (< ,p ,q) - (setq ,r ,p) - (lex-scan-unibyte ,str ,p ,q - ((+ [^ "\r\n"]) (when ,others-fun (funcall ,others-fun ,r ,p))) - ((?\n [" \t"]) (when ,fold-fun (funcall ,fold-fun ,r ,p))) - ((?\n) (when ,nl-fun (funcall ,nl-fun ,r ,p))) - ((?\r) (when ,cr-fun (funcall ,cr-fun ,r ,p))) - (() (error "something wrong")))) - ,q)))) -(ew-lf-generic-define) - -(defmacro ew-lf-line-generic-define () - (let ((str (make-symbol "str")) - (others-fun (make-symbol "others-fun")) - (fold-fun (make-symbol "fold-fun")) - (nl-fun (make-symbol "nl-fun")) - (p (make-symbol "p")) - (q (make-symbol "q")) - (r (make-symbol "r"))) - `(defun ew-lf-line-generic - (,str ,others-fun ,fold-fun ,nl-fun) - (let ((,p 0) (,q (length ,str)) ,r) - (while (< ,p ,q) - (setq ,r ,p) - (lex-scan-unibyte ,str ,p ,q - (() (error "something wrong")) - ((+ [^ "\n"]) - (when ,others-fun (funcall ,others-fun ,r ,p))) - ((?\n [" \t"]) - (when ,fold-fun (funcall ,fold-fun ,r ,p))) - (?\n - (when ,nl-fun (funcall ,nl-fun ,r ,p))))) - ,q)))) -(ew-lf-line-generic-define) - -(defmacro ew-generic-convert-define (name generic &rest funcs) - (let ((str (make-symbol "str")) - (funcs-vars (mapcar (lambda (func) (make-symbol (symbol-name func))) funcs)) - (index (make-symbol "index")) - (result (make-symbol "result")) - (tmp (make-symbol "tmp")) - (start (make-symbol "starx")) - (end (make-symbol "end"))) - `(defun ,name - (,str ,@funcs-vars) - (let ((,index 0) ,result ,tmp) - (when (> (,generic - ,str - ,@(mapcar - (lambda (fun) - `(when ,fun - (lambda (,start ,end) - (setq ,tmp (funcall ,fun (substring ,str ,start ,end))) - (when ,tmp - (when (< ,index ,start) - (setq ,result - (ew-rcons* ,result - (substring ,str ,index ,start)))) - (setq ,result (ew-rcons* ,result ,tmp) - ,index ,end))))) - funcs-vars)) - ,index) - (setq ,result - (ew-rcons* ,result - (substring ,str ,index)))) - (apply 'concat (nreverse ,result)))))) -(ew-generic-convert-define ew-crlf-convert ew-crlf-generic others-fun fold-fun nl-fun cr-fun lf-fun) -(ew-generic-convert-define ew-crlf-line-convert ew-crlf-line-generic others-fun fold-fun nl-fun) -(ew-generic-convert-define ew-lf-convert ew-lf-generic others-fun fold-fun nl-fun cr-fun) -(ew-generic-convert-define ew-lf-line-convert ew-lf-line-generic others-fun fold-fun nl-fun) - -(defmacro ew-fold-define (name convert nl) - `(defun ,name (str start-column line-length) - (let ((column start-column)) - (,convert str - (lambda (line) - (let ((start 0) - (end (length line)) - result tmp fold width) - (while (and (< start end) - (progn - (when (<= column 1) - (setq tmp (sref line start) - result (ew-rcons* result (char-to-string tmp)) - column (+ column (char-width tmp)) - start (char-next-index tmp start))) - (string-match "[ \t]" line start))) - (setq tmp (substring line start (match-beginning 0)) - width (string-width tmp) - result (ew-rcons* result tmp) - column (+ column width) - start (match-beginning 0)) - (if (<= line-length column) - (progn - (when (and fold (not (= line-length column))) - (setcdr fold (cons (car fold) (cdr fold))) - (setcar fold ,nl) - (setq column (+ width - (if (eq (cdr result) fold) - 0 - (string-width (cadr result)))))) - (if (<= line-length column) - (setq result (ew-rcons* result ,nl) - column 0 - fold nil) - (setq fold result))) - (setq fold result)) - (setq tmp (sref line (match-beginning 0)) - result (ew-rcons* result (char-to-string tmp)) - column (+ column (char-width tmp)) - start (match-end 0))) - (when (< start end) - (setq tmp (substring line start) - result (ew-rcons* result tmp) - column (+ column (string-width tmp)))) - (when (and (< line-length column) fold) - (setcdr fold (cons (car fold) (cdr fold))) - (setcar fold ,nl)) - (apply 'concat (nreverse result)))) - (lambda (fold) (setq column 1) nil) - (lambda (nl) (setq column 0) nil))))) - -(ew-fold-define ew-crlf-fold ew-crlf-line-convert "\r\n") -(ew-fold-define ew-lf-fold ew-crlf-line-convert "\n") - -(defun ew-crlf-refold (string start-column line-length) - (ew-crlf-fold (ew-crlf-unfold string) start-column line-length)) - -(defun ew-lf-refold (string start-column line-length) - (ew-lf-fold (ew-lf-unfold string) start-column line-length)) diff --git a/ew-parse.el b/ew-parse.el deleted file mode 100644 index b439926..0000000 --- a/ew-parse.el +++ /dev/null @@ -1,796 +0,0 @@ -; *** Header *** -(provide 'ew-parse) -(require 'ew-data) -(require 'lr-driver) - -; *** Token Definitions *** -(defconst ew:*eoi* 0) -(defconst ew:*anchor* 1) -(defconst ew:*err* 2) -(defconst ew:tag-mailbox 3) -(defconst ew:tag-mailbox* 4) -(defconst ew:tag-mailbox+ 5) -(defconst ew:tag-address* 6) -(defconst ew:tag-address+ 7) -(defconst ew:tag-phrase* 8) -(defconst ew:tag-phrase-msg-id* 9) -(defconst ew:lt 10) -(defconst ew:gt 11) -(defconst ew:at 12) -(defconst ew:comma 13) -(defconst ew:semicolon 14) -(defconst ew:colon 15) -(defconst ew:dot 16) -(defconst ew:atom 17) -(defconst ew:slash 18) -(defconst ew:question 19) -(defconst ew:equal 20) -(defconst ew:token 21) -(defconst ew:qs-begin 22) -(defconst ew:qs-end 23) -(defconst ew:qs-texts 24) -(defconst ew:qs-wsp 25) -(defconst ew:qs-fold 26) -(defconst ew:qs-qfold 27) -(defconst ew:qs-qpair 28) -(defconst ew:dl-begin 29) -(defconst ew:dl-end 30) -(defconst ew:dl-texts 31) -(defconst ew:dl-wsp 32) -(defconst ew:dl-fold 33) -(defconst ew:dl-qfold 34) -(defconst ew:dl-qpair 35) -(defconst ew:cm-begin 36) -(defconst ew:cm-end 37) -(defconst ew:cm-nested-begin 38) -(defconst ew:cm-nested-end 39) -(defconst ew:cm-texts 40) -(defconst ew:cm-wsp 41) -(defconst ew:cm-fold 42) -(defconst ew:cm-qfold 43) -(defconst ew:cm-qpair 44) -(defconst ew:wsp 45) -(defconst ew:fold 46) -(defconst ew:us-texts 47) -(defconst ew:us-wsp 48) -(defconst ew:us-fold 49) - -(defconst ew:token-defs - (list - (cons 0 "*eoi*") - (cons 1 "*anchor*") - (cons 2 "*err*") - (cons 3 "tag-mailbox") - (cons 4 "tag-mailbox*") - (cons 5 "tag-mailbox+") - (cons 6 "tag-address*") - (cons 7 "tag-address+") - (cons 8 "tag-phrase*") - (cons 9 "tag-phrase-msg-id*") - (cons 10 "lt") - (cons 11 "gt") - (cons 12 "at") - (cons 13 "comma") - (cons 14 "semicolon") - (cons 15 "colon") - (cons 16 "dot") - (cons 17 "atom") - (cons 18 "slash") - (cons 19 "question") - (cons 20 "equal") - (cons 21 "token") - (cons 22 "qs-begin") - (cons 23 "qs-end") - (cons 24 "qs-texts") - (cons 25 "qs-wsp") - (cons 26 "qs-fold") - (cons 27 "qs-qfold") - (cons 28 "qs-qpair") - (cons 29 "dl-begin") - (cons 30 "dl-end") - (cons 31 "dl-texts") - (cons 32 "dl-wsp") - (cons 33 "dl-fold") - (cons 34 "dl-qfold") - (cons 35 "dl-qpair") - (cons 36 "cm-begin") - (cons 37 "cm-end") - (cons 38 "cm-nested-begin") - (cons 39 "cm-nested-end") - (cons 40 "cm-texts") - (cons 41 "cm-wsp") - (cons 42 "cm-fold") - (cons 43 "cm-qfold") - (cons 44 "cm-qpair") - (cons 45 "wsp") - (cons 46 "fold") - (cons 47 "us-texts") - (cons 48 "us-wsp") - (cons 49 "us-fold") - )) - -; *** Action Table *** -(defconst ew:action-table - [ - ((default . *error*) (3 . 7) (4 . 6) (5 . 5) (6 . 4) (7 . 3) (8 . 2) (9 . 1)) - ((default . -61)) - ((default . -61)) - ((default . -61)) - ((default . -61)) - ((default . -61)) - ((default . -61)) - ((default . -61)) - ((default . *error*) (0 . 16)) - ((default . -51) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . -53) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . *error*) (10 . 34) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . -9) (10 . 34) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . *error*) (10 . 34) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . -30) (10 . 34) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . *error*) (10 . 34) (17 . 21) (22 . 20) (36 . 19) (45 . 18) (46 . 17)) - ((default . -1) (0 . accept)) - ((default . -63)) - ((default . -62)) - ((default . -90)) - ((default . -76)) - ((default . -61)) - ((default . -64)) - ((default . -61)) - ((default . -48)) - ((default . -49)) - ((default . -8) (10 . 34)) - ((default . -57)) - ((default . -37)) - ((default . -36) (17 . 21) (22 . 20)) - ((default . -52)) - ((default . -54) (13 . 60)) - ((default . -7)) - ((default . -55)) - ((default . -61)) - ((default . -43) (12 . 63)) - ((default . -37) (16 . -25) (12 . -25)) - ((default . -29)) - ((default . *error*) (10 . 34) (15 . 68)) - ((default . -13)) - ((default . *error*) (12 . 63) (16 . 71)) - ((default . -14)) - ((default . -27)) - ((default . -11)) - ((default . -6) (13 . 60)) - ((default . -10) (13 . 60)) - ((default . -5)) - ((default . *error*) (10 . 34)) - ((default . -4) (13 . 60)) - ((default . -32)) - ((default . -31) (13 . 60)) - ((default . -3)) - ((default . -2)) - ((default . *error*) (37 . 83) (38 . 82) (39 . 81) (40 . 80) (41 . 79) (42 . 78) (43 . 77) (44 . 76)) - ((default . *error*) (23 . 89) (24 . 88) (25 . 87) (26 . 86) (27 . 85) (28 . 84)) - ((default . -74) (36 . 19) (45 . 18) (46 . 17)) - ((default . -72) (36 . 19) (45 . 18) (46 . 17)) - ((default . *error*) (17 . 21) (22 . 20)) - ((default . -51) (17 . 21) (22 . 20)) - ((default . -38)) - ((default . -61)) - ((default . *error*) (17 . 21) (22 . 20)) - ((default . -65) (36 . 19) (45 . 18) (46 . 17)) - ((default . -61)) - ((default . *error*) (17 . 21) (29 . 96)) - ((default . *error*) (17 . 21) (22 . 20)) - ((default . *error*) (13 . 60) (15 . 68)) - ((default . -44)) - ((default . -61)) - ((default . -30) (10 . 34) (17 . 21) (22 . 20)) - ((default . -28)) - ((default . -61)) - ((default . *error*) (17 . 21) (22 . 20)) - ((default . *error*) (17 . 21) (29 . 96)) - ((default . *error*) (10 . 34) (17 . 21) (22 . 20)) - ((default . *error*) (10 . 34) (17 . 21) (22 . 20)) - ((default . -97)) - ((default . -96)) - ((default . -95)) - ((default . -94)) - ((default . -93)) - ((default . -92)) - ((default . -91)) - ((default . -89)) - ((default . -81)) - ((default . -80)) - ((default . -79)) - ((default . -78)) - ((default . -77)) - ((default . -75)) - ((default . -25)) - ((default . *error*) (11 . 113)) - ((default . -58)) - ((default . -68) (36 . 19) (45 . 18) (46 . 17)) - ((default . -56)) - ((default . -67) (36 . 19) (45 . 18) (46 . 17)) - ((default . -83)) - ((default . -61)) - ((default . -21)) - ((default . -46)) - ((default . -19)) - ((default . -45)) - ((default . -40) (16 . 71)) - ((default . *error*) (11 . 113)) - ((default . -39)) - ((default . *error*) (12 . 63)) - ((default . -70) (36 . 19) (45 . 18) (46 . 17)) - ((default . *error*) (14 . 120)) - ((default . -71) (36 . 19) (45 . 18) (46 . 17)) - ((default . -26)) - ((default . -15) (16 . 71)) - ((default . -12)) - ((default . -33)) - ((default . -61)) - ((default . -35)) - ((default . *error*) (30 . 128) (31 . 127) (32 . 126) (33 . 125) (34 . 124) (35 . 123)) - ((default . -73) (36 . 19) (45 . 18) (46 . 17)) - ((default . *error*) (17 . 21) (29 . 96)) - ((default . -42)) - ((default . *error*) (17 . 21) (29 . 96)) - ((default . -61)) - ((default . -22)) - ((default . -66) (36 . 19) (45 . 18) (46 . 17)) - ((default . -88)) - ((default . -87)) - ((default . -86)) - ((default . -85)) - ((default . -84)) - ((default . -82)) - ((default . -20)) - ((default . -41) (16 . 71)) - ((default . -69) (36 . 19) (45 . 18) (46 . 17)) - ]) - -; *** Goto Table *** -(defconst ew:goto-table - [ - ((1 . 8)) - ((33 . 9)) - ((33 . 10)) - ((33 . 11)) - ((33 . 12)) - ((33 . 13)) - ((33 . 14)) - ((33 . 15)) - () - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(31 . 26)(28 . 27)(26 . 28)(19 . 29)(18 . 30)) - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(30 . 31)(29 . 32)(26 . 28)(19 . 29)(18 . 33)) - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 38)(13 . 39)(12 . 40)(10 . 41)(5 . 42)(4 . 43)(3 . 44)) - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 38)(13 . 39)(12 . 40)(10 . 41)(5 . 42)(4 . 43)(3 . 45)(2 . 46)) - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 47)(15 . 48)(13 . 49)(12 . 40)(5 . 42)) - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 47)(15 . 50)(14 . 51)(13 . 49)(12 . 40)(5 . 42)) - ((48 . 22)(44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 47)(13 . 52)(12 . 40)(5 . 42)) - () - () - () - ((49 . 53)) - ((45 . 54)) - ((33 . 55)) - () - ((33 . 56)) - () - () - ((34 . 57)(17 . 58)) - () - () - ((44 . 23)(43 . 24)(41 . 25)(26 . 59)) - () - ((37 . 61)) - () - () - ((33 . 62)) - ((36 . 64)(23 . 65)(21 . 66)(20 . 67)) - () - () - ((39 . 69)(34 . 35)(22 . 70)) - () - ((40 . 72)(36 . 73)) - () - () - () - ((37 . 74)) - ((37 . 74)) - () - ((34 . 35)(22 . 70)) - ((37 . 75)) - () - ((37 . 75)) - () - () - () - () - ((48 . 22)) - ((48 . 22)) - ((44 . 23)(43 . 24)(41 . 25)(26 . 90)(12 . 40)(5 . 91)) - ((44 . 23)(43 . 24)(41 . 25)(28 . 92)(26 . 28)(19 . 29)(18 . 30)) - () - ((33 . 93)) - ((44 . 23)(43 . 24)(41 . 25)(26 . 28)(19 . 29)(18 . 94)) - ((48 . 22)) - ((33 . 95)) - ((46 . 97)(43 . 98)(42 . 99)(24 . 100)(9 . 101)(8 . 102)) - ((44 . 23)(43 . 24)(41 . 25)(26 . 90)(12 . 40)(5 . 103)) - ((39 . 104)(37 . 105)) - () - ((33 . 106)) - ((44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 47)(15 . 50)(14 . 107)(13 . 49)(12 . 40)(5 . 42)) - () - ((33 . 108)) - ((44 . 23)(43 . 24)(41 . 25)(26 . 109)) - ((46 . 97)(43 . 98)(42 . 99)(24 . 100)(9 . 101)(8 . 110)) - ((44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 38)(13 . 39)(12 . 40)(10 . 41)(5 . 42)(4 . 111)) - ((44 . 23)(43 . 24)(41 . 25)(34 . 35)(26 . 36)(22 . 37)(19 . 29)(18 . 47)(13 . 112)(12 . 40)(5 . 42)) - () - () - () - () - () - () - () - () - () - () - () - () - () - () - () - ((35 . 114)) - () - ((48 . 22)) - () - ((48 . 22)) - ((47 . 115)) - ((33 . 116)) - () - () - () - () - ((40 . 117)) - ((35 . 118)) - () - ((36 . 119)) - ((48 . 22)) - ((38 . 121)) - ((48 . 22)) - () - ((40 . 117)) - () - () - ((33 . 122)) - () - () - ((48 . 22)) - ((46 . 97)(43 . 98)(42 . 99)(24 . 129)(9 . 101)) - () - ((46 . 97)(43 . 98)(42 . 99)(24 . 100)(9 . 101)(8 . 130)) - ((33 . 131)) - () - ((48 . 22)) - () - () - () - () - () - () - () - ((40 . 117)) - ((48 . 22)) - ]) - -; *** Reduction Table *** -(defconst ew:reduction-table - (vector - '() - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (accept $1))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 1 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 2 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 2 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 3 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 3 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 4 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 4 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 5 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 6 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($4 (aref stack (- sp 1))) - ($3 (aref stack (- sp 3))) - ($2 (aref stack (- sp 5))) - ($1 (aref stack (- sp 7)))) - (lr-push stack (- sp 8) 7 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 7 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 8 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 8 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 9 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($4 (aref stack (- sp 1))) - ($3 (aref stack (- sp 3))) - ($2 (aref stack (- sp 5))) - ($1 (aref stack (- sp 7)))) - (lr-push stack (- sp 8) 10 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 11 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($5 (aref stack (- sp 1))) - ($4 (aref stack (- sp 3))) - ($3 (aref stack (- sp 5))) - ($2 (aref stack (- sp 7))) - ($1 (aref stack (- sp 9)))) - (lr-push stack (- sp 10) 11 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 12 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 12 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 13 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 13 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 13 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 14 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 14 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 15 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 15 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 16 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 17 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 18 goto-table (ew-mark-phrase $1 $look)))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 19 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 19 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 20 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 21 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($4 (aref stack (- sp 1))) - ($3 (aref stack (- sp 3))) - ($2 (aref stack (- sp 5))) - ($1 (aref stack (- sp 7)))) - (lr-push stack (- sp 8) 21 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($4 (aref stack (- sp 1))) - ($3 (aref stack (- sp 3))) - ($2 (aref stack (- sp 5))) - ($1 (aref stack (- sp 7)))) - (lr-push stack (- sp 8) 22 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 23 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 23 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 24 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 24 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 25 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 26 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 26 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 27 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 28 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 28 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 29 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 29 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 30 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 30 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 31 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 31 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($1 (aref stack (- sp 1)))) - (lr-push stack (- sp 2) 32 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 32 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 33 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 33 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 33 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 33 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 34 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 35 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 36 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 37 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 38 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 39 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 40 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 41 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 42 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 43 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 44 goto-table $1))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 45 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 45 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 45 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 45 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 45 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 45 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 46 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 47 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 47 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 47 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 47 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 47 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 47 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($3 (aref stack (- sp 1))) - ($2 (aref stack (- sp 3))) - ($1 (aref stack (- sp 5)))) - (lr-push stack (- sp 6) 48 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* () - (lr-push stack (- sp 0) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - (lambda (stack sp goto-table $look) - (let* (($2 (aref stack (- sp 1))) - ($1 (aref stack (- sp 3)))) - (lr-push stack (- sp 4) 49 goto-table ()))) - )) - -; *** Parser Definition *** -(defun ew-parse(scanner errorhandler) - (lr-parse scanner errorhandler - ew:action-table - ew:goto-table - ew:reduction-table - ew:token-defs)) - -; *** Footer *** -(put 'ew:cm-texts 'decode 'ew-decode-comment) -(put 'ew:cm-wsp 'decode 'ew-decode-comment) -(put 'ew:cm-fold 'decode 'ew-decode-comment) -(put 'ew:cm-qfold 'decode 'ew-decode-comment) -(put 'ew:cm-qpair 'decode 'ew-decode-comment) -(put 'ew:us-texts 'decode 'ew-decode-unstructured) -(put 'ew:us-wsp 'decode 'ew-decode-unstructured) -(put 'ew:us-fold 'decode 'ew-decode-unstructured) - - diff --git a/ew-parse.scm b/ew-parse.scm deleted file mode 100644 index ddb0074..0000000 --- a/ew-parse.scm +++ /dev/null @@ -1,182 +0,0 @@ -(define field-grammar -'( -; Terminal symbols -*anchor* -*err* - -tag-mailbox -tag-mailbox* -tag-mailbox+ -tag-address* -tag-address+ -tag-phrase* -tag-phrase-msg-id* - -;; S : STD11 structured field -;; M : MIME structured field -;; U : Unstructured field - -lt ; S/M -gt ; S/M -at ; S/M -comma ; S/M -semicolon ; S/M -colon ; S/M - -dot ; S -atom ; S - -slash ; M -question ; M -equal ; M -token ; M - -qs-begin ; S/M -qs-end ; S/M -qs-texts ; S/M -qs-wsp ; S/M -qs-fold ; S/M -qs-qfold ; S/M -qs-qpair ; S/M - -dl-begin ; S/M -dl-end ; S/M -dl-texts ; S/M -dl-wsp ; S/M -dl-fold ; S/M -dl-qfold ; S/M -dl-qpair ; S/M - -cm-begin ; S/M -cm-end ; S/M -cm-nested-begin ; S/M -cm-nested-end ; S/M -cm-texts ; S/M -cm-wsp ; S/M -cm-fold ; S/M -cm-qfold ; S/M -cm-qpair ; S/M - -wsp ; S/M -fold ; S/M - -us-texts ; U -us-wsp ; U -us-fold ; U - -; Productions -(start (tag-mailbox gap mailbox) : () - (tag-mailbox* gap mailbox*) : () - (tag-mailbox+ gap mailbox+) : () - (tag-address* gap address*) : () - (tag-address+ gap address+) : () - (tag-phrase* gap phrase*) : () - (tag-phrase-msg-id* gap phrase-msg-id*) : ()) -(address* () : () - (address+) : ()) -(address+ (address) : () - (address+ comma-gap address) : ()) -(address (mailbox) : () - (group) : ()) -(addr-spec (local-part at-gap domain) : ()) -(date (atom-gap atom-gap atom-gap) : ()) -(date-time (atom-gap comma-gap date time) : () - (date time) : ()) -(domain (sub-domain) : () - (domain dot-gap sub-domain) : ()) -(domain-ref (atom-gap) : ()) -(group (phrase colon-gap mailbox* semicolon-gap) : ()) -(hour (atom-gap colon-gap atom-gap) : () - (atom-gap colon-gap atom-gap colon-gap atom-gap): ()) -(local-part (word) : () - (local-part dot-gap word) : ()) -(mailbox (addr-spec) : () - (phrase route-addr) : () - (route-addr) : ()) -(mailbox* () : () - (mailbox+) : ()) -(mailbox+ (mailbox) : () - (mailbox+ comma-gap mailbox) : ()) -(month (atom-gap) : ()) -(msg-id (lt-gap addr-spec gt-gap) : ()) -(phrase (phrase-c) : (ew-mark-phrase $1 $look)) -(phrase-c (word) : $1 - (phrase-c word) : $1) -(route (at-domain+ colon-gap) : ()) -(at-domain+ (at-gap domain) : () - (at-domain+ comma-gap at-gap domain) : ()) -(route-addr (lt-gap route/ addr-spec gt-gap) : ()) -(route/ () : () - (route) : ()) -(sub-domain (domain-ref) : () - (domain-literal-gap) : ()) -(time (hour zone) : ()) -(word (atom-gap) : $1 - (quoted-string-gap) : $1) -(zone (atom-gap) : ()) -(phrase/ () : () - (phrase) : ()) -(phrase* () : () - (phrase+) : ()) -(phrase+ (phrase) : () - (phrase+ comma-gap phrase) : ()) -(phrase-msg-id* (phrase/) : () - (phrase-msg-id* msg-id phrase/) : ()) -(word1or2 (word) : () - (word comma-gap word) : ()) -(gap () : () - (gap wsp) : () - (gap fold) : () - (gap comment) : ()) -(lt-gap (lt gap) : ()) -(gt-gap (gt gap) : ()) -(at-gap (at gap) : ()) -(comma-gap (comma gap) : ()) -(semicolon-gap (semicolon gap) : ()) -(colon-gap (colon gap) : ()) -(dot-gap (dot gap) : ()) -(quoted-string-gap (quoted-string gap) : $1) -(domain-literal-gap (domain-literal gap) : ()) -(atom-gap (atom gap) : $1) -(quoted-string (qs-begin qs qs-end) : $1) -(qs () : () - (qs qs-texts) : () - (qs qs-wsp) : () - (qs qs-fold) : () - (qs qs-qfold) : () - (qs qs-qpair) : ()) -(domain-literal (dl-begin dl dl-end) : ()) -(dl () : () - (dl dl-texts) : () - (dl dl-wsp) : () - (dl dl-fold) : () - (dl dl-qfold) : () - (dl dl-qpair) : ()) -(comment (cm-begin cm cm-end) : ()) -(cm () : () - (cm cm-nested-begin) : () - (cm cm-nested-end) : () - (cm cm-texts) : () - (cm cm-wsp) : () - (cm cm-fold) : () - (cm cm-qfold) : () - (cm cm-qpair) : ()) - -)) - -(gen-lalr1 field-grammar "ew-parse.el" -"(provide 'ew-parse) -(require 'ew-data) -" -"(put 'ew:cm-texts 'decode 'ew-decode-comment) -(put 'ew:cm-wsp 'decode 'ew-decode-comment) -(put 'ew:cm-fold 'decode 'ew-decode-comment) -(put 'ew:cm-qfold 'decode 'ew-decode-comment) -(put 'ew:cm-qpair 'decode 'ew-decode-comment) -(put 'ew:us-texts 'decode 'ew-decode-unstructured) -(put 'ew:us-wsp 'decode 'ew-decode-unstructured) -(put 'ew:us-fold 'decode 'ew-decode-unstructured) -" -'ew) - -(print-states) diff --git a/ew-quote.el b/ew-quote.el deleted file mode 100644 index 583d060..0000000 --- a/ew-quote.el +++ /dev/null @@ -1,193 +0,0 @@ -;;; quoted encoded word library - -(require 'ew-var) -(require 'ew-util) -(require 'ew-line) -(provide 'ew-quote) - -;; This library provides functions operating strings embedding -;; unencodable encoded words. - -;;;type embedded-pattern denoted-pattern -;; Type-0 =?(QQQ)*A?B?C?= =?(Q)*A?B?C?= -;; Type-1 =?(QQQ)*QA?B?C?= Decode =?(Q)*A?B?C?= as encoded-word -;; Type-2 =?(QQQ)*QQA?B?C?= =?(Q)*A?B?C? - -;; Q : quoting character '+'. -;; A : token. But it does not start with quoting character. -;; B : token. -;; C : encoded-text. - -(eval-and-compile - (defconst ew-quoting-char ?+)) -(defconst ew-quoting-chars-regexp - (eval-when-compile - (concat (regexp-quote (char-to-string ew-quoting-char)) "*"))) - -(defconst ew-type2-regexp - (eval-when-compile - (require 'ew-var) - (concat (regexp-quote "=?") - "\\(" ew-token-regexp "\\)" - (regexp-quote "?") - "\\(" ew-token-regexp "\\)" - (regexp-quote "?") - "\\(" ew-encoded-text-regexp "\\)" - (regexp-quote "?") - "\\'"))) - -;;; - -(defun ew-quoting-char-seq (num) - (make-string num ew-quoting-char)) - -(defun ew-quote (str) - (ew-quote-concat str)) - -(defun ew-concat (&rest args) - (apply 'ew-quote-concat (mapcar 'list args))) - -(defun ew-quote-concat (&rest args) - (let (result raws tmp) - (while args - (setq tmp (car args)) - (cond - ((stringp tmp) - ;; raw string - (setq raws (cons tmp raws))) - ((listp tmp) - ;; quoted encoded word embedding strings - (let (str start eword-start charset-start quoting-end eword-end l q r) - (while tmp - (setq str (car tmp) - start 0) - (while (string-match ew-encoded-word-regexp str start) - (setq eword-start (match-beginning 0) - charset-start (match-beginning 1) - eword-end (match-end 0)) - (string-match ew-quoting-chars-regexp str charset-start) - (setq quoting-end (match-end 0) - l (- quoting-end charset-start) - q (/ l 3) - r (% l 3)) - (cond - ((= r 0) ; Type-0 - (setq raws - (ew-rcons* - raws - (substring str start charset-start) - (ew-quoting-char-seq q) - (substring str quoting-end eword-end)))) - ((= r 2) ; Type-2 - (setq raws - (ew-rcons* - raws - (substring str start charset-start) - (ew-quoting-char-seq q) - (substring str quoting-end (1- eword-end))))) - ((= r 1) ; Type-1 - (setq raws - (ew-rcons* - raws - (substring str start eword-start)) - result - (ew-rcons* - result - (ew-quote-sole (apply 'concat (nreverse raws)) t) - (substring str eword-start eword-end)) - raws ()))) - (setq start eword-end)) - (setq raws (ew-rcons* raws (substring str start)) - tmp (cdr tmp))))) - (t - (error "ew-quote-concat: %s" tmp))) - (setq args (cdr args))) - (setq result - (ew-rcons* - result - (ew-quote-sole (apply 'concat (nreverse raws)) nil))) - (apply 'concat (nreverse result)))) - -(defun ew-quote-sole (str gen-type2) - (let (result (start 0) charset-start quoting-end eword-end l) - (while (string-match ew-encoded-word-regexp str start) - (setq charset-start (match-beginning 1) - eword-end (match-end 0)) - (string-match ew-quoting-chars-regexp str charset-start) - (setq quoting-end (match-end 0) - l (* (- quoting-end charset-start) 3) - result - (ew-rcons* - result - (substring str start charset-start) - (ew-quoting-char-seq l) - (substring str quoting-end eword-end)) - start eword-end)) - (if (and gen-type2 - (string-match ew-type2-regexp str start)) - (progn - (setq charset-start (match-beginning 1) - eword-end (match-end 0)) - (string-match ew-quoting-chars-regexp str charset-start) - (setq quoting-end (match-end 0) - l (* (- quoting-end charset-start) 3) - result - (ew-rcons* - result - (substring str start charset-start) - (ew-quoting-char-seq (+ l 2)) - (substring str quoting-end eword-end) - "="))) - (setq result (ew-rcons* result (substring str start)))) - (apply 'concat (nreverse result)))) - -(defun ew-quote-eword (charset encoding encoded-text) - (string-match ew-quoting-chars-regexp charset) - (concat - "=?+" ; Type-1 - (ew-quoting-char-seq (* (- (match-end 0) (match-beginning 0)) 3)) - (substring charset (match-end 0)) - "?" - encoding - "?" - encoded-text - "?=")) - -(defun ew-encode-crlf (str) - (if ew-remove-bare-crlf - (ew-crlf-line-convert str nil nil (lambda (nl) "")) - (let ((sstart 0) - (mstart 0) - (end (length str)) result ms me) - (while (string-match "\\(\r\n\\)+" str mstart) - (setq ms (match-beginning 0) - me (match-end 0)) - (setq mstart me) - (when (and (< me end) - (member (aref str me) '(?\t ?\ ))) - (setq me (- me 2))) - (when (< ms me) - (setq result (ew-rcons* result - (substring str sstart ms) - "=?+US-ASCII?Q?") - sstart me) - (while (< ms me) - (setq result (ew-rcons* result "=0D=0A") - ms (+ ms 2))) - (setq result (ew-rcons* result "?=")))) - (when (< sstart end) - (setq result (ew-rcons* result - (substring str sstart)))) - (apply 'concat (nreverse result))))) - -'( -(ew-quote-concat "aaa=?A?B?C?=ccc") ;"aaa=?A?B?C?=ccc" -(ew-quote-concat "aaa=?+A?B?C?=ccc") ;"aaa=?+++A?B?C?=ccc" -(ew-quote-concat '("aaa=?A?B?C?=ccc")) ;"aaa=?A?B?C?=ccc" -(ew-quote-concat '("aaa=?+++A?B?C?=ccc")) ;"aaa=?+++A?B?C?=ccc" -(ew-quote-concat "aaa=?+A?B" "?C?=ccc") ;"aaa=?+++A?B?C?=ccc" -(ew-quote-concat "a=?+A?B?C?" '("=?+US-ASCII?Q?z?=")) ;"a=?+++++A?B?C?==?+US-ASCII?Q?z?=" -(ew-quote-concat "a=?+A?B?C?=?+D?E?F?" '("=?+US-ASCII?Q?z?=")) ;"a=?+++A?B?C?=?+D?E?F?=?+US-ASCII?Q?z?=" -(ew-quote-concat "a=?+A?B?C?=?+D?E?F?=?+G?H?I?" '("=?+US-ASCII?Q?z?=")) ;"a=?+++A?B?C?=?+D?E?F?=?+++++G?H?I?==?+US-ASCII?Q?z?=" -(ew-quote-concat '("a=?++A?B?C?==?+++A?B?C?=c")) ;"a=?A?B?C?=?+A?B?C?=c" -) diff --git a/ew-scan-m.el b/ew-scan-m.el deleted file mode 100644 index d8dbf85..0000000 --- a/ew-scan-m.el +++ /dev/null @@ -1,174 +0,0 @@ -(require 'lex) -(require 'automata) -(require 'ew-data) -(require 'ew-parse) -(provide 'ew-scan-m) - -(defmacro ew-scan-mime (scan col str) - `(let ((res (ew-make-anchor col str)) - (mode 'token) - (p 0) - (q (length str)) - r - type - nest) - (while (< p q) - (setq r p) - (cond - ((eq mode 'token) - (setq - type - (,scan - str p q - ([" \t"] 'ew:wsp) - (?< 'ew:lt) - (?> 'ew:gt) - (?@ 'ew:at) - (?, 'ew:comma) - (?\; 'ew:semicolon) - (?: 'ew:colon) - (?/ 'ew:slash) - (?? 'ew:question) - (?= 'ew:equal) - ((?\r ?\n [" \t"]) 'ew:fold) - ((?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - ((+ [(?a ?z) (?A ?Z) (?0 ?9) "!#$%&'*+-.^_`{|}~" non-ascii]) - 'ew:token) - (?\" (setq mode 'quoted-string) 'ew:qs-begin) - (?\[ (setq mode 'domain-literal) 'ew:dl-begin) - (?\( (setq mode 'comment - nest 1) - 'ew:cm-begin) - (() (setq p q) 'ew:*err*))) - (ew-add-frag res r p type)) - ((eq mode 'quoted-string) - (setq - type - (,scan - str p q - (?\" (setq mode 'token) 'ew:qs-end) - ((?\\ ?\r ?\n [" \t"]) 'ew:qs-qfold) - ((?\\ ?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - (((* [^ "\"\\ \t\r"]) - (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:qs-texts) - (setq r (- p 3))) - 'ew:qs-fold) - (((* [^ "\"\\ \t\r"]) - (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:qs-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - ((?\\ (any)) - 'ew:qs-qpair) - ([" \t"] - 'ew:qs-wsp) - (((* [^ "\"\\ \t\r"]) - (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:qs-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)) - ((eq mode 'domain-literal) - (setq - type - (,scan - str p q - (?\] (setq mode 'token) 'ew:dl-end) - ((?\\ ?\r ?\n [" \t"]) - 'ew:dl-qfold) - ((?\\ ?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - (((* [^ "[]\\ \t\r"]) - (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:dl-texts) - (setq r (- p 3))) - 'ew:dl-fold) - (((* [^ "[]\\ \t\r"]) - (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:dl-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - ((?\\ (any)) - 'ew:dl-qpair) - ([" \t"] - 'ew:dl-wsp) - (((* [^ "[]\\ \t\r"]) - (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:dl-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)) - ((eq mode 'comment) - (setq - type - (,scan - str p q - (?\( (setq nest (1+ nest)) 'ew:cm-nested-begin) - (?\) (setq nest (1- nest)) - (if (zerop nest) - (progn (setq mode 'token) 'ew:cm-end) - 'ew:cm-nested-end)) - ((?\\ ?\r ?\n [" \t"]) - 'ew:cm-qfold) - ((?\\ ?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - (((* [^ "()\\ \t\r"]) - (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:cm-texts) - (setq r (- p 3))) - 'ew:cm-fold) - (((* [^ "()\\ \t\r"]) - (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:cm-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - ((?\\ (any)) - 'ew:cm-qpair) - ([" \t"] - 'ew:cm-wsp) - (((* [^ "()\\ \t\r"]) - (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:cm-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)))) - (ew-terminate res) - res)) - -(defun ew-scan-unibyte-mime (col str) - (ew-scan-mime lex-scan-unibyte col str)) -(defun ew-scan-multibyte-mime (col str) - (ew-scan-mime lex-scan-multibyte col str)) - -'( -(npp - (mapcar - (lambda (frag) (cons (get frag 'type) (symbol-name frag))) - (ew-frag-list - (ew-scan-unibyte-mime - 0 " text/vnd.latex-z; charset=ISO-2022-JP")))) -) diff --git a/ew-scan-s.el b/ew-scan-s.el deleted file mode 100644 index 3c07044..0000000 --- a/ew-scan-s.el +++ /dev/null @@ -1,179 +0,0 @@ -(require 'lex) -(require 'automata) -(require 'ew-data) -(require 'ew-parse) -(provide 'ew-scan-s) - -(defmacro ew-scan-std11 (scan col str) - `(let ((res (ew-make-anchor col str)) - (mode 'token) - (p 0) - (q (length str)) - r - type - nest) - (while (< p q) - (setq r p) - (cond - ((eq mode 'token) - (setq - type - (,scan - str p q - ([" \t"] 'ew:wsp) - (?< 'ew:lt) - (?> 'ew:gt) - (?@ 'ew:at) - (?, 'ew:comma) - (?\; 'ew:semicolon) - (?: 'ew:colon) - (?. 'ew:dot) - ((?\r ?\n [" \t"]) 'ew:fold) - ((?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - ((+ [(?a ?z) (?A ?Z) (?0 ?9) "!#$%&'*+-/=?^_`{|}~" non-ascii]) - 'ew:atom) - (?\" (setq mode 'quoted-string) 'ew:qs-begin) - (?\[ (setq mode 'domain-literal) 'ew:dl-begin) - (?\( (setq mode 'comment - nest 1) - 'ew:cm-begin) - (() (setq p q) 'ew:*err*))) - (ew-add-frag res r p type)) - ((eq mode 'quoted-string) - (setq - type - (,scan - str p q - (?\" (setq mode 'token) 'ew:qs-end) - ((?\\ ?\r ?\n [" \t"]) 'ew:qs-qfold) - ((?\\ ?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - (((* [^ "\"\\ \t\r"]) - (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:qs-texts) - (setq r (- p 3))) - 'ew:qs-fold) - (((* [^ "\"\\ \t\r"]) - (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:qs-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - ((?\\ (any)) - 'ew:qs-qpair) - ([" \t"] - 'ew:qs-wsp) - (((* [^ "\"\\ \t\r"]) - (* (+ ?\r) [^ "\"\\ \t\r\n"] (* [^ "\"\\ \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:qs-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)) - ((eq mode 'domain-literal) - (setq - type - (,scan - str p q - (?\] (setq mode 'token) 'ew:dl-end) - ((?\\ ?\r ?\n [" \t"]) - 'ew:dl-qfold) - ((?\\ ?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - (((* [^ "[]\\ \t\r"]) - (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:dl-texts) - (setq r (- p 3))) - 'ew:dl-fold) - (((* [^ "[]\\ \t\r"]) - (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:dl-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - ((?\\ (any)) - 'ew:dl-qpair) - ([" \t"] - 'ew:dl-wsp) - (((* [^ "[]\\ \t\r"]) - (* (+ ?\r) [^ "[]\\ \t\r\n"] (* [^ "[]\\ \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:dl-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)) - ((eq mode 'comment) - (setq - type - (,scan - str p q - (?\( (setq nest (1+ nest)) 'ew:cm-nested-begin) - (?\) (setq nest (1- nest)) - (if (zerop nest) - (progn (setq mode 'token) 'ew:cm-end) - 'ew:cm-nested-end)) - ((?\\ ?\r ?\n [" \t"]) - 'ew:cm-qfold) - ((?\\ ?\r ?\n [^ " \t"]) - (setq p q) 'ew:*err*) - (((* [^ "()\\ \t\r"]) - (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:cm-texts) - (setq r (- p 3))) - 'ew:cm-fold) - (((* [^ "()\\ \t\r"]) - (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:cm-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - ((?\\ (any)) - 'ew:cm-qpair) - ([" \t"] - 'ew:cm-wsp) - (((* [^ "()\\ \t\r"]) - (* (+ ?\r) [^ "()\\ \t\r\n"] (* [^ "()\\ \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:cm-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)))) - (ew-terminate res) - res)) - -(defun ew-scan-unibyte-std11 (col str) - (ew-scan-std11 lex-scan-unibyte col str)) -(defun ew-scan-multibyte-std11 (col str) - (ew-scan-std11 lex-scan-multibyte col str)) - -'( -(npp - (mapcar - 'symbol-plist - (ew-frag-list - (ew-scan-unibyte-std11 - 0 " Tanaka Akira (Tanaka Akira)")))) - -(npp - (mapcar - (lambda (frag) (cons (get frag 'type) (symbol-name frag))) - (ew-frag-list - (ew-scan-unibyte-std11 - 0 " Tanaka Akira (Tanaka Akira)")))) -) diff --git a/ew-scan-u.el b/ew-scan-u.el deleted file mode 100644 index 92c240f..0000000 --- a/ew-scan-u.el +++ /dev/null @@ -1,66 +0,0 @@ -(require 'lex) -(require 'automata) -(require 'ew-data) -(require 'ew-parse) -(provide 'ew-scan-u) - -(defmacro ew-scan-unstructured (scan col str) - `(let ((res (ew-make-anchor col str)) - (p 0) - (q (length str)) - r - type) - (while (< p q) - (setq r p) - (setq - type - (,scan - str p q - ([" \t"] 'ew:us-wsp) - (((* [^ " \t\r"]) - (* (+ ?\r) [^ " \t\r\n"] (* [^ " \t\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:us-texts) - (setq r (- p 3))) - 'ew:us-fold) - (((* [^ " \t\r"]) - (* (+ ?\r) [^ " \t\r\n"] (* [^ " \t\r"])) - (* ?\r) - (?\r ?\n [^ " \t"])) - (when (< r (- p 3)) - (ew-add-frag res r (- p 3) 'ew:us-texts) - (setq r (- p 3))) - (setq p q) 'ew:*err*) - (((* [^ " \t\r"]) - (* (+ ?\r) [^ " \t\r\n"] (* [^ " \t\r"])) - (* ?\r)) - (if (< r p) - 'ew:us-texts - (progn (setq p q) 'ew:*err*))))) - (ew-add-frag res r p type)) - (ew-terminate res) - res)) - -(defun ew-scan-unibyte-unstructured (col str) - (ew-scan-unstructured lex-scan-unibyte col str)) -(defun ew-scan-multibyte-unstructured (col str) - (ew-scan-unstructured lex-scan-multibyte col str)) - -'( -(npp - (mapcar - (lambda (frag) (cons (get frag 'type) (symbol-name frag))) - (ew-frag-list - (ew-scan-unibyte-unstructured - 0 " Hello! =?US-ASCII?Q?Hello!?=")))) - -(npp - (mapcar - (lambda (frag) (cons (get frag 'type) (symbol-name frag))) - (ew-frag-list - (ew-scan-unibyte-unstructured - 0 " \r\na")))) - -) diff --git a/ew-unit.el b/ew-unit.el deleted file mode 100644 index ab4af48..0000000 --- a/ew-unit.el +++ /dev/null @@ -1,81 +0,0 @@ -(require 'closure) -(require 'ew-line) -(require 'ew-quote) -(require 'mel) - -(provide 'ew-unit) - -(defconst ew-anchored-encoded-word-regexp - (eval-when-compile - (require 'ew-var) - (concat "\\`" ew-encoded-word-regexp "\\'"))) - -(defconst ew-b-regexp - (eval-when-compile - (concat "\\`\\(" - "[A-Za-z0-9+/]" - "[A-Za-z0-9+/]" - "[A-Za-z0-9+/]" - "[A-Za-z0-9+/]" - "\\)*" - "[A-Za-z0-9+/]" - "[A-Za-z0-9+/]" - "\\(==\\|" - "[A-Za-z0-9+/]" - "[A-Za-z0-9+/=]" - "\\)\\'"))) - -(defconst ew-q-regexp "\\`\\([^=?]\\|=[0-9A-Fa-f][0-9A-Fa-f]\\)*\\'") - -(defconst ew-byte-decoder-alist - '(("B" . ew-b-decode) - ("Q" . ew-q-decode))) - -(defconst ew-byte-checker-alist - '(("B" . ew-b-check) - ("Q" . ew-q-check))) - -(defun ew-b-check (encoding encoded-text) (string-match ew-b-regexp encoded-text)) -(defun ew-q-check (encoding encoded-text) (string-match ew-q-regexp encoded-text)) - -(defsubst ew-eword-p (str) - (let ((len (length str))) - (and - (<= 3 len) - (eq (aref str 0) ?=) - (eq (aref str 1) ??) - (eq (aref str (- len 2)) ??) - (eq (aref str (1- len)) ?=)))) - -(defun ew-decode-eword (str) - (if (string-match ew-anchored-encoded-word-regexp str) - (let ((charset (match-string 1 str)) - (encoding (match-string 2 str)) - (encoded-text (match-string 3 str)) - bdec cdec - bcheck - tmp) - (if (and (setq bdec (ew-byte-decoder encoding)) - (setq cdec (ew-char-decoder charset))) - (if (or (null (setq bcheck (ew-byte-checker encoding))) - (funcall bcheck encoding encoded-text)) - (ew-quote (closure-call cdec (funcall bdec encoded-text))) - (ew-quote str)) - (ew-quote-eword charset encoding encoded-text))) - (ew-quote str))) - -(defun ew-byte-decoder (encoding) - (cdr (assoc (upcase encoding) ew-byte-decoder-alist))) - -(defun ew-byte-checker (encoding) - (cdr (assoc (upcase encoding) ew-byte-checker-alist))) - -(defalias 'ew-b-decode 'base64-decode-string) -(defalias 'ew-q-decode 'q-encoding-decode-string) - -(defun ew-char-decoder (charset) - (let ((sym (intern (downcase charset)))) - (when (mime-charset-to-coding-system sym 'LF) - (closure-make - (lambda (str) (decode-mime-charset-string str sym 'LF)) - sym)))) diff --git a/ew-util.el b/ew-util.el deleted file mode 100644 index fb1b373..0000000 --- a/ew-util.el +++ /dev/null @@ -1,19 +0,0 @@ -(provide 'ew-util) - -(defmacro ew-cons* (seed &rest rest) - (setq rest (nreverse (cons seed rest)) - seed (car rest) - rest (cdr rest)) - (while rest - (setq seed `(cons ,(car rest) ,seed) - rest (cdr rest))) - seed) - -(defmacro ew-rcons* (seed &rest rest) - (while rest - (setq seed `(cons ,(car rest) ,seed) - rest (cdr rest))) - seed) - -(defmacro ew-rappend (a b) - `(append (reverse ,b) ,a)) diff --git a/ew-var.el b/ew-var.el deleted file mode 100644 index 9ac619b..0000000 --- a/ew-var.el +++ /dev/null @@ -1,83 +0,0 @@ -(provide 'ew-var) - -;;; user customizable variables. - -(defvar ew-decode-sticked-encoded-word nil) -(defvar ew-decode-quoted-encoded-word nil) -(defvar ew-ignore-75bytes-limit nil) -(defvar ew-ignore-76bytes-limit nil) -(defvar ew-permit-sticked-comment nil) -(defvar ew-permit-sticked-special nil) - -(defvar ew-remove-bare-crlf nil) -(defvar ew-default-mime-charset 'x-ctext) - -;;; -(defvar ew-decode-field-syntax-alist -'((from ew-scan-unibyte-std11 . ew:tag-mailbox+) - (sender ew-scan-unibyte-std11 . ew:tag-mailbox) - (to ew-scan-unibyte-std11 . ew:tag-address+) - (resent-to ew-scan-unibyte-std11 . ew:tag-address+) - (cc ew-scan-unibyte-std11 . ew:tag-address+) - (resent-cc ew-scan-unibyte-std11 . ew:tag-address+) - (bcc ew-scan-unibyte-std11 . ew:tag-address*) - (resent-bcc ew-scan-unibyte-std11 . ew:tag-address*) - (message-id ew-scan-unibyte-std11) - (resent-message-id ew-scan-unibyte-std11) - (in-reply-to ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*) - (references ew-scan-unibyte-std11 . ew:tag-phrase-msg-id*) - (keywords ew-scan-unibyte-std11 . ew:tag-phrase*) - (subject ew-scan-unibyte-unstructured) - (comments ew-scan-unibyte-unstructured) - (encrypted ew-scan-unibyte-std11) - (date ew-scan-unibyte-std11) - (reply-to ew-scan-unibyte-std11 . ew:tag-address+) - (received ew-scan-unibyte-std11) - (resent-reply-to ew-scan-unibyte-std11 . ew:tag-address+) - (resent-from ew-scan-unibyte-std11 . ew:tag-mailbox+) - (resent-sender ew-scan-unibyte-std11 . ew:tag-mailbox) - (resent-date ew-scan-unibyte-std11) - (return-path ew-scan-unibyte-std11) - (mime-version ew-scan-unibyte-std11) - (content-type ew-scan-unibyte-mime) - (content-transfer-encoding ew-scan-unibyte-mime) - (content-id ew-scan-unibyte-std11) - (content-description ew-scan-unibyte-unstructured) - (content-disposition ew-scan-unibyte-mime) - (approved ew-scan-unibyte-std11 . ew:tag-address+) -)) - -(defvar ew-decode-field-default-syntax '(ew-scan-unibyte-unstructured)) - -(defvar ew-parse-error-sit-for-seconds 0) - -;;; constants. - -(eval-and-compile - (defconst ew-token-regexp "[-!#-'*+0-9A-Z^-~]+") - (defconst ew-encoded-text-regexp "[!->@-~]+") -) -(defconst ew-encoded-word-regexp - (eval-when-compile - (concat (regexp-quote "=?") - "\\(" ew-token-regexp "\\)" - (regexp-quote "?") - "\\(" ew-token-regexp "\\)" - (regexp-quote "?") - "\\(" ew-encoded-text-regexp "\\)" - (regexp-quote "?=")))) - -;;; utilities for variables. - -(defun ew-dynamic-options () - (cons - ew-default-mime-charset - (logior - (if ew-decode-sticked-encoded-word 1 0) - (if ew-decode-quoted-encoded-word 2 0) - (if ew-ignore-75bytes-limit 4 0) - (if ew-ignore-76bytes-limit 8 0) - (if ew-permit-sticked-comment 16 0) - (if ew-permit-sticked-special 32 0) - (if ew-remove-bare-crlf 64 0) - ))) diff --git a/eword-decode.el b/eword-decode.el deleted file mode 100644 index 49e2761..0000000 --- a/eword-decode.el +++ /dev/null @@ -1,813 +0,0 @@ -;;; eword-decode.el --- RFC 2047 based encoded-word decoder for GNU Emacs - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: ENAMI Tsugutomo -;; MORIOKA Tomohiko -;; Tanaka Akira -;; Maintainer: Tanaka Akira -;; Created: 1995/10/03 -;; Original: 1992/07/20 ENAMI Tsugutomo's `mime.el'. -;; Renamed: 1993/06/03 to tiny-mime.el -;; Renamed: 1995/10/03 from tiny-mime.el (split off encoder) -;; Renamed: 1997/02/22 from tm-ew-d.el -;; Keywords: encoded-word, MIME, multilingual, header, mail, news - -;; This file is part of FLAM (Faithful Library About MIME). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'std11) -(require 'mel) -(require 'mime-def) - -(require 'ew-dec) - -(defgroup eword-decode nil - "Encoded-word decoding" - :group 'mime) - -;;; TEST - -(defvar rotate-memo nil) -(defmacro rotate-memo (var val) - `(when rotate-memo - (unless (boundp ',var) (setq ,var ())) - (setq ,var (cons ,val ,var)) - (let ((tmp (last ,var (- (length ,var) 100)))) - (when tmp (setcdr tmp nil))) - ,var)) - -;;; @ variables -;;; - -(defcustom eword-decode-sticked-encoded-word nil - "*If non-nil, decode encoded-words sticked on atoms, -other encoded-words, etc. -however this behaviour violates RFC2047." - :group 'eword-decode - :type 'boolean) - -(defcustom eword-decode-quoted-encoded-word nil - "*If non-nil, decode encoded-words in quoted-string -however this behaviour violates RFC2047." - :group 'eword-decode - :type 'boolean) - - -;;; @ MIME encoded-word definition -;;; - -(defconst eword-encoded-word-prefix-regexp - (concat (regexp-quote "=?") - "\\(" mime-charset-regexp "\\)" - (regexp-quote "?") - "\\(B\\|Q\\)" - (regexp-quote "?"))) -(defconst eword-encoded-word-suffix-regexp - (regexp-quote "?=")) - -(defconst eword-encoded-text-in-unstructured-regexp "[!->@-~]+") -(defconst eword-encoded-word-in-unstructured-regexp - (concat eword-encoded-word-prefix-regexp - "\\(" eword-encoded-text-in-unstructured-regexp "\\)" - eword-encoded-word-suffix-regexp)) -(defconst eword-after-encoded-word-in-unstructured-regexp "\\([ \t]\\|$\\)") - -(defconst eword-encoded-text-in-phrase-regexp "[-A-Za-z0-9!*+/=_]+") -(defconst eword-encoded-word-in-phrase-regexp - (concat eword-encoded-word-prefix-regexp - "\\(" eword-encoded-text-in-phrase-regexp "\\)" - eword-encoded-word-suffix-regexp)) -(defconst eword-after-encoded-word-in-phrase-regexp "\\([ \t]\\|$\\)") - -(defconst eword-encoded-text-in-comment-regexp "[]!-'*->@-[^-~]+") -(defconst eword-encoded-word-in-comment-regexp - (concat eword-encoded-word-prefix-regexp - "\\(" eword-encoded-text-in-comment-regexp "\\)" - eword-encoded-word-suffix-regexp)) -(defconst eword-after-encoded-word-in-comment-regexp "\\([ \t()\\\\]\\|$\\)") - -(defconst eword-encoded-text-in-quoted-string-regexp "[]!#->@-[^-~]+") -(defconst eword-encoded-word-in-quoted-string-regexp - (concat eword-encoded-word-prefix-regexp - "\\(" eword-encoded-text-in-quoted-string-regexp "\\)" - eword-encoded-word-suffix-regexp)) -(defconst eword-after-encoded-word-in-quoted-string-regexp "\\([ \t\"\\\\]\\|$\\)") - -; obsolete -(defconst eword-encoded-text-regexp eword-encoded-text-in-unstructured-regexp) -(defconst eword-encoded-word-regexp eword-encoded-word-in-unstructured-regexp) - - -;;; @@ Base64 -;;; - -(defconst base64-token-regexp "[A-Za-z0-9+/]") -(defconst base64-token-padding-regexp "[A-Za-z0-9+/=]") - -(defconst eword-B-encoded-text-regexp - (concat "\\(\\(" - base64-token-regexp - base64-token-regexp - base64-token-regexp - base64-token-regexp - "\\)*" - base64-token-regexp - base64-token-regexp - base64-token-padding-regexp - base64-token-padding-regexp - "\\)")) - -;; (defconst eword-B-encoding-and-encoded-text-regexp -;; (concat "\\(B\\)\\?" eword-B-encoded-text-regexp)) - - -;;; @@ Quoted-Printable -;;; - -(defconst eword-Q-encoded-text-regexp - (concat "\\([^=?]\\|" quoted-printable-octet-regexp "\\)+")) -;; (defconst eword-Q-encoding-and-encoded-text-regexp -;; (concat "\\(Q\\)\\?" eword-Q-encoded-text-regexp)) - - -;;; @ internal utilities -;;; - -(defun eword-decode-first-encoded-words (string - eword-regexp - after-regexp - &optional must-unfold) - "Decode MIME encoded-words in beginning of STRING. - -EWORD-REGEXP is the regexp that matches a encoded-word. -Usual value is -eword-encoded-word-in-unstructured-regexp, -eword-encoded-text-in-phrase-regexp, -eword-encoded-word-in-comment-regexp or -eword-encoded-word-in-quoted-string-regexp. - -AFTER-REGEXP is the regexp that matches a after encoded-word. -Usual value is -eword-after-encoded-word-in-unstructured-regexp, -eword-after-encoded-text-in-phrase-regexp, -eword-after-encoded-word-in-comment-regexp or -eword-after-encoded-word-in-quoted-string-regexp. - -If beginning of STRING matches EWORD-REGEXP with AFTER-REGEXP, -returns a cons cell of decoded string(sequence of characters) and -the rest(sequence of octets). - -If beginning of STRING does not matches EWORD-REGEXP and AFTER-REGEXP, -returns nil. - -If an encoded-word is broken or your emacs implementation can not -decode the charset included in it, it is returned in decoded part -as encoded-word form. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-words (generated by bad manner MUA -such as a version of Net$cape)." - (if eword-decode-sticked-encoded-word (setq after-regexp "")) - (let* ((between-ewords-regexp - (if eword-decode-sticked-encoded-word - "\\(\n?[ \t]\\)*" - "\\(\n?[ \t]\\)+")) - (between-ewords-eword-after-regexp - (concat "\\`\\(" between-ewords-regexp "\\)" - "\\(" eword-regexp "\\)" - after-regexp)) - (eword-after-regexp - (concat "\\`\\(" eword-regexp "\\)" after-regexp)) - (src string) ; sequence of octets. - (dst "")) ; sequence of characters. - (if (string-match eword-after-regexp src) - (let* (p - (q (match-end 1)) - (ew (substring src 0 q)) - (dw (eword-decode-encoded-word ew must-unfold))) - (setq dst (concat dst dw) - src (substring src q)) - (if (not (string= ew dw)) - (progn - (while - (and - (string-match between-ewords-eword-after-regexp src) - (progn - (setq p (match-end 1) - q (match-end 3) - ew (substring src p q) - dw (eword-decode-encoded-word ew must-unfold)) - (if (string= ew dw) - (progn - (setq dst (concat dst (substring src 0 q)) - src (substring src q)) - nil) - t))) - (setq dst (concat dst dw) - src (substring src q))))) - (cons dst src)) - nil))) - -(defun eword-decode-entire-string (string - eword-regexp - after-regexp - safe-regexp - escape ; ?\\ or nil. - delimiters ; list of chars. - chars-must-be-quote - must-unfold - code-conversion) - (if (and code-conversion - (not (mime-charset-to-coding-system code-conversion))) - (setq code-conversion default-mime-charset)) - (let ((equal-safe-regexp (concat "\\`=?" safe-regexp)) - (dst "") - (buf "") - (src string) - (ew-enable t)) - (while (< 0 (length src)) - (let ((ch (aref src 0)) - (decoded (and - ew-enable - (eword-decode-first-encoded-words src - eword-regexp after-regexp must-unfold)))) - (if (and (not (string= buf "")) - (or decoded (memq ch delimiters))) - (setq dst (concat dst - (std11-wrap-as-quoted-pairs - (decode-mime-charset-string buf code-conversion) - chars-must-be-quote)) - buf "")) - (cond - (decoded - (setq dst (concat dst - (std11-wrap-as-quoted-pairs - (car decoded) - chars-must-be-quote)) - src (cdr decoded))) - ((memq ch delimiters) - (setq dst (concat dst (list ch)) - src (substring src 1) - ew-enable t)) - ((eq ch escape) - (setq buf (concat buf (list (aref src 1))) - src (substring src 2) - ew-enable t)) - ((string-match "\\`[ \t\n]+" src) - (setq buf (concat buf (substring src 0 (match-end 0))) - src (substring src (match-end 0)) - ew-enable t)) - ((and (string-match equal-safe-regexp src) - (< 0 (match-end 0))) - (setq buf (concat buf (substring src 0 (match-end 0))) - src (substring src (match-end 0)) - ew-enable eword-decode-sticked-encoded-word)) - (t (error "something wrong"))))) - (if (not (string= buf "")) - (setq dst (concat dst - (std11-wrap-as-quoted-pairs - (decode-mime-charset-string buf code-conversion) - chars-must-be-quote)))) - dst)) - - -;;; @ for string -;;; - -(defun eword-decode-unstructured (string code-conversion &optional must-unfold) - (eword-decode-entire-string - string - eword-encoded-word-in-unstructured-regexp - eword-after-encoded-word-in-unstructured-regexp - "[^ \t\n=]*" - nil - nil - nil - must-unfold - code-conversion)) - -(defun eword-decode-comment (string code-conversion &optional must-unfold) - (eword-decode-entire-string - string - eword-encoded-word-in-comment-regexp - eword-after-encoded-word-in-comment-regexp - "[^ \t\n()\\\\=]*" - ?\\ - '(?\( ?\)) - '(?\( ?\) ?\\ ?\r ?\n) - must-unfold - code-conversion)) - -(defun eword-decode-quoted-string (string code-conversion &optional must-unfold) - (eword-decode-entire-string - string - eword-encoded-word-in-quoted-string-regexp - eword-after-encoded-word-in-quoted-string-regexp - "[^ \t\n\"\\\\=]*" - ?\\ - '(?\") - '(?\" ?\\ ?\r ?\n) - must-unfold - code-conversion)) - -(defun eword-decode-string (string &optional must-unfold code-conversion) - "Decode MIME encoded-words in STRING. - -STRING is unfolded before decoding. - -If an encoded-word is broken or your emacs implementation can not -decode the charset included in it, it is not decoded. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-words (generated by bad manner MUA -such as a version of Net$cape). - -If CODE-CONVERSION is nil, it decodes only encoded-words. If it is -mime-charset, it decodes non-ASCII bit patterns as the mime-charset. -Otherwise it decodes non-ASCII bit patterns as the -default-mime-charset." - (eword-decode-unstructured - (std11-unfold-string string) - code-conversion - must-unfold)) - - -;;; @ for region -;;; - -(defun eword-decode-region (start end &optional unfolding must-unfold - code-conversion) - "Decode MIME encoded-words in region between START and END. - -If UNFOLDING is not nil, it unfolds before decoding. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-words (generated by bad manner MUA -such as a version of Net$cape). - -If CODE-CONVERSION is nil, it decodes only encoded-words. If it is -mime-charset, it decodes non-ASCII bit patterns as the mime-charset. -Otherwise it decodes non-ASCII bit patterns as the -default-mime-charset." - (interactive "*r") - (rotate-memo args-eword-decode-region - (list start end (buffer-substring start end) unfolding must-unfold code-conversion)) - (save-excursion - (save-restriction - (narrow-to-region start end) - (if unfolding - (eword-decode-unfold) - ) - (let ((str (eword-decode-unstructured - (buffer-substring (point-min) (point-max)) - code-conversion - must-unfold))) - (delete-region (point-min) (point-max)) - (insert str))))) - - -;;; @ for message header -;;; - -(defcustom eword-decode-ignored-field-list - '(Newsgroups Path Lines Nntp-Posting-Host Received Message-Id Date) - "*List of field-names to be ignored when decoding. -Each field name must be symbol." - :group 'eword-decode - :type '(repeat symbol)) - -(defcustom eword-decode-structured-field-list - '(Reply-To Resent-Reply-To From Resent-From Sender Resent-Sender - To Resent-To Cc Resent-Cc Bcc Resent-Bcc Dcc - Mime-Version Content-Type Content-Transfer-Encoding - Content-Disposition) - "*List of field-names to decode as structured field. -Each field name must be symbol." - :group 'eword-decode - :type '(repeat symbol)) - -(defun eword-decode-header (&optional code-conversion separator) - "Decode MIME encoded-words in header fields. -If CODE-CONVERSION is nil, it decodes only encoded-words. If it is -mime-charset, it decodes non-ASCII bit patterns as the mime-charset. -Otherwise it decodes non-ASCII bit patterns as the -default-mime-charset. -If SEPARATOR is not nil, it is used as header separator." - (interactive "*") - (rotate-memo args-eword-decode-header (list code-conversion)) - (unless code-conversion - (message "eword-decode-header is called with no code-conversion") - (sit-for 2)) - (if (and code-conversion - (not (mime-charset-to-coding-system code-conversion))) - (setq code-conversion default-mime-charset)) - (save-excursion - (save-restriction - (std11-narrow-to-header separator) - (rotate-memo args-h-eword-decode-header (buffer-substring (point-min) (point-max))) - (if code-conversion - (let (beg p end field-name field-body decoded) - (goto-char (point-min)) - (while (re-search-forward std11-field-head-regexp nil t) - (setq beg (match-beginning 0) - p (match-end 0) - field-name (buffer-substring beg (1- p)) - end (std11-field-end) - field-body (buffer-substring p end) - decoded (ew-decode-field - field-name - (ew-lf-crlf-to-crlf field-body))) - (unless (equal field-body decoded) - (setq decoded (ew-crlf-refold - decoded - (1+ (string-width field-name)) - fill-column))) - (delete-region p end) - (insert (ew-crlf-to-lf decoded)))) - (eword-decode-region (point-min) (point-max) t nil nil) - )))) - -(defun eword-decode-unfold () - (goto-char (point-min)) - (let (field beg end) - (while (re-search-forward std11-field-head-regexp nil t) - (setq beg (match-beginning 0) - end (std11-field-end)) - (setq field (buffer-substring beg end)) - (if (string-match eword-encoded-word-regexp field) - (save-restriction - (narrow-to-region (goto-char beg) end) - (while (re-search-forward "\n\\([ \t]\\)" nil t) - (replace-match (match-string 1)) - ) - (goto-char (point-max)) - )) - ))) - - -;;; @ encoded-word decoder -;;; - -(defvar eword-decode-encoded-word-error-handler - 'eword-decode-encoded-word-default-error-handler) - -(defvar eword-warning-face nil - "Face used for invalid encoded-word.") - -(defun eword-decode-encoded-word-default-error-handler (word signal) - (and (add-text-properties 0 (length word) - (and eword-warning-face - (list 'face eword-warning-face)) - word) - word)) - -(defun eword-decode-encoded-word (word &optional must-unfold) - "Decode WORD if it is an encoded-word. - -If your emacs implementation can not decode the charset of WORD, it -returns WORD. Similarly the encoded-word is broken, it returns WORD. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-word (generated by bad manner MUA such -as a version of Net$cape)." - (or (if (string-match eword-encoded-word-regexp word) - (let ((charset - (substring word (match-beginning 1) (match-end 1)) - ) - (encoding - (upcase - (substring word (match-beginning 2) (match-end 2)) - )) - (text - (substring word (match-beginning 3) (match-end 3)) - )) - (condition-case err - (eword-decode-encoded-text charset encoding text must-unfold) - (error - (funcall eword-decode-encoded-word-error-handler word err) - )) - )) - word)) - - -;;; @ encoded-text decoder -;;; - -(defun eword-decode-encoded-text (charset encoding string - &optional must-unfold) - "Decode STRING as an encoded-text. - -If your emacs implementation can not decode CHARSET, it returns nil. - -If ENCODING is not \"B\" or \"Q\", it occurs error. -So you should write error-handling code if you don't want break by errors. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-text (generated by bad manner MUA such -as a version of Net$cape)." - (let ((cs (mime-charset-to-coding-system charset))) - (if cs - (let ((dest - (cond - ((string-equal "B" encoding) - (if (and (string-match eword-B-encoded-text-regexp string) - (string-equal string (match-string 0 string))) - (base64-decode-string string) - (error "Invalid encoded-text %s" string))) - ((string-equal "Q" encoding) - (if (and (string-match eword-Q-encoded-text-regexp string) - (string-equal string (match-string 0 string))) - (q-encoding-decode-string string) - (error "Invalid encoded-text %s" string))) - (t - (error "Invalid encoding %s" encoding) - ))) - ) - (when dest - (setq dest (decode-mime-charset-string dest charset)) - (if must-unfold - (mapconcat (function - (lambda (chr) - (cond ((eq chr ?\n) "") - ((eq chr ?\t) " ") - (t (char-to-string chr))) - )) - (std11-unfold-string dest) - "") - dest)))))) - - -;;; @ lexical analyze -;;; - -(defvar eword-lexical-analyze-cache nil) -(defvar eword-lexical-analyze-cache-max 299 - "*Max position of eword-lexical-analyze-cache. -It is max size of eword-lexical-analyze-cache - 1.") - -(defcustom eword-lexical-analyzers - '(eword-analyze-quoted-string - eword-analyze-domain-literal - eword-analyze-comment - eword-analyze-spaces - eword-analyze-special - eword-analyze-encoded-word - eword-analyze-atom) - "*List of functions to return result of lexical analyze. -Each function must have two arguments: STRING and MUST-UNFOLD. -STRING is the target string to be analyzed. -If MUST-UNFOLD is not nil, each function must unfold and eliminate -bare-CR and bare-LF from the result even if they are included in -content of the encoded-word. -Each function must return nil if it can not analyze STRING as its -format. - -Previous function is preferred to next function. If a function -returns nil, next function is used. Otherwise the return value will -be the result." - :group 'eword-decode - :type '(repeat function)) - -(defun eword-analyze-quoted-string (string &optional must-unfold) - (let ((p (std11-check-enclosure string ?\" ?\"))) - (if p - (cons (cons 'quoted-string - (if eword-decode-quoted-encoded-word - (eword-decode-quoted-string - (substring string 0 p) - default-mime-charset) - (std11-wrap-as-quoted-string - (decode-mime-charset-string - (std11-strip-quoted-pair (substring string 1 (1- p))) - default-mime-charset)))) - (substring string p))) - )) - -(defun eword-analyze-domain-literal (string &optional must-unfold) - (std11-analyze-domain-literal string)) - -(defun eword-analyze-comment (string &optional must-unfold) - (let ((len (length string))) - (if (and (< 0 len) (eq (aref string 0) ?\()) - (let ((p 0)) - (while (and p (< p len) (eq (aref string p) ?\()) - (setq p (std11-check-enclosure string ?\( ?\) t p))) - (setq p (or p len)) - (cons (cons 'comment - (eword-decode-comment - (std11-unfold-string (substring string 0 p)) - default-mime-charset)) - (substring string p))) - nil))) - -(defun eword-analyze-spaces (string &optional must-unfold) - (std11-analyze-spaces string)) - -(defun eword-analyze-special (string &optional must-unfold) - (std11-analyze-special string)) - -(defun eword-analyze-encoded-word (string &optional must-unfold) - (let ((decoded (eword-decode-first-encoded-words - string - eword-encoded-word-in-phrase-regexp - eword-after-encoded-word-in-phrase-regexp - must-unfold))) - (if decoded - (let ((s (car decoded))) - (while (or (string-match std11-atom-regexp s) - (string-match std11-spaces-regexp s)) - (setq s (substring s (match-end 0)))) - (if (= (length s) 0) - (cons (cons 'atom (car decoded)) (cdr decoded)) - (cons (cons 'quoted-string - (std11-wrap-as-quoted-string (car decoded))) - (cdr decoded))))))) - -(defun eword-analyze-atom (string &optional must-unfold) - (if (let ((enable-multibyte-characters nil)) - (string-match std11-atom-regexp string)) - (let ((end (match-end 0))) - (if (and eword-decode-sticked-encoded-word - (string-match eword-encoded-word-in-phrase-regexp - (substring string 0 end)) - (< 0 (match-beginning 0))) - (setq end (match-beginning 0))) - (cons (cons 'atom (decode-mime-charset-string - (substring string 0 end) - default-mime-charset)) - (substring string end) - )))) - -(defun eword-lexical-analyze-internal (string must-unfold) - (let ((last 'eword-analyze-spaces) - dest ret) - (while (not (string-equal string "")) - (setq ret - (let ((rest eword-lexical-analyzers) - func r) - (while (and (setq func (car rest)) - (or - (and - (not eword-decode-sticked-encoded-word) - (not (eq last 'eword-analyze-spaces)) - (eq func 'eword-analyze-encoded-word)) - (null (setq r (funcall func string must-unfold)))) - ) - (setq rest (cdr rest))) - (setq last func) - (or r `((error . ,string) . "")) - )) - (setq dest (cons (car ret) dest)) - (setq string (cdr ret)) - ) - (nreverse dest) - )) - -(defun eword-lexical-analyze (string &optional must-unfold) - "Return lexical analyzed list corresponding STRING. -It is like std11-lexical-analyze, but it decodes non us-ascii -characters encoded as encoded-words or invalid \"raw\" format. -\"Raw\" non us-ascii characters are regarded as variable -`default-mime-charset'." - (let* ((str (copy-sequence string)) - (key (cons str (cons default-mime-charset must-unfold))) - ret) - (set-text-properties 0 (length str) nil str) - (if (setq ret (assoc key eword-lexical-analyze-cache)) - (cdr ret) - (setq ret (eword-lexical-analyze-internal str must-unfold)) - (setq eword-lexical-analyze-cache - (cons (cons key ret) - (last eword-lexical-analyze-cache - eword-lexical-analyze-cache-max))) - ret))) - -(defun eword-decode-token (token) - (cdr token)) - -(defun eword-decode-and-fold-structured-field - (string start-column &optional max-column must-unfold) - "Decode and fold (fill) STRING as structured field body. -It decodes non us-ascii characters in FULL-NAME encoded as -encoded-words or invalid \"raw\" string. \"Raw\" non us-ascii -characters are regarded as variable `default-mime-charset'. - -If an encoded-word is broken or your emacs implementation can not -decode the charset included in it, it is not decoded. - -If MAX-COLUMN is omitted, `fill-column' is used. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-words (generated by bad manner MUA -such as a version of Net$cape)." - (rotate-memo args-eword-decode-and-fold-structured-field - (list string start-column max-column must-unfold)) - (or max-column - (setq max-column fill-column)) - (let* ((field-name (make-string (1- start-column) ?X)) - (field-body (ew-lf-crlf-to-crlf string)) - (ew-decode-field-default-syntax '(ew-scan-unibyte-std11)) - (decoded (ew-decode-field field-name field-body))) - (unless (equal field-body decoded) - (setq decoded (ew-crlf-refold decoded start-column max-column))) - (ew-crlf-to-lf decoded))) - -(defun eword-decode-and-unfold-structured-field (string) - "Decode and unfold STRING as structured field body. -It decodes non us-ascii characters in FULL-NAME encoded as -encoded-words or invalid \"raw\" string. \"Raw\" non us-ascii -characters are regarded as variable `default-mime-charset'. - -If an encoded-word is broken or your emacs implementation can not -decode the charset included in it, it is not decoded." - (rotate-memo args-eword-decode-and-unfold-structured-field (list string)) - (let* ((ew-decode-field-default-syntax '(ew-scan-unibyte-std11)) - (decoded (ew-decode-field "" (ew-lf-crlf-to-crlf string)))) - (ew-crlf-to-lf (ew-crlf-unfold decoded)))) - -(defun eword-decode-structured-field-body (string &optional must-unfold - start-column max-column) - "Decode non us-ascii characters in STRING as structured field body. -STRING is unfolded before decoding. - -It decodes non us-ascii characters in FULL-NAME encoded as -encoded-words or invalid \"raw\" string. \"Raw\" non us-ascii -characters are regarded as variable `default-mime-charset'. - -If an encoded-word is broken or your emacs implementation can not -decode the charset included in it, it is not decoded. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-words (generated by bad manner MUA -such as a version of Net$cape)." - (rotate-memo args-eword-decode-structured-field-body - (list string must-unfold start-column max-column)) - (if start-column - ;; fold with max-column - (eword-decode-and-fold-structured-field - string start-column max-column must-unfold) - ;; Don't fold - (let* ((ew-decode-field-default-syntax '(ew-scan-unibyte-std11)) - (decoded (ew-decode-field "" (ew-lf-crlf-to-crlf string)))) - (ew-crlf-to-lf decoded)))) - -(defun eword-decode-unstructured-field-body (string &optional must-unfold) - "Decode non us-ascii characters in STRING as unstructured field body. -STRING is unfolded before decoding. - -It decodes non us-ascii characters in FULL-NAME encoded as -encoded-words or invalid \"raw\" string. \"Raw\" non us-ascii -characters are regarded as variable `default-mime-charset'. - -If an encoded-word is broken or your emacs implementation can not -decode the charset included in it, it is not decoded. - -If MUST-UNFOLD is non-nil, it unfolds and eliminates line-breaks even -if there are in decoded encoded-words (generated by bad manner MUA -such as a version of Net$cape)." - (rotate-memo args-eword-decode-unstructured-field-body - (list string must-unfold)) - (let ((decoded (ew-decode-field "" (ew-lf-crlf-to-crlf string)))) - (ew-crlf-to-lf (ew-crlf-unfold decoded)))) - -(defun eword-extract-address-components (string) - "Extract full name and canonical address from STRING. -Returns a list of the form (FULL-NAME CANONICAL-ADDRESS). -If no name can be extracted, FULL-NAME will be nil. -It decodes non us-ascii characters in FULL-NAME encoded as -encoded-words or invalid \"raw\" string. \"Raw\" non us-ascii -characters are regarded as variable `default-mime-charset'." - (rotate-memo args-eword-extract-address-components (list string)) - (let* ((structure (car (std11-parse-address - (eword-lexical-analyze - (std11-unfold-string string) 'must-unfold)))) - (phrase (std11-full-name-string structure)) - (address (std11-address-string structure)) - ) - (list phrase address) - )) - - -;;; @ end -;;; - -(provide 'eword-decode) - -;;; eword-decode.el ends here diff --git a/eword-encode.el b/eword-encode.el deleted file mode 100644 index 41bb25f..0000000 --- a/eword-encode.el +++ /dev/null @@ -1,635 +0,0 @@ -;;; eword-encode.el --- RFC 2047 based encoded-word encoder for GNU Emacs - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; Keywords: encoded-word, MIME, multilingual, header, mail, news - -;; This file is part of SEMI (Spadework for Emacs MIME Interfaces). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) -(require 'mel) -(require 'std11) -(require 'mime-def) -(require 'eword-decode) - - -;;; @ variables -;;; - -(defvar eword-field-encoding-method-alist - '(("X-Nsubject" . iso-2022-jp-2) - ("Newsgroups" . nil) - ("Message-ID" . nil) - (t . mime) - ) - "*Alist to specify field encoding method. -Its key is field-name, value is encoding method. - -If method is `mime', this field will be encoded into MIME format. - -If method is a MIME-charset, this field will be encoded as the charset -when it must be convert into network-code. - -If method is `default-mime-charset', this field will be encoded as -variable `default-mime-charset' when it must be convert into -network-code. - -If method is nil, this field will not be encoded.") - -(defvar eword-charset-encoding-alist - '((us-ascii . nil) - (iso-8859-1 . "Q") - (iso-8859-2 . "Q") - (iso-8859-3 . "Q") - (iso-8859-4 . "Q") - (iso-8859-5 . "Q") - (koi8-r . "Q") - (iso-8859-7 . "Q") - (iso-8859-8 . "Q") - (iso-8859-9 . "Q") - (iso-2022-jp . "B") - (iso-2022-kr . "B") - (gb2312 . "B") - (cn-gb . "B") - (cn-gb-2312 . "B") - (euc-kr . "B") - (iso-2022-jp-2 . "B") - (iso-2022-int-1 . "B") - )) - - -;;; @ encoded-text encoder -;;; - -(defun eword-encode-text (charset encoding string &optional mode) - "Encode STRING as an encoded-word, and return the result. -CHARSET is a symbol to indicate MIME charset of the encoded-word. -ENCODING allows \"B\" or \"Q\". -MODE is allows `text', `comment', `phrase' or nil. Default value is -`phrase'." - (let ((text - (cond ((string= encoding "B") - (base64-encode-string string)) - ((string= encoding "Q") - (q-encoding-encode-string string mode)) - ) - )) - (if text - (concat "=?" (upcase (symbol-name charset)) "?" - encoding "?" text "?=") - ))) - - -;;; @ charset word -;;; - -(defsubst eword-encode-char-type (character) - (if (or (eq character ? )(eq character ?\t)) - nil - (char-charset character) - )) - -(defun eword-encode-divide-into-charset-words (string) - (let ((len (length string)) - dest) - (while (> len 0) - (let* ((chr (sref string 0)) - (charset (eword-encode-char-type chr)) - (i (char-length chr))) - (while (and (< i len) - (setq chr (sref string i)) - (eq charset (eword-encode-char-type chr)) - ) - (setq i (char-next-index chr i)) - ) - (setq dest (cons (cons charset (substring string 0 i)) dest) - string (substring string i) - len (- len i) - ))) - (nreverse dest) - )) - - -;;; @ word -;;; - -(defun eword-encode-charset-words-to-words (charset-words) - (let (dest) - (while charset-words - (let* ((charset-word (car charset-words)) - (charset (car charset-word)) - ) - (if charset - (let ((charsets (list charset)) - (str (cdr charset-word)) - ) - (catch 'tag - (while (setq charset-words (cdr charset-words)) - (setq charset-word (car charset-words) - charset (car charset-word)) - (if (null charset) - (throw 'tag nil) - ) - (or (memq charset charsets) - (setq charsets (cons charset charsets)) - ) - (setq str (concat str (cdr charset-word))) - )) - (setq dest (cons (cons charsets str) dest)) - ) - (setq dest (cons charset-word dest) - charset-words (cdr charset-words) - )))) - (nreverse dest) - )) - - -;;; @ rule -;;; - -(defmacro tm-eword::make-rword (text charset encoding type) - (` (list (, text)(, charset)(, encoding)(, type)))) -(defmacro tm-eword::rword-text (rword) - (` (car (, rword)))) -(defmacro tm-eword::rword-charset (rword) - (` (car (cdr (, rword))))) -(defmacro tm-eword::rword-encoding (rword) - (` (car (cdr (cdr (, rword)))))) -(defmacro tm-eword::rword-type (rword) - (` (car (cdr (cdr (cdr (, rword))))))) - -(defun tm-eword::find-charset-rule (charsets) - (if charsets - (let* ((charset (charsets-to-mime-charset charsets)) - (encoding (cdr (assq charset eword-charset-encoding-alist))) - ) - (list charset encoding) - ))) - -(defun tm-eword::words-to-ruled-words (wl &optional mode) - (mapcar (function - (lambda (word) - (let ((ret (tm-eword::find-charset-rule (car word)))) - (tm-eword::make-rword (cdr word) (car ret)(nth 1 ret) mode) - ))) - wl)) - -(defun tm-eword::space-process (seq) - (let (prev a ac b c cc) - (while seq - (setq b (car seq)) - (setq seq (cdr seq)) - (setq c (car seq)) - (setq cc (tm-eword::rword-charset c)) - (if (null (tm-eword::rword-charset b)) - (progn - (setq a (car prev)) - (setq ac (tm-eword::rword-charset a)) - (if (and (tm-eword::rword-encoding a) - (tm-eword::rword-encoding c)) - (cond ((eq ac cc) - (setq prev (cons - (cons (concat (car a)(car b)(car c)) - (cdr a)) - (cdr prev) - )) - (setq seq (cdr seq)) - ) - (t - (setq prev (cons - (cons (concat (car a)(car b)) - (cdr a)) - (cdr prev) - )) - )) - (setq prev (cons b prev)) - )) - (setq prev (cons b prev)) - )) - (reverse prev) - )) - -(defun tm-eword::split-string (str &optional mode) - (tm-eword::space-process - (tm-eword::words-to-ruled-words - (eword-encode-charset-words-to-words - (eword-encode-divide-into-charset-words str)) - mode))) - - -;;; @ length -;;; - -(defun tm-eword::encoded-word-length (rword) - (let ((string (tm-eword::rword-text rword)) - (charset (tm-eword::rword-charset rword)) - (encoding (tm-eword::rword-encoding rword)) - ret) - (setq ret - (cond ((string-equal encoding "B") - (setq string (encode-mime-charset-string string charset)) - (base64-encoded-length string) - ) - ((string-equal encoding "Q") - (setq string (encode-mime-charset-string string charset)) - (q-encoding-encoded-length string - (tm-eword::rword-type rword)) - ))) - (if ret - (cons (+ 7 (length (symbol-name charset)) ret) string) - ))) - - -;;; @ encode-string -;;; - -(defun tm-eword::encode-string-1 (column rwl) - (let* ((rword (car rwl)) - (ret (tm-eword::encoded-word-length rword)) - string len) - (if (null ret) - (cond ((and (setq string (car rword)) - (or (<= (setq len (+ (length string) column)) 76) - (<= column 1)) - ) - (setq rwl (cdr rwl)) - ) - (t - (setq string "\n ") - (setq len 1) - )) - (cond ((and (setq len (car ret)) - (<= (+ column len) 76) - ) - (setq string - (eword-encode-text - (tm-eword::rword-charset rword) - (tm-eword::rword-encoding rword) - (cdr ret) - (tm-eword::rword-type rword) - )) - (setq len (+ (length string) column)) - (setq rwl (cdr rwl)) - ) - (t - (setq string (car rword)) - (let* ((p 0) np - (str "") nstr) - (while (and (< p len) - (progn - (setq np (char-next-index (sref string p) p)) - (setq nstr (substring string 0 np)) - (setq ret (tm-eword::encoded-word-length - (cons nstr (cdr rword)) - )) - (setq nstr (cdr ret)) - (setq len (+ (car ret) column)) - (<= len 76) - )) - (setq str nstr - p np)) - (if (string-equal str "") - (setq string "\n " - len 1) - (setq rwl (cons (cons (substring string p) (cdr rword)) - (cdr rwl))) - (setq string - (eword-encode-text - (tm-eword::rword-charset rword) - (tm-eword::rword-encoding rword) - str - (tm-eword::rword-type rword))) - (setq len (+ (length string) column)) - ) - ))) - ) - (list string len rwl) - )) - -(defun tm-eword::encode-rwl (column rwl) - (let (ret dest ps special str ew-f pew-f) - (while rwl - (setq ew-f (nth 2 (car rwl))) - (if (and pew-f ew-f) - (setq rwl (cons '(" ") rwl) - pew-f nil) - (setq pew-f ew-f) - ) - (setq ret (tm-eword::encode-string-1 column rwl)) - (setq str (car ret)) - (if (eq (elt str 0) ?\n) - (if (eq special ?\() - (progn - (setq dest (concat dest "\n (")) - (setq ret (tm-eword::encode-string-1 2 rwl)) - (setq str (car ret)) - )) - (cond ((eq special ? ) - (if (string= str "(") - (setq ps t) - (setq dest (concat dest " ")) - (setq ps nil) - )) - ((eq special ?\() - (if ps - (progn - (setq dest (concat dest " (")) - (setq ps nil) - ) - (setq dest (concat dest "(")) - ) - ))) - (cond ((string= str " ") - (setq special ? ) - ) - ((string= str "(") - (setq special ?\() - ) - (t - (setq special nil) - (setq dest (concat dest str)) - )) - (setq column (nth 1 ret) - rwl (nth 2 ret)) - ) - (list dest column) - )) - -(defun tm-eword::encode-string (column str &optional mode) - (tm-eword::encode-rwl column (tm-eword::split-string str mode)) - ) - - -;;; @ converter -;;; - -(defun tm-eword::phrase-to-rwl (phrase) - (let (token type dest str) - (while phrase - (setq token (car phrase)) - (setq type (car token)) - (cond ((eq type 'quoted-string) - (setq str (concat "\"" (cdr token) "\"")) - (setq dest - (append dest - (list - (let ((ret (tm-eword::find-charset-rule - (find-non-ascii-charset-string str)))) - (tm-eword::make-rword - str (car ret)(nth 1 ret) 'phrase) - ) - ))) - ) - ((eq type 'comment) - (setq dest - (append dest - '(("(" nil nil)) - (tm-eword::words-to-ruled-words - (eword-encode-charset-words-to-words - (eword-encode-divide-into-charset-words - (cdr token))) - 'comment) - '((")" nil nil)) - )) - ) - (t - (setq dest - (append dest - (tm-eword::words-to-ruled-words - (eword-encode-charset-words-to-words - (eword-encode-divide-into-charset-words - (cdr token)) - ) 'phrase))) - )) - (setq phrase (cdr phrase)) - ) - (tm-eword::space-process dest) - )) - -(defun eword-addr-seq-to-rwl (seq) - (let (dest pname) - (while seq - (let* ((token (car seq)) - (name (car token)) - ) - (cond ((eq name 'spaces) - (setq dest (nconc dest (list (list (cdr token) nil nil)))) - ) - ((eq name 'comment) - (setq dest - (nconc - dest - (list (list "(" nil nil)) - (tm-eword::split-string (cdr token) 'comment) - (list (list ")" nil nil)) - )) - ) - ((eq name 'quoted-string) - (setq dest - (nconc - dest - (list - (list (concat "\"" (cdr token) "\"") nil nil) - ))) - ) - (t - (setq dest - (if (or (eq pname 'spaces) - (eq pname 'comment)) - (nconc dest (list (list (cdr token) nil nil))) - (nconc (butlast dest) - (list - (list (concat (car (car (last dest))) - (cdr token)) - nil nil))))) - )) - (setq seq (cdr seq) - pname name)) - ) - dest)) - -(defun eword-phrase-route-addr-to-rwl (phrase-route-addr) - (if (eq (car phrase-route-addr) 'phrase-route-addr) - (let ((phrase (nth 1 phrase-route-addr)) - (route (nth 2 phrase-route-addr)) - dest) - (if (eq (car (car phrase)) 'spaces) - (setq phrase (cdr phrase)) - ) - (setq dest (tm-eword::phrase-to-rwl phrase)) - (if dest - (setq dest (append dest '((" " nil nil)))) - ) - (append - dest - (eword-addr-seq-to-rwl - (append '((specials . "<")) - route - '((specials . ">")))) - )))) - -(defun eword-addr-spec-to-rwl (addr-spec) - (if (eq (car addr-spec) 'addr-spec) - (eword-addr-seq-to-rwl (cdr addr-spec)) - )) - -(defun tm-eword::mailbox-to-rwl (mbox) - (let ((addr (nth 1 mbox)) - (comment (nth 2 mbox)) - dest) - (setq dest (or (eword-phrase-route-addr-to-rwl addr) - (eword-addr-spec-to-rwl addr) - )) - (if comment - (setq dest - (append dest - '((" " nil nil) - ("(" nil nil)) - (tm-eword::split-string comment 'comment) - '((")" nil nil)) - ))) - dest)) - -(defun tm-eword::addresses-to-rwl (addresses) - (let ((dest (tm-eword::mailbox-to-rwl (car addresses)))) - (if dest - (while (setq addresses (cdr addresses)) - (setq dest (append dest - '(("," nil nil)) - '((" " nil nil)) - (tm-eword::mailbox-to-rwl (car addresses)) - )) - )) - dest)) - -(defun tm-eword::encode-address-list (column str) - (tm-eword::encode-rwl - column - (tm-eword::addresses-to-rwl (std11-parse-addresses-string str)) - )) - - -;;; @ application interfaces -;;; - -(defun eword-encode-field (string) - "Encode header field STRING, and return the result. -A lexical token includes non-ASCII character is encoded as MIME -encoded-word. ASCII token is not encoded." - (setq string (std11-unfold-string string)) - (let ((ret (string-match std11-field-head-regexp string))) - (or (if ret - (let ((field-name (substring string 0 (1- (match-end 0)))) - (field-body (eliminate-top-spaces - (substring string (match-end 0)))) - ) - (if (setq ret - (cond ((string-equal field-body "") "") - ((memq (intern (downcase field-name)) - '(reply-to - from sender - resent-reply-to resent-from - resent-sender to resent-to - cc resent-cc - bcc resent-bcc dcc - mime-version) - ) - (car (tm-eword::encode-address-list - (+ (length field-name) 2) field-body)) - ) - (t - (car (tm-eword::encode-string - (1+ (length field-name)) - field-body 'text)) - )) - ) - (concat field-name ": " ret) - ))) - (car (tm-eword::encode-string 0 string)) - ))) - -(defun eword-in-subject-p () - (let ((str (std11-field-body "Subject"))) - (if (and str (string-match eword-encoded-word-regexp str)) - str))) - -(defsubst eword-find-field-encoding-method (field-name) - (setq field-name (downcase field-name)) - (let ((alist eword-field-encoding-method-alist)) - (catch 'found - (while alist - (let* ((pair (car alist)) - (str (car pair))) - (if (and (stringp str) - (string= field-name (downcase str))) - (throw 'found (cdr pair)) - )) - (setq alist (cdr alist))) - (cdr (assq t eword-field-encoding-method-alist)) - ))) - -(defun eword-encode-header (&optional code-conversion) - "Encode header fields to network representation, such as MIME encoded-word. - -It refer variable `eword-field-encoding-method-alist'." - (interactive "*") - (save-excursion - (save-restriction - (std11-narrow-to-header mail-header-separator) - (goto-char (point-min)) - (let ((default-cs (mime-charset-to-coding-system default-mime-charset)) - beg end field-name) - (while (re-search-forward std11-field-head-regexp nil t) - (setq beg (match-beginning 0)) - (setq field-name (buffer-substring beg (1- (match-end 0)))) - (setq end (std11-field-end)) - (and (find-non-ascii-charset-region beg end) - (let ((method (eword-find-field-encoding-method - (downcase field-name)))) - (cond ((eq method 'mime) - (let ((field - (buffer-substring-no-properties beg end) - )) - (delete-region beg end) - (insert (eword-encode-field field)) - )) - (code-conversion - (let ((cs - (or (mime-charset-to-coding-system - method) - default-cs))) - (encode-coding-region beg end cs) - ))) - )) - )) - ))) - -(defun eword-encode-string (str &optional column mode) - (car (tm-eword::encode-rwl (or column 0) (tm-eword::split-string str mode))) - ) - - -;;; @ end -;;; - -(provide 'eword-encode) - -;;; eword-encode.el ends here diff --git a/ftp.in b/ftp.in deleted file mode 100644 index 80b8381..0000000 --- a/ftp.in +++ /dev/null @@ -1,17 +0,0 @@ ---<>-{ - - It is available from - - ftp://ftp.jaist.ac.jp/pub/GNU/elisp/flim/ - ---[[message/external-body; - access-type=anon-ftp; - site="ftp.jaist.ac.jp"; - directory="/pub/GNU/elisp/flim"; - name="flim-VERSION.tar.gz"; - mode=image]] -Content-Type: application/octet-stream; - name="flim-VERSION.tar.gz"; - type=tar; - conversions=gzip ---}-<> diff --git a/lalr-el.scm b/lalr-el.scm deleted file mode 100644 index be9392a..0000000 --- a/lalr-el.scm +++ /dev/null @@ -1,1623 +0,0 @@ -;; ---------------------------------------------------------------------- ;; -;; FICHIER : lalr.scm ;; -;; DATE DE CREATION : Mon Jan 22 15:42:32 1996 ;; -;; DERNIERE MODIFICATION : Mon Jun 3 10:24:43 1996 ;; -;; ---------------------------------------------------------------------- ;; -;; Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. ;; -;; (for the Bison source code translated in Scheme) ;; -;; Copyright (C) 1996 Dominique Boucher ;; -;; (for the translation in Scheme) ;; -;; ---------------------------------------------------------------------- ;; -;; An efficient Scheme LALR(1) Parser Generator -- lalr.scm ;; -;; ---------------------------------------------------------------------- ;; -;; This file contains yet another LALR(1) parser generator written in ;; -;; Scheme. In contrast to other such parser generators, this one ;; -;; implements a more efficient algorithm for computing the lookahead sets.;; -;; The algorithm is the same as used in Bison (GNU yacc) and is described ;; -;; in the following paper: ;; -;; ;; -;; "Efficient Computation of LALR(1) Look-Ahead Set", F. DeRemer and ;; -;; T. Pennello, TOPLAS, vol. 4, no. 4, october 1982. ;; -;; ;; -;; As a consequence, it is not written in a fully functional style. ;; -;; The program has been successfully tested on several Scheme ;; -;; interpreters and compilers, including scm4d3, Gambit v2.2, and ;; -;; MIT-Scheme 7.2.0 (microcode 11.127, runtime 14.160). ;; -;; ---------------------------------------------------------------------- ;; -;; HOW TO USE THE PROGRAM ;; -;; ;; -;; To generate a parser for a given grammar, the latter must be first ;; -;; written down in scheme. The next section will describe the syntax ;; -;; of the grammar. Now suppose your grammar is defined like this: ;; -;; ;; -;; (define my-grammar { grammar }) ;; -;; ;; -;; All you need to do is evaluate the expression: ;; -;; ;; -;; (gen-lalr1 my-grammar "file" [prefix]) ;; -;; ;; -;; where "file" is the name of the file (a string) that will contain the ;; -;; tables for LR-parsing. The last argument must be supplied if you want ;; -;; multiple parsers coexist in the same application. It must be a symbol, ;; -;; otherwise it will be ignored. ;; -;; ;; -;; To run the parser, you must first load the LR parsing driver(also part ;; -;; of this distribution): ;; -;; ;; -;; (load "lr-dvr.scm") ;; -;; ;; -;; The interface to the generated parser will be the function ;; -;; ;; -;; ([prefix-]parse lexer errorp) ;; -;; ;; -;; where lexer is the name of the scanner feeding the parser with pairs ;; -;; (token . lval) and errorp is the name of a user-defined error ;; -;; function (the standard error function can be used as well). ;; -;; ;; -;; ;; -;; Here are some notes about the lexer and the error function: ;; -;; ;; -;; - the tokens (which are the first components of the pairs returned ;; -;; by the lexer) must agree with the tokens defined in the grammar. ;; -;; ;; -;; - when the lexer wants to signal the end of the input, it must ;; -;; return the pair '(0) each time it's invoked. ;; -;; ;; -;; - the error function must accept two parameters (the standard error ;; -;; function accepts a variable number of parameters, so it accepts ;; -;; two). ;; -;; ;; -;; ---------------------------------------------------------------------- ;; -;; THE GRAMMAR FORMAT ;; -;; ;; -;; The grammar is specified by first giving the list of terminals and the ;; -;; list of non-terminal definitions. Each non-terminal definition ;; -;; is a list where the first element is the non-terminal and the other ;; -;; elements are the right-hand sides (lists of grammar symbols). In ;; -;; addition to this, each rhs can be followed by a semantic action. ;; -;; By convention, use strings for tokens and atoms for non-terminals. ;; -;; ;; -;; For example, consider the following (yacc) grammar: ;; -;; ;; -;; e : e '+' t ;; -;; | t ;; -;; ; ;; -;; ;; -;; t : t '*' f ;; -;; | f ;; -;; ; ;; -;; ;; -;; f : ID ;; -;; ; ;; -;; ;; -;; The same grammar, written for the scheme parser generator, would look ;; -;; like this (with semantic actions) ;; -;; ;; -;; (define my-grammar ;; -;; '( ;; -;; ; Terminal symbols ;; -;; ID ADD MULT ;; -;; ; Productions ;; -;; (e (e ADD t) : (+ $1 $3) ;; -;; (t) : $1 ;; -;; ) ;; -;; (t (t MULT f) : (* $1 $3) ;; -;; (f) : $1 ;; -;; ) ;; -;; (f (ID) : $1) ;; -;; )) ;; -;; ;; -;; In semantic actions, the symbol $ refers to the synthesized ;; -;; attribute value of the nth symbol in the production. The value ;; -;; associated with the non-terminal on the left is the result of ;; -;; evaluating the semantic action (it defaults to #f). ;; -;; ;; -;; If you evaluate ;; -;; ;; -;; (gen-lalr1 my-grammar "foo.scm" 'my) ;; -;; ;; -;; then the generated parser will be named 'my-parser'. ;; -;; ;; -;; NOTE ON CONFLICT RESOLUTION ;; -;; ;; -;; Conflicts in the grammar are handled in a conventional way. ;; -;; Shift/Reduce conflicts are resolved by shifting, and Reduce/Reduce ;; -;; conflicts are resolved by choosing the rule listed first in the ;; -;; grammar definition. ;; -;; ;; -;; You can print the states of the generated parser by evaluating ;; -;; `(print-states)'. The format of the output is similar to the one ;; -;; produced by bison when given the -v command-line option. ;; -;; ---------------------------------------------------------------------- ;; -;; lalr.scm is free software; you can redistribute it and/or modify ;; -;; it under the terms of the GNU General Public License as published by ;; -;; the Free Software Foundation; either version 2, or (at your option) ;; -;; any later version. ;; -;; ;; -;; lalr.scm is distributed in the hope that it will be useful, ;; -;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; -;; GNU General Public License for more details. ;; -;; ;; -;; You should have received a copy of the GNU General Public License ;; -;; along with lalr.scm; see the file COPYING. If not, write to ;; -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ;; -;; ;; -;; Dominique Boucher -- Universite de Montreal ;; -;; ;; -;; Send questions, comments or suggestions to boucherd@iro.umontreal.ca ;; -;; ---------------------------------------------------------------------- ;; - -;; 1998/08/16: Tanaka Akira transplants generating code from Scheme to Emacs-Lisp. - -;;; ---------- SYSTEM DEPENDENT SECTION ----------------- - -;; -------- SCM -(begin - (defmacro def-macro (args body) - `(defmacro ,(car args) ,(cdr args) ,body)) - - (def-macro (BITS-PER-WORD) 24) - (def-macro (logical-or x . y) `(logior ,x ,@y)) - ) - -;; -------- MIT-Scheme -'(begin - (declare (usual-integrations)) - - (define-macro (def-macro form . body) - `(DEFINE-MACRO ,form (LET () ,@body))) - - (def-macro (BITS-PER-WORD) 24) - (def-macro (logical-or x . y) `(fix:or ,x ,@y)) - ) - -;; -------- Gambit -'(begin - - (declare - (standard-bindings) - (fixnum) - (block) - (not safe)) - - (define-macro (def-macro form . body) - `(DEFINE-MACRO ,form (LET () ,@body))) - - (def-macro (BITS-PER-WORD) 28) - (def-macro (logical-or x . y) `(,(string->symbol "##logior") ,x ,@y)) - ) - -;; -------- Bigloo -'(begin - - (define-macro (def-macro form . body) - `(DEFINE-MACRO ,form (LET () ,@body))) - (def-macro (BITS-PER-WORD) 16) - (def-macro (logical-or x . y) `(bit-or ,x ,@y)) - ) - -;;; ---------- END OF SYSTEM DEPENDENT SECTION ------------ - -;; - Macros pour la gestion des vecteurs de bits - -(def-macro (set-bit v b) - `(let ((x (quotient ,b (BITS-PER-WORD))) - (y (expt 2 (remainder ,b (BITS-PER-WORD))))) - (vector-set! ,v x (logical-or (vector-ref ,v x) y)))) - -(def-macro (bit-union v1 v2 n) - `(do ((i 0 (+ i 1))) - ((= i ,n)) - (vector-set! ,v1 i (logical-or (vector-ref ,v1 i) - (vector-ref ,v2 i))))) - -;; - Macro pour les structures de donnees - -(def-macro (new-core) `(make-vector 4 0)) -(def-macro (set-core-number! c n) `(vector-set! ,c 0 ,n)) -(def-macro (set-core-acc-sym! c s) `(vector-set! ,c 1 ,s)) -(def-macro (set-core-nitems! c n) `(vector-set! ,c 2 ,n)) -(def-macro (set-core-items! c i) `(vector-set! ,c 3 ,i)) -(def-macro (core-number c) `(vector-ref ,c 0)) -(def-macro (core-acc-sym c) `(vector-ref ,c 1)) -(def-macro (core-nitems c) `(vector-ref ,c 2)) -(def-macro (core-items c) `(vector-ref ,c 3)) - -(def-macro (new-shift) `(make-vector 3 0)) -(def-macro (set-shift-number! c x) `(vector-set! ,c 0 ,x)) -(def-macro (set-shift-nshifts! c x) `(vector-set! ,c 1 ,x)) -(def-macro (set-shift-shifts! c x) `(vector-set! ,c 2 ,x)) -(def-macro (shift-number s) `(vector-ref ,s 0)) -(def-macro (shift-nshifts s) `(vector-ref ,s 1)) -(def-macro (shift-shifts s) `(vector-ref ,s 2)) - -(def-macro (new-red) `(make-vector 3 0)) -(def-macro (set-red-number! c x) `(vector-set! ,c 0 ,x)) -(def-macro (set-red-nreds! c x) `(vector-set! ,c 1 ,x)) -(def-macro (set-red-rules! c x) `(vector-set! ,c 2 ,x)) -(def-macro (red-number c) `(vector-ref ,c 0)) -(def-macro (red-nreds c) `(vector-ref ,c 1)) -(def-macro (red-rules c) `(vector-ref ,c 2)) - - - -(def-macro (new-set nelem) - `(make-vector ,nelem 0)) - - -(def-macro (vector-map f v) - `(let ((vm-n (- (vector-length ,v) 1))) - (let loop ((vm-low 0) (vm-high vm-n)) - (if (= vm-low vm-high) - (vector-set! ,v vm-low (,f (vector-ref ,v vm-low) vm-low)) - (let ((vm-middle (quotient (+ vm-low vm-high) 2))) - (loop vm-low vm-middle) - (loop (+ vm-middle 1) vm-high)))))) - - -;; - Constantes -(define STATE-TABLE-SIZE 1009) - - -;; - Tableaux -(define rrhs #f) -(define rlhs #f) -(define ritem #f) -(define nullable #f) -(define derives #f) -(define fderives #f) -(define firsts #f) -(define kernel-base #f) -(define kernel-end #f) -(define shift-symbol #f) -(define shift-set #f) -(define red-set #f) -(define state-table #f) -(define acces-symbol #f) -(define reduction-table #f) -(define shift-table #f) -(define consistent #f) -(define lookaheads #f) -(define LA #f) -(define LAruleno #f) -(define lookback #f) -(define goto-map #f) -(define from-state #f) -(define to-state #f) -(define includes #f) -(define F #f) -(define action-table #f) - -;; - Variables -(define nitems #f) -(define nrules #f) -(define nvars #f) -(define nterms #f) -(define nsyms #f) -(define nstates #f) -(define first-state #f) -(define last-state #f) -(define final-state #f) -(define first-shift #f) -(define last-shift #f) -(define first-reduction #f) -(define last-reduction #f) -(define nshifts #f) -(define maxrhs #f) -(define ngotos #f) -(define token-set-size #f) - -(define (gen-larl1 gram output-file header footer . opt) - (define (conv-rule-right rr) - (if (null? rr) - '() - (cons (reverse (car rr)) - (cons (cadr rr) - (cons (caddr rr) - (conv-rule-right (cdddr rr))))))) - (apply gen-lalr1 - (map - (lambda (elt) - (if (symbol? elt) - elt - (cons (car elt) (conv-rule-right (cdr elt))))) - gram) - output-file - header - footer - opt)) - -(define (gen-lalr1 gram output-file header footer . opt) - (initialize-all) - (rewrite-grammar - gram - (lambda (terms vars gram gram/actions) - (set! the-terminals (list->vector terms)) - (set! the-nonterminals (list->vector vars)) - (set! nterms (length terms)) - (set! nvars (length vars)) - (set! nsyms (+ nterms nvars)) - (let ((no-of-rules (length gram/actions)) - (no-of-items (let loop ((l gram/actions) (count 0)) - (if (null? l) - count - (loop (cdr l) (+ count (length (caar l)))))))) - (pack-grammar no-of-rules no-of-items gram) - (set-derives) - (set-nullable) - (generate-states) - (lalr) - (build-tables) - (compact-action-table) - (let* ((parser-name (if (and (pair? opt) (symbol? (car opt))) (car opt) #f)) - (prefix (if parser-name - (string-append - (symbol->string parser-name) - ":") - "")) - (parser-prefix (if parser-name - (string-append (symbol->string parser-name) "-") - ""))) - (with-output-to-file output-file - (lambda () - (display "; *** Header ***") - (newline) - (output-header header parser-prefix) - (display "; *** Token Definitions ***") - (newline) - (output-token-defs terms prefix) - (display "; *** Action Table ***") - (newline) - (output-action-table prefix) - (display "; *** Goto Table ***") - (newline) - (output-goto-table prefix) - (display "; *** Reduction Table ***") - (newline) - (output-reduction-table gram/actions prefix) - (display "; *** Parser Definition ***") - (newline) - (output-parser-def parser-prefix prefix) - (display "; *** Footer ***") - (newline) - (output-footer footer) - ))))))) - - -(define (initialize-all) - (set! rrhs #f) - (set! rlhs #f) - (set! ritem #f) - (set! nullable #f) - (set! derives #f) - (set! fderives #f) - (set! firsts #f) - (set! kernel-base #f) - (set! kernel-end #f) - (set! shift-symbol #f) - (set! shift-set #f) - (set! red-set #f) - (set! state-table (make-vector STATE-TABLE-SIZE '())) - (set! acces-symbol #f) - (set! reduction-table #f) - (set! shift-table #f) - (set! consistent #f) - (set! lookaheads #f) - (set! LA #f) - (set! LAruleno #f) - (set! lookback #f) - (set! goto-map #f) - (set! from-state #f) - (set! to-state #f) - (set! includes #f) - (set! F #f) - (set! action-table #f) - (set! nstates #f) - (set! first-state #f) - (set! last-state #f) - (set! final-state #f) - (set! first-shift #f) - (set! last-shift #f) - (set! first-reduction #f) - (set! last-reduction #f) - (set! nshifts #f) - (set! maxrhs #f) - (set! ngotos #f) - (set! token-set-size #f)) - - -(define (pack-grammar no-of-rules no-of-items gram) - (set! nrules (+ no-of-rules 1)) - (set! nitems no-of-items) - (set! rlhs (make-vector nrules #f)) - (set! rrhs (make-vector nrules #f)) - (set! ritem (make-vector (+ 1 nitems) #f)) - - (let loop ((p gram) (item-no 0) (rule-no 1)) - (if (not (null? p)) - (let ((nt (caar p))) - (let loop2 ((prods (cdar p)) (it-no2 item-no) (rl-no2 rule-no)) - (if (null? prods) - (loop (cdr p) it-no2 rl-no2) - (begin - (vector-set! rlhs rl-no2 nt) - (vector-set! rrhs rl-no2 it-no2) - (let loop3 ((rhs (car prods)) (it-no3 it-no2)) - (if (null? rhs) - (begin - (vector-set! ritem it-no3 (- rl-no2)) - (loop2 (cdr prods) (+ it-no3 1) (+ rl-no2 1))) - (begin - (vector-set! ritem it-no3 (car rhs)) - (loop3 (cdr rhs) (+ it-no3 1)))))))))))) - - -;; Fonction set-derives -;; -------------------- -(define (set-derives) - (define delts (make-vector (+ nrules 1) 0)) - (define dset (make-vector nvars -1)) - - (let loop ((i 1) (j 0)) ; i = 0 - (if (< i nrules) - (let ((lhs (vector-ref rlhs i))) - (if (>= lhs 0) - (begin - (vector-set! delts j (cons i (vector-ref dset lhs))) - (vector-set! dset lhs j) - (loop (+ i 1) (+ j 1))) - (loop (+ i 1) j))))) - - (set! derives (make-vector nvars 0)) - - (let loop ((i 0)) - (if (< i nvars) - (let ((q (let loop2 ((j (vector-ref dset i)) (s '())) - (if (< j 0) - s - (let ((x (vector-ref delts j))) - (loop2 (cdr x) (cons (car x) s))))))) - (vector-set! derives i q) - (loop (+ i 1)))))) - - - -(define (set-nullable) - (set! nullable (make-vector nvars #f)) - (let ((squeue (make-vector nvars #f)) - (rcount (make-vector (+ nrules 1) 0)) - (rsets (make-vector nvars #f)) - (relts (make-vector (+ nitems nvars 1) #f))) - (let loop ((r 0) (s2 0) (p 0)) - (let ((*r (vector-ref ritem r))) - (if *r - (if (< *r 0) - (let ((symbol (vector-ref rlhs (- *r)))) - (if (and (>= symbol 0) - (not (vector-ref nullable symbol))) - (begin - (vector-set! nullable symbol #t) - (vector-set! squeue s2 symbol) - (loop (+ r 1) (+ s2 1) p)))) - (let loop2 ((r1 r) (any-tokens #f)) - (let* ((symbol (vector-ref ritem r1))) - (if (> symbol 0) - (loop2 (+ r1 1) (or any-tokens (>= symbol nvars))) - (if (not any-tokens) - (let ((ruleno (- symbol))) - (let loop3 ((r2 r) (p2 p)) - (let ((symbol (vector-ref ritem r2))) - (if (> symbol 0) - (begin - (vector-set! rcount ruleno - (+ (vector-ref rcount ruleno) 1)) - (vector-set! relts p2 - (cons (vector-ref rsets symbol) - ruleno)) - (vector-set! rsets symbol p2) - (loop3 (+ r2 1) (+ p2 1))) - (loop (+ r2 1) s2 p2))))) - (loop (+ r1 1) s2 p)))))) - (let loop ((s1 0) (s3 s2)) - (if (< s1 s3) - (let loop2 ((p (vector-ref rsets (vector-ref squeue s1))) (s4 s3)) - (if p - (let* ((x (vector-ref relts p)) - (ruleno (cdr x)) - (y (- (vector-ref rcount ruleno) 1))) - (vector-set! rcount ruleno y) - (if (= y 0) - (let ((symbol (vector-ref rlhs ruleno))) - (if (and (>= symbol 0) - (not (vector-ref nullable symbol))) - (begin - (vector-set! nullable symbol #t) - (vector-set! squeue s4 symbol) - (loop2 (car x) (+ s4 1))) - (loop2 (car x) s4))) - (loop2 (car x) s4)))) - (loop (+ s1 1) s4))))))))) - - - -; Fonction set-firsts qui calcule un tableau de taille -; nvars et qui donne, pour chaque non-terminal X, une liste des -; non-terminaux pouvant apparaitre au debut d'une derivation a -; partir de X. - -(define (set-firsts) - (set! firsts (make-vector nvars '())) - - ;; -- initialization - (let loop ((i 0)) - (if (< i nvars) - (let loop2 ((sp (vector-ref derives i))) - (if (null? sp) - (loop (+ i 1)) - (let ((sym (vector-ref ritem (vector-ref rrhs (car sp))))) - (if (< -1 sym nvars) - (vector-set! firsts i (sinsert sym (vector-ref firsts i)))) - (loop2 (cdr sp))))))) - - ;; -- reflexive and transitive closure - (let loop ((continue #t)) - (if continue - (let loop2 ((i 0) (cont #f)) - (if (>= i nvars) - (loop cont) - (let* ((x (vector-ref firsts i)) - (y (let loop3 ((l x) (z x)) - (if (null? l) - z - (loop3 (cdr l) - (sunion (vector-ref firsts (car l)) z)))))) - (if (equal? x y) - (loop2 (+ i 1) cont) - (begin - (vector-set! firsts i y) - (loop2 (+ i 1) #t)))))))) - - (let loop ((i 0)) - (if (< i nvars) - (begin - (vector-set! firsts i (sinsert i (vector-ref firsts i))) - (loop (+ i 1)))))) - - - - -; Fonction set-fderives qui calcule un tableau de taille -; nvars et qui donne, pour chaque non-terminal, une liste des regles pouvant -; etre derivees a partir de ce non-terminal. (se sert de firsts) - -(define (set-fderives) - (set! fderives (make-vector nvars #f)) - - (set-firsts) - - (let loop ((i 0)) - (if (< i nvars) - (let ((x (let loop2 ((l (vector-ref firsts i)) (fd '())) - (if (null? l) - fd - (loop2 (cdr l) - (sunion (vector-ref derives (car l)) fd)))))) - (vector-set! fderives i x) - (loop (+ i 1)))))) - - -; Fonction calculant la fermeture d'un ensemble d'items LR0 -; ou core est une liste d'items - -(define (closure core) - ;; Initialization - (define ruleset (make-vector nrules #f)) - - (let loop ((csp core)) - (if (not (null? csp)) - (let ((sym (vector-ref ritem (car csp)))) - (if (< -1 sym nvars) - (let loop2 ((dsp (vector-ref fderives sym))) - (if (not (null? dsp)) - (begin - (vector-set! ruleset (car dsp) #t) - (loop2 (cdr dsp)))))) - (loop (cdr csp))))) - - (let loop ((ruleno 1) (csp core) (itemsetv '())) ; ruleno = 0 - (if (< ruleno nrules) - (if (vector-ref ruleset ruleno) - (let ((itemno (vector-ref rrhs ruleno))) - (let loop2 ((c csp) (itemsetv2 itemsetv)) - (if (and (pair? c) - (< (car c) itemno)) - (loop2 (cdr c) (cons (car c) itemsetv2)) - (loop (+ ruleno 1) c (cons itemno itemsetv2))))) - (loop (+ ruleno 1) csp itemsetv)) - (let loop2 ((c csp) (itemsetv2 itemsetv)) - (if (pair? c) - (loop2 (cdr c) (cons (car c) itemsetv2)) - (reverse itemsetv2)))))) - - - -(define (allocate-item-sets) - (set! kernel-base (make-vector nsyms 0)) - (set! kernel-end (make-vector nsyms #f))) - - -(define (allocate-storage) - (allocate-item-sets) - (set! red-set (make-vector (+ nrules 1) 0))) - -;; -- - - -(define (initialize-states) - (let ((p (new-core))) - (set-core-number! p 0) - (set-core-acc-sym! p #f) - (set-core-nitems! p 1) - (set-core-items! p '(0)) - - (set! first-state (list p)) - (set! last-state first-state) - (set! nstates 1))) - - - -(define (generate-states) - (allocate-storage) - (set-fderives) - (initialize-states) - (let loop ((this-state first-state)) - (if (pair? this-state) - (let* ((x (car this-state)) - (is (closure (core-items x)))) - (save-reductions x is) - (new-itemsets is) - (append-states) - (if (> nshifts 0) - (save-shifts x)) - (loop (cdr this-state)))))) - - -;; Fonction calculant les symboles sur lesquels il faut "shifter" -;; et regroupe les items en fonction de ces symboles - -(define (new-itemsets itemset) - ;; - Initialization - (set! shift-symbol '()) - (let loop ((i 0)) - (if (< i nsyms) - (begin - (vector-set! kernel-end i '()) - (loop (+ i 1))))) - - (let loop ((isp itemset)) - (if (pair? isp) - (let* ((i (car isp)) - (sym (vector-ref ritem i))) - (if (>= sym 0) - (begin - (set! shift-symbol (sinsert sym shift-symbol)) - (let ((x (vector-ref kernel-end sym))) - (if (null? x) - (begin - (vector-set! kernel-base sym (cons (+ i 1) x)) - (vector-set! kernel-end sym (vector-ref kernel-base sym))) - (begin - (set-cdr! x (list (+ i 1))) - (vector-set! kernel-end sym (cdr x))))))) - (loop (cdr isp))))) - - (set! nshifts (length shift-symbol))) - - - -(define (get-state sym) - (let* ((isp (vector-ref kernel-base sym)) - (n (length isp)) - (key (let loop ((isp1 isp) (k 0)) - (if (null? isp1) - (modulo k STATE-TABLE-SIZE) - (loop (cdr isp1) (+ k (car isp1)))))) - (sp (vector-ref state-table key))) - (if (null? sp) - (let ((x (new-state sym))) - (vector-set! state-table key (list x)) - (core-number x)) - (let loop ((sp1 sp)) - (if (and (= n (core-nitems (car sp1))) - (let loop2 ((i1 isp) (t (core-items (car sp1)))) - (if (and (pair? i1) - (= (car i1) - (car t))) - (loop2 (cdr i1) (cdr t)) - (null? i1)))) - (core-number (car sp1)) - (if (null? (cdr sp1)) - (let ((x (new-state sym))) - (set-cdr! sp1 (list x)) - (core-number x)) - (loop (cdr sp1)))))))) - - -(define (new-state sym) - (let* ((isp (vector-ref kernel-base sym)) - (n (length isp)) - (p (new-core))) - (set-core-number! p nstates) - (set-core-acc-sym! p sym) - (if (= sym nvars) (set! final-state nstates)) - (set-core-nitems! p n) - (set-core-items! p isp) - (set-cdr! last-state (list p)) - (set! last-state (cdr last-state)) - (set! nstates (+ nstates 1)) - p)) - - -;; -- - -(define (append-states) - (set! shift-set - (let loop ((l (reverse shift-symbol))) - (if (null? l) - '() - (cons (get-state (car l)) (loop (cdr l))))))) - -;; -- - -(define (save-shifts core) - (let ((p (new-shift))) - (set-shift-number! p (core-number core)) - (set-shift-nshifts! p nshifts) - (set-shift-shifts! p shift-set) - (if last-shift - (begin - (set-cdr! last-shift (list p)) - (set! last-shift (cdr last-shift))) - (begin - (set! first-shift (list p)) - (set! last-shift first-shift))))) - -(define (save-reductions core itemset) - (let ((rs (let loop ((l itemset)) - (if (null? l) - '() - (let ((item (vector-ref ritem (car l)))) - (if (< item 0) - (cons (- item) (loop (cdr l))) - (loop (cdr l)))))))) - (if (pair? rs) - (let ((p (new-red))) - (set-red-number! p (core-number core)) - (set-red-nreds! p (length rs)) - (set-red-rules! p rs) - (if last-reduction - (begin - (set-cdr! last-reduction (list p)) - (set! last-reduction (cdr last-reduction))) - (begin - (set! first-reduction (list p)) - (set! last-reduction first-reduction))))))) - - -;; -- - -(define (lalr) - (set! token-set-size (+ 1 (quotient nterms (BITS-PER-WORD)))) - (set-accessing-symbol) - (set-shift-table) - (set-reduction-table) - (set-max-rhs) - (initialize-LA) - (set-goto-map) - (initialize-F) - (build-relations) - (digraph includes) - (compute-lookaheads)) - -(define (set-accessing-symbol) - (set! acces-symbol (make-vector nstates #f)) - (let loop ((l first-state)) - (if (pair? l) - (let ((x (car l))) - (vector-set! acces-symbol (core-number x) (core-acc-sym x)) - (loop (cdr l)))))) - -(define (set-shift-table) - (set! shift-table (make-vector nstates #f)) - (let loop ((l first-shift)) - (if (pair? l) - (let ((x (car l))) - (vector-set! shift-table (shift-number x) x) - (loop (cdr l)))))) - -(define (set-reduction-table) - (set! reduction-table (make-vector nstates #f)) - (let loop ((l first-reduction)) - (if (pair? l) - (let ((x (car l))) - (vector-set! reduction-table (red-number x) x) - (loop (cdr l)))))) - -(define (set-max-rhs) - (let loop ((p 0) (curmax 0) (length 0)) - (let ((x (vector-ref ritem p))) - (if x - (if (>= x 0) - (loop (+ p 1) curmax (+ length 1)) - (loop (+ p 1) (max curmax length) 0)) - (set! maxrhs curmax))))) - -(define (initialize-LA) - (define (last l) - (if (null? (cdr l)) - (car l) - (last (cdr l)))) - - (set! consistent (make-vector nstates #f)) - (set! lookaheads (make-vector (+ nstates 1) #f)) - - (let loop ((count 0) (i 0)) - (if (< i nstates) - (begin - (vector-set! lookaheads i count) - (let ((rp (vector-ref reduction-table i)) - (sp (vector-ref shift-table i))) - (if (and rp - (or (> (red-nreds rp) 1) - (and sp - (not - (< (vector-ref acces-symbol - (last (shift-shifts sp))) - nvars))))) - (loop (+ count (red-nreds rp)) (+ i 1)) - (begin - (vector-set! consistent i #t) - (loop count (+ i 1)))))) - - (begin - (vector-set! lookaheads nstates count) - (let ((c (max count 1))) - (set! LA (make-vector c #f)) - (do ((j 0 (+ j 1))) ((= j c)) (vector-set! LA j (new-set token-set-size))) - (set! LAruleno (make-vector c -1)) - (set! lookback (make-vector c #f))) - (let loop ((i 0) (np 0)) - (if (< i nstates) - (if (vector-ref consistent i) - (loop (+ i 1) np) - (let ((rp (vector-ref reduction-table i))) - (if rp - (let loop2 ((j (red-rules rp)) (np2 np)) - (if (null? j) - (loop (+ i 1) np2) - (begin - (vector-set! LAruleno np2 (car j)) - (loop2 (cdr j) (+ np2 1))))) - (loop (+ i 1) np)))))))))) - - -(define (set-goto-map) - (set! goto-map (make-vector (+ nvars 1) 0)) - (let ((temp-map (make-vector (+ nvars 1) 0))) - (let loop ((ng 0) (sp first-shift)) - (if (pair? sp) - (let loop2 ((i (reverse (shift-shifts (car sp)))) (ng2 ng)) - (if (pair? i) - (let ((symbol (vector-ref acces-symbol (car i)))) - (if (< symbol nvars) - (begin - (vector-set! goto-map symbol - (+ 1 (vector-ref goto-map symbol))) - (loop2 (cdr i) (+ ng2 1))) - (loop2 (cdr i) ng2))) - (loop ng2 (cdr sp)))) - - (let loop ((k 0) (i 0)) - (if (< i nvars) - (begin - (vector-set! temp-map i k) - (loop (+ k (vector-ref goto-map i)) (+ i 1))) - - (begin - (do ((i 0 (+ i 1))) - ((>= i nvars)) - (vector-set! goto-map i (vector-ref temp-map i))) - - (set! ngotos ng) - (vector-set! goto-map nvars ngotos) - (vector-set! temp-map nvars ngotos) - (set! from-state (make-vector ngotos #f)) - (set! to-state (make-vector ngotos #f)) - - (do ((sp first-shift (cdr sp))) - ((null? sp)) - (let* ((x (car sp)) - (state1 (shift-number x))) - (do ((i (shift-shifts x) (cdr i))) - ((null? i)) - (let* ((state2 (car i)) - (symbol (vector-ref acces-symbol state2))) - (if (< symbol nvars) - (let ((k (vector-ref temp-map symbol))) - (vector-set! temp-map symbol (+ k 1)) - (vector-set! from-state k state1) - (vector-set! to-state k state2)))))))))))))) - - -(define (map-goto state symbol) - (let loop ((low (vector-ref goto-map symbol)) - (high (- (vector-ref goto-map (+ symbol 1)) 1))) - (if (> low high) - (begin - (display (list "Error in map-goto" state symbol)) (newline) - 0) - (let* ((middle (quotient (+ low high) 2)) - (s (vector-ref from-state middle))) - (cond - ((= s state) - middle) - ((< s state) - (loop (+ middle 1) high)) - (else - (loop low (- middle 1)))))))) - - -(define (initialize-F) - (set! F (make-vector ngotos #f)) - (do ((i 0 (+ i 1))) ((= i ngotos)) (vector-set! F i (new-set token-set-size))) - - (let ((reads (make-vector ngotos #f))) - - (let loop ((i 0) (rowp 0)) - (if (< i ngotos) - (let* ((rowf (vector-ref F rowp)) - (stateno (vector-ref to-state i)) - (sp (vector-ref shift-table stateno))) - (if sp - (let loop2 ((j (shift-shifts sp)) (edges '())) - (if (pair? j) - (let ((symbol (vector-ref acces-symbol (car j)))) - (if (< symbol nvars) - (if (vector-ref nullable symbol) - (loop2 (cdr j) (cons (map-goto stateno symbol) - edges)) - (loop2 (cdr j) edges)) - (begin - (set-bit rowf (- symbol nvars)) - (loop2 (cdr j) edges)))) - (if (pair? edges) - (vector-set! reads i (reverse edges)))))) - (loop (+ i 1) (+ rowp 1))))) - (digraph reads))) - -(define (add-lookback-edge stateno ruleno gotono) - (let ((k (vector-ref lookaheads (+ stateno 1)))) - (let loop ((found #f) (i (vector-ref lookaheads stateno))) - (if (and (not found) (< i k)) - (if (= (vector-ref LAruleno i) ruleno) - (loop #t i) - (loop found (+ i 1))) - - (if (not found) - (begin (display "Error in add-lookback-edge : ") - (display (list stateno ruleno gotono)) (newline)) - (vector-set! lookback i - (cons gotono (vector-ref lookback i)))))))) - - -(define (transpose r-arg n) - (let ((new-end (make-vector n #f)) - (new-R (make-vector n #f))) - (do ((i 0 (+ i 1))) - ((= i n)) - (let ((x (list 'bidon))) - (vector-set! new-R i x) - (vector-set! new-end i x))) - (do ((i 0 (+ i 1))) - ((= i n)) - (let ((sp (vector-ref r-arg i))) - (if (pair? sp) - (let loop ((sp2 sp)) - (if (pair? sp2) - (let* ((x (car sp2)) - (y (vector-ref new-end x))) - (set-cdr! y (cons i (cdr y))) - (vector-set! new-end x (cdr y)) - (loop (cdr sp2)))))))) - (do ((i 0 (+ i 1))) - ((= i n)) - (vector-set! new-R i (cdr (vector-ref new-R i)))) - - new-R)) - - - -(define (build-relations) - - (define (get-state stateno symbol) - (let loop ((j (shift-shifts (vector-ref shift-table stateno))) - (stno stateno)) - (if (null? j) - stno - (let ((st2 (car j))) - (if (= (vector-ref acces-symbol st2) symbol) - st2 - (loop (cdr j) st2)))))) - - (set! includes (make-vector ngotos #f)) - (do ((i 0 (+ i 1))) - ((= i ngotos)) - (let ((state1 (vector-ref from-state i)) - (symbol1 (vector-ref acces-symbol (vector-ref to-state i)))) - (let loop ((rulep (vector-ref derives symbol1)) - (edges '())) - (if (pair? rulep) - (let ((*rulep (car rulep))) - (let loop2 ((rp (vector-ref rrhs *rulep)) - (stateno state1) - (states (list state1))) - (let ((*rp (vector-ref ritem rp))) - (if (> *rp 0) - (let ((st (get-state stateno *rp))) - (loop2 (+ rp 1) st (cons st states))) - (begin - - (if (not (vector-ref consistent stateno)) - (add-lookback-edge stateno *rulep i)) - - (let loop2 ((done #f) - (stp (cdr states)) - (rp2 (- rp 1)) - (edgp edges)) - (if (not done) - (let ((*rp (vector-ref ritem rp2))) - (if (< -1 *rp nvars) - (loop2 (not (vector-ref nullable *rp)) - (cdr stp) - (- rp2 1) - (cons (map-goto (car stp) *rp) edgp)) - (loop2 #t stp rp2 edgp))) - - (loop (cdr rulep) edgp)))))))) - (vector-set! includes i edges))))) - (set! includes (transpose includes ngotos))) - - - -(define (compute-lookaheads) - (let ((n (vector-ref lookaheads nstates))) - (let loop ((i 0)) - (if (< i n) - (let loop2 ((sp (vector-ref lookback i))) - (if (pair? sp) - (let ((LA-i (vector-ref LA i)) - (F-j (vector-ref F (car sp)))) - (bit-union LA-i F-j token-set-size) - (loop2 (cdr sp))) - (loop (+ i 1)))))))) - - - -(define (digraph relation) - (define infinity (+ ngotos 2)) - (define INDEX (make-vector (+ ngotos 1) 0)) - (define VERTICES (make-vector (+ ngotos 1) 0)) - (define top 0) - (define R relation) - - (define (traverse i) - (set! top (+ 1 top)) - (vector-set! VERTICES top i) - (let ((height top)) - (vector-set! INDEX i height) - (let ((rp (vector-ref R i))) - (if (pair? rp) - (let loop ((rp2 rp)) - (if (pair? rp2) - (let ((j (car rp2))) - (if (= 0 (vector-ref INDEX j)) - (traverse j)) - (if (> (vector-ref INDEX i) - (vector-ref INDEX j)) - (vector-set! INDEX i (vector-ref INDEX j))) - (let ((F-i (vector-ref F i)) - (F-j (vector-ref F j))) - (bit-union F-i F-j token-set-size)) - (loop (cdr rp2)))))) - (if (= (vector-ref INDEX i) height) - (let loop () - (let ((j (vector-ref VERTICES top))) - (set! top (- top 1)) - (vector-set! INDEX j infinity) - (if (not (= i j)) - (begin - (bit-union (vector-ref F i) - (vector-ref F j) - token-set-size) - (loop))))))))) - - (let loop ((i 0)) - (if (< i ngotos) - (begin - (if (and (= 0 (vector-ref INDEX i)) - (pair? (vector-ref R i))) - (traverse i)) - (loop (+ i 1)))))) - - -;; -- - -(define (build-tables) - (define (add-action St Sym Act) - (let* ((x (vector-ref ACTION-TABLE St)) - (y (assv Sym x))) - (if y - (if (not (= Act (cdr y))) - ;; -- there is a conflict - (begin - (if (and (<= (cdr y) 0) - (<= Act 0)) - (begin - (display "%% Reduce/Reduce conflict ") - (display "(reduce ") (display (- Act)) - (display ", reduce ") (display (- (cdr y))) - (display ") on ") (print-symbol (+ Sym nvars)) - (display " in state ") (display St) - (newline) - (set-cdr! y (max (cdr y) Act))) - (begin - (display "%% Shift/Reduce conflict ") - (display "(shift ") (display Act) - (display ", reduce ") (display (- (cdr y))) - (display ") on ") (print-symbol (+ Sym nvars)) - (display " in state ") (display St) - (newline) - (set-cdr! y Act))))) - (vector-set! ACTION-TABLE St - (cons (cons Sym Act) x))))) - - (set! action-table (make-vector nstates '())) - - (do ((i 0 (+ i 1))) ; i = state - ((= i nstates)) - (let ((red (vector-ref reduction-table i))) - (if (and red (>= (red-nreds red) 1)) - (if (and (= (red-nreds red) 1) (vector-ref consistent i)) - (add-action i 'default (- (car (red-rules red)))) - (let ((k (vector-ref lookaheads (+ i 1)))) - (let loop ((j (vector-ref lookaheads i))) - (if (< j k) - (let ((rule (- (vector-ref LAruleno j))) - (lav (vector-ref LA j))) - (let loop2 ((token 0) (x (vector-ref lav 0)) (y 1) (z 0)) - (if (< token nterms) - (begin - (let ((in-la-set? (modulo x 2))) - (if (= in-la-set? 1) - (add-action i token rule))) - (if (= y (BITS-PER-WORD)) - (loop2 (+ token 1) - (vector-ref lav (+ z 1)) - 1 - (+ z 1)) - (loop2 (+ token 1) (quotient x 2) (+ y 1) z))))) - (loop (+ j 1))))))))) - - (let ((shiftp (vector-ref shift-table i))) - (if shiftp - (let loop ((k (shift-shifts shiftp))) - (if (pair? k) - (let* ((state (car k)) - (symbol (vector-ref acces-symbol state))) - (if (>= symbol nvars) - (add-action i (- symbol nvars) state)) - (loop (cdr k)))))))) - - (add-action final-state 0 'accept)) - -(define (compact-action-table) - (define (most-common-action acts) - (let ((accums '())) - (let loop ((l acts)) - (if (pair? l) - (let* ((x (cdar l)) - (y (assv x accums))) - (if (and (number? x) (< x 0)) - (if y - (set-cdr! y (+ 1 (cdr y))) - (set! accums (cons `(,x . 1) accums)))) - (loop (cdr l))))) - - (let loop ((l accums) (max 0) (sym #f)) - (if (null? l) - sym - (let ((x (car l))) - (if (> (cdr x) max) - (loop (cdr l) (cdr x) (car x)) - (loop (cdr l) max sym))))))) - - (do ((i 0 (+ i 1))) - ((= i nstates)) - (let ((acts (vector-ref action-table i))) - (if (vector? (vector-ref reduction-table i)) - (let ((act (most-common-action acts))) - (vector-set! action-table i - (cons `(default . ,(if act act 'error)) - (filter (lambda (x) - (not (eq? (cdr x) act))) - acts)))) - (vector-set! action-table i - (cons `(default . *error*) acts)))))) - - -(define (output-action-table prefix) - (display "(defconst ") (display prefix) (display "action-table") (newline) - (display " [") (newline) - (do ((i 0 (+ i 1))) - ((= i nstates)) - (display " ") - (write (vector-ref action-table i)) - (newline)) - (display " ])") (newline) - (newline)) - -(define (output-goto-table prefix) - (display "(defconst ") (display prefix) (display "goto-table") (newline) - (display " [") (newline) - (do ((i 0 (+ i 1))) - ((= i nstates)) - (display " ") - (let ((shifts (vector-ref shift-table i))) - (if shifts - (begin - (display "(") - (let loop ((l (shift-shifts shifts))) - (if (null? l) - (display ")") - (let* ((state (car l)) - (symbol (vector-ref acces-symbol state))) - (if (< symbol nvars) - (display `(,symbol . ,state))) - (loop (cdr l)))))) - (display '()))) - (newline)) - (display " ])") (newline) - (newline)) - -(define (output-reduction-table gram/actions prefix) - (display "(defconst ") (display prefix) (display "reduction-table") (newline) - (display " (vector") (newline) - (display " '()") (newline) - (for-each - (lambda (p) - (let ((act (cdr p))) - (display " (lambda (stack sp goto-table $look)") (newline) - (let* ((nt (caar p)) (rhs (cdar p)) (n (length rhs))) - (display " (let* (") - (if act - (let loop ((i 1) (l rhs)) - (if (not (null? l)) - (let ((rest (cdr l))) - (if (> i 1) (begin (newline) (display " "))) - (display "($") (display (+ (- n i) 1)) (display " ") - (display "(aref stack (- sp ") - (display (- (* i 2) 1)) - (display ")))") - (loop (+ i 1) rest))))) - (display ")") - (newline) - (display " ") - (if (= nt 0) - (display "(accept $1)") - (begin - (display "(lr-push stack (- sp ") - (display (* 2 n)) - (display ") ") - (display nt) - (display " goto-table ") - (write (cdr p)) - (display ")"))) - (display "))") (newline)))) - gram/Actions) - (display " ))") (newline) - (newline)) - -(define (output-header header parser-prefix) - (display header) - (display "(require 'lr-driver)") (newline) - (newline)) - -(define (output-footer footer) - (display footer) (newline) - (newline)) - -(define (output-parser-def parser-prefix prefix) - (display "(defun ") (display parser-prefix) (display "parse") (display "(scanner errorhandler)") (newline) - (display " (lr-parse scanner errorhandler ") (newline) - (display " ") (display prefix) (display "action-table") (newline) - (display " ") (display prefix) (display "goto-table") (newline) - (display " ") (display prefix) (display "reduction-table") (newline) - (display " ") (display prefix) (display "token-defs))") (newline) - (newline)) - -(define (output-token-defs terms prefix) - (let loop ((i 0) (l terms)) - (if (pair? l) - (let ((x (car l))) - (display "(defconst ") (display prefix) - (write x) - (display #\tab) - (display i) - (display ")") - (newline) - (loop (+ i 1) (cdr l))))) - (newline) - (display "(defconst ") (display prefix) (display "token-defs") (newline) - (display " (list ") (newline) - (let loop ((i 0) (l terms)) - (if (pair? l) - (begin - (display " (cons ") - (display i) - (display " \"") (display (car l)) (display "\")") - (newline) - (loop (+ i 1) (cdr l))))) - (display " ))") (newline) - (newline)) - -;; -- - -(define (rewrite-grammar grammar proc) - - (define eoi '*EOI*) - - (if (not (pair? grammar)) - (error "Grammar definition must be a non-empty list") - (let loop1 ((lst grammar) (rev-terms '())) - (if (and (pair? lst) (not (pair? (car lst)))) ; definition d'un terminal? - (let ((term (car lst))) - (cond ((not (valid-terminal? term)) - (error "Invalid terminal:" term)) - ((member term rev-terms) - (error "Terminal previously defined:" term)) - (else - (loop1 (cdr lst) (cons term rev-terms))))) - (let loop2 ((lst lst) (rev-nonterm-defs '())) - (if (pair? lst) - (let ((def (car lst))) - (if (not (pair? def)) - (error "Nonterminal definition must be a non-empty list") - (let ((nonterm (car def))) - (cond ((not (valid-nonterminal? nonterm)) - (error "Invalid nonterminal:" nonterm)) - ((or (member nonterm rev-terms) - (assoc nonterm rev-nonterm-defs)) - (error "Nonterminal previously defined:" nonterm)) - (else - (loop2 (cdr lst) - (cons def rev-nonterm-defs))))))) - (let* ((terms (cons eoi (reverse rev-terms))) - (nonterm-defs (reverse rev-nonterm-defs)) - (nonterms (cons '*start* (map car nonterm-defs)))) - (if (= (length nonterms) 1) - (error "Grammar must contain at least one nonterminal") - (let ((compiled-nonterminals - (map (lambda (nonterm-def) - (rewrite-nonterm-def nonterm-def - terms - nonterms)) - (cons `(*start* (,(cadr nonterms) ,eoi) : $1) - nonterm-defs)))) - (proc terms - nonterms - (map (lambda (x) (cons (caaar x) (map cdar x))) - compiled-nonterminals) - (apply append compiled-nonterminals))))))))))) - - -(define (rewrite-nonterm-def nonterm-def terms nonterms) - - (define No-NT (length nonterms)) - - (define (encode x) - (let ((PosInNT (pos-in-list x nonterms))) - (if PosInNT - PosInNT - (let ((PosInT (pos-in-list x terms))) - (if PosInT - (+ No-NT PosInT) - (error "undefined symbol : " x)))))) - - (if (not (pair? (cdr nonterm-def))) - (error "At least one production needed for nonterminal" (car nonterm-def)) - (let ((name (symbol->string (car nonterm-def)))) - (let loop1 ((lst (cdr nonterm-def)) - (i 1) - (rev-productions-and-actions '())) - (if (not (pair? lst)) - (reverse rev-productions-and-actions) - (let* ((rhs (car lst)) - (rest (cdr lst)) - (prod (map encode (cons (car nonterm-def) rhs)))) - (for-each (lambda (x) - (if (not (or (member x terms) (member x nonterms))) - (error "Invalid terminal or nonterminal" x))) - rhs) - (if (and (pair? rest) - (eq? (car rest) ':) - (pair? (cdr rest))) - (loop1 (cddr rest) - (+ i 1) - (cons (cons prod (cadr rest)) - rev-productions-and-actions)) - (let* ((rhs-length (length rhs)) - (action - (cons 'VECTOR - (cons (list 'QUOTE (string->symbol - (string-append - name - "-" - (number->string i)))) - (let loop-j ((j 1)) - (if (> j rhs-length) - '() - (cons (string->symbol - (string-append - "$" - (number->string j))) - (loop-j (+ j 1))))))))) - (loop1 rest - (+ i 1) - (cons (cons prod action) - rev-productions-and-actions)))))))))) - -(define (valid-nonterminal? x) - (symbol? x)) - -(define (valid-terminal? x) - (symbol? x)) ; DB - -;; ---------------------------------------------------------------------- ;; -;; Miscellaneous ;; -;; ---------------------------------------------------------------------- ;; -(define (pos-in-list x lst) - (let loop ((lst lst) (i 0)) - (cond ((not (pair? lst)) #f) - ((equal? (car lst) x) i) - (else (loop (cdr lst) (+ i 1)))))) - -(define (sunion lst1 lst2) ; union of sorted lists - (let loop ((L1 lst1) - (L2 lst2)) - (cond ((null? L1) L2) - ((null? L2) L1) - (else - (let ((x (car L1)) (y (car L2))) - (cond - ((> x y) - (cons y (loop L1 (cdr L2)))) - ((< x y) - (cons x (loop (cdr L1) L2))) - (else - (loop (cdr L1) L2)) - )))))) - -(define (sinsert elem lst) - (let loop ((l1 lst)) - (if (null? l1) - (cons elem l1) - (let ((x (car l1))) - (cond ((< elem x) - (cons elem l1)) - ((> elem x) - (cons x (loop (cdr l1)))) - (else - l1)))))) - -(define (filter p lst) - (let loop ((l lst)) - (if (null? l) - '() - (let ((x (car l)) (y (cdr l))) - (if (p x) - (cons x (loop y)) - (loop y)))))) - -;; ---------------------------------------------------------------------- ;; -;; Debugging tools ... ;; -;; ---------------------------------------------------------------------- ;; -(define the-terminals #f) -(define the-nonterminals #f) - -(define (print-item item-no) - (let loop ((i item-no)) - (let ((v (vector-ref ritem i))) - (if (>= v 0) - (loop (+ i 1)) - (let* ((rlno (- v)) - (nt (vector-ref rlhs rlno))) - (display (vector-ref the-nonterminals nt)) (display " --> ") - (let loop ((i (vector-ref rrhs rlno))) - (let ((v (vector-ref ritem i))) - (if (= i item-no) - (display ". ")) - (if (>= v 0) - (begin - (print-symbol v) - (display " ") - (loop (+ i 1))) - (begin - (display " (rule ") - (display (- v)) - (display ")") - (newline)))))))))) - -(define (print-symbol n) - (display (if (>= n nvars) - (vector-ref the-terminals (- n nvars)) - (vector-ref the-nonterminals n)))) - -(define (print-states) - (define (print-action act) - (cond - ((eq? act '*error*) - (display " : Error")) - ((eq? act 'accept) - (display " : Accept input")) - ((< act 0) - (display " : reduce using rule ") - (display (- act))) - (else - (display " : shift and goto state ") - (display act))) - (newline) - #t) - - (define (print-actions acts) - (let loop ((l acts)) - (if (null? l) - #t - (let ((sym (caar l)) - (act (cdar l))) - (display " ") - (cond - ((eq? sym 'default) - (display "default action")) - (else - (print-symbol (+ sym nvars)))) - (print-action act) - (loop (cdr l)))))) - - (if (not action-table) - (begin - (display "No generated parser available!") - (newline) - #f) - (begin - (display "State table") (newline) - (display "-----------") (newline) (newline) - - (let loop ((l first-state)) - (if (null? l) - #t - (let* ((core (car l)) - (i (core-number core)) - (items (core-items core)) - (actions (vector-ref action-table i))) - (display "state ") (display i) (newline) - (newline) - (for-each (lambda (x) (display " ") (print-item x)) - items) - (newline) - (print-actions actions) - (newline) - (loop (cdr l)))))))) - - - diff --git a/lex.el b/lex.el deleted file mode 100644 index 2ba926b..0000000 --- a/lex.el +++ /dev/null @@ -1,315 +0,0 @@ -(require 'emu) -(require 'rx) -(require 'automata) -(provide 'lex) - -(put 'lex-scan-multibyte 'lisp-indent-function 3) -(put 'lex-scan-unibyte 'lisp-indent-function 3) - -;;; - -(eval-and-compile -;; CCL is not so fast for this library. -;; Because it requires quadratic time for skipping string prefix. -;; However, it is bit faster than emacs-lisp on average for common case, -;; it is default if available. -(defvar lex-use-ccl (fboundp 'ccl-execute-on-string)) -(when lex-use-ccl - (require 'ccl)) -) - -;;; user interface macro - -;;; multibyte - -(defvar lex-scan-multibyte-str-var (make-symbol "str")) -(defvar lex-scan-multibyte-ptr-var (make-symbol "ptr")) -(defvar lex-scan-multibyte-end-var (make-symbol "end")) -(defvar lex-scan-multibyte-mch-var (make-symbol "mch")) - -(defmacro lex-scan-multibyte-read (pc) - `(if (< ,lex-scan-multibyte-ptr-var ,lex-scan-multibyte-end-var) - (setq ,pc (sref ,lex-scan-multibyte-str-var ,lex-scan-multibyte-ptr-var) - ,lex-scan-multibyte-ptr-var (char-next-index ,pc ,lex-scan-multibyte-ptr-var) - ,pc (char-int ,pc)) - (lex-fail))) - -(defmacro lex-scan-multibyte-save () - `(setq ,lex-scan-multibyte-mch-var ,lex-scan-multibyte-ptr-var)) - -(defmacro lex-scan-multibyte (str start end &rest clauses) - (if (not start) (setq start 0)) - (if (not end) (setq end `(length ,lex-scan-multibyte-str-var))) - (let ((id 1) (rx ()) (acts ()) tmp code - (restore-code (if (symbolp start) `(setq ,start ,lex-scan-multibyte-mch-var)))) - (while (consp clauses) - (setq rx (cons (rx-con (caar clauses) (rx-act id)) rx) - acts (cons (cons id (cons restore-code (cdar clauses))) acts) - id (1+ id) - clauses (cdr clauses))) - (setq rx (rx-alt rx) - tmp (rx-categolize-char (rx-desugar rx))) - `(let* ((,lex-scan-multibyte-str-var ,str) - (,lex-scan-multibyte-ptr-var ,start) - (,lex-scan-multibyte-end-var ,end) - ,lex-scan-multibyte-mch-var) - ,(lex-gen-machine (lex-automata (car tmp)) (cdr tmp) acts 'lex-scan-multibyte-read 'lex-scan-multibyte-save)))) - -;;; unibyte - -(defvar lex-scan-unibyte-str-var (make-symbol "str")) -(defvar lex-scan-unibyte-ptr-var (make-symbol "ptr")) -(defvar lex-scan-unibyte-end-var (make-symbol "end")) -(defvar lex-scan-unibyte-mch-var (make-symbol "mch")) - -(defmacro lex-scan-unibyte-read (pc) - `(if (< ,lex-scan-unibyte-ptr-var ,lex-scan-unibyte-end-var) - (setq ,pc (aref ,lex-scan-unibyte-str-var ,lex-scan-unibyte-ptr-var) - ,lex-scan-unibyte-ptr-var (1+ ,lex-scan-unibyte-ptr-var) - ,pc (char-int ,pc)) - (lex-fail))) - -(defmacro lex-scan-unibyte-save () - `(setq ,lex-scan-unibyte-mch-var ,lex-scan-unibyte-ptr-var)) - -(defmacro lex-scan-unibyte (str start end &rest clauses) - (if (not start) (setq start 0)) - (if (not end) (setq end `(length ,lex-scan-unibyte-str-var))) - (let ((id 1) (rx ()) (acts ()) tmp code - (restore-code (if (symbolp start) `(setq ,start ,lex-scan-unibyte-mch-var)))) - (while (consp clauses) - (setq rx (cons (rx-con (caar clauses) (rx-act id)) rx) - acts (cons (cons id (cons restore-code (cdar clauses))) acts) - id (1+ id) - clauses (cdr clauses))) - (setq rx (rx-alt rx) - tmp (rx-categolize-char (rx-desugar rx))) - `(let* ((,lex-scan-unibyte-str-var ,str) - (,lex-scan-unibyte-ptr-var ,start) - (,lex-scan-unibyte-end-var ,end) - ,lex-scan-unibyte-mch-var) - ,(lex-gen-machine (lex-automata (car tmp)) (cdr tmp) acts 'lex-scan-unibyte-read 'lex-scan-unibyte-save)))) - -;;; automata generation - -(defun lex-automata (rx) - (let* ((rx (rx-simplify rx)) - (stack (list rx)) ; list of rx - (table (list (rx-cons* rx 0 (lex-make-box (list 'd1 'd2))))) - ; list of (rx id . box-for-reverse-links) - (states ()) ; list of (id act trans . box-for-reverse-links) - ; where trans = list of (pc id . box-for-reverse-links) - (next-id 1) - tbl-ent box id pcs act pc trans rx-stepped p) - (while (consp stack) - (setq rx (car stack) - stack (cdr stack) - tbl-ent (assoc rx table) - id (cadr tbl-ent) - box (cddr tbl-ent) - pcs (rx-head-pcs rx) - act (rx-head-act rx) - trans ()) - (while (consp pcs) - (setq pc (car pcs) - pcs (cdr pcs) - rx-stepped (rx-step rx pc) - p (assoc rx-stepped table)) - (if p - (progn - (setq trans (cons (cons pc (cdr p)) trans)) - (lex-add-box (cddr p) id)) - (setq p (rx-cons* rx-stepped next-id (lex-make-box (list id))) - trans (cons (cons pc (cdr p)) trans) - table (cons p table) - next-id (1+ next-id) - stack (cons rx-stepped stack)))) - (setq states - (cons (rx-cons* id act trans box) - states))) - states)) - -;;; automata coding - -(defvar lex-pc-var (make-symbol "pc")) -(defvar lex-act-var (make-symbol "act")) -(defvar lex-escape-tag (make-symbol "esc")) - -(defun lex-gen-machine (states cs acts read-macro save-macro) - `(let (,lex-pc-var ,lex-act-var) - ,(if (and lex-use-ccl - (eq read-macro 'lex-scan-unibyte-read) - (eq save-macro 'lex-scan-unibyte-save)) - (lex-gen-ccl-unibyte-automata states cs) - (lex-gen-automata states cs read-macro save-macro)) - ,(lex-gen-action acts))) - -(defun lex-gen-automata (states cs read-macro save-macro) - `(catch ',lex-escape-tag - (automata - ,lex-pc-var 0 - ,@(mapcar - (lambda (s) (lex-gen-state s cs read-macro save-macro)) - states)))) - -(defun lex-gen-state (s cs read-macro save-macro) - (let ((id (nth 0 s)) - (act (nth 1 s)) - (trans (nth 2 s))) - `(,id - (progn - ,@(if act - `((lex-match ,(cdr act)) (,save-macro)) - ()) - ,@(if (consp trans) `((,read-macro ,lex-pc-var)))) - (lex-fail) - ,@(mapcar - (lambda (tr) `(,(let ((l (member (car tr) cs))) - (if (null (cdr l)) - (natset-seg (car l)) - (natset-seg (car l) (1- (cadr l))))) - ,(cadr tr))) - trans)))) - -(defun lex-gen-action (acts) - `(automata-branch - ,lex-act-var ,(apply 'natset-single (mapcar 'car acts)) automata-never-fail - ,@(mapcar - (lambda (act) `(,(natset-single (car act)) nil ,@(cdr act))) - acts))) - -;;; CCL version automata generation - -(defun lex-gen-ccl-unibyte-automata (states cs) - ;; read-macro is lex-scan-unibyte-read - ;; save-macro is lex-scan-unibyte-save - `(let ((status [nil nil nil nil nil nil nil nil nil])) - (aset status 0 nil) ; r0: pc - (aset status 1 0) ; r1: state - (aset status 2 ,lex-scan-unibyte-ptr-var) ; r2: ptr - (aset status 3 ,lex-scan-unibyte-ptr-var) ; r3: start - (aset status 4 ,lex-scan-unibyte-end-var) ; r4: end - (aset status 5 nil) ; r5: mch - (aset status 6 0) ; r6: act - (aset status 7 nil) ; r7 - (aset status 8 nil) ; ic - (ccl-execute-on-string - (eval-when-compile - (ccl-compile - ',(lex-gen-ccl-unibyte-automata-program states cs))) - status - ,lex-scan-unibyte-str-var) - (setq ,lex-scan-unibyte-ptr-var (aref status 2)) - (when (< 0 (aref status 6)) - (setq ,lex-act-var (aref status 6) - ,lex-scan-unibyte-mch-var (aref status 5))))) - -(defun lex-gen-ccl-unibyte-automata-program (states cs) - `(0 - ((loop - (if (r3 > 0) - ((r3 -= 1) - (read r0) - (repeat)) - (break))) - (loop - (branch r1 - ,@(mapcar - (lambda (s) (lex-gen-ccl-unibyte-automata-state - (nth 0 s) (cdr (nth 1 s)) (nth 2 s) - cs)) - (sort states - (lambda (a b) (< (car a) (car b)))))))))) - -(defun lex-gen-ccl-unibyte-automata-state (id act trans cs) - `(,@(when act - `((r5 = r2) - (r6 = ,act))) - ,@(if (consp trans) - `((if (r4 <= r2) - (end) - ((read r0) - (r2 += 1) - ,(apply - 'natset-gen-ccl-branch - 'r0 - '(end) - (mapcar - (lambda (tr) (cons - (let ((l (member (car tr) cs))) - (if (null (cdr l)) - (natset-seg (car l)) - (natset-seg (car l) (1- (cadr l))))) - `((r1 = ,(cadr tr)) - (repeat)))) - trans)) - (repeat)))) - '((end))))) - -;;; internal macros - -(defmacro lex-match (id) - `(setq ,lex-act-var ',id)) -(defmacro lex-fail () - `(throw ',lex-escape-tag nil)) - -;;; utilities - -(defun lex-make-box (val) - (list val)) -(defalias 'lex-box-ref 'car) - -(defun lex-add-box (box val) - (if (not (member val (car box))) - (setcar box (cons val (car box))))) - -;;; testing -'( - - (mapcar (lambda (v) (set v (intern (symbol-name (symbol-value v))))) - '(lex-pc-var - lex-act-var - lex-escape-tag - lex-scan-multibyte-str-var - lex-scan-multibyte-ptr-var - lex-scan-multibyte-end-var - lex-scan-multibyte-mch-var - lex-scan-unibyte-str-var - lex-scan-unibyte-ptr-var - lex-scan-unibyte-end-var - lex-scan-unibyte-mch-var)) - - (lex-scan-multibyte - "aaa" 0 3 - (?a 'a)) - -(let* ((str "abcdef\ndeefx\r\n jfdks\r") - (p 15)) - (cons - (lex-scan-unibyte str p nil - (() - 'error) - (((* [^ "\r\n"]) - (* (+ ?\r) [^ "\r\n"] (* [^ "\r"])) - (* ?\r) - (?\r ?\n [" \t"])) - 'line-fold) - (((* [^ "\r\n"]) - (* (+ ?\r) [^ "\r\n"] (* [^ "\r"])) - (* ?\r) - (?\r ?\n)) - 'line-crlf) - (((* [^ "\r\n"]) - (* (+ ?\r) [^ "\r\n"] (* [^ "\r"])) - (* ?\r)) - 'line)) - p)) - -(ew-crlf-line-convert "abcdef\ndeefx\r\n jfdks\r" - (lambda (a) (format "[L:%s]" a)) - (lambda (a) (format "[F:%s]" a)) - (lambda (a) (format "[N:%s]" a))) - - -) - diff --git a/lr-driver.el b/lr-driver.el deleted file mode 100644 index 32fe294..0000000 --- a/lr-driver.el +++ /dev/null @@ -1,72 +0,0 @@ -;; ---------------------------------------------------------------------- ;; -;; FICHIER : lr-dvr.scm ;; -;; DATE DE CREATION : Fri May 31 15:47:05 1996 ;; -;; DERNIERE MODIFICATION : Fri May 31 15:51:13 1996 ;; -;; ---------------------------------------------------------------------- ;; -;; Copyright (c) 1996 Dominique Boucher ;; -;; ---------------------------------------------------------------------- ;; -;; The LR parser driver ;; -;; ;; -;; lr-dvr.scm is part of the lalr.scm distribution which is free ;; -;; software; you can redistribute it and/or modify ;; -;; it under the terms of the GNU General Public License as published by ;; -;; the Free Software Foundation; either version 2, or (at your option) ;; -;; any later version. ;; -;; ;; -;; lalr.scm is distributed in the hope that it will be useful, ;; -;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; -;; GNU General Public License for more details. ;; -;; ;; -;; You should have received a copy of the GNU General Public License ;; -;; along with lalr.scm; see the file COPYING. If not, write to ;; -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ;; -;; ---------------------------------------------------------------------- ;; - -;; 1998/08/16: Tanaka Akira transplants from Scheme to Emacs-Lisp. - -(provide 'lr-driver) - -(defconst lr-max-stack-size 500) - -(defsubst lr-push (stack sp new-cat goto-table lval) - (let* ((state (aref stack sp)) - (new-state (cdr (assq new-cat (aref goto-table state)))) - (new-sp (+ sp 2))) - (if (>= new-sp lr-max-stack-size) - (error "PARSE ERROR : stack overflow") - (progn - (aset stack new-sp new-state) - (aset stack (- new-sp 1) lval) - new-sp)))) - -(defun lr-parse (lexerp errorp action-table goto-table reduction-table token-defs) - (let ((stack (make-vector lr-max-stack-size 0)) (sp 0) (input (funcall lexerp))) - (catch 'parser - (while t - (let* ((state (aref stack sp)) - (i (car input)) - (act (let* ((l (aref action-table state)) (y (assq i l))) (if y (cdr y) (cdar l))))) - - (cond - - ;; Input succesfully parsed - ((eq act 'accept) - (throw 'parser (aref stack 1))) - - ;; Syntax error in input - ((eq act '*error*) - (throw 'parser - (funcall errorp "PARSE ERROR : unexpected token : " - (cdr (assq i token-defs))))) - - ;; Shift current token on top of the stack - ((>= act 0) - (aset stack (+ sp 1) (cdr input)) - (aset stack (+ sp 2) act) - (setq sp (+ sp 2)) - (setq input (funcall lexerp))) - - ;; Reduce by rule (- act) - (t - (setq sp (funcall (aref reduction-table (- act)) stack sp goto-table (cdr input)))))))))) diff --git a/mailcap.el b/mailcap.el deleted file mode 100644 index 12eee88..0000000 --- a/mailcap.el +++ /dev/null @@ -1,269 +0,0 @@ -;;; mailcap.el --- mailcap parser - -;; Copyright (C) 1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; Created: 1997/6/27 -;; Keywords: mailcap, setting, configuration, MIME, multimedia - -;; This file is part of SEMI (Spadework for Emacs MIME Interfaces). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'mime-def) - - -;;; @ comment -;;; - -(defsubst mailcap-skip-comment () - (let ((chr (char-after (point)))) - (when (and chr - (or (= chr ?\n) - (= chr ?#))) - (forward-line) - t))) - - -;;; @ token -;;; - -(defsubst mailcap-look-at-token () - (if (looking-at mime-token-regexp) - (let ((beg (match-beginning 0)) - (end (match-end 0))) - (goto-char end) - (buffer-substring beg end) - ))) - - -;;; @ typefield -;;; - -(defsubst mailcap-look-at-type-field () - (let ((type (mailcap-look-at-token))) - (if type - (if (eq (char-after (point)) ?/) - (progn - (forward-char) - (let ((subtype (mailcap-look-at-token))) - (if subtype - (cons (cons 'type (intern type)) - (unless (string= subtype "*") - (list (cons 'subtype (intern subtype))) - ))))) - (list (cons 'type (intern type))) - )))) - - -;;; @ field separator -;;; - -(defsubst mailcap-skip-field-separator () - (let ((ret (looking-at "\\([ \t]\\|\\\\\n\\)*;\\([ \t]\\|\\\\\n\\)*"))) - (when ret - (goto-char (match-end 0)) - t))) - - -;;; @ mtext -;;; - -(defsubst mailcap-look-at-schar () - (let ((chr (char-after (point)))) - (if (and (>= chr ? ) - (/= chr ?\;) - (/= chr ?\\) - ) - (prog1 - chr - (forward-char))))) - -(defsubst mailcap-look-at-qchar () - (let ((chr (char-after (point)))) - (when (eq chr ?\\) - (forward-char 2) - (char-before (point)) - ))) - -(defsubst mailcap-look-at-mtext () - (let ((beg (point))) - (while (or (mailcap-look-at-qchar) - (mailcap-look-at-schar))) - (buffer-substring beg (point)) - )) - - -;;; @ field -;;; - -(defsubst mailcap-look-at-field () - (let ((token (mailcap-look-at-token))) - (if token - (if (looking-at "[ \t]*=[ \t]*") - (let ((value (progn - (goto-char (match-end 0)) - (mailcap-look-at-mtext)))) - (if value - (cons (intern token) value) - )) - (list (intern token)) - )))) - - -;;; @ mailcap entry -;;; - -(defun mailcap-look-at-entry () - (let ((type (mailcap-look-at-type-field))) - (if (and type (mailcap-skip-field-separator)) - (let ((view (mailcap-look-at-mtext)) - fields field) - (when view - (while (and (mailcap-skip-field-separator) - (setq field (mailcap-look-at-field)) - ) - (setq fields (cons field fields)) - ) - (nconc type - (list (cons 'view view)) - fields)))))) - - -;;; @ main -;;; - -(defun mailcap-parse-buffer (&optional buffer order) - "Parse BUFFER as a mailcap, and return the result. -If optional argument ORDER is a function, result is sorted by it. -If optional argument ORDER is not specified, result is sorted original -order. Otherwise result is not sorted." - (save-excursion - (if buffer - (set-buffer buffer)) - (goto-char (point-min)) - (let (entries entry) - (while (progn - (while (mailcap-skip-comment)) - (setq entry (mailcap-look-at-entry)) - ) - (setq entries (cons entry entries)) - (forward-line) - ) - (cond ((functionp order) (sort entries order)) - ((null order) (nreverse entries)) - (t entries) - )))) - - -(defcustom mailcap-file "~/.mailcap" - "*File name of user's mailcap file." - :group 'mime - :type 'file) - -(defun mailcap-parse-file (&optional filename order) - "Parse FILENAME as a mailcap, and return the result. -If optional argument ORDER is a function, result is sorted by it. -If optional argument ORDER is not specified, result is sorted original -order. Otherwise result is not sorted." - (or filename - (setq filename mailcap-file)) - (with-temp-buffer - (insert-file-contents filename) - (mailcap-parse-buffer (current-buffer) order) - )) - -(defun mailcap-format-command (mtext situation) - "Return formated command string from MTEXT and SITUATION. - -MTEXT is a command text of mailcap specification, such as -view-command. - -SITUATION is an association-list about information of entity. Its key -may be: - - 'type primary media-type - 'subtype media-subtype - 'filename filename - STRING parameter of Content-Type field" - (let ((i 0) - (len (length mtext)) - (p 0) - dest) - (while (< i len) - (let ((chr (aref mtext i))) - (cond ((eq chr ?%) - (setq i (1+ i) - chr (aref mtext i)) - (cond ((eq chr ?s) - (let ((file (cdr (assq 'filename situation)))) - (if (null file) - (error "'filename is not specified in situation.") - (setq dest (concat dest - (substring mtext p (1- i)) - file) - i (1+ i) - p i) - ))) - ((eq chr ?t) - (let ((type (or (mime-type/subtype-string - (cdr (assq 'type situation)) - (cdr (assq 'subtype situation))) - "text/plain"))) - (setq dest (concat dest - (substring mtext p (1- i)) - type) - i (1+ i) - p i) - )) - ((eq chr ?\{) - (setq i (1+ i)) - (if (not (string-match "}" mtext i)) - (error "parse error!!!") - (let* ((me (match-end 0)) - (attribute (substring mtext i (1- me))) - (parameter (cdr (assoc attribute situation)))) - (if (null parameter) - (error "\"%s\" is not specified in situation." - attribute) - (setq dest (concat dest - (substring mtext p (- i 2)) - parameter) - i me - p i) - ) - ))) - (t (error "Invalid sequence `%%%c'." chr)) - )) - ((eq chr ?\\) - (setq dest (concat dest (substring mtext p i)) - p (1+ i) - i (+ i 2)) - ) - (t (setq i (1+ i))) - ))) - (concat dest (substring mtext p)) - )) - - -;;; @ end -;;; - -(provide 'mailcap) - -;;; mailcap.el ends here diff --git a/mel-b.el b/mel-b.el deleted file mode 100644 index e9a382a..0000000 --- a/mel-b.el +++ /dev/null @@ -1,362 +0,0 @@ -;;; mel-b.el: Base64 encoder/decoder for GNU Emacs - -;; Copyright (C) 1992,1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: ENAMI Tsugutomo -;; MORIOKA Tomohiko -;; Created: 1995/6/24 -;; Keywords: MIME, Base64 - -;; This file is part of MEL (MIME Encoding Library). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) - - -;;; @ variables -;;; - -(defvar base64-external-encoder '("mmencode") - "*list of base64 encoder program name and its arguments.") - -(defvar base64-external-decoder '("mmencode" "-u") - "*list of base64 decoder program name and its arguments.") - -(defvar base64-external-decoder-option-to-specify-file '("-o") - "*list of options of base64 decoder program to specify file.") - -(defvar base64-internal-encoding-limit 1000 - "*limit size to use internal base64 encoder. -If size of input to encode is larger than this limit, -external encoder is called.") - -(defvar base64-internal-decoding-limit 1000 - "*limit size to use internal base64 decoder. -If size of input to decode is larger than this limit, -external decoder is called.") - - -;;; @ internal base64 decoder/encoder -;;; based on base64 decoder by Enami Tsugutomo - -;;; @@ convert from/to base64 char -;;; - -(defun base64-num-to-char (n) - (cond ((eq n nil) ?=) - ((< n 26) (+ ?A n)) - ((< n 52) (+ ?a (- n 26))) - ((< n 62) (+ ?0 (- n 52))) - ((= n 62) ?+) - ((= n 63) ?/) - (t (error "not a base64 integer %d" n)))) - -(defun base64-char-to-num (c) - (cond ((and (<= ?A c) (<= c ?Z)) (- c ?A)) - ((and (<= ?a c) (<= c ?z)) (+ (- c ?a) 26)) - ((and (<= ?0 c) (<= c ?9)) (+ (- c ?0) 52)) - ((= c ?+) 62) - ((= c ?/) 63) - ((= c ?=) nil) - (t (error "not a base64 character %c" c)))) - - -;;; @@ encode/decode one base64 unit -;;; - -(defun base64-encode-1 (pack) - (let ((a (car pack)) - (b (nth 1 pack)) - (c (nth 2 pack))) - (concat - (char-to-string (base64-num-to-char (ash a -2))) - (if b - (concat - (char-to-string - (base64-num-to-char (logior (ash (logand a 3) 4) (ash b -4)))) - (if c - (concat - (char-to-string - (base64-num-to-char (logior (ash (logand b 15) 2) (ash c -6)))) - (char-to-string (base64-num-to-char (logand c 63))) - ) - (concat (char-to-string - (base64-num-to-char (ash (logand b 15) 2))) "=") - )) - (concat (char-to-string - (base64-num-to-char (ash (logand a 3) 4))) "==") - )))) - -(defun base64-decode-unit (a b &optional c d) - (condition-case err - (concat - (char-to-string (logior (ash (base64-char-to-num a) 2) - (ash (setq b (base64-char-to-num b)) -4))) - (if (and c (setq c (base64-char-to-num c))) - (concat (char-to-string - (logior (ash (logand b 15) 4) (ash c -2))) - (if (and d (setq d (base64-char-to-num d))) - (char-to-string (logior (ash (logand c 3) 6) d)) - )))) - (error (message (nth 1 err)) - ""))) - - -;;; @@ base64 encoder/decoder for string -;;; - -(defun base64-encode-string (string) - "Encode STRING to base64, and return the result." - (let ((len (length string)) - (b 0)(e 57) - dest) - (while (< e len) - (setq dest - (concat dest - (mapconcat - (function base64-encode-1) - (pack-sequence (substring string b e) 3) - "") - "\n")) - (setq b e - e (+ e 57) - ) - ) - (let* ((es (mapconcat - (function base64-encode-1) - (pack-sequence (substring string b) 3) - "")) - (m (mod (length es) 4)) - ) - (concat dest es (cond ((= m 3) "=") - ((= m 2) "==") - )) - ))) - -(defun base64-internal-decode-string (string) - (let ((len (length string)) - (i 0) - dest) - (while (< i len) - (let ((a (aref string i))) - (setq i (1+ i)) - (unless (eq a ?\n) - (let ((b (aref string i))) - (setq i (1+ i)) - (cond - ((eq b ?\n) - ;; invalid - ) - ((>= i len) - (setq dest (concat dest (base64-decode-unit a b) )) - ) - (t - (let ((c (aref string i))) - (setq i (1+ i)) - (cond - ((eq c ?\n) - (setq dest (concat dest (base64-decode-unit a b))) - ) - ((>= i len) - (setq dest (concat dest (base64-decode-unit a b c))) - ) - (t - (let ((d (aref string i))) - (setq i (1+ i)) - (setq dest - (concat dest - (if (eq c ?\n) - (base64-decode-unit a b c) - (base64-decode-unit a b c d)))) - )))))))))) - dest)) - - -;;; @ base64 encoder/decoder for region -;;; - -(defun base64-internal-encode-region (beg end) - (save-excursion - (save-restriction - (narrow-to-region beg end) - (let ((str (buffer-substring beg end))) - (delete-region beg end) - (insert (base64-encode-string str)) - ) - (or (bolp) - (insert "\n") - ) - ))) - -(defun base64-internal-decode-region (beg end) - (save-excursion - (let ((str (buffer-substring beg end))) - (delete-region beg end) - (goto-char beg) - (insert (base64-internal-decode-string str))))) - -(defun base64-external-encode-region (beg end) - (save-excursion - (save-restriction - (narrow-to-region beg end) - (as-binary-process (apply (function call-process-region) - beg end (car base64-external-encoder) - t t nil (cdr base64-external-encoder)) - ) - ;; for OS/2 - ;; regularize line break code - (goto-char (point-min)) - (while (re-search-forward "\r$" nil t) - (replace-match "") - ) - ))) - -(defun base64-external-decode-region (beg end) - (save-excursion - (as-binary-process (apply (function call-process-region) - beg end (car base64-external-decoder) - t t nil (cdr base64-external-decoder)) - ))) - -(defun base64-external-decode-string (string) - (with-temp-buffer - (insert string) - (as-binary-process (apply (function call-process-region) - (point-min) (point-max) - (car base64-external-decoder) - t t nil (cdr base64-external-decoder)) - ) - (buffer-string))) - - -(defun base64-encode-region (start end) - "Encode current region by base64. -START and END are buffer positions. -This function calls internal base64 encoder if size of region is -smaller than `base64-internal-encoding-limit', otherwise it calls -external base64 encoder specified by `base64-external-encoder'. In -this case, you must install the program (maybe mmencode included in -metamail or XEmacs package)." - (interactive "r") - (if (and base64-internal-encoding-limit - (> (- end start) base64-internal-encoding-limit)) - (base64-external-encode-region start end) - (base64-internal-encode-region start end) - )) - -(defun base64-decode-region (start end) - "Decode current region by base64. -START and END are buffer positions. -This function calls internal base64 decoder if size of region is -smaller than `base64-internal-decoding-limit', otherwise it calls -external base64 decoder specified by `base64-external-decoder'. In -this case, you must install the program (maybe mmencode included in -metamail or XEmacs package)." - (interactive "r") - (if (and base64-internal-decoding-limit - (> (- end start) base64-internal-decoding-limit)) - (base64-external-decode-region start end) - (base64-internal-decode-region start end) - )) - -(defun base64-decode-string (string) - "Decode STRING which is encoded in base64, and return the result. -This function calls internal base64 decoder if size of STRING is -smaller than `base64-internal-decoding-limit', otherwise it calls -external base64 decoder specified by `base64-external-decoder'. In -this case, you must install the program (maybe mmencode included in -metamail or XEmacs package)." - (interactive "r") - (if (and base64-internal-decoding-limit - (> (length string) base64-internal-decoding-limit)) - (base64-external-decode-string string) - (base64-internal-decode-string string) - )) - - -;;; @ base64 encoder/decoder for file -;;; - -(defun base64-insert-encoded-file (filename) - "Encode contents of file FILENAME to base64, and insert the result. -It calls external base64 encoder specified by -`base64-external-encoder'. So you must install the program (maybe -mmencode included in metamail or XEmacs package)." - (interactive (list (read-file-name "Insert encoded file: "))) - (apply (function call-process) (car base64-external-encoder) - filename t nil (cdr base64-external-encoder)) - ) - -(defun base64-write-decoded-region (start end filename) - "Decode and write current region encoded by base64 into FILENAME. -START and END are buffer positions." - (interactive - (list (region-beginning) (region-end) - (read-file-name "Write decoded region to file: "))) - (as-binary-process - (apply (function call-process-region) - start end (car base64-external-decoder) - nil nil nil - (append (cdr base64-external-decoder) - base64-external-decoder-option-to-specify-file - (list filename)) - ))) - - -;;; @ etc -;;; - -(defun base64-encoded-length (string) - (let ((len (length string))) - (* (+ (/ len 3) - (if (= (mod len 3) 0) 0 1) - ) 4) - )) - -(defun pack-sequence (seq size) - "Split sequence SEQ into SIZE elements packs, -and return list of packs. [mel-b; tl-seq function]" - (let ((len (length seq)) (p 0) obj - unit (i 0) - dest) - (while (< p len) - (setq obj (elt seq p)) - (setq unit (cons obj unit)) - (setq i (1+ i)) - (if (= i size) - (progn - (setq dest (cons (reverse unit) dest)) - (setq unit nil) - (setq i 0) - )) - (setq p (1+ p)) - ) - (if unit - (setq dest (cons (reverse unit) dest)) - ) - (reverse dest) - )) - - -;;; @ end -;;; - -(provide 'mel-b) - -;;; mel-b.el ends here. diff --git a/mel-dl.el b/mel-dl.el deleted file mode 100644 index 0e79cca..0000000 --- a/mel-dl.el +++ /dev/null @@ -1,143 +0,0 @@ -;;; mel-dl.el: Base64 encoder/decoder using DL module - -;; Copyright (C) 1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; Keywords: MIME, Base64 - -;; This file is part of MEL (MIME Encoding Library). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) - -(defvar base64-dl-module - (expand-file-name "base64.so" exec-directory)) - -(defvar base64-dl-handle - (and (file-exists-p base64-dl-module) - (dynamic-link base64-dl-module))) - -(dynamic-call "emacs_base64_init" base64-dl-handle) - -(defalias 'base64-encode-string 'encode-base64-string) -(defalias 'base64-decode-string 'decode-base64-string) - -(defun base64-encode-region (start end) - "Encode current region by base64. -START and END are buffer positions." - (interactive "r") - (save-excursion - (save-restriction - (narrow-to-region start end) - (let ((str (buffer-substring start end))) - (delete-region start end) - (insert (encode-base64-string str)) - ) - (or (bolp) - (insert "\n") - ) - ))) - -(defun base64-decode-region (start end) - "Decode current region by base64. -START and END are buffer positions." - (interactive "r") - (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char (point-min)) - (while (looking-at ".*\n") - (condition-case err - (replace-match - (decode-base64-string - (buffer-substring (match-beginning 0) (1- (match-end 0)))) - t t) - (error - (prog1 - (message (nth 1 err)) - (replace-match ""))))) - (if (looking-at ".*$") - (condition-case err - (replace-match - (decode-base64-string - (buffer-substring (match-beginning 0) (match-end 0))) - t t) - (error - (prog1 - (message (nth 1 err)) - (replace-match ""))) - )) - ))) - - -;;; @ base64 encoder/decoder for file -;;; - -(defvar base64-external-encoder '("mmencode") - "*list of base64 encoder program name and its arguments.") - -(defvar base64-external-decoder '("mmencode" "-u") - "*list of base64 decoder program name and its arguments.") - -(defvar base64-external-decoder-option-to-specify-file '("-o") - "*list of options of base64 decoder program to specify file.") - -(defun base64-insert-encoded-file (filename) - "Encode contents of file FILENAME to base64, and insert the result. -It calls external base64 encoder specified by -`base64-external-encoder'. So you must install the program (maybe -mmencode included in metamail or XEmacs package)." - (interactive (list (read-file-name "Insert encoded file: "))) - (apply (function call-process) (car base64-external-encoder) - filename t nil (cdr base64-external-encoder)) - ) - -(defun base64-write-decoded-region (start end filename) - "Decode and write current region encoded by base64 into FILENAME. -START and END are buffer positions." - (interactive - (list (region-beginning) (region-end) - (read-file-name "Write decoded region to file: "))) - (as-binary-process - (apply (function call-process-region) - start end (car base64-external-decoder) - nil nil nil - (append (cdr base64-external-decoder) - base64-external-decoder-option-to-specify-file - (list filename)) - ))) - - -;;; @ etc -;;; - -(defun base64-encoded-length (string) - (let ((len (length string))) - (* (+ (/ len 3) - (if (= (mod len 3) 0) 0 1) - ) 4) - )) - - -;;; @ end -;;; - -(provide 'mel-dl) - -;;; mel-dl.el ends here. diff --git a/mel-g.el b/mel-g.el deleted file mode 100644 index 73db30f..0000000 --- a/mel-g.el +++ /dev/null @@ -1,120 +0,0 @@ -;;; mel-g.el: Gzip64 encoder/decoder for GNU Emacs - -;; Copyright (C) 1995,1996,1997,1998 MORIOKA Tomohiko -;; Copyright (C) 1996,1997 Shuhei KOBAYASHI - -;; Author: Shuhei KOBAYASHI -;; modified by MORIOKA Tomohiko -;; Maintainer: Shuhei KOBAYASHI -;; Created: 1995/10/25 -;; Keywords: Gzip64, base64, gzip, MIME - -;; This file is part of MEL (MIME Encoding Library). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Commentary: - -;;; NOTE: Gzip64 is an experimental Content-Transfer-Encoding and its -;;; use is STRONGLY DISCOURAGED except for private communication. - -;;; Code: - -(require 'emu) -(require 'path-util) - - -;;; @ variables -;;; - -(defvar gzip64-external-encoder - (let ((file (exec-installed-p "mmencode"))) - (and file - (` ("sh" "-c" (, (concat "gzip -c | " file)))) - )) - "*list of gzip64 encoder program name and its arguments.") - -(defvar gzip64-external-decoder - (let ((file (exec-installed-p "mmencode"))) - (and file - (` ("sh" "-c" (, (concat file " -u | gzip -dc")))) - )) - "*list of gzip64 decoder program name and its arguments.") - - -;;; @ encoder/decoder for region -;;; - -(defun gzip64-external-encode-region (beg end) - (interactive "*r") - (save-excursion - (as-binary-process (apply (function call-process-region) - beg end (car gzip64-external-encoder) - t t nil (cdr gzip64-external-encoder)) - ) - ;; for OS/2 - ;; regularize line break code - (goto-char (point-min)) - (while (re-search-forward "\r$" nil t) - (replace-match "") - ) - )) - -(defun gzip64-external-decode-region (beg end) - (interactive "*r") - (save-excursion - (as-binary-process (apply (function call-process-region) - beg end (car gzip64-external-decoder) - t t nil (cdr gzip64-external-decoder)) - ) - )) - -(defalias 'gzip64-encode-region 'gzip64-external-encode-region) -(defalias 'gzip64-decode-region 'gzip64-external-decode-region) - - -;;; @ encoder/decoder for file -;;; - -(defun gzip64-insert-encoded-file (filename) - (interactive (list (read-file-name "Insert encoded file: "))) - (apply (function call-process) (car gzip64-external-encoder) - filename t nil - (cdr gzip64-external-encoder)) - ) - -(defun gzip64-write-decoded-region (start end filename) - "Decode and write current region encoded by gzip64 into FILENAME. -START and END are buffer positions." - (interactive - (list (region-beginning) (region-end) - (read-file-name "Write decoded region to file: "))) - (as-binary-process - (apply (function call-process-region) - start end (car gzip64-external-decoder) - nil nil nil - (let ((args (cdr gzip64-external-decoder))) - (append (butlast args) - (list (concat (car (last args)) ">" filename)))) - ))) - - -;;; @ end -;;; - -(provide 'mel-g) - -;;; mel-g.el ends here. diff --git a/mel-q.el b/mel-q.el deleted file mode 100644 index 47a7a2b..0000000 --- a/mel-q.el +++ /dev/null @@ -1,338 +0,0 @@ -;;; mel-q.el: Quoted-Printable and Q-encoding encoder/decoder for GNU Emacs - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; Created: 1995/6/25 -;; Keywords: MIME, Quoted-Printable, Q-encoding - -;; This file is part of MEL (MIME Encoding Library). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) -(require 'mime-def) - - -;;; @ Quoted-Printable encoder -;;; - -(defsubst quoted-printable-quote-char (character) - (concat - "=" - (char-to-string (aref quoted-printable-hex-chars (ash character -4))) - (char-to-string (aref quoted-printable-hex-chars (logand character 15))) - )) - -(defun quoted-printable-internal-encode-region (start end) - (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char start) - (let ((col 0)) - (while (< (point)(point-max)) - (cond ((>= col 75) - (insert "=\n") - (setq col 0) - ) - ((looking-at-as-unibyte "^From ") - (replace-match "=46rom ") - (backward-char 1) - (setq col (+ col 6)) - ) - ((looking-at-as-unibyte "[ \t]\n") - (forward-char 1) - (insert "=\n") - (forward-char 1) - (setq col 0) - ) - (t - (let ((chr (char-after (point)))) - (cond ((= chr ?\n) - (forward-char 1) - (setq col 0) - ) - ((or (= chr ?\t) - (and (<= 32 chr)(/= chr ?=)(< chr 127)) - ) - (forward-char 1) - (setq col (1+ col)) - ) - ((>= col 73) - (insert "=\n") - (setq col 0) - ) - (t - (delete-char 1) - (insert (quoted-printable-quote-char chr)) - (setq col (+ col 3)) - )) - ))) - ))))) - - -(defvar quoted-printable-external-encoder '("mmencode" "-q") - "*list of quoted-printable encoder program name and its arguments.") - -(defun quoted-printable-external-encode-region (start end) - (save-excursion - (save-restriction - (narrow-to-region start end) - (as-binary-process - (apply (function call-process-region) - start end (car quoted-printable-external-encoder) - t t nil (cdr quoted-printable-external-encoder)) - ) - ;; for OS/2 - ;; regularize line break code - (goto-char (point-min)) - (while (re-search-forward "\r$" nil t) - (replace-match "") - ) - ))) - - -(defvar quoted-printable-internal-encoding-limit - (if (and (featurep 'xemacs)(featurep 'mule)) - 0 - (require 'path-util) - (if (exec-installed-p "mmencode") - 1000 - (message "Don't found external encoder for Quoted-Printable!") - nil)) - "*limit size to use internal quoted-printable encoder. -If size of input to encode is larger than this limit, -external encoder is called.") - -(defun quoted-printable-encode-region (start end) - "Encode current region by quoted-printable. -START and END are buffer positions. -This function calls internal quoted-printable encoder if size of -region is smaller than `quoted-printable-internal-encoding-limit', -otherwise it calls external quoted-printable encoder specified by -`quoted-printable-external-encoder'. In this case, you must install -the program (maybe mmencode included in metamail or XEmacs package)." - (interactive "r") - (if (and quoted-printable-internal-encoding-limit - (> (- end start) quoted-printable-internal-encoding-limit)) - (quoted-printable-external-encode-region start end) - (quoted-printable-internal-encode-region start end) - )) - - -(defun quoted-printable-encode-string (string) - "Encode STRING to quoted-printable, and return the result." - (with-temp-buffer - (insert string) - (quoted-printable-encode-region (point-min)(point-max)) - (buffer-string) - )) - - -(defun quoted-printable-insert-encoded-file (filename) - "Encode contents of file FILENAME to quoted-printable, and insert the result. -It calls external quoted-printable encoder specified by -`quoted-printable-external-encoder'. So you must install the program -\(maybe mmencode included in metamail or XEmacs package)." - (interactive (list (read-file-name "Insert encoded file: "))) - (apply (function call-process) (car quoted-printable-external-encoder) - filename t nil (cdr quoted-printable-external-encoder)) - ) - - -;;; @ Quoted-Printable decoder -;;; - -(defsubst quoted-printable-hex-char-to-num (chr) - (cond ((<= ?a chr) (+ (- chr ?a) 10)) - ((<= ?A chr) (+ (- chr ?A) 10)) - ((<= ?0 chr) (- chr ?0)) - )) - -(defun quoted-printable-internal-decode-region (start end) - (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char (point-min)) - (while (search-forward "=" nil t) - (let ((beg (match-beginning 0))) - (cond ((looking-at "\n") - (delete-region beg (match-end 0)) - ) - ((looking-at - `,(concat "[" quoted-printable-hex-chars - "][" quoted-printable-hex-chars "]")) - (let* ((end (match-end 0)) - (hex (buffer-substring (match-beginning 0) end))) - (delete-region beg end) - (insert - (logior - (ash (quoted-printable-hex-char-to-num (aref hex 0)) 4) - (quoted-printable-hex-char-to-num (aref hex 1)))) - )) - (t - ;; invalid - )) - ))))) - -(defvar quoted-printable-external-decoder '("mmencode" "-q" "-u") - "*list of quoted-printable decoder program name and its arguments.") - -(defun quoted-printable-external-decode-region (start end) - (save-excursion - (as-binary-process - (apply (function call-process-region) - start end (car quoted-printable-external-decoder) - t t nil (cdr quoted-printable-external-decoder)) - ))) - - -(defvar quoted-printable-internal-decoding-limit nil - "*limit size to use internal quoted-printable decoder. -If size of input to decode is larger than this limit, -external decoder is called.") - -(defun quoted-printable-decode-region (start end) - "Decode current region by quoted-printable. -START and END are buffer positions. -This function calls internal quoted-printable decoder if size of -region is smaller than `quoted-printable-internal-decoding-limit', -otherwise it calls external quoted-printable decoder specified by -`quoted-printable-external-decoder'. In this case, you must install -the program (maybe mmencode included in metamail or XEmacs package)." - (interactive "r") - (if (and quoted-printable-internal-decoding-limit - (> (- end start) quoted-printable-internal-decoding-limit)) - (quoted-printable-external-decode-region start end) - (quoted-printable-internal-decode-region start end) - )) - -(defun quoted-printable-decode-string (string) - "Decode STRING which is encoded in quoted-printable, and return the result." - (with-temp-buffer - (insert string) - (quoted-printable-decode-region (point-min)(point-max)) - (buffer-string))) - - -(defvar quoted-printable-external-decoder-option-to-specify-file '("-o") - "*list of options of quoted-printable decoder program to specify file.") - -(defun quoted-printable-write-decoded-region (start end filename) - "Decode and write current region encoded by quoted-printable into FILENAME. -START and END are buffer positions." - (interactive - (list (region-beginning) (region-end) - (read-file-name "Write decoded region to file: "))) - (as-binary-process - (apply (function call-process-region) - start end (car quoted-printable-external-decoder) - nil nil nil - (append (cdr quoted-printable-external-decoder) - quoted-printable-external-decoder-option-to-specify-file - (list filename)) - ))) - - -;;; @ Q-encoding encode/decode string -;;; - -(defconst q-encoding-special-chars-alist - '((text ?= ?? ?_) - (comment ?= ?? ?_ ?\( ?\) ?\\) - (phrase ?= ?? ?_ ?\( ?\) ?\\ ?\" ?# ?$ ?% ?& ?' ?, ?. ?/ - ?: ?\; ?< ?> ?@ ?\[ ?\] ?^ ?` ?{ ?| ?} ?~) - )) - -(defun q-encoding-encode-string (string &optional mode) - "Encode STRING to Q-encoding of encoded-word, and return the result. -MODE allows `text', `comment', `phrase' or nil. Default value is -`phrase'." - (let ((specials (cdr (or (assq mode q-encoding-special-chars-alist) - (assq 'phrase q-encoding-special-chars-alist) - )))) - (mapconcat (function - (lambda (chr) - (cond ((eq chr ? ) "_") - ((or (< chr 32) (< 126 chr) - (memq chr specials) - ) - (quoted-printable-quote-char chr) - ) - (t - (char-to-string chr) - )) - )) - string "") - )) - -(defun q-encoding-decode-string (string) - "Decode STRING which is encoded in Q-encoding and return the result." - (let (q h l) - (mapconcat (function - (lambda (chr) - (cond ((eq chr ?_) " ") - ((eq chr ?=) - (setq q t) - "") - (q (setq h (quoted-printable-hex-char-to-num chr)) - (setq q nil) - "") - (h (setq l (quoted-printable-hex-char-to-num chr)) - (prog1 - (char-to-string (logior (ash h 4) l)) - (setq h nil) - ) - ) - (t (char-to-string chr)) - ))) - string ""))) - - -;;; @@ etc -;;; - -(defun q-encoding-printable-char-p (chr mode) - (and (not (memq chr '(?= ?? ?_))) - (<= ?\ chr)(<= chr ?~) - (cond ((eq mode 'text) t) - ((eq mode 'comment) - (not (memq chr '(?\( ?\) ?\\))) - ) - (t - (string-match "[A-Za-z0-9!*+/=_---]" (char-to-string chr)) - )))) - -(defun q-encoding-encoded-length (string &optional mode) - (let ((l 0)(i 0)(len (length string)) chr) - (while (< i len) - (setq chr (elt string i)) - (if (q-encoding-printable-char-p chr mode) - (setq l (+ l 1)) - (setq l (+ l 3)) - ) - (setq i (+ i 1)) ) - l)) - - -;;; @ end -;;; - -(provide 'mel-q) - -;;; mel-q.el ends here diff --git a/mel-u.el b/mel-u.el deleted file mode 100644 index d004d60..0000000 --- a/mel-u.el +++ /dev/null @@ -1,143 +0,0 @@ -;;; mel-u.el: uuencode encoder/decoder for GNU Emacs - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; Created: 1995/10/25 -;; Keywords: uuencode - -;; This file is part of MEL (MIME Encoding Library). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) -(require 'mime-def) - - -;;; @ variables -;;; - -(defvar uuencode-external-encoder '("uuencode" "-") - "*list of uuencode encoder program name and its arguments.") - -(defvar uuencode-external-decoder '("sh" "-c" "uudecode") - "*list of uuencode decoder program name and its arguments.") - - -;;; @ uuencode encoder/decoder for region -;;; - -(defun uuencode-external-encode-region (start end) - "Encode current region by unofficial uuencode format. -This function uses external uuencode encoder which is specified by -variable `uuencode-external-encoder'." - (interactive "*r") - (save-excursion - (as-binary-process (apply (function call-process-region) - start end (car uuencode-external-encoder) - t t nil (cdr uuencode-external-encoder)) - ) - ;; for OS/2 - ;; regularize line break code - (goto-char (point-min)) - (while (re-search-forward "\r$" nil t) - (replace-match "") - ) - )) - -(defun uuencode-external-decode-region (start end) - "Decode current region by unofficial uuencode format. -This function uses external uuencode decoder which is specified by -variable `uuencode-external-decoder'." - (interactive "*r") - (save-excursion - (let ((filename (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char start) - (if (re-search-forward "^begin [0-9]+ " nil t) - (if (looking-at ".+$") - (buffer-substring (match-beginning 0) - (match-end 0)) - ))))) - (default-directory mime-temp-directory)) - (if filename - (as-binary-process - (apply (function call-process-region) - start end (car uuencode-external-decoder) - t nil nil (cdr uuencode-external-decoder)) - (as-binary-input-file (insert-file-contents filename)) - ;; The previous line causes the buffer to be made read-only, I - ;; do not pretend to understand the control flow leading to this - ;; but suspect it has something to do with image-mode. -slb - ;; Use `inhibit-read-only' to avoid to force - ;; buffer-read-only nil. - tomo. - (let ((inhibit-read-only t)) - (delete-file filename) - ) - )) - ))) - -(defalias 'uuencode-encode-region 'uuencode-external-encode-region) -(defalias 'uuencode-decode-region 'uuencode-external-decode-region) - - -;;; @ uuencode encoder/decoder for file -;;; - -(defun uuencode-insert-encoded-file (filename) - "Insert file encoded by unofficial uuencode format. -This function uses external uuencode encoder which is specified by -variable `uuencode-external-encoder'." - (interactive (list (read-file-name "Insert encoded file: "))) - (call-process (car uuencode-external-encoder) filename t nil - (file-name-nondirectory filename)) - ) - -(defun uuencode-write-decoded-region (start end filename) - "Decode and write current region encoded by uuencode into FILENAME. -START and END are buffer positions." - (interactive - (list (region-beginning) (region-end) - (read-file-name "Write decoded region to file: "))) - (save-excursion - (let ((file (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char start) - (if (re-search-forward "^begin [0-9]+ " nil t) - (if (looking-at ".+$") - (buffer-substring (match-beginning 0) - (match-end 0)) - ))))) - (default-directory mime-temp-directory)) - (if file - (as-binary-process - (apply (function call-process-region) - start end (car uuencode-external-decoder) - nil nil nil (cdr uuencode-external-decoder)) - (rename-file file filename 'overwrites) - ))))) - - -;;; @ end -;;; - -(provide 'mel-u) - -;;; mel-u.el ends here diff --git a/mel.el b/mel.el deleted file mode 100644 index 2ed43a4..0000000 --- a/mel.el +++ /dev/null @@ -1,285 +0,0 @@ -;;; mel.el : a MIME encoding/decoding library - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; modified by Shuhei KOBAYASHI -;; Created: 1995/6/25 -;; Keywords: MIME, Base64, Quoted-Printable, uuencode, gzip64 - -;; This file is part of MEL (MIME Encoding Library). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) - - -;;; @ variable -;;; - -(defvar base64-dl-module - (and (fboundp 'dynamic-link) - (let ((path (expand-file-name "base64.so" exec-directory))) - (and (file-exists-p path) - path)))) - - -;;; @ autoload -;;; - -(cond (base64-dl-module - (autoload 'base64-encode-string "mel-dl" - "Encode STRING to base64, and return the result.") - (autoload 'base64-decode-string "mel-dl" - "Decode STRING which is encoded in base64, and return the result.") - (autoload 'base64-encode-region "mel-dl" - "Encode current region by base64." t) - (autoload 'base64-decode-region "mel-dl" - "Decode current region by base64." t) - (autoload 'base64-insert-encoded-file "mel-dl" - "Encode contents of file to base64, and insert the result." t) - (autoload 'base64-write-decoded-region "mel-dl" - "Decode and write current region encoded by base64 into FILENAME." t) - ;; for encoded-word - (autoload 'base64-encoded-length "mel-dl") - ) - (t - (autoload 'base64-encode-string "mel-b" - "Encode STRING to base64, and return the result.") - (autoload 'base64-decode-string "mel-b" - "Decode STRING which is encoded in base64, and return the result.") - (autoload 'base64-encode-region "mel-b" - "Encode current region by base64." t) - (autoload 'base64-decode-region "mel-b" - "Decode current region by base64." t) - (autoload 'base64-insert-encoded-file "mel-b" - "Encode contents of file to base64, and insert the result." t) - (autoload 'base64-write-decoded-region "mel-b" - "Decode and write current region encoded by base64 into FILENAME." t) - ;; for encoded-word - (autoload 'base64-encoded-length "mel-b") - )) - -(autoload 'quoted-printable-encode-string "mel-q" - "Encode STRING to quoted-printable, and return the result.") -(autoload 'quoted-printable-decode-string "mel-q" - "Decode STRING which is encoded in quoted-printable, and return the result.") -(autoload 'quoted-printable-encode-region "mel-q" - "Encode current region by Quoted-Printable." t) -(autoload 'quoted-printable-decode-region "mel-q" - "Decode current region by Quoted-Printable." t) -(autoload 'quoted-printable-insert-encoded-file "mel-q" - "Encode contents of file to quoted-printable, and insert the result." t) -(autoload 'quoted-printable-write-decoded-region "mel-q" - "Decode and write current region encoded by quoted-printable into FILENAME." - t) -;; for encoded-word -(autoload 'q-encoding-encode-string "mel-q" - "Encode STRING to Q-encoding of encoded-word, and return the result.") -(autoload 'q-encoding-decode-string "mel-q" - "Decode STRING which is encoded in Q-encoding and return the result.") -(autoload 'q-encoding-encoded-length "mel-q") - -(autoload 'uuencode-encode-region "mel-u" - "Encode current region by unofficial uuencode format." t) -(autoload 'uuencode-decode-region "mel-u" - "Decode current region by unofficial uuencode format." t) -(autoload 'uuencode-insert-encoded-file "mel-u" - "Insert file encoded by unofficial uuencode format." t) -(autoload 'uuencode-write-decoded-region "mel-u" - "Decode and write current region encoded by uuencode into FILENAME." t) - -(autoload 'gzip64-encode-region "mel-g" - "Encode current region by unofficial x-gzip64 format." t) -(autoload 'gzip64-decode-region "mel-g" - "Decode current region by unofficial x-gzip64 format." t) -(autoload 'gzip64-insert-encoded-file "mel-g" - "Insert file encoded by unofficial gzip64 format." t) -(autoload 'gzip64-write-decoded-region "mel-g" - "Decode and write current region encoded by gzip64 into FILENAME." t) - - -;;; @ region -;;; - -;;;###autoload -(defvar mime-encoding-method-alist - '(("base64" . base64-encode-region) - ("quoted-printable" . quoted-printable-encode-region) - ;; Not standard, their use is DISCOURAGED. - ;; ("x-uue" . uuencode-encode-region) - ;; ("x-gzip64" . gzip64-encode-region) - ("7bit") - ("8bit") - ("binary") - ) - "Alist of encoding vs. corresponding method to encode region. -Each element looks like (STRING . FUNCTION) or (STRING . nil). -STRING is content-transfer-encoding. -FUNCTION is region encoder and nil means not to encode.") - -;;;###autoload -(defvar mime-decoding-method-alist - '(("base64" . base64-decode-region) - ("quoted-printable" . quoted-printable-decode-region) - ("x-uue" . uuencode-decode-region) - ("x-uuencode" . uuencode-decode-region) - ("x-gzip64" . gzip64-decode-region) - ) - "Alist of encoding vs. corresponding method to decode region. -Each element looks like (STRING . FUNCTION). -STRING is content-transfer-encoding. -FUNCTION is region decoder.") - -;;;###autoload -(defun mime-encode-region (start end encoding) - "Encode region START to END of current buffer using ENCODING. -ENCODING must be string. If ENCODING is found in -`mime-encoding-method-alist' as its key, this function encodes the -region by its value." - (interactive - (list (region-beginning) (region-end) - (completing-read "encoding: " - mime-encoding-method-alist - nil t "base64")) - ) - (let ((f (cdr (assoc encoding mime-encoding-method-alist)))) - (if f - (funcall f start end) - ))) - -;;;###autoload -(defun mime-decode-region (start end encoding) - "Decode region START to END of current buffer using ENCODING. -ENCODING must be string. If ENCODING is found in -`mime-decoding-method-alist' as its key, this function decodes the -region by its value." - (interactive - (list (region-beginning) (region-end) - (completing-read "encoding: " - mime-decoding-method-alist - nil t "base64")) - ) - (let ((f (cdr (assoc encoding mime-decoding-method-alist)))) - (if f - (funcall f start end) - ))) - - -;;; @ string -;;; - -;;;###autoload -(defvar mime-string-decoding-method-alist - '(("base64" . base64-decode-string) - ("quoted-printable" . quoted-printable-decode-string) - ("7bit" . identity) - ("8bit" . identity) - ("binary" . identity) - ) - "Alist of encoding vs. corresponding method to decode string. -Each element looks like (STRING . FUNCTION). -STRING is content-transfer-encoding. -FUNCTION is string decoder.") - -;;;###autoload -(defun mime-decode-string (string encoding) - "Decode STRING using ENCODING. -ENCODING must be string. If ENCODING is found in -`mime-string-decoding-method-alist' as its key, this function decodes -the STRING by its value." - (let ((f (cdr (assoc encoding mime-string-decoding-method-alist)))) - (if f - (funcall f string) - (with-temp-buffer - (insert string) - (mime-decode-region (point-min)(point-max) encoding) - (buffer-string) - )))) - - -;;; @ file -;;; - -;;;###autoload -(defvar mime-file-encoding-method-alist - '(("base64" . base64-insert-encoded-file) - ("quoted-printable" . quoted-printable-insert-encoded-file) - ;; Not standard, their use is DISCOURAGED. - ;; ("x-uue" . uuencode-insert-encoded-file) - ;; ("x-gzip64" . gzip64-insert-encoded-file) - ("7bit" . insert-file-contents-as-binary) - ("8bit" . insert-file-contents-as-binary) - ("binary" . insert-file-contents-as-binary) - ) - "Alist of encoding vs. corresponding method to insert encoded file. -Each element looks like (STRING . FUNCTION). -STRING is content-transfer-encoding. -FUNCTION is function to insert encoded file.") - -;;;###autoload -(defvar mime-file-decoding-method-alist - '(("base64" . base64-write-decoded-region) - ("quoted-printable" . quoted-printable-write-decoded-region) - ("x-uue" . uuencode-write-decoded-region) - ("x-gzip64" . gzip64-write-decoded-region) - ("7bit" . write-region-as-binary) - ("8bit" . write-region-as-binary) - ("binary" . write-region-as-binary) - ) - "Alist of encoding vs. corresponding method to write decoded region to file. -Each element looks like (STRING . FUNCTION). -STRING is content-transfer-encoding. -FUNCTION is function to write decoded region to file.") - -;;;###autoload -(defun mime-insert-encoded-file (filename encoding) - "Insert file FILENAME encoded by ENCODING format." - (interactive - (list (read-file-name "Insert encoded file: ") - (completing-read "encoding: " - mime-encoding-method-alist - nil t "base64")) - ) - (let ((f (cdr (assoc encoding mime-file-encoding-method-alist)))) - (if f - (funcall f filename) - ))) - -;;;###autoload -(defun mime-write-decoded-region (start end filename encoding) - "Decode and write current region encoded by ENCODING into FILENAME. -START and END are buffer positions." - (interactive - (list (region-beginning) (region-end) - (read-file-name "Write decoded region to file: ") - (completing-read "encoding: " - mime-file-decoding-method-alist - nil t "base64"))) - (let ((f (cdr (assoc encoding mime-file-decoding-method-alist)))) - (if f - (funcall f start end filename) - ))) - - -;;; @ end -;;; - -(provide 'mel) - -;;; mel.el ends here. diff --git a/mime-def.el b/mime-def.el deleted file mode 100644 index f362130..0000000 --- a/mime-def.el +++ /dev/null @@ -1,326 +0,0 @@ -;;; mime-def.el --- definition module about MIME - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko -;; Keywords: definition, MIME, multimedia, mail, news - -;; This file is part of FLAM (Faithful Library About MIME). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(defconst mime-library-version-string - "FLAM-DOODLE 1.9.1 - \"$B2+C0(B\" 10R5.5/14.0") - - -;;; @ variables -;;; - -(require 'custom) - -(eval-when-compile (require 'cl)) - -(defgroup mime nil - "Emacs MIME Interfaces" - :group 'news - :group 'mail) - -(custom-handle-keyword 'default-mime-charset :group 'mime - 'custom-variable) - -(defcustom mime-temp-directory (or (getenv "MIME_TMP_DIR") - (getenv "TM_TMP_DIR") - (getenv "TMPDIR") - (getenv "TMP") - (getenv "TEMP") - "/tmp/") - "*Directory for temporary files." - :group 'mime - :type 'directory) - -(defcustom mime-uuencode-encoding-name-list '("x-uue" "x-uuencode") - "*List of encoding names for uuencode format." - :group 'mime - :type '(repeat string)) - - -;;; @ required functions -;;; - -(unless (fboundp 'butlast) - (defun butlast (x &optional n) - "Returns a copy of LIST with the last N elements removed." - (if (and n (<= n 0)) x - (nbutlast (copy-sequence x) n))) - - (defun nbutlast (x &optional n) - "Modifies LIST to remove the last N elements." - (let ((m (length x))) - (or n (setq n 1)) - (and (< n m) - (progn - (if (> n 0) (setcdr (nthcdr (- (1- m) n) x) nil)) - x)))) - ) - -(defsubst eliminate-top-spaces (string) - "Eliminate top sequence of space or tab in STRING." - (if (string-match "^[ \t]+" string) - (substring string (match-end 0)) - string)) - -(defsubst regexp-* (regexp) - (concat regexp "*")) - -(defsubst regexp-or (&rest args) - (concat "\\(" (mapconcat (function identity) args "\\|") "\\)")) - - -;;; @ about STD 11 -;;; - -(defconst std11-quoted-pair-regexp "\\\\.") -(defconst std11-non-qtext-char-list '(?\" ?\\ ?\r ?\n)) -(defconst std11-qtext-regexp - (concat "[^" (char-list-to-string std11-non-qtext-char-list) "]")) -(defconst std11-quoted-string-regexp - (concat "\"" - (regexp-* - (regexp-or std11-qtext-regexp std11-quoted-pair-regexp)) - "\"")) - - -;;; @ about MIME -;;; - -(defconst mime-tspecials "][()<>@,\;:\\\"/?=") -(defconst mime-token-regexp (concat "[^" mime-tspecials "\000-\040]+")) -(defconst mime-charset-regexp mime-token-regexp) - -(defconst mime-media-type/subtype-regexp - (concat mime-token-regexp "/" mime-token-regexp)) - - -;;; @@ Quoted-Printable -;;; - -(defconst quoted-printable-hex-chars "0123456789ABCDEF") - -(defconst quoted-printable-octet-regexp - (concat "=[" quoted-printable-hex-chars - "][" quoted-printable-hex-chars "]")) - - -;;; @ Content-Type -;;; - -(defsubst make-mime-content-type (type subtype &optional parameters) - (list* (cons 'type type) - (cons 'subtype subtype) - (nreverse parameters)) - ) - -(defsubst mime-content-type-primary-type (content-type) - "Return primary-type of CONTENT-TYPE." - (cdr (car content-type))) - -(defsubst mime-content-type-subtype (content-type) - "Return primary-type of CONTENT-TYPE." - (cdr (cadr content-type))) - -(defsubst mime-content-type-parameters (content-type) - "Return primary-type of CONTENT-TYPE." - (cddr content-type)) - -(defsubst mime-content-type-parameter (content-type parameter) - "Return PARAMETER value of CONTENT-TYPE." - (cdr (assoc parameter (mime-content-type-parameters content-type)))) - - -(defsubst mime-type/subtype-string (type &optional subtype) - "Return type/subtype string from TYPE and SUBTYPE." - (if type - (if subtype - (format "%s/%s" type subtype) - (format "%s" type)))) - - -;;; @ Content-Disposition -;;; - -(defsubst mime-content-disposition-type (content-disposition) - "Return disposition-type of CONTENT-DISPOSITION." - (cdr (car content-disposition))) - -(defsubst mime-content-disposition-parameters (content-disposition) - "Return disposition-parameters of CONTENT-DISPOSITION." - (cdr content-disposition)) - -(defsubst mime-content-disposition-parameter (content-disposition parameter) - "Return PARAMETER value of CONTENT-DISPOSITION." - (cdr (assoc parameter (cdr content-disposition)))) - -(defsubst mime-content-disposition-filename (content-disposition) - "Return filename of CONTENT-DISPOSITION." - (mime-content-disposition-parameter content-disposition "filename")) - - -;;; @ MIME entity -;;; - -(defsubst make-mime-entity-internal (representation-type location - &optional content-type - children parent node-id - buffer - header-start header-end - body-start body-end) - (vector representation-type location - content-type nil nil children parent node-id - buffer header-start header-end body-start body-end - nil nil)) - -(defsubst mime-entity-representation-type-internal (entity) - (aref entity 0)) -(defsubst mime-entity-set-representation-type-internal (entity type) - (aset entity 0 type)) -(defsubst mime-entity-location-internal (entity) - (aref entity 1)) - -(defsubst mime-entity-content-type-internal (entity) - (aref entity 2)) -(defsubst mime-entity-set-content-type-internal (entity type) - (aset entity 2 type)) -(defsubst mime-entity-content-disposition-internal (entity) - (aref entity 3)) -(defsubst mime-entity-set-content-disposition-internal (entity disposition) - (aset entity 3 disposition)) -(defsubst mime-entity-encoding-internal (entity) - (aref entity 4)) -(defsubst mime-entity-set-encoding-internal (entity encoding) - (aset entity 4 encoding)) - -(defsubst mime-entity-children-internal (entity) - (aref entity 5)) -(defsubst mime-entity-set-children-internal (entity children) - (aset entity 5 children)) -(defsubst mime-entity-parent-internal (entity) - (aref entity 6)) -(defsubst mime-entity-node-id-internal (entity) - (aref entity 7)) - -(defsubst mime-entity-buffer-internal (entity) - (aref entity 8)) -(defsubst mime-entity-set-buffer-internal (entity buffer) - (aset entity 8 buffer)) -(defsubst mime-entity-header-start-internal (entity) - (aref entity 9)) -(defsubst mime-entity-set-header-start-internal (entity point) - (aset entity 9 point)) -(defsubst mime-entity-header-end-internal (entity) - (aref entity 10)) -(defsubst mime-entity-set-header-end-internal (entity point) - (aset entity 10 point)) -(defsubst mime-entity-body-start-internal (entity) - (aref entity 11)) -(defsubst mime-entity-set-body-start-internal (entity point) - (aset entity 11 point)) -(defsubst mime-entity-body-end-internal (entity) - (aref entity 12)) -(defsubst mime-entity-set-body-end-internal (entity point) - (aset entity 12 point)) - -(defsubst mime-entity-original-header-internal (entity) - (aref entity 13)) -(defsubst mime-entity-set-original-header-internal (entity header) - (aset entity 13 header)) -(defsubst mime-entity-parsed-header-internal (entity) - (aref entity 14)) -(defsubst mime-entity-set-parsed-header-internal (entity header) - (aset entity 14 header)) - - -;;; @ message structure -;;; - -(defvar mime-message-structure nil - "Information about structure of message. -Please use reference function `mime-entity-SLOT' to get value of SLOT. - -Following is a list of slots of the structure: - -buffer buffer includes this entity (buffer). -node-id node-id (list of integers) -header-start minimum point of header in raw-buffer -header-end maximum point of header in raw-buffer -body-start minimum point of body in raw-buffer -body-end maximum point of body in raw-buffer -content-type content-type (content-type) -content-disposition content-disposition (content-disposition) -encoding Content-Transfer-Encoding (string or nil) -children entities included in this entity (list of entity) - -If an entity includes other entities in its body, such as multipart or -message/rfc822, `mime-entity' structures of them are included in -`children', so the `mime-entity' structure become a tree.") - -(make-variable-buffer-local 'mime-message-structure) - - -;;; @ for mm-backend -;;; - -(defvar mime-entity-implementation-alist nil) - -(defmacro mm-define-backend (type &optional parents) - (if parents - `(let ((rest ',(reverse parents))) - (while rest - (set-alist 'mime-entity-implementation-alist - ',type - (copy-alist - (cdr (assq (car rest) - mime-entity-implementation-alist)))) - (setq rest (cdr rest)) - )))) - -(defmacro mm-define-method (name args &rest body) - (let* ((specializer (car args)) - (class (nth 1 specializer)) - (self (car specializer))) - `(let ((imps (cdr (assq ',class mime-entity-implementation-alist))) - (func (lambda ,(if self - (cons self (cdr args)) - (cdr args)) - ,@body))) - (if imps - (set-alist 'mime-entity-implementation-alist - ',class (put-alist ',name func imps)) - (set-alist 'mime-entity-implementation-alist - ',class - (list (cons ',name func))) - )))) - -(put 'mm-define-method 'lisp-indent-function 'defun) - - -;;; @ end -;;; - -(provide 'mime-def) - -;;; mime-def.el ends here diff --git a/mime-en.sgml b/mime-en.sgml deleted file mode 100644 index f9d5d4e..0000000 --- a/mime-en.sgml +++ /dev/null @@ -1,1267 +0,0 @@ - - -FLIM 1.9 Manual about MIME Features -<author>MORIOKA Tomohiko <mail>morioka@jaist.ac.jp</mail> -<date>1998/07/01 - -<toc> -</head> - -<body> - -<abstract> -<p> -This file documents MIME features of FLIM, a Internet message -parsing/encoding library for GNU Emacs. -</abstract> - - -<h1> What is FLIM? -<node> Introduction -<p> -FLIM is a library to provide basic features about message -representation or encoding. - - -<h1> How to use MIME features -<node> How to use -<p> -Please eval following to use MIME features provided by FLIM: - -<lisp> -(require 'mime) -</lisp> - - -<h1> Message and Entity -<node> Entity -<p> -According to <dref>RFC 2045</dref>, `The term ``entity'', refers -specifically to the MIME-defined header fields and contents of either -a message or one of the parts in the body of a multipart entity.' In -this document, the term <concept>entity</concept> indicates all of -header fields and body. -<p> -The definition of RFC 2045 indicates that a MIME message is a tree. -An message is a tree, each node is an entity, like following figure. -Namely MIME extends message to tree structure. -<p> -FLIM uses <concept>mime-entity</concept> structure to represent -information of entity. In this document, it is called simply -`mime-entity'. -<p> -$BA0=R$N$h$&$K!"(Bmessage $BCf$N3F(B entity $B$OLZ$N@a$KEv$?$j$^$9$,!"$3$NLZ$K$O(B -$B?<$5$HF1$8?<$5$NCf$N=gHV$K=>$C$FHV9f$,IU$1$k$3$H$,$G$-$^$9!#B($A!"(B -<verb> - - $B(#(!(!(!($(B - $B("(B nil $B("(B - $B(&(!(((!(%(B - $B(#(!(!(!(!(!(!(!(!(!(+(!(!(!(!(!(!(!(!(!($(B - $B(#(*($(B $B(#(*($(B $B(#(*($(B - $B("#0("(B $B("#1("(B $B("#2("(B - $B(&(((%(B $B(&(((%(B $B(&(((%(B - $B("(B $B(#(!(!(!(!(+(!(!(!(!($(B $B("(B - $B(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(B - $B("(B $B#0(B.$B#0("("(B $B#1(B.$B#0("("(B $B#1(B.$B#1("("(B $B#1(B.$B#2("("(B $B#2(B.$B#0("(B - $B(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(B - -</verb> -<p> -<noindent>$B$N$h$&$K?<$5(B n $B$N@a$K$OD9$5(B n $B$N@0?tNs$N@aHV9f$,?6$l$^$9!#$3$l(B -$B$r(B <concept>entity-number</concept> $B$H8F$S$^$9!#(Bentity-number $B$O(B S $B<0$H(B -$B$7$F$O(B <code>(1 2 3)</code> $B$N$h$&$J@0?t$N%j%9%H$H$7$FI=8=$5$l$^$9!#(B -<p> -mime-entity $B$G$O!"$3$l$HF1MM$N(B <concept>node-id</concept> $B$rMQ$$$^$9!#(B -node-id $B$O$A$g$&$I(B entity-number $B$r5U$K$7$?%j%9%H$G!"(Bentity-number -1.2.3 $B$KBP1~$9$k(B node-id $B$O(B <code>(3 2 1)</code> $B$G$9!#(B -<p> -$BA0=R$N$h$&$K!"(BMIME message $B$O(B entity $B$rC10L$H$7$?LZ9=B$$K$J$C$F$$$k$N$G!"(B -$B$3$N:,$G$"$k(B message $BA4BN$b(B mime-entity $B$GI=8=$9$k$3$H$,$G$-!"(Bbuffer -local $BJQ?t(B <code>mime-message-structure</code> $B$K3JG<$9$k$3$H$K$7$^$9!#(B -$B$=$7$F!"(Bentity-number $B$d(B node-id $B$rMQ$$$k$3$H$G(B -<code>mime-message-structure</code> $B$K$*$1$k(B entity $B$NAjBPE*$J0LCV4X78$r(B -$B07$&$3$H$,$G$-$^$9!#(B - - -<h2> Functions to create mime-entity -<node> Entity creation -<p> -<defun name="mime-open-entity"> - <opts> type location -<p> -Open an entity and return it. -<p> -<var>type</var> is representation-type. <cf node="mm-backend"> -<p> -<var>location</var> is location of entity. Specification of it is -depended on representation-type. -</defun> - -<defun name="mime-parse-buffer"> - <opts> buffer type -<p> -Parse <var>buffer</var> as message, and set the result to buffer local -variable <code>mime-message-structure</code> of <var>buffer</var> as -mime-entity. -<p> -If <var>buffer</var> is omitted, current buffer is used. -<p> -<var>type</var> is representation-type of created mime-entity. <cf -node="mm-backend"> Default value is <var>buffer</var>. -</defun> - - -<h2> Features about message tree -<node> Entity hierarchy -<p> -<defvar name="mime-message-structure"> -<p> -Buffer local variable to store mime-entity structure of message. -</defvar> - -<defun name="mime-entity-children"> - <args> entity -<p> -Return list of entities included in the <var>entity</var>. -</defun> - -<defun name="mime-entity-parent"> - <args> entity <opts> message -<p> -Return parent entity of the <var>entity</var>. -<p> -If <var>message</var> is specified, it is regarded as root instead of -<code>mime-message-structure</code>. -</defun> - -<defun name="mime-root-entity-p"> - <args> entity -<p> -Return non-<code>nil</code> if <var>entity</var> is root entity -(message). -</defun> - -<defun name="mime-entity-node-id"> - <args> entity -<p> -Return node-id of <var>entity</var>. -</defun> - -<defun name="mime-entity-number"> - <args> entity -<p> -Return entity-number of <var>entity</var>. -</defun> - -<defun name="mime-find-entity-from-number"> - <args> entity-number <opts> message -<p> -Return entity from <var>entity-number</var> in <var>message</var>. -<p> -If <var>message</var> is not specified, -<code>mime-message-structure</code> is used. -</defun> - -<defun name="mime-find-entity-from-node-id"> - <args> entity-node-id <opts> message -<p> -Return entity from <var>entity-node-id</var> in <var>message</var>. -<p> -If <var>message</var> is not specified, -<code>mime-message-structure</code> is used. -</defun> - - -<h2> Functions about attributes of mime-entity -<node> Entity Attributes -<p> -<defun name="mime-entity-content-type"> - <args> entity -<p> -Return content-type of <var>entity</var>. -<cf node="mime-content-type"> -</defun> - -<defun name="mime-entity-content-disposition"> - <args> entity -<p> -Return content-disposition of <var>entity</var>. <cf -node="mime-content-disposition"> -</defun> - -<defun name="mime-entity-filename"> - <args> entity -<p> -Return file name of <var>entity</var>. -</defun> - -<defun name="mime-entity-encoding"> - <args> entity <opts> default-encoding -<p> -Return content-transfer-encoding of <var>entity</var>. -<cf node="Content-Transfer-Encoding"> -<p> -If the <var>entity</var> does not have Content-Transfer-Encoding -field, this function returns <var>default-encoding</var>. If it is -nil, <code>"7bit"</code> is used as default value. -</defun> - -<defun name="mime-entity-cooked-p"> - <args> entity -<p> -Return non-nil if contents of <var>entity</var> has been already -code-converted. -</defun> - - -<h2> Information of entity header -<node> Entity-header -<p> -<defun name="mime-fetch-field"> - <args> field-name <opts> entity -<p> -Return field-body of <var>field-name</var> field in header of -<var>entity</var>. -<p> -The results is network representation. -<p> -If <var>entity</var> is omitted, <code>mime-message-structure</code> -is used as default value. -<p> -If <var>field-name</var> field is not found, this function returns -<code>nil</code>. -</defun> - -<defun name="mime-read-field"> - <args> field-name <opts> entity -<p> -Parse <var>field-name</var> field in header of <var>entity</var>, and -return the result. -<p> -Format of result is depended on kind of field. For non-structured -field, this function returns string. For structured field, it returns -list corresponding with structure of the field. -<p> -Strings in the result will be converted to internal representation of -Emacs. -<p> -If <var>entity</var> is omitted, <code>mime-message-structure</code> -is used as default value. -<p> -If <var>field-name</var> field is not found, this function returns -<code>nil</code>. -</defun> - -<defun name="mime-insert-decoded-header"> - <args> entity <opts> invisible-fields visible-fields -<p> -Insert before point a decoded contents of header of <var>entity</var>. -<p> -<var>invisible-fields</var> is list of regexps to match field-name to -hide. <var>visible-fields</var> is list of regexps to match -field-name to hide. -<p> -If a field-name is matched with some elements of -<var>invisible-fields</var> and matched with none of -<var>visible-fields</var>, this function don't insert the field. -</defun> - - -<h2> Contents of Entity -<node> Entity-content -<p> -<defun name="mime-entity-content"> - <args> entity -<p> -Return content of <var>entity</var> as byte sequence. -</defun> - -<defun name="mime-write-entity-content"> - <args> entity filename -<p> -Write content of <var>entity</var> into <var>filename</var>. -</defun> - -<defun name="mime-write-entity"> - <args> entity filename -<p> -Write representation of <var>entity</var> into <var>filename</var>. -</defun> - -<defun name="mime-write-entity-body"> - <args> entity filename -<p> -Write body of <var>entity</var> into <var>filename</var>. -</defun> - - -<h2> Entity as buffer representation -<node> Entity buffer -<p> -<defun name="mime-entity-buffer"> - <args> entity -<p> -Return buffer, which contains <var>entity</var>. -</defun> - -<defun name="mime-entity-point-min"> - <args> entity -<p> -Return the start point of <var>entity</var> in the buffer which -contains <var>entity</var>. -</defun> - -<defun name="mime-entity-point-max"> - <args> entity -<p> -Return the end point of <var>entity</var> in the buffer which -contains <var>entity</var>. -</defun> - -<defun name="mime-entity-header-start"> - <args> entity -<p> -Return the start point of header of <var>entity</var> in the buffer -which contains <var>entity</var>. -</defun> - -<defun name="mime-entity-header-end"> - <args> entity -<p> -Return the end point of header of <var>entity</var> in the buffer -which contains <var>entity</var>. -</defun> - -<defun name="mime-entity-body-start"> - <args> entity -<p> -Return the start point of body of <var>entity</var> in the buffer -which contains <var>entity</var>. -</defun> - -<defun name="mime-entity-body-end"> - <args> entity -<p> -Return the end point of body of <var>entity</var> in the buffer which -contains <var>entity</var>. -</defun> - - -<h2> Entity representations and implementations -<node> mm-backend -<p> -Entity $B$OCj>]2=$5$l$?%G!<%?I=8=$G!"<B:]$N%G!<%?I=8=$H$7$F$OMQES$K1~$8$F(B -$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#(B -<p> -$B$3$3$G!"(Bentity $B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,(B -<concept>representation-type</concept> $B$G!"(Bentity $B$r@8@.$9$k;~$K$O$3$l$r(B -$B;XDj$7$^$9!#(B<cf node="Entity Creation"> -<p> -$BA0@a$^$G$K=R$Y$FMh$?(B entity $B$KBP$9$k=hM}$O!"(Bentity $B$KBP$7$F$=$N=hM}$r0M(B -$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#(BEntity $B$O<+J,$N(B -representation-type $B$rCN$C$F$*$j!"$=$N(B representation-type $B$K1~$8$F<B:](B -$B$N=hM}$r9T$&4X?t$r8F$S=P$7$^$9!#$3$N$h$&$J4X?t$r(B <concept>entity $B=hM}(B -method</concept> $B$H8F$S$^$9!#$^$?!"(Brepresentation-type $BKh$K$3$N$h$&$J4X(B -$B?t$r$^$H$a$?$b$N$r(B <concept>mm-backend</concept> $B$H8F$S$^$9!#(B -<p> -mm-backend $B$O(B representation-type $B$NL>A0$N@hF,$K(B <code>mm</code> $B$H$$$&(B -$B@\F,<-$rIU$1$?4X?tL>$+$i$J$k(B module $B$G!"$=$N(B module $BL>$OF1MM$K(B -representation-type $B$NL>A0$N@hF,$K(B <code>mm</code> $B$rIU$1$?$b$N$K$J$C$F(B -$B$$$^$9!#$3$N(B module $B$O(B representation-type $B$N(B entity $B$,:G=i$K@8@.$5$l$k(B -$B;~$K<+F0E*$K(B require $B$5$l$^$9!#(B - - -<h3> Message-passing for entity -<node> Request for entity -<p> -<defun name="mime-entity-send"> - <args> entity message <rest> args -<p> -<var>entity</var> $B$K(B <var>message</var> $B$rAw$k!#(B -<p> -<var>args</var> $B$O(B <var>message</var> $B$N0z?t$G$"$k!#(B -</defun> - - -<h3> How to make mm-backend -<node> mm-backend module -<p> -$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9(B (^_^;$B!K(B -<p> -$B!J$H$j$"$($:!"(Bmm*.el $B$r;29M$K$7$F$/$@$5$$!K(B - - -<h1> Information of Content-Type field -<node> Content-Type -<p> -<concept>Content-Type field</concept> is a field to indicate kind of -contents or data format, such as <dref>media-type</dref> and MIME -charset. It is defined in <dref>RFC 2045</dref>. - -<memo> -<p> -Historically, Content-Type field was proposed in RFC 1049. In it, -Content-Type did not distinguish type and subtype, and there are no -mechanism to represent kind of character code like MIME charset. -</memo> - -<p> -FLIM provides parser for Content-Type field and structure -<concept>mime-content-type</concept> to store information of -Content-Type field. - - -<h2> Format of Content-Type field -<node> Content-Type field -<p> -Content-Type $BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'(B - -<quote> -``Content-Type'' ``:'' <concept>type</concept> ``/'' -<concept>subtype</concept> *( ``;'' <concept>parameter</concept> ) -</quote> -<p> -$BNc$($P!"(B - -<quote> -<verb> -Content-Type: image/jpeg -</verb> -</quote> - -<noindent> -$B$d(B - -<quote> -<verb> -Content-Type: text/plain; charset=iso-2022-jp -</verb> -</quote> - -<noindent> -$B$J$I$N$h$&$KMQ$$$i$l$^$9!#(B -<p> -$B$3$3$G!"(B`type' $B$H(B `subtype' $B$O(B entity $B$N7A<0$r<($9$b$N$G!"N><T$rAm>N$7(B -$B$F!"(B`media-type' $B$H8F$V$3$H$K$7$^$9!#>e5-$NNc$K$*$1$k(B `image/jpeg' $B$d(B -`text/plain' $B$O(B media-type $B$N#1$D$G$9!#(B - -<memo> -<p> -Content-Type $BMs$N$J$$(B entity $B$O(B - -<quote> -<verb> -Content-Type: text/plain; charset=us-ascii -</verb> -</quote> - -<noindent> -$B$H$7$F2r<a$5$l$k!#(B<cf node="us-ascii"> -</memo> - - -<h2> mime-content-type structure -<node> mime-content-type -<p> -<define type="Structure" name="mime-content-type"> -<p> -Content-Type $BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#(B -<p> -$B$3$N9=B$BN$r;2>H$9$k$K$O(B <code>mime-content-type-$BMWAGL>(B</code> $B$H$$$&L>(B -$BA0$N;2>H4X?t$rMQ$$$k!#(B -<p> -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -<vl> -<dt>primary-type<dd>media-type $B$N<g7?(B (symbol). -</dd> -<dt>subtype<dd>media-type $B$NI{7?(B (symbol). -</dd> -<dt>parameters<dd>Content-Type $BMs$N(B parameter ($BO"A[(B list). -</dd> -</vl> -</define> - -<defun name="make-mime-content-type"> - <args> type subtype - <opts> parameters -<p>content-type $B$N@8@.;R!#(B -</defun> - -<defun name="mime-content-type-parameter"> -<args> content-type parameter -<p> -<var>content-type</var> $B$N(B <var>parameter</var> $B$NCM$rJV$9!#(B -</defun> - - -<h2> Parser -<node> Content-Type parser -<p> -<defun name="mime-parse-Content-Type"> - <args> string -<p> -<var>string</var> $B$r(B content-type $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -</defun> - -<defun name="mime-read-Content-Type"> -<p> -$B8=:_$N(B buffer $B$N(B Content-Type $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B -<p> -Content-Type $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -</defun> - - -<h2> Utility functions -<node> Content-Type utility -<p> -<defun name="mime-type/subtype-string"> - <args> type <opts> subtype -<p> -Return type/subtype string from <var>type</var> and -<var>subtype</var>. -</defun> - - -<h1> Information of Content-Disposition field -<node> Content-Disposition -<p> -<concept>Content-Disposition $BMs(B</concept> $B$O(B entity $B$NI=<($d(B file $BL>$J$I(B -$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#(B - -<rfc number="2183" type="Standards Track" - author="S. Dorner, K. Moore and R. Troost" - title="Communicating Presentation Information in - Internet Messages: The Content-Disposition Header" - date="August 1997"> -<p> -FLIM $B$O(B Content-Disposition $BMs$r9=J82r@O$9$k4X?t$H(B Content-Disposition -$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN(B -<concept>mime-content-disposition</concept> $B$rDs6!$7$^$9!#(B - - -<h2> mime-content-disposition structure -<node> mime-content-disposition -<p> -<define type="Structure" name="mime-content-disposition"> -<p> -Content-Disposition $BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#(B -<p> -$B$3$N9=B$BN$r;2>H$9$k$K$O(B <code>mime-content-disposition-$BMWAGL>(B</code> $B$H(B -$B$$$&L>A0$N;2>H4X?t$rMQ$$$k!#(B -<p> -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -<vl> -<dt>disposition-type<dd>disposition-type (symbol). -</dd> -<dt>parameters<dd>Content-Disposition $BMs$N(B parameter ($BO"A[(B list). -</dd> -</vl> -</define> - -<defun name="mime-content-disposition-parameter"> -<args> content-disposition parameter -<p> -<var>content-disposition</var> $B$N(B <var>parameter</var> $B$NCM$rJV$9!#(B -</defun> - -<defun name="mime-content-disposition-filename"> -<args> content-disposition -<p> -<var>content-disposition</var> $B$N(B filename $B$NCM$rJV$9!#(B -</defun> - - -<h2> Parser for Content-Disposition field -<node> Content-Disposition parser -<p> -<defun name="mime-parse-Content-Disposition"> - <args> string -<p> -<var>string</var> $B$r(B content-disposition $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -</defun> - -<defun name="mime-read-Content-Disposition"> -<p> -$B8=:_$N(B buffer $B$N(B Content-Disposition $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B -<p> -Content-Disposition $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -</defun> - - -<h1> Encoding Method -<node> Content-Transfer-Encoding -<p> -<concept>Content-Transfer-Encoding $BMs(B</concept> $B$O(B entity $B$NId9f2=K!$r5-(B -$B=R$9$k$?$a$N$b$N$G$9!#(B -<p> -FLIM $B$G$O(B Content-Transfer-Encoding $BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3(B -$B$l$i$N4X?t$O(B Content-Transfer-Encoding $BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#(B -<p> -$B$^$?!"(BContent-Transfer-Encoding $B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs(B -$B6!$5$l$^$9!#(B - - -<h2> Parser -<node> Content-Transfer-Encoding parser -<p> -<defun name="mime-parse-Content-Transfer-Encoding"> - <args> string -<p> -<var>string</var> $B$r(B content-transfer-encoding $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -</defun> - -<defun name="mime-read-Content-Transfer-Encoding"> - <opts>default-encoding -<p> -$B8=:_$N(B buffer $B$N(B Content-Transfer-Encoding $BMs$rFI$_<h$j!"2r@O$7$?7k2L$r(B -$BJV$9!#(B -<p> -Content-Transfer-Encoding $BMs$,B8:_$7$J$$>l9g$O(B -<var>default-encoding</var> $B$rJV$9!#(B -</defun> - - -<h2> Region encoding/decoding -<node> Region encoder/decoder -<p> -<defun name="mime-encode-region"> - <args> start end encoding -<p> -Encode region <var>start</var> to <var>end</var> of current buffer -using <var>encoding</var>. -</defun> - -<defun name="mime-decode-region"> - <args> start end encoding -<p> -Decode region <var>start</var> to <var>end</var> of current buffer -using <var>encoding</var>. -</defun> - -<defvar name="mime-encoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to encode region. -<p> -Each element looks like <code>(STRING . FUNCTION)</code> or -<code>(STRING . nil)</code>. <var>string</var> is -content-transfer-encoding. <code>function</code> is region encoder -and <code>nil</code> means not to encode. -</defvar> - -<defvar name="mime-decoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to decode region. -<p> -Each element looks like <code>(STRING . FUNCTION)</code> or -<code>(STRING . nil)</code>. <var>string</var> is -content-transfer-encoding. <code>function</code> is region decoder -and <code>nil</code> means not to decode. -</defvar> - - -<h2> String encoding/decoding -<node> String encoder/decoder -<p> -<defun name="mime-decode-string"> - <args> string encoding -<p> -<var>string</var> $B$r(B <var>encoding</var> $B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#(B -</defun> - -<defvar name="mime-string-decoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to decode string. -<p> -Each element looks like <code>(STRING . FUNCTION)</code>. -STRING is content-transfer-encoding. -FUNCTION is string decoder. -</defvar> - - -<h2> File encoding/decoding -<node> File encoder/decoder -<p> -<defun name="mime-insert-encoded-file"> - <args> filename encoding -<p> -Insert file <var>FILENAME</var> encoded by <var>ENCODING</var> format. -</defun> - -<defun name="mime-write-decoded-region"> - <args> start end filename encoding -<p> -Decode and write current region encoded by <var>encoding</var> into -<var>filename</var>. -<p> -<var>start</var> and <var>end</var> are buffer positions. -</defun> - -<defvar name="mime-file-encoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to insert encoded file. -<p> -Each element looks like <code>(STRING . FUNCTION)</code>. STRING is -content-transfer-encoding. FUNCTION is function to insert encoded -file. -</defvar> - -<defvar name="mime-file-decoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to write decoded region to -file. -<p> -Each element looks like <code>(STRING . FUNCTION)</code>. STRING is -content-transfer-encoding. FUNCTION is function to write decoded -region to file. -</defvar> - - -<h1> Network representation of header -<node> encoded-word -<p> -encoded-word $B$O(B header $B$GHs(B <dref>ASCII</dref> $BJ8;z$rI=8=$9$k$?$a$N7A(B -$B<0$G!"(B<concept>RFC 2047</concept> $B$GDj5A$5$l$F$$$^$9!#(B -<p> -<rfc number="2047" type="Standards Track" author="K. Moore" - title="MIME (Multipurpose Internet Mail Extensions) Part - Three: Message Header Extensions for Non-ASCII Text" - date="November 1996" obsolete="1521,1522,1590"> -<p> -$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"(Bencoded-word $B$rMQ$$$:$KHs(B -<dref>ASCII</dref> $BJ8;z$r(B header $B$KF~$l$?5-;v$bB8:_$7$^$9!#(B -<p> -FLIM $B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#(B - - -<h2> Header encoding/decoding -<node> Header encoder/decoder -<p> -<defun name="eword-encode-header"> - <opts> code-conversion separator -<p> -Decode MIME encoded-words in header fields. -<p> -If <var>code-conversion</var> is <code>nil</code>, it decodes only -encoded-words. If it is mime-charset, it decodes non-ASCII bit -patterns as the mime-charset. Otherwise it decodes non-ASCII bit -patterns as the default-mime-charset. -<p> -If <var>separator</var> is not nil, it is used as header separator. -</defun> - -<defun name="eword-encode-header"> - <opts> code-conversion -<p> -Encode header fields to network representation, such as MIME -encoded-word. -<p> -It refer variable <code>eword-field-encoding-method-alist</code>. -</defun> - - -<h1> Various Customization -<node> custom -<p> -<define type="group" name="mime"> -<p> -MIME $B4XO"5!G=$K4X$9$k(B group. -<p> -<code>mail</code> $B$H(B <code>news</code> $B$KB0$9$k!#(B -</define> - -<defvar name="default-mime-charset"> -<p> -$BE,@Z$J(B <dref>MIME charset</dref> $B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i$l$k(B -MIME charset. -<p> -$BK\Mh$O(B APEL $B$NJQ?t$G$"$k!#(B -</defvar> - -<defvar name="mime-temp-directory"> -<p> -MIME $B5!G=$K4X$9$k<BAu$,0l;~E*$K;HMQ$9$k(B file $B$r:n@.$9$k(B directory. -<p> -$B4D6-JQ?t(B <code>MIME_TMP_DIR</code>, <code>TM_TMP_DIR</code>, -<code>TMPDIR</code>, <code>TMP</code> $B$b$7$/$O(B <code>TEMP</code> $B$,@_Dj(B -$B$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$FMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"(B -<code>"/tmp/"</code> $B$rMQ$$$k!#(B -</defvar> - - -<h1> Appendix -<node> Appendix - -<h2> Glossary -<node> Glossary - -<h3> 7bit -<node> 7bit -<p> -<concept>7bit</concept> means any integer between 0 .. 127. -<p> -Any data represented by 7bit integers is called <concept>7bit -data</concept>. -<p> -Textual string consisted of Control characters between 0 .. 31 and -127, and space represented by 32, and graphic characters between 33 -.. 236 are called <concept>7bit (textual) string</concept>. -<p> -Conventional Internet <a node="MTA">MTA</a> can translate 7bit data, -so it is no need to translate by <a -node="Quoted-Printable">Quoted-Printable</a> or <a -node="Base64">Base64</a> for 7bit data. -<p> -However if there are too long lines, it can not translate by 7bit MTA -even if it is 7bit data. <dref>RFC 821</dref> and <dref>RFC -2045</dref> require lines in 7bit data must be less than 998 bytes. -So if a ``7bit data'' has a line more than 999 bytes, it is regarded -as <dref>binary</dref>. For example, Postscript file should be -encoded by Quoted-Printable. - - -<h3> 8bit -<node> 8bit -<p> -<concept>8bit</concept> means any integer between 0 .. 255. -<p> -Any data represented by 8bit integers is called <concept>8bit -data</concept>. -<p> -Textual string consisted of Control characters between 0 .. 31, 127, -and 128 .. 159, and space represented by 32, and graphic characters -between 33 .. 236 and 160 .. 255 are called <concept>8bit (textual) -string</concept>. -<p> -For example, <dref>iso-8859-1</dref> or <dref>euc-kr</dref> are -coded-character-set represented by 8bit textual string. -<p> -Traditional Internet <a node="MTA">MTA</a> can translate only -<dref>7bit</dref> data, so if a 8bit data will be translated such MTA, -it must be encoded by <dref>Quoted-Printable</dref> or -<dref>Base64</dref>. -<p> -However 8bit MTA are increasing today. -<p> -However if there are too long lines, it can not translate by 8bit MTA -even if it is 8bit data. <dref>RFC 2045</dref> require lines in 8bit -data must be less than 998 bytes. So if a ``8bit data'' has a line -more than 999 bytes, it is regarded as <dref>binary</dref>, so it must -be encoded by Base64 or Quoted-Printable. - - -<h3> ASCII -<node> ASCII -<p> -<concept>ASCII</concept> is a 94-character set contains primary latin -characters (A-Z, a-z), numbers and some characters. It is a standard -of the United States of America. It is a variant of <a node="ISO -646">ISO 646</a>. - -<standard abbrev="ASCII" title-en="Coded Character Set -- 7-Bit - American Standard Code for Information Interchange" - number="ANSI X3.4" year="1986"> - - -<h3> Base64 -<node> Base64 -<p> -<concept>Base64</concept> is a transfer encoding method of -<dref>MIME</dref> defined in <dref>RFC 2045</dref>. -<p> -The encoding process represents 24-bit groups of input bits as output -strings of 4 encoded characters. Encoded characters represent integer -0 .. 63 or <concept>pad</concept>. Base64 data must be 4 * n bytes, -so pad is used to adjust size. -<p> -These 65 characters are subset of all versions of ISO 646, including -US-ASCII, and all versions of EBCDIC. So it is safe even if it is -translated by non-Internet gateways. - - -<h3> binary -<node> binary -<p> -Any byte stream is called <concept>binary</concept>. -<p> -It does not require structureof lines. It differs from from <a -node="8bit">8bit</a>. -<p> -In addition, if line structured data contain too long line (more than -998 bytes), it is regarded as binary. - - -<h3> Coded character set, Character code -<node> coded character set -<p> -A set of unambiguous rules that establishes a character set and the -one-to-one relationship between the characters of the set and their -bit combinations. - - -<h3> media-type -<node> media-type -<p> -<concept>media-type</concept> specifies the nature of the data in the -body of <dref>MIME</dref> <dref>entity</dref>. It consists of -<concept>type</concept> and <concept>subtype</concept>. It is defined -in <dref>RFC 2046</dref>. -<p> -Currently there are following standard primary-types: - -<ul> -<li><concept>text</concept> -</li> -<li><concept>image</concept> -</li> -<li><concept>audio</concept> -</li> -<li><concept>video</concept> -</li> -<li><concept>application</concept> -</li> -<li><a node="multipart"><concept>multipart</concept></a> -</li> -<li><concept>message</concept> -</ul> - -<p> -And there are various subtypes, for example, application/octet-stream, -audio/basic, image/jpeg, <dref>multipart/mixed</dref>, -<dref>text/plain</dref>, video/mpeg... - -<p> -You can refer registered media types at <a -href="ftp://ftp.isi.edu/in-notes/iana/assignments/media-types">MEDIA -TYPES</a>. -<p> -In addition, you can use private type or subtype using -<concept>x-token</concept>, which as the prefix `x-'. However you can -not use them in public. -<p> -<cf node="Content-Type field"> - - -<h3> message -<node> message -<p> -In this document, it means mail defined in <dref>RFC 822</dref> and -news message defined in <dref>RFC 1036</dref>. - - -<h3> MIME -<node> MIME -<p> -MIME stands for <concept>Multipurpose Internet Mail -Extensions</concept>, it is an extension for <dref>RFC 822</dref>. -<p> -According to RFC 2045: -<p> -STD 11, RFC 822, defines a message representation protocol specifying -considerable detail about US-ASCII message headers, and leaves the -message content, or message body, as flat US-ASCII text. This set of -documents, collectively called the Multipurpose Internet Mail -Extensions, or MIME, redefines the format of messages to allow for - -<ol> -<li>textual message bodies in character sets other than US-ASCII, -</li> -<li>an extensible set of different formats for non-textual message -bodies, -</li> -<li>multi-part message bodies, and -</li> -<li>textual header information in character sets other than US-ASCII. -</ol> - -<p> -It is defined in <dref>RFC 2045</dref>, <dref>RFC 2046</dref>, <a -node="encoded-word">RFC 2047</a>, <dref>RFC 2048</dref> and <dref>RFC -2049</dref>. - - -<h3> MIME charset -<node> MIME charset -<p> -<a node="coded character set">Coded character set</a> used in -<dref>Content-Type field</dref> or charset parameter of <a -node="encoded-word">encoded-word</a>. -<p> -It is defined in <dref>RFC 2045</dref>. -<p> -<dref>iso-2022-jp</dref> or <dref>euc-kr</dref> are kinds of it. (In -this document, MIME charsets are written by small letters to -distinguish <dref>graphic character set</dref>. For example, ISO -8859-1 is a graphic character set, and iso-8859-1 is a MIME charset) - - -<h3> MTA -<node> MTA -<p> -<concept>Message Transfer Agent</concept>. It means mail transfer -programs (ex. sendmail) and news servers. -<p> -<cf node="MUA"> - - -<h3> MUA -<node> MUA -<p> -<concept>Message User Agent</concept>. It means mail readers and news -readers. -<p> -<cf node="MTA"> - - -<h3> Quoted-Printable -<node> Quoted-Printable -<p> -<concept>Quoted-Printable</concept> is a transfer encoding method of -<dref>MIME</dref> defined in <dref>RFC 2045</dref>. -<p> -If the data being encoded are mostly US-ASCII text, the encoded form -of the data remains largely recognizable by humans. -<p> -<cf node="Base64"> - - -<h3> RFC 822 -<node> RFC 822 -<p> -A RFC defines format of Internet mail message, mainly <concept>message -header</concept>. - -<memo> -<p> -news message is based on RFC 822, so <concept>Internet -message</concept> may be more suitable than <concept>Internet -mail</concept> . -</memo> - -<rfc number="822" type="STD 11" author="D. Crocker" title="Standard - for the Format of ARPA Internet Text Messages" - date="August 1982"> - - -<h3> RFC 1036 -<node> RFC 1036 -<p> -A RFC defines format of USENET message. It is a subset of <dref>RFC -822</dref>. It is not Internet standard, but a lot of netnews -excepting Usenet uses it. - -<rfc name="USENET" number="1036" author="M. Horton and R. Adams" - title="Standard for Interchange of USENET Messages" - date="December 1987" obsolete="850"> - - -<h3> RFC 2045 -<node> RFC 2045 -<p> -<rfc number="2045" type="Standards Track" author="N. Freed and - N. Borenstein" title="Multipurpose Internet Mail - Extensions (MIME) Part One: Format of Internet Message - Bodies" date="November 1996" obsolete="1521, 1522, - 1590"> - - -<h3> RFC 2046 -<node> RFC 2046 -<p> -<rfc number="2046" type="Standards Track" author="N. Freed and - N. Borenstein" title="Multipurpose Internet Mail - Extensions (MIME) Part Two: Media Types" - date="November 1996" obsolete="1521, 1522, 1590"> - - -<h3> RFC 2048 -<node> RFC 2048 -<p> -<rfc number="2048" type="Standards Track" author="N. Freed, J. Klensin - and J. Postel" title="Multipurpose Internet Mail - Extensions (MIME) Part Four: Registration Procedures" - date="November 1996" obsolete="1521, 1522, 1590"> - - -<h3> RFC 2049 -<node> RFC 2049 -<p> -<rfc number="2049" type="Standards Track" author="N. Freed and - N. Borenstein" title="Multipurpose Internet Mail - Extensions (MIME) Part Five: Conformance Criteria and - Examples" date="November 1996" obsolete="1521, 1522, - 1590"> - - -<h3> plain text -<node> plain text -<p> -A textual data represented by only <dref>coded character set</dref>. -It does not have information about font or typesetting. -<cf node="text/plain"> - - -<h3> us-ascii -<node> us-ascii -<p> -A <a node="MIME charset">MIME charset</a> for primary Latin script -mainly written by English or other languages. -<p> -It is a 7bit <dref>coded character set</dref> based on <dref>ISO -2022</dref>, it contains only -<dref>ASCII</dref> and <dref>code extension</dref> is not allowed. -<p> -It is standard coded character set of Internet mail. If MIME charset -is not specified, <concept>us-ascii</concept> is used as default. -<p> -In addition, <concept>ASCII</concept> of <dref>RFC 822</dref> should -be interpreted as us-ascii. - - -<h2> How to report bugs -<node> Bug report -<p> -If you write bug-reports and/or suggestions for improvement, please -send them to the tm Mailing List: - -<ul> -<li> Japanese <mail>bug-tm-ja@chamonix.jaist.ac.jp</mail> -<li> English <mail>bug-tm-en@chamonix.jaist.ac.jp</mail> -</ul> - -<p> -Notice that, we do not welcome bug reports about too old version. -Bugs in old version might be fixed. So please try latest version at -first. -<p> -You should write <concept>good bug report</concept>. If you write -only ``FLIM does not work'', we can not find such situations. At -least, you should write name, type, variants and version of OS, emacs, -APEL, FLIM, SEMI and MUA, and setting. In addition, if error occurs, -to send backtrace is very important. <cf file="emacs" node="Bugs"> -<p> -Bug may not appear only your environment, but also in a lot of -environment (otherwise it might not bug). Therefor if you send mail -to author directly, we must write a lot of mails. So please send mail -to address for tm bugs instead of author. - -<p> -Via the tm ML, you can report FLIM bugs, obtain the latest release of -FLIM, and discuss future enhancements to FLIM. To join the tm ML, -send empty e-mail to: - -<ul> -<li> Japanese <mail>tm-ja-help@chamonix.jaist.ac.jp</mail> -<li> English <mail>tm-en-help@chamonix.jaist.ac.jp</mail> -</ul> - - -<h2> CVS based development -<node> CVS -<p> -FLIM $B$N(B file $B$O(B CVS $B$r;H$C$F4IM}$5$l$F$$$^$9!#$3$N$?$a!"0J2<$NJ}K!$G:G(B -$B?7$N(B FLIM $B$rF~<j$9$k$3$H$,$G$-$^$9!'(B - -<verb> -(0) cvs login - - % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \ - login - - CVS password: [CR] # NULL string - -(1) checkout - - % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \ - checkout [-r TAG] flim -</verb> - -<p> -CVS $B$rMQ$$$?3+H/$K;22C$7$?$$J}$O(B - -<ul> -<li> <mail>cvs@chamonix.jaist.ac.jp</mail> -</ul> - -<noindent> -$B$^$G!"(Baccount $BL>$H(B UNIX $B$N(B passwd $B$HF1$87A<0$N(B crypt $B2=$5$l$?(B password -$B$r1h$($F8fO"Mm$/$@$5$$!#(B - - -<h2> History of FLIM -<node> History -<p> -FLIM $B$N(B code $B$N:G8E$NItJ,$O(B $B1]JB(B $B;LCR(B $B;a$,=q$$$?(B <file>mime.el</file> -$B$K5/8;$7$^$9!#$3$N>.$5$J(B program $B$O(B Nemacs $B$GF0:n$9$k(B iso-2022-jp $B$N(B -B-encoding $B@lMQ$N(B encoded-word $B$NI|9f2=%W%m%0%i%`$G$7$?!#(B -<p> -$B$=$N8e!"<i2,(B $BCNI'(B $B$O(B <file>mime.el</file> $B$r85$K(B -<file>tiny-mime.el</file> $B$H$$$&%W%m%0%i%`$r=q$-$^$9!#$3$l$O!"(BNemacs -$B$H(B Mule $B$GF0:n$9$k(B encoded-word $B$NId9f2=!&I|9f2=%W%m%0%i%`$G$7$?!#(B -<file>tiny-mime.el</file> $B$O(B B-encoding $B$@$1$G$J$/(B Q-encoding $B$b(B -support $B$7!"$^$?!"(BMULE $B$G07$&$3$H$,$G$-$k$5$^$6$^$J(B <dref>MIME -charset</dref> $B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"(BNemacs $B$H(B Mule $B$N(B -$BAPJ}$r(B support $B$9$k$?$a$KMQ$$$i$l$?%F%/%K%C%/$O8e$K(B emu package $B$K$^$H(B -$B$a$i$l$^$9!#(B -<p> -$B$3$N:"!"<i2,(B $BCNI'(B $B$O(B <file>tiny-mime.el</file> $B$r$5$^$6$^$J(B MUA $B$G;H$&(B -$B$?$a$N@_Dj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K(B -<file>tiny-mime.el</file> $B$H$H$b$K#1$D$N(B package $B$K$^$H$a$i$l!"(Btm $B$H$$(B -$B$&L>A0$GG[I[$5$l$^$9!#(B -<p> -$B<i2,(B $BCNI'(B $B$O$d$,$F!"(BMIME message $B$r1\Mw$9$k$?$a$N%W%m%0%i%`$G$"$k(B -<file>tm-body.el</file> $B$r=q$-$^$9!#$3$l$O!"$9$0$K(B -<file>tm-view.el</file> $B$H$$$&L>A0$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,(B -<file>tiny-mime.el</file> $B$KBe$o$C$F!"(Btm $B$NCf3K$H$J$j$^$9!#(B -<p> -<file>tm-view.el</file> $B$OEvA3!"(BContent-Transfer-Encoding $B$r07$&I,MW$,(B -$B$"$j$^$9!#$3$NL\E*$N$?$a$K!"(BMEL $B$,@0Hw$5$l$O$8$a$^$7$?!#(BBase64 $B$K4X$7(B -$B$F$O(B <file>tiny-mime.el</file> $B$N(B code $B$,0\$5$l!"$^$?!"?7$?$K(B -Quoted-Printable $B$N(B code $B$,DI2C$5$l$^$7$?!#$3$l$i$,(B -<file>mel-b.el</file> $B$H(B <file>mel-q.el</file> $B$K$J$j$^$7$?!#(B -<p> -$B$^$?!"8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B uuencode $BMQ$N(B <file>mel-u.el</file> $B$,(B -$BDI2C$5$l!"$=$N8e$K!">.NS(B $B=$J?(B $B;a$K$h$C$F(B x-gzip64 $BMQ$N(B -<file>mel-g.el</file> $B$,DI2C$5$l$^$7$?!#(B -<p> -tm $B$G$O8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B <file>tiny-mime.el</file> $B$N:F<BAu$,9T(B -$B$o$l!"$3$N2aDx$G!"(BSTD 11 $B$N(B parser $B$,=q$+$l$^$7$?!#$3$l$O!"8=:_$N(B -<file>std11.el</file> $B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G(B -<file>tiny-mime.el</file> $B$OI|9f2=$r9T$&(B <file>tm-ew-d.el</file> $B$HId(B -$B9f2=$r9T$&(B <file>tm-ew-e.el</file> $B$KJ,$1$i$l$^$7$?!#$3$NN><T$,8=:_$N(B -<file>eword-decode.el</file> $B$H(B <file>eword-encode.el</file> $B$N@hAD$K(B -$BEv$?$j$^$9!#(B -<p> -$B8e$K!"<i2,(B $BCNI'(B $B$i$K$h$C$F(B tm $B$NA4LL=q$-49$(:n6H$,9T$o$l!"$3$N2aDx$G!"(B -tm $B$O(B APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME $B$J$I$KJ,$1$i$l$^$7$?!#(B -$B$3$N$&$A$N(B MEL $B$,(B FLIM $B$ND>@\$N@hAD$KEv$?$j$^$9!#(B -<p> -$B8e$K!"(BAPEL $B$+$i(B <file>std11.el</file> $B$,0\$5$l!"$^$?!"(B -<file>mailcap.el</file>, <file>eword-decode.el</file> $B$*$h$S(B -<file>eword-encode.el</file> $B$,(B SEMI $B$+$i0\$5$l!"(Bpackage $B$NL>A0$,(B FLIM -$B$H$J$j$^$9!#(B -<p> -$B$3$ND>A0$+$iEDCf(B $BE/(B $B;a$,$h$j(B RFC $B$KCi<B$J<BAu$r=q$-;O$a!"$3$l$O!"8=:_!"(B -FLIM $B$N;^$G$"$k(B ``FLIM-FLAM'' $B$H$J$C$F$$$^$9!#(B - - -<h1> Concept Index -<node> Concept Index - -<cindex> - - -<h1> Function Index -<node> Function Index - -<findex> - - -<h1> Variable Index -<node> Variable Index - -<vindex> - -</body> diff --git a/mime-en.texi b/mime-en.texi deleted file mode 100644 index a95ec3d..0000000 --- a/mime-en.texi +++ /dev/null @@ -1,1474 +0,0 @@ -\input texinfo.tex -@setfilename mime-en.info -@settitle{FLIM 1.9 Manual about MIME Features} -@titlepage -@title FLIM 1.9 Manual about MIME Features -@author MORIOKA Tomohiko <morioka@@jaist.ac.jp> -@subtitle 1998/07/01 -@end titlepage -@node Top, Introduction, (dir), (dir) -@top FLIM 1.9 Manual about MIME Features - -@ifinfo - -This file documents MIME features of FLIM, a Internet message -parsing/encoding library for GNU Emacs. -@end ifinfo - -@menu -* Introduction:: What is FLIM? -* How to use:: How to use MIME features -* Entity:: Message and Entity -* Content-Type:: Information of Content-Type field -* Content-Disposition:: Information of Content-Disposition field -* Content-Transfer-Encoding:: Encoding Method -* encoded-word:: Network representation of header -* custom:: Various Customization -* Appendix:: -* Concept Index:: -* Function Index:: -* Variable Index:: -@end menu - -@node Introduction, How to use, Top, Top -@chapter What is FLIM? - -FLIM is a library to provide basic features about message -representation or encoding. - - -@node How to use, Entity, Introduction, Top -@chapter How to use MIME features - -Please eval following to use MIME features provided by FLIM: - -@lisp -(require 'mime) -@end lisp - - - -@node Entity, Content-Type, How to use, Top -@chapter Message and Entity -@cindex node-id -@cindex entity-number -@cindex mime-entity -@cindex entity - -According to RFC 2045 (@ref{RFC 2045}), `The term ``entity'', refers -specifically to the MIME-defined header fields and contents of either a -message or one of the parts in the body of a multipart entity.' In this -document, the term @strong{entity} indicates all of header fields and -body.@refill - -The definition of RFC 2045 indicates that a MIME message is a tree. An -message is a tree, each node is an entity, like following figure. -Namely MIME extends message to tree structure.@refill - -FLIM uses @strong{mime-entity} structure to represent information of -entity. In this document, it is called simply `mime-entity'.@refill - -$BA0=R$N$h$&$K!"(Bmessage $BCf$N3F(B entity $B$OLZ$N@a$KEv$?$j$^$9$,!"$3$NLZ$K$O(B -$B?<$5$HF1$8?<$5$NCf$N=gHV$K=>$C$FHV9f$,IU$1$k$3$H$,$G$-$^$9!#B($A!"(B -@example - - $B(#(!(!(!($(B - $B("(B nil $B("(B - $B(&(!(((!(%(B - $B(#(!(!(!(!(!(!(!(!(!(+(!(!(!(!(!(!(!(!(!($(B - $B(#(*($(B $B(#(*($(B $B(#(*($(B - $B("#0("(B $B("#1("(B $B("#2("(B - $B(&(((%(B $B(&(((%(B $B(&(((%(B - $B("(B $B(#(!(!(!(!(+(!(!(!(!($(B $B("(B - $B(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(B - $B("(B $B#0(B.$B#0("("(B $B#1(B.$B#0("("(B $B#1(B.$B#1("("(B $B#1(B.$B#2("("(B $B#2(B.$B#0("(B - $B(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(B -@end example - -@noindent -$B$N$h$&$K?<$5(B n $B$N@a$K$OD9$5(B n $B$N@0?tNs$N@aHV9f$,?6$l$^$9!#$3$l(B -$B$r(B @strong{entity-number} $B$H8F$S$^$9!#(Bentity-number $B$O(B S $B<0$H(B -$B$7$F$O(B @code{(1 2 3)} $B$N$h$&$J@0?t$N%j%9%H$H$7$FI=8=$5$l$^$9!#(B - -mime-entity $B$G$O!"$3$l$HF1MM$N(B @strong{node-id} $B$rMQ$$$^$9!#(Bnode-id $B$O$A$g(B -$B$&$I(B entity-number $B$r5U$K$7$?%j%9%H$G!"(Bentity-number 1.2.3 $B$KBP1~$9$k(B -node-id $B$O(B @code{(3 2 1)} $B$G$9!#(B@refill - -$BA0=R$N$h$&$K!"(BMIME message $B$O(B entity $B$rC10L$H$7$?LZ9=B$$K$J$C$F$$$k$N$G!"(B -$B$3$N:,$G$"$k(B message $BA4BN$b(B mime-entity $B$GI=8=$9$k$3$H$,$G$-!"(Bbuffer -local $BJQ?t(B @code{mime-message-structure} $B$K3JG<$9$k$3$H$K$7$^$9!#(B -$B$=$7$F!"(Bentity-number $B$d(B node-id $B$rMQ$$$k$3$H$G(B -@code{mime-message-structure} $B$K$*$1$k(B entity $B$NAjBPE*$J0LCV4X78$r(B -$B07$&$3$H$,$G$-$^$9!#(B - - -@menu -* Entity creation:: Functions to create mime-entity -* Entity hierarchy:: Features about message tree -* Entity Attributes:: Functions about attributes of mime-entity -* Entity-header:: Information of entity header -* Entity-content:: Contents of Entity -* Entity buffer:: Entity as buffer representation -* mm-backend:: Entity representations and implementations -@end menu - -@node Entity creation, Entity hierarchy, Entity, Entity -@section Functions to create mime-entity - -@defun mime-open-entity &optional type location - -Open an entity and return it.@refill - -@var{type} is representation-type. (cf. @ref{mm-backend}) @refill - -@var{location} is location of entity. Specification of it is depended -on representation-type. -@end defun - - -@defun mime-parse-buffer &optional buffer type - -Parse @var{buffer} as message, and set the result to buffer local -variable @code{mime-message-structure} of @var{buffer} as -mime-entity.@refill - -If @var{buffer} is omitted, current buffer is used.@refill - -@var{type} is representation-type of created -mime-entity. (cf. @ref{mm-backend}) Default value is @var{buffer}. -@end defun - - - -@node Entity hierarchy, Entity Attributes, Entity creation, Entity -@section Features about message tree - -@defvar mime-message-structure - -Buffer local variable to store mime-entity structure of message. -@end defvar - - -@defun mime-entity-children entity - -Return list of entities included in the @var{entity}. -@end defun - - -@defun mime-entity-parent entity &optional message - -Return parent entity of the @var{entity}.@refill - -If @var{message} is specified, it is regarded as root instead of -@code{mime-message-structure}. -@end defun - - -@defun mime-root-entity-p entity - -Return non-@code{nil} if @var{entity} is root entity (message). -@end defun - - -@defun mime-entity-node-id entity - -Return node-id of @var{entity}. -@end defun - - -@defun mime-entity-number entity - -Return entity-number of @var{entity}. -@end defun - - -@defun mime-find-entity-from-number entity-number &optional message - -Return entity from @var{entity-number} in @var{message}.@refill - -If @var{message} is not specified, @code{mime-message-structure} is -used. -@end defun - - -@defun mime-find-entity-from-node-id entity-node-id &optional message - -Return entity from @var{entity-node-id} in @var{message}.@refill - -If @var{message} is not specified, @code{mime-message-structure} is -used. -@end defun - - - -@node Entity Attributes, Entity-header, Entity hierarchy, Entity -@section Functions about attributes of mime-entity - -@defun mime-entity-content-type entity - -Return content-type of @var{entity}. (cf. @ref{mime-content-type}) -@end defun - - -@defun mime-entity-content-disposition entity - -Return content-disposition of -@var{entity}. (cf. @ref{mime-content-disposition}) -@end defun - - -@defun mime-entity-filename entity - -Return file name of @var{entity}. -@end defun - - -@defun mime-entity-encoding entity &optional default-encoding - -Return content-transfer-encoding of @var{entity}. -(cf. @ref{Content-Transfer-Encoding}) @refill - -If the @var{entity} does not have Content-Transfer-Encoding field, this -function returns @var{default-encoding}. If it is nil, @code{"7bit"} is -used as default value. -@end defun - - -@defun mime-entity-cooked-p entity - -Return non-nil if contents of @var{entity} has been already -code-converted. -@end defun - - - -@node Entity-header, Entity-content, Entity Attributes, Entity -@section Information of entity header - -@defun mime-fetch-field field-name &optional entity - -Return field-body of @var{field-name} field in header of -@var{entity}.@refill - -The results is network representation.@refill - -If @var{entity} is omitted, @code{mime-message-structure} is used as -default value.@refill - -If @var{field-name} field is not found, this function returns -@code{nil}. -@end defun - - -@defun mime-read-field field-name &optional entity - -Parse @var{field-name} field in header of @var{entity}, and return the -result.@refill - -Format of result is depended on kind of field. For non-structured -field, this function returns string. For structured field, it returns -list corresponding with structure of the field.@refill - -Strings in the result will be converted to internal representation of -Emacs.@refill - -If @var{entity} is omitted, @code{mime-message-structure} is used as -default value.@refill - -If @var{field-name} field is not found, this function returns -@code{nil}. -@end defun - - -@defun mime-insert-decoded-header entity &optional invisible-fields visible-fields - -Insert before point a decoded contents of header of @var{entity}.@refill - -@var{invisible-fields} is list of regexps to match field-name to hide. -@var{visible-fields} is list of regexps to match field-name to -hide.@refill - -If a field-name is matched with some elements of @var{invisible-fields} -and matched with none of @var{visible-fields}, this function don't -insert the field. -@end defun - - - -@node Entity-content, Entity buffer, Entity-header, Entity -@section Contents of Entity - -@defun mime-entity-content entity - -Return content of @var{entity} as byte sequence. -@end defun - - -@defun mime-write-entity-content entity filename - -Write content of @var{entity} into @var{filename}. -@end defun - - -@defun mime-write-entity entity filename - -Write representation of @var{entity} into @var{filename}. -@end defun - - -@defun mime-write-entity-body entity filename - -Write body of @var{entity} into @var{filename}. -@end defun - - - -@node Entity buffer, mm-backend, Entity-content, Entity -@section Entity as buffer representation - -@defun mime-entity-buffer entity - -Return buffer, which contains @var{entity}. -@end defun - - -@defun mime-entity-point-min entity - -Return the start point of @var{entity} in the buffer which contains -@var{entity}. -@end defun - - -@defun mime-entity-point-max entity - -Return the end point of @var{entity} in the buffer which contains -@var{entity}. -@end defun - - -@defun mime-entity-header-start entity - -Return the start point of header of @var{entity} in the buffer which -contains @var{entity}. -@end defun - - -@defun mime-entity-header-end entity - -Return the end point of header of @var{entity} in the buffer which -contains @var{entity}. -@end defun - - -@defun mime-entity-body-start entity - -Return the start point of body of @var{entity} in the buffer which -contains @var{entity}. -@end defun - - -@defun mime-entity-body-end entity - -Return the end point of body of @var{entity} in the buffer which -contains @var{entity}. -@end defun - - - -@node mm-backend, , Entity buffer, Entity -@section Entity representations and implementations -@cindex mm-backend -@cindex entity $B=hM}(B method -@cindex representation-type - -Entity $B$OCj>]2=$5$l$?%G!<%?I=8=$G!"<B:]$N%G!<%?I=8=$H$7$F$OMQES$K1~$8$F(B -$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#(B@refill - -$B$3$3$G!"(Bentity $B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,(B -@strong{representation-type} $B$G!"(Bentity $B$r@8@.$9$k;~$K$O$3$l$r;XDj$7$^$9!#(B -(cf. @ref{Entity Creation}) @refill - -$BA0@a$^$G$K=R$Y$FMh$?(B entity $B$KBP$9$k=hM}$O!"(Bentity $B$KBP$7$F$=$N=hM}$r0M(B -$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#(BEntity $B$O<+J,$N(B representation-type -$B$rCN$C$F$*$j!"$=$N(B representation-type $B$K1~$8$F<B:]$N=hM}$r9T$&4X?t$r8F(B -$B$S=P$7$^$9!#$3$N$h$&$J4X?t$r(B @strong{entity $B=hM}(Bmethod} $B$H8F$S$^$9!#$^$?!"(B -representation-type $BKh$K$3$N$h$&$J4X?t$r$^$H$a$?$b$N$r(B -@strong{mm-backend} $B$H8F$S$^$9!#(B@refill - -mm-backend $B$O(B representation-type $B$NL>A0$N@hF,$K(B @code{mm} $B$H$$$&(B -$B@\F,<-$rIU$1$?4X?tL>$+$i$J$k(B module $B$G!"$=$N(B module $BL>$OF1MM$K(B -representation-type $B$NL>A0$N@hF,$K(B @code{mm} $B$rIU$1$?$b$N$K$J$C$F(B -$B$$$^$9!#$3$N(B module $B$O(B representation-type $B$N(B entity $B$,:G=i$K@8@.$5$l$k(B -$B;~$K<+F0E*$K(B require $B$5$l$^$9!#(B - - -@menu -* Request for entity:: Message-passing for entity -* mm-backend module:: How to make mm-backend -@end menu - -@node Request for entity, mm-backend module, mm-backend, mm-backend -@subsection Message-passing for entity - -@defun mime-entity-send entity message &rest args - -@var{entity} $B$K(B @var{message} $B$rAw$k!#(B@refill - -@var{args} $B$O(B @var{message} $B$N0z?t$G$"$k!#(B -@end defun - - - -@node mm-backend module, , Request for entity, mm-backend -@subsection How to make mm-backend - -$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9(B (^_^;$B!K(B@refill - -$B!J$H$j$"$($:!"(Bmm*.el $B$r;29M$K$7$F$/$@$5$$!K(B - - -@node Content-Type, Content-Disposition, Entity, Top -@chapter Information of Content-Type field -@cindex mime-content-type -@cindex Content-Type field - -@strong{Content-Type field} is a field to indicate kind of contents or -data format, such as media-type (@ref{media-type}) and MIME charset. It -is defined in RFC 2045 (@ref{RFC 2045}). - -@noindent -@strong{[Memo]} -@quotation - -Historically, Content-Type field was proposed in RFC 1049. In it, -Content-Type did not distinguish type and subtype, and there are no -mechanism to represent kind of character code like MIME charset. -@end quotation - - -FLIM provides parser for Content-Type field and structure -@strong{mime-content-type} to store information of -Content-Type field. - - -@menu -* Content-Type field:: Format of Content-Type field -* mime-content-type:: mime-content-type structure -* Content-Type parser:: Parser -* Content-Type utility:: Utility functions -@end menu - -@node Content-Type field, mime-content-type, Content-Type, Content-Type -@section Format of Content-Type field -@cindex parameter -@cindex subtype -@cindex type - -Content-Type $BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'(B - -@quotation -``Content-Type'' ``:'' @strong{type} ``/'' -@strong{subtype} *( ``;'' @strong{parameter} ) -@end quotation - -$BNc$($P!"(B - -@quotation -@example -Content-Type: image/jpeg -@end example -@end quotation - -@noindent -$B$d(B - -@quotation -@example -Content-Type: text/plain; charset=iso-2022-jp -@end example -@end quotation - -@noindent -$B$J$I$N$h$&$KMQ$$$i$l$^$9!#(B - -$B$3$3$G!"(B`type' $B$H(B `subtype' $B$O(B entity $B$N7A<0$r<($9$b$N$G!"N><T$rAm>N$7(B -$B$F!"(B`media-type' $B$H8F$V$3$H$K$7$^$9!#>e5-$NNc$K$*$1$k(B `image/jpeg' $B$d(B -`text/plain' $B$O(B media-type $B$N#1$D$G$9!#(B - -@noindent -@strong{[Memo]} -@quotation - -Content-Type $BMs$N$J$$(B entity $B$O(B - -@quotation -@example -Content-Type: text/plain; charset=us-ascii -@end example -@end quotation - -@noindent -$B$H$7$F2r<a$5$l$k!#(B(cf. @ref{us-ascii}) -@end quotation - - - -@node mime-content-type, Content-Type parser, Content-Type field, Content-Type -@section mime-content-type structure - -@deffn{Structure} mime-content-type - -Content-Type $BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#(B@refill - -$B$3$N9=B$BN$r;2>H$9$k$K$O(B @code{mime-content-type-$BMWAGL>(B} $B$H$$$&L>A0$N;2(B -$B>H4X?t$rMQ$$$k!#(B@refill - -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -@table @var -@item primary-type -media-type $B$N<g7?(B (symbol). - -@item subtype -media-type $B$NI{7?(B (symbol). - -@item parameters -Content-Type $BMs$N(B parameter ($BO"A[(B list). - -@end table -@end deffn - - -@defun make-mime-content-type type subtype - &optional parameters - -content-type $B$N@8@.;R!#(B -@end defun - - -@defun mime-content-type-parameter content-type parameter - -@var{content-type} $B$N(B @var{parameter} $B$NCM$rJV$9!#(B -@end defun - - - -@node Content-Type parser, Content-Type utility, mime-content-type, Content-Type -@section Parser - -@defun mime-parse-Content-Type string - -@var{string} $B$r(B content-type $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -@end defun - - -@defun mime-read-Content-Type - -$B8=:_$N(B buffer $B$N(B Content-Type $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B@refill - -Content-Type $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -@end defun - - - -@node Content-Type utility, , Content-Type parser, Content-Type -@section Utility functions - -@defun mime-type/subtype-string type &optional subtype - -Return type/subtype string from @var{type} and @var{subtype}. -@end defun - - - -@node Content-Disposition, Content-Transfer-Encoding, Content-Type, Top -@chapter Information of Content-Disposition field -@cindex mime-content-disposition -@cindex RFC 2183 -@cindex Standards Track -@cindex Content-Disposition $BMs(B - -@strong{Content-Disposition $BMs(B} $B$O(B entity $B$NI=<($d(B file $BL>$J$I(B -$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#(B - - -@noindent -[RFC 2183] -@quotation -S. Dorner, K. Moore and R. Troost, ``Communicating Presentation -Information in Internet Messages: The Content-Disposition Header'', -August 1997, Standards Track. -@end quotation - -FLIM $B$O(B Content-Disposition $BMs$r9=J82r@O$9$k4X?t$H(B Content-Disposition -$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN(B -@strong{mime-content-disposition} $B$rDs6!$7$^$9!#(B - - -@menu -* mime-content-disposition:: mime-content-disposition structure -* Content-Disposition parser:: Parser for Content-Disposition field -@end menu - -@node mime-content-disposition, Content-Disposition parser, Content-Disposition, Content-Disposition -@section mime-content-disposition structure - -@deffn{Structure} mime-content-disposition - -Content-Disposition $BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#(B@refill - -$B$3$N9=B$BN$r;2>H$9$k$K$O(B @code{mime-content-disposition-$BMWAGL>(B} $B$H$$$&L>(B -$BA0$N;2>H4X?t$rMQ$$$k!#(B@refill - -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -@table @var -@item disposition-type -disposition-type (symbol). - -@item parameters -Content-Disposition $BMs$N(B parameter ($BO"A[(B list). - -@end table -@end deffn - - -@defun mime-content-disposition-parameter content-disposition parameter - -@var{content-disposition} $B$N(B @var{parameter} $B$NCM$rJV$9!#(B -@end defun - - -@defun mime-content-disposition-filename content-disposition - -@var{content-disposition} $B$N(B filename $B$NCM$rJV$9!#(B -@end defun - - - -@node Content-Disposition parser, , mime-content-disposition, Content-Disposition -@section Parser for Content-Disposition field - -@defun mime-parse-Content-Disposition string - -@var{string} $B$r(B content-disposition $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -@end defun - - -@defun mime-read-Content-Disposition - -$B8=:_$N(B buffer $B$N(B Content-Disposition $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B -@refill - -Content-Disposition $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -@end defun - - - -@node Content-Transfer-Encoding, encoded-word, Content-Disposition, Top -@chapter Encoding Method -@cindex Content-Transfer-Encoding $BMs(B - -@strong{Content-Transfer-Encoding $BMs(B} $B$O(B entity $B$NId9f2=K!$r5-=R$9$k$?$a(B -$B$N$b$N$G$9!#(B@refill - -FLIM $B$G$O(B Content-Transfer-Encoding $BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3(B -$B$l$i$N4X?t$O(B Content-Transfer-Encoding $BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#(B -@refill - -$B$^$?!"(BContent-Transfer-Encoding $B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs(B -$B6!$5$l$^$9!#(B - - -@menu -* Content-Transfer-Encoding parser:: Parser -* Region encoder/decoder:: Region encoding/decoding -* String encoder/decoder:: String encoding/decoding -* File encoder/decoder:: File encoding/decoding -@end menu - -@node Content-Transfer-Encoding parser, Region encoder/decoder, Content-Transfer-Encoding, Content-Transfer-Encoding -@section Parser - -@defun mime-parse-Content-Transfer-Encoding string - -@var{string} $B$r(B content-transfer-encoding $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -@end defun - - -@defun mime-read-Content-Transfer-Encoding &optional default-encoding - -$B8=:_$N(B buffer $B$N(B Content-Transfer-Encoding $BMs$rFI$_<h$j!"2r@O$7$?7k2L$r(B -$BJV$9!#(B@refill - -Content-Transfer-Encoding $BMs$,B8:_$7$J$$>l9g$O(B@var{default-encoding} $B$r(B -$BJV$9!#(B -@end defun - - - -@node Region encoder/decoder, String encoder/decoder, Content-Transfer-Encoding parser, Content-Transfer-Encoding -@section Region encoding/decoding - -@defun mime-encode-region start end encoding - -Encode region @var{start} to @var{end} of current buffer using -@var{encoding}. -@end defun - - -@defun mime-decode-region start end encoding - -Decode region @var{start} to @var{end} of current buffer using -@var{encoding}. -@end defun - - -@defvar mime-encoding-method-alist - -Alist of encoding vs. corresponding method to encode region.@refill - -Each element looks like @code{(STRING . FUNCTION)} or @code{(STRING -. nil)}. @var{string} is content-transfer-encoding. @code{function} is -region encoder and @code{nil} means not to encode. -@end defvar - - -@defvar mime-decoding-method-alist - -Alist of encoding vs. corresponding method to decode region.@refill - -Each element looks like @code{(STRING . FUNCTION)} or @code{(STRING -. nil)}. @var{string} is content-transfer-encoding. @code{function} is -region decoder and @code{nil} means not to decode. -@end defvar - - - -@node String encoder/decoder, File encoder/decoder, Region encoder/decoder, Content-Transfer-Encoding -@section String encoding/decoding - -@defun mime-decode-string string encoding - -@var{string} $B$r(B @var{encoding} $B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#(B -@end defun - - -@defvar mime-string-decoding-method-alist - -Alist of encoding vs. corresponding method to decode string.@refill - -Each element looks like @code{(STRING . FUNCTION)}. STRING is -content-transfer-encoding. FUNCTION is string decoder. -@end defvar - - - -@node File encoder/decoder, , String encoder/decoder, Content-Transfer-Encoding -@section File encoding/decoding - -@defun mime-insert-encoded-file filename encoding - -Insert file @var{FILENAME} encoded by @var{ENCODING} format. -@end defun - - -@defun mime-write-decoded-region start end filename encoding - -Decode and write current region encoded by @var{encoding} into -@var{filename}.@refill - -@var{start} and @var{end} are buffer positions. -@end defun - - -@defvar mime-file-encoding-method-alist - -Alist of encoding vs. corresponding method to insert encoded -file.@refill - -Each element looks like @code{(STRING . FUNCTION)}. STRING is -content-transfer-encoding. FUNCTION is function to insert encoded file. -@end defvar - - -@defvar mime-file-decoding-method-alist - -Alist of encoding vs. corresponding method to write decoded region to -file.@refill - -Each element looks like @code{(STRING . FUNCTION)}. STRING is -content-transfer-encoding. FUNCTION is function to write decoded region -to file. -@end defvar - - - -@node encoded-word, custom, Content-Transfer-Encoding, Top -@chapter Network representation of header -@cindex RFC 2047 -@cindex Standards Track -@cindex RFC 2047 - -encoded-word $B$O(B header $B$GHs(B ASCII (@ref{ASCII}) $BJ8;z$rI=8=$9$k$?$a$N7A<0(B -$B$G!"(B@strong{RFC 2047} $B$GDj5A$5$l$F$$$^$9!#(B@refill - - -@noindent -[RFC 2047] -@quotation -K. Moore, ``MIME (Multipurpose Internet Mail Extensions) Part Three: -Message Header Extensions for Non-ASCII Text'', November 1996, Standards -Track (obsolete RFC 1521,1522,1590). -@end quotation - -$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"(Bencoded-word $B$rMQ$$$:$KHs(B ASCII -(@ref{ASCII}) $BJ8;z$r(B header $B$KF~$l$?5-;v$bB8:_$7$^$9!#(B@refill - -FLIM $B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#(B - - -@menu -* Header encoder/decoder:: Header encoding/decoding -@end menu - -@node Header encoder/decoder, , encoded-word, encoded-word -@section Header encoding/decoding - -@defun eword-encode-header &optional code-conversion separator - -Decode MIME encoded-words in header fields.@refill - -If @var{code-conversion} is @code{nil}, it decodes only encoded-words. -If it is mime-charset, it decodes non-ASCII bit patterns as the -mime-charset. Otherwise it decodes non-ASCII bit patterns as the -default-mime-charset.@refill - -If @var{separator} is not nil, it is used as header separator. -@end defun - - -@defun eword-encode-header &optional code-conversion - -Encode header fields to network representation, such as MIME -encoded-word.@refill - -It refer variable @code{eword-field-encoding-method-alist}. -@end defun - - - -@node custom, Appendix, encoded-word, Top -@chapter Various Customization - -@deffn{group} mime - -MIME $B4XO"5!G=$K4X$9$k(B group.@refill - -@code{mail} $B$H(B @code{news} $B$KB0$9$k!#(B -@end deffn - - -@defvar default-mime-charset - -$BE,@Z$J(B MIME charset (@ref{MIME charset}) $B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i(B -$B$l$k(BMIME charset.@refill - -$BK\Mh$O(B APEL $B$NJQ?t$G$"$k!#(B -@end defvar - - -@defvar mime-temp-directory - -MIME $B5!G=$K4X$9$k<BAu$,0l;~E*$K;HMQ$9$k(B file $B$r:n@.$9$k(B -directory.@refill - -$B4D6-JQ?t(B @code{MIME_TMP_DIR}, @code{TM_TMP_DIR}, @code{TMPDIR}, -@code{TMP} $B$b$7$/$O(B @code{TEMP} $B$,@_Dj$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$F(B -$BMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"(B@code{"/tmp/"} $B$rMQ$$$k!#(B -@end defvar - - - -@node Appendix, Concept Index, custom, Top -@chapter Appendix - - -@menu -* Glossary:: -* Bug report:: How to report bugs -* CVS:: CVS based development -* History:: History of FLIM -@end menu - -@node Glossary, Bug report, Appendix, Appendix -@section Glossary - - -@menu -* 7bit:: -* 8bit:: -* ASCII:: -* Base64:: -* binary:: -* coded character set:: Coded character set, Character code -* media-type:: -* message:: -* MIME:: -* MIME charset:: -* MTA:: -* MUA:: -* Quoted-Printable:: -* RFC 822:: -* RFC 1036:: -* RFC 2045:: -* RFC 2046:: -* RFC 2048:: -* RFC 2049:: -* plain text:: -* us-ascii:: -@end menu - -@node 7bit, 8bit, Glossary, Glossary -@subsection 7bit -@cindex 7bit (textual) string -@cindex 7bit data -@cindex 7bit - -@strong{7bit} means any integer between 0 .. 127.@refill - -Any data represented by 7bit integers is called @strong{7bit data}.@refill - -Textual string consisted of Control characters between 0 .. 31 and 127, -and space represented by 32, and graphic characters between 33 .. 236 -are called @strong{7bit (textual) string}.@refill - -Conventional Internet MTA (@ref{MTA}) can translate 7bit data, so it is -no need to translate by Quoted-Printable (@ref{Quoted-Printable}) or -Base64 (@ref{Base64}) for 7bit data.@refill - -However if there are too long lines, it can not translate by 7bit MTA -even if it is 7bit data. RFC 821 (@ref{RFC 821}) and RFC 2045 (@ref{RFC 2045}) require lines in 7bit data must be less than 998 bytes. So if a -``7bit data'' has a line more than 999 bytes, it is regarded as binary -(@ref{binary}). For example, Postscript file should be encoded by -Quoted-Printable. - - -@node 8bit, ASCII, 7bit, Glossary -@subsection 8bit -@cindex 8bit (textual) string -@cindex 8bit data -@cindex 8bit - -@strong{8bit} means any integer between 0 .. 255.@refill - -Any data represented by 8bit integers is called @strong{8bit data}.@refill - -Textual string consisted of Control characters between 0 .. 31, 127, and -128 .. 159, and space represented by 32, and graphic characters between -33 .. 236 and 160 .. 255 are called @strong{8bit (textual) string}.@refill - -For example, iso-8859-1 (@ref{iso-8859-1}) or euc-kr (@ref{euc-kr}) are -coded-character-set represented by 8bit textual string.@refill - -Traditional Internet MTA (@ref{MTA}) can translate only 7bit -(@ref{7bit}) data, so if a 8bit data will be translated such MTA, it -must be encoded by Quoted-Printable (@ref{Quoted-Printable}) or Base64 -(@ref{Base64}).@refill - -However 8bit MTA are increasing today.@refill - -However if there are too long lines, it can not translate by 8bit MTA -even if it is 8bit data. RFC 2045 (@ref{RFC 2045}) require lines in -8bit data must be less than 998 bytes. So if a ``8bit data'' has a line -more than 999 bytes, it is regarded as binary (@ref{binary}), so it must -be encoded by Base64 or Quoted-Printable. - - -@node ASCII, Base64, 8bit, Glossary -@subsection ASCII -@cindex ANSI X3.4:1986 -@cindex ASCII -@cindex ASCII - -@strong{ASCII} is a 94-character set contains primary latin characters -(A-Z, a-z), numbers and some characters. It is a standard of the United -States of America. It is a variant of ISO 646 (@ref{ISO 646}). - - -@noindent -[ASCII] -@quotation -``Coded Character Set -- 7-Bit American Standard Code for Information -Interchange'', ANSI X3.4:1986. -@end quotation - - - -@node Base64, binary, ASCII, Glossary -@subsection Base64 -@cindex pad -@cindex Base64 - -@strong{Base64} is a transfer encoding method of MIME (@ref{MIME}) -defined in RFC 2045 (@ref{RFC 2045}).@refill - -The encoding process represents 24-bit groups of input bits as output -strings of 4 encoded characters. Encoded characters represent integer 0 -.. 63 or @strong{pad}. Base64 data must be 4 * n bytes, so pad is used -to adjust size.@refill - -These 65 characters are subset of all versions of ISO 646, including -US-ASCII, and all versions of EBCDIC. So it is safe even if it is -translated by non-Internet gateways. - - -@node binary, coded character set, Base64, Glossary -@subsection binary -@cindex binary - -Any byte stream is called @strong{binary}.@refill - -It does not require structureof lines. It differs from from 8bit -(@ref{8bit}).@refill - -In addition, if line structured data contain too long line (more than -998 bytes), it is regarded as binary. - - -@node coded character set, media-type, binary, Glossary -@subsection Coded character set, Character code - -A set of unambiguous rules that establishes a character set and the -one-to-one relationship between the characters of the set and their -bit combinations. - - -@node media-type, message, coded character set, Glossary -@subsection media-type -@cindex x-token -@cindex message -@cindex multipart -@cindex application -@cindex video -@cindex audio -@cindex image -@cindex text -@cindex subtype -@cindex type -@cindex media-type - -@strong{media-type} specifies the nature of the data in the body of MIME -(@ref{MIME}) entity (@ref{entity}). It consists of @strong{type} and -@strong{subtype}. It is defined in RFC 2046 (@ref{RFC 2046}).@refill - -Currently there are following standard primary-types: - -@itemize @bullet -@item -@strong{text} -@item -@strong{image} -@item -@strong{audio} -@item -@strong{video} -@item -@strong{application} -@item -@strong{multipart} (@ref{multipart}) -@item -@strong{message} -@end itemize - - -And there are various subtypes, for example, application/octet-stream, -audio/basic, image/jpeg, multipart/mixed (@ref{multipart/mixed}), -text/plain (@ref{text/plain}), video/mpeg... @refill - -You can refer registered media types at MEDIA TYPES -(ftp://ftp.isi.edu/in-notes/iana/assignments/media-types).@refill - -In addition, you can use private type or subtype using @strong{x-token}, -which as the prefix `x-'. However you can not use them in -public.@refill - -(cf. @ref{Content-Type field}) - - - -@node message, MIME, media-type, Glossary -@subsection message - -In this document, it means mail defined in RFC 822 (@ref{RFC 822}) and -news message defined in RFC 1036 (@ref{RFC 1036}). - - -@node MIME, MIME charset, message, Glossary -@subsection MIME -@cindex Multipurpose Internet Mail Extensions - -MIME stands for @strong{Multipurpose Internet Mail Extensions}, it is an -extension for RFC 822 (@ref{RFC 822}).@refill - -According to RFC 2045:@refill - -STD 11, RFC 822, defines a message representation protocol specifying -considerable detail about US-ASCII message headers, and leaves the -message content, or message body, as flat US-ASCII text. This set of -documents, collectively called the Multipurpose Internet Mail -Extensions, or MIME, redefines the format of messages to allow for - -@enumerate -@item -textual message bodies in character sets other than US-ASCII, -@item -an extensible set of different formats for non-textual message -bodies, -@item -multi-part message bodies, and -@item -textual header information in character sets other than US-ASCII. -@end enumerate - - -It is defined in RFC 2045 (@ref{RFC 2045}), RFC 2046 (@ref{RFC 2046}), -RFC 2047 (@ref{encoded-word}), RFC 2048 (@ref{RFC 2048}) and RFC 2049 -(@ref{RFC 2049}). - - -@node MIME charset, MTA, MIME, Glossary -@subsection MIME charset - -Coded character set (@ref{coded character set}) used in Content-Type -field (@ref{Content-Type field}) or charset parameter of encoded-word -(@ref{encoded-word}).@refill - -It is defined in RFC 2045 (@ref{RFC 2045}).@refill - -iso-2022-jp (@ref{iso-2022-jp}) or euc-kr (@ref{euc-kr}) are kinds of -it. (In this document, MIME charsets are written by small letters to -distinguish graphic character set (@ref{graphic character set}). For -example, ISO 8859-1 is a graphic character set, and iso-8859-1 is a MIME -charset) - - -@node MTA, MUA, MIME charset, Glossary -@subsection MTA -@cindex Message Transfer Agent - -@strong{Message Transfer Agent}. It means mail transfer programs -(ex. sendmail) and news servers.@refill - -(cf. @ref{MUA}) - - - -@node MUA, Quoted-Printable, MTA, Glossary -@subsection MUA -@cindex Message User Agent - -@strong{Message User Agent}. It means mail readers and news -readers.@refill - -(cf. @ref{MTA}) - - - -@node Quoted-Printable, RFC 822, MUA, Glossary -@subsection Quoted-Printable -@cindex Quoted-Printable - -@strong{Quoted-Printable} is a transfer encoding method of MIME -(@ref{MIME}) defined in RFC 2045 (@ref{RFC 2045}).@refill - -If the data being encoded are mostly US-ASCII text, the encoded form of -the data remains largely recognizable by humans.@refill - -(cf. @ref{Base64}) - - - -@node RFC 822, RFC 1036, Quoted-Printable, Glossary -@subsection RFC 822 -@cindex RFC 822 -@cindex STD 11 -@cindex Internet mail -@cindex Internet message -@cindex message header - -A RFC defines format of Internet mail message, mainly @strong{message header}. - -@noindent -@strong{[Memo]} -@quotation - -news message is based on RFC 822, so @strong{Internet message} may be -more suitable than @strong{Internet mail} . -@end quotation - - - -@noindent -[RFC 822] -@quotation -D. Crocker, ``Standard for the Format of ARPA Internet Text Messages'', -August 1982, STD 11. -@end quotation - - - -@node RFC 1036, RFC 2045, RFC 822, Glossary -@subsection RFC 1036 -@cindex RFC 1036 -@cindex USENET - -A RFC defines format of USENET message. It is a subset of RFC 822 -(@ref{RFC 822}). It is not Internet standard, but a lot of netnews -excepting Usenet uses it. - - -@noindent -[USENET: RFC 1036] -@quotation -M. Horton and R. Adams, ``Standard for Interchange of USENET Messages'', -December 1987, (obsolete RFC 850). -@end quotation - - - -@node RFC 2045, RFC 2046, RFC 1036, Glossary -@subsection RFC 2045 -@cindex RFC 2045 -@cindex Standards Track - - -@noindent -[RFC 2045] -@quotation -N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions -(MIME) Part One: Format of Internet Message Bodies'', November 1996, -Standards Track (obsolete RFC 1521, 1522, 1590). -@end quotation - - - -@node RFC 2046, RFC 2048, RFC 2045, Glossary -@subsection RFC 2046 -@cindex RFC 2046 -@cindex Standards Track - - -@noindent -[RFC 2046] -@quotation -N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions -(MIME) Part Two: Media Types'', November 1996, Standards Track (obsolete -RFC 1521, 1522, 1590). -@end quotation - - - -@node RFC 2048, RFC 2049, RFC 2046, Glossary -@subsection RFC 2048 -@cindex RFC 2048 -@cindex Standards Track - - -@noindent -[RFC 2048] -@quotation -N. Freed, J. Klensin and J. Postel, ``Multipurpose Internet Mail -Extensions (MIME) Part Four: Registration Procedures'', November 1996, -Standards Track (obsolete RFC 1521, 1522, 1590). -@end quotation - - - -@node RFC 2049, plain text, RFC 2048, Glossary -@subsection RFC 2049 -@cindex RFC 2049 -@cindex Standards Track - - -@noindent -[RFC 2049] -@quotation -N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions -(MIME) Part Five: Conformance Criteria and Examples'', November 1996, -Standards Track (obsolete RFC 1521, 1522, 1590). -@end quotation - - - -@node plain text, us-ascii, RFC 2049, Glossary -@subsection plain text - -A textual data represented by only coded character set (@ref{coded character set}). It does not have information about font or -typesetting. (cf. @ref{text/plain}) - - - -@node us-ascii, , plain text, Glossary -@subsection us-ascii -@cindex ASCII -@cindex us-ascii - -A MIME charset (@ref{MIME charset}) for primary Latin script mainly -written by English or other languages.@refill - -It is a 7bit coded character set (@ref{coded character set}) based on -ISO 2022 (@ref{ISO 2022}), it contains only ASCII (@ref{ASCII}) and code -extension (@ref{code extension}) is not allowed.@refill - -It is standard coded character set of Internet mail. If MIME charset is -not specified, @strong{us-ascii} is used as default.@refill - -In addition, @strong{ASCII} of RFC 822 (@ref{RFC 822}) should be -interpreted as us-ascii. - - -@node Bug report, CVS, Glossary, Appendix -@section How to report bugs -@cindex good bug report - -If you write bug-reports and/or suggestions for improvement, please -send them to the tm Mailing List: - -@itemize @bullet -@item - Japanese <bug-tm-ja@@chamonix.jaist.ac.jp> -@item - English <bug-tm-en@@chamonix.jaist.ac.jp> -@end itemize - - -Notice that, we do not welcome bug reports about too old version. Bugs -in old version might be fixed. So please try latest version at -first.@refill - -You should write @strong{good bug report}. If you write only ``FLIM -does not work'', we can not find such situations. At least, you should -write name, type, variants and version of OS, emacs, APEL, FLIM, SEMI -and MUA, and setting. In addition, if error occurs, to send backtrace -is very important. (cf. @ref{(emacs)Bugs}) @refill - -Bug may not appear only your environment, but also in a lot of -environment (otherwise it might not bug). Therefor if you send mail -to author directly, we must write a lot of mails. So please send mail -to address for tm bugs instead of author. - -Via the tm ML, you can report FLIM bugs, obtain the latest release of -FLIM, and discuss future enhancements to FLIM. To join the tm ML, -send empty e-mail to: - -@itemize @bullet -@item - Japanese <tm-ja-help@@chamonix.jaist.ac.jp> -@item - English <tm-en-help@@chamonix.jaist.ac.jp> -@end itemize - - - -@node CVS, History, Bug report, Appendix -@section CVS based development - -FLIM $B$N(B file $B$O(B CVS $B$r;H$C$F4IM}$5$l$F$$$^$9!#$3$N$?$a!"0J2<$NJ}K!$G:G(B -$B?7$N(B FLIM $B$rF~<j$9$k$3$H$,$G$-$^$9!'(B - -@example -(0) cvs login - - % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \ - login - - CVS password: [CR] # NULL string - -(1) checkout - - % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \ - checkout [-r TAG] flim -@end example - - -CVS $B$rMQ$$$?3+H/$K;22C$7$?$$J}$O(B - -@itemize @bullet -@item - <cvs@@chamonix.jaist.ac.jp> -@end itemize - -@noindent -$B$^$G!"(Baccount $BL>$H(B UNIX $B$N(B passwd $B$HF1$87A<0$N(B crypt $B2=$5$l$?(B password -$B$r1h$($F8fO"Mm$/$@$5$$!#(B - - -@node History, , CVS, Appendix -@section History of FLIM - -FLIM $B$N(B code $B$N:G8E$NItJ,$O(B $B1]JB(B $B;LCR(B $B;a$,=q$$$?(B @file{mime.el}$B$K5/8;$7(B -$B$^$9!#$3$N>.$5$J(B program $B$O(B Nemacs $B$GF0:n$9$k(B iso-2022-jp $B$N(B B-encoding -$B@lMQ$N(B encoded-word $B$NI|9f2=%W%m%0%i%`$G$7$?!#(B@refill - -$B$=$N8e!"<i2,(B $BCNI'(B $B$O(B @file{mime.el} $B$r85$K(B@file{tiny-mime.el} $B$H$$$&%W%m(B -$B%0%i%`$r=q$-$^$9!#$3$l$O!"(BNemacs $B$H(B Mule $B$GF0:n$9$k(B encoded-word $B$NId9f(B -$B2=!&I|9f2=%W%m%0%i%`$G$7$?!#(B@file{tiny-mime.el} $B$O(B B-encoding $B$@$1$G$J$/(B -Q-encoding $B$b(Bsupport $B$7!"$^$?!"(BMULE $B$G07$&$3$H$,$G$-$k$5$^$6$^$J(B MIME -charset (@ref{MIME charset}) $B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"(B -Nemacs $B$H(B Mule $B$NAPJ}$r(B support $B$9$k$?$a$KMQ$$$i$l$?%F%/%K%C%/$O8e$K(B emu -package $B$K$^$H$a$i$l$^$9!#(B@refill - -$B$3$N:"!"<i2,(B $BCNI'(B $B$O(B @file{tiny-mime.el} $B$r$5$^$6$^$J(B MUA $B$G;H$&$?$a$N@_(B -$BDj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K(B@file{tiny-mime.el} $B$H$H$b$K#1$D$N(B -package $B$K$^$H$a$i$l!"(Btm $B$H$$$&L>A0$GG[I[$5$l$^$9!#(B@refill - -$B<i2,(B $BCNI'(B $B$O$d$,$F!"(BMIME message $B$r1\Mw$9$k$?$a$N%W%m%0%i%`$G$"$k(B -@file{tm-body.el} $B$r=q$-$^$9!#$3$l$O!"$9$0$K(B@file{tm-view.el} $B$H$$$&L>A0(B -$B$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,(B@file{tiny-mime.el} $B$KBe$o$C$F!"(Btm $B$NCf(B -$B3K$H$J$j$^$9!#(B@refill - -@file{tm-view.el} $B$OEvA3!"(BContent-Transfer-Encoding $B$r07$&I,MW$,$"$j$^$9!#(B -$B$3$NL\E*$N$?$a$K!"(BMEL $B$,@0Hw$5$l$O$8$a$^$7$?!#(BBase64 $B$K4X$7$F$O(B -@file{tiny-mime.el} $B$N(B code $B$,0\$5$l!"$^$?!"?7$?$K(BQuoted-Printable $B$N(B -code $B$,DI2C$5$l$^$7$?!#$3$l$i$,(B@file{mel-b.el} $B$H(B @file{mel-q.el} $B$K$J$j(B -$B$^$7$?!#(B@refill - -$B$^$?!"8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B uuencode $BMQ$N(B @file{mel-u.el} $B$,DI2C$5$l!"(B -$B$=$N8e$K!">.NS(B $B=$J?(B $B;a$K$h$C$F(B x-gzip64 $BMQ$N(B@file{mel-g.el} $B$,DI2C$5$l$^(B -$B$7$?!#(B@refill - -tm $B$G$O8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B @file{tiny-mime.el} $B$N:F<BAu$,9T$o$l!"$3(B -$B$N2aDx$G!"(BSTD 11 $B$N(B parser $B$,=q$+$l$^$7$?!#$3$l$O!"8=:_$N(B -@file{std11.el} $B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G(B @file{tiny-mime.el} $B$OI|(B -$B9f2=$r9T$&(B @file{tm-ew-d.el} $B$HId9f2=$r9T$&(B @file{tm-ew-e.el} $B$KJ,$1$i$l(B -$B$^$7$?!#$3$NN><T$,8=:_$N(B @file{eword-decode.el} $B$H(B -@file{eword-encode.el} $B$N@hAD$KEv$?$j$^$9!#(B@refill - -$B8e$K!"<i2,(B $BCNI'(B $B$i$K$h$C$F(B tm $B$NA4LL=q$-49$(:n6H$,9T$o$l!"$3$N2aDx$G!"(Btm -$B$O(B APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME $B$J$I$KJ,$1$i$l$^$7$?!#$3(B -$B$N$&$A$N(B MEL $B$,(B FLIM $B$ND>@\$N@hAD$KEv$?$j$^$9!#(B@refill - -$B8e$K!"(BAPEL $B$+$i(B @file{std11.el} $B$,0\$5$l!"$^$?!"(B@file{mailcap.el}, -@file{eword-decode.el} $B$*$h$S(B @file{eword-encode.el} $B$,(B SEMI $B$+$i0\$5$l!"(B -package $B$NL>A0$,(B FLIM$B$H$J$j$^$9!#(B@refill - -$B$3$ND>A0$+$iEDCf(B $BE/(B $B;a$,$h$j(B RFC $B$KCi<B$J<BAu$r=q$-;O$a!"$3$l$O!"8=:_!"(B -FLIM $B$N;^$G$"$k(B ``FLIM-FLAM'' $B$H$J$C$F$$$^$9!#(B - - -@node Concept Index, Function Index, Appendix, Top -@chapter Concept Index - -@printindex cp - -@node Function Index, Variable Index, Concept Index, Top -@chapter Function Index - -@printindex fn - -@node Variable Index, , Function Index, Top -@chapter Variable Index - -@printindex vr -@bye diff --git a/mime-ja.sgml b/mime-ja.sgml deleted file mode 100644 index c3cfb08..0000000 --- a/mime-ja.sgml +++ /dev/null @@ -1,1278 +0,0 @@ -<!doctype sinfo system> -<head> -<title>FLIM 1.9 MIME $B5!G=@bL@=q(B -<author>$B<i2,(B $BCNI'(B <mail>morioka@jaist.ac.jp</mail> -<date>1998/07/01 - -<toc> -</head> - -<body> - -<abstract> -<p> -This file documents MIME features of FLIM, a Internet message -parsing/encoding library for GNU Emacs. -<p> -GNU Emacs $BMQ$N(B Internet Message $B$N2r@O$dId9f2=$K4X$9$k(B library $B$G$"$k(B -FLIM $B$N(B MIME $B5!G=$K4X$7$F@bL@$7$^$9!#(B -</abstract> - - -<h1> FLIM $B$C$F2?!)(B -<node> Introduction -<p> -FLIM $B$O(B Internet Message $B$NI=8=$dId9f2=$K4X$9$k4pACE*$J5!G=$rDs6!$9$k(B -$B$?$a$N(B library $B$G$9!#(B - - -<h1> FLIM $B$N(B MIME $B5!G=$N;H$$J}(B -<node> How to use -<p> -FLIM $B$NDs6!$9$k(B MIME $B5!G=$r;H$&$?$a$K$O(B - -<lisp> -(require 'mime) -</lisp> - -<noindent>$B$rI>2A$7$F$/$@$5$$!#(B - - -<h1> Message $B$H(B Entity -<node> Entity -<p> -<dref>RFC 2045</dref> $B$K$h$l$P!"!V(BEntity $B$H$$$&8l$O!"(Bmessage, $B$b$7$/$O!"(B -multipart entity $B$N(B body $BCf$N#1$D$NItJ,$N!"(BMIME $B$GDj5A$5$l$?(B header -field $B$HFbMF$r;X$9!W$H$J$C$F$$$^$9!#$3$3$G$O!"(BMIME $B$GDj5A$5$l$?(B header -field $B0J30$NA4$F$N(B header $B$H(B body $B$r;X$98l$H$7$F(B -<concept>entity</concept>$B$rMQ$$$k$3$H$K$7$^$9!#(B -<p> -RFC 2045 $B$NDj5A$O!"(BMIME message $B$,(B entity $B$rC10L$H$9$kLZ9=B$$G$"$k$3$H$r(B -$B<($7$F$$$^$9!#(Bmessage $B$O2<?^$G<($9$h$&$JLZ$H$J$j!"(Bentity $B$O$3$NLZ$K$*$1(B -$B$k@a$H$J$j$^$9!#$D$^$j!"(BMIME $B$O(B message $B$rLZ9=B$$K3HD%$7$?Lu$G$9!#(B -<p> -FLIM $B$O(B entity $B$N>pJs$rI=8=$9$k$?$a$K(B<concept>mime-entity</concept> $B9=(B -$BB$BN$rMQ$$$^$9!#0J2<$G$OC1$K(B mime-entity $B$H8F$V$3$H$K$7$^$9!#(B -<p> -$BA0=R$N$h$&$K!"(Bmessage $BCf$N3F(B entity $B$OLZ$N@a$KEv$?$j$^$9$,!"$3$NLZ$K$O(B -$B?<$5$HF1$8?<$5$NCf$N=gHV$K=>$C$FHV9f$,IU$1$k$3$H$,$G$-$^$9!#B($A!"(B -<verb> - - $B(#(!(!(!($(B - $B("(B nil $B("(B - $B(&(!(((!(%(B - $B(#(!(!(!(!(!(!(!(!(!(+(!(!(!(!(!(!(!(!(!($(B - $B(#(*($(B $B(#(*($(B $B(#(*($(B - $B("#0("(B $B("#1("(B $B("#2("(B - $B(&(((%(B $B(&(((%(B $B(&(((%(B - $B("(B $B(#(!(!(!(!(+(!(!(!(!($(B $B("(B - $B(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(B - $B("(B $B#0(B.$B#0("("(B $B#1(B.$B#0("("(B $B#1(B.$B#1("("(B $B#1(B.$B#2("("(B $B#2(B.$B#0("(B - $B(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(B - -</verb> -<p> -<noindent>$B$N$h$&$K?<$5(B n $B$N@a$K$OD9$5(B n $B$N@0?tNs$N@aHV9f$,?6$l$^$9!#$3$l(B -$B$r(B <concept>entity-number</concept> $B$H8F$S$^$9!#(Bentity-number $B$O(B S $B<0$H(B -$B$7$F$O(B <code>(1 2 3)</code> $B$N$h$&$J@0?t$N%j%9%H$H$7$FI=8=$5$l$^$9!#(B -<p> -mime-entity $B$G$O!"$3$l$HF1MM$N(B <concept>node-id</concept> $B$rMQ$$$^$9!#(B -node-id $B$O$A$g$&$I(B entity-number $B$r5U$K$7$?%j%9%H$G!"(Bentity-number -1.2.3 $B$KBP1~$9$k(B node-id $B$O(B <code>(3 2 1)</code> $B$G$9!#(B -<p> -$BA0=R$N$h$&$K!"(BMIME message $B$O(B entity $B$rC10L$H$7$?LZ9=B$$K$J$C$F$$$k$N$G!"(B -$B$3$N:,$G$"$k(B message $BA4BN$b(B mime-entity $B$GI=8=$9$k$3$H$,$G$-!"(Bbuffer -local $BJQ?t(B <code>mime-message-structure</code> $B$K3JG<$9$k$3$H$K$7$^$9!#(B -$B$=$7$F!"(Bentity-number $B$d(B node-id $B$rMQ$$$k$3$H$G(B -<code>mime-message-structure</code> $B$K$*$1$k(B entity $B$NAjBPE*$J0LCV4X78$r(B -$B07$&$3$H$,$G$-$^$9!#(B - - -<h2> Entity $B$N@8@.(B -<node> Entity creation -<p> -<defun name="mime-open-entity"> - <opts> type location -<p> -Open an entity and return it. -<p> -<var>type</var> is representation-type. <cf node="mm-backend"> -<p> -<var>location</var> is location of entity. Specification of it is -depended on representation-type. -</defun> - -<defun name="mime-parse-buffer"> - <opts> buffer type -<p> -<var>buffer</var> $B$r(B message $B$H$7$F9=J82r@O$7!"$=$N7k2L$N(B mime-entity -$B$r(B <var>buffer</var> $B$N(B<code>mime-message-structure</code> $B$K3JG<$9$k!#(B -<p> -<var>buffer</var> $B$,>JN,$5$l$?>l9g!"8=:_$N(B buffer $B$r9=J82r@O$9$k!#(B -<p> -<var>type</var> $B$,;XDj$5$l$?>l9g!"$=$NCM$r@8@.$5$l$k(B mime-entity $B$NI=(B -$B>]7?$H$7$FMQ$$$k!#>JN,$5$l$?>l9g$O(B <var>buffer</var> $B$H$J$k!#(B<cf -node="mm-backend"> -</defun> - - -<h2> Entity $B3,AX(B -<node> Entity hierarchy -<p> -<defvar name="mime-message-structure"> -<p> -$B8=:_$N(B buffer $B$K$*$1$k(B message $BA4BN$N(B mime-entity $B9=B$BN$r3JG<$9$k(B -buffer local $BJQ?t!#(B -</defvar> - -<defun name="mime-entity-children"> - <args> entity -<p> -<var>entity</var> $B$K4^$^$l$k(B entity $B$N(B list $B$rJV$9!#(B -</defun> - -<defun name="mime-entity-parent"> - <args> entity <opts> message -<p> -<var>entity</var> $B$N?F$N(B entity $B$rJV$9!#(B -<p> -<var>message</var> $B$,;XDj$5$l$?>l9g!"$3$l$r:,$H8+Jo$9!#(B -</defun> - -<defun name="mime-root-entity-p"> - <args> entity -<p> -<var>entity</var> $B$,:,!JB($A!"(Bmessage $BA4BN!K$G$"$k>l9g$K!"(B -$BHs(B-<code>nil</code> $B$rJV$9!#(B -</defun> - -<defun name="mime-entity-node-id"> - <args> entity -<p> -<var>entity</var> $B$N(B node-id $B$rJV$9!#(B -</defun> - -<defun name="mime-entity-number"> - <args> entity -<p> -<var>entity</var> $B$N(B entity-number $B$rJV$9!#(B -</defun> - -<defun name="mime-find-entity-from-number"> - <args> entity-number <opts> message -<p> -Return entity from <var>entity-number</var> in <var>message</var>. -<p> -If <var>message</var> is not specified, -<code>mime-message-structure</code> is used. -</defun> - -<defun name="mime-find-entity-from-node-id"> - <args> entity-node-id <opts> message -<p> -Return entity from <var>entity-node-id</var> in <var>message</var>. -<p> -If <var>message</var> is not specified, -<code>mime-message-structure</code> is used. -</defun> - - -<h2> Entity $B$NB0@-(B -<node> Entity Attributes -<p> -<defun name="mime-entity-content-type"> - <args> entity -<p> -<var>entity</var> $B$N(B content-type $B$rJV$9!#(B<cf -node="mime-content-type"> -</defun> - -<defun name="mime-entity-content-disposition"> - <args> entity -<p> -<var>entity</var> $B$N(B content-disposition $B$rJV$9!#(B<cf -node="mime-content-disposition"> -</defun> - -<defun name="mime-entity-filename"> - <args> entity -<p> -<var>entity</var> $B$N(B file $BL>$rJV$9!#(B -</defun> - -<defun name="mime-entity-encoding"> - <args> entity <opts> default-encoding -<p> -<var>entity</var> $B$N(B content-transfer-encoding $B$rJV$9!#(B<cf -node="Content-Transfer-Encoding"> -<p> -$B$b$7!"(B<var>entity</var> $B$K(B Content-Transfer-Encoding $BMs$,B8:_$7$J$$>l(B -$B9g$O!"(B<var>default-encoding</var> $B$rJV$9!#$3$l$,;XDj$5$l$J$$>l9g$O!"(B -<code>"7bit"</code> $B$rMQ$$$k!#(B -</defun> - -<defun name="mime-entity-cooked-p"> - <args> entity -<p> -Return non-nil if contents of <var>entity</var> has been already -code-converted. -</defun> - - -<h2> Entity header $B$N>pJs(B -<node> Entity-header -<p> -<defun name="mime-fetch-field"> - <args> field-name <opts> entity -<p> -<var>entity</var> $B$N(B header $BCf$N(B <var>field-name</var> $BMs$N(B body $B$rJV$9!#(B -<p> -$B7k2L$NJ8;zNs$O(B network $BI=8=$N$^$^$G$"$k!#(B -<p> -<var>entity</var> $B$,>JN,$5$l$?>l9g$O!"(B -<code>mime-message-structure</code> $B$NCM$rMQ$$$k!#(B -<p> -<var>field-name</var> $BMs$,B8:_$7$J$$>l9g$O(B <code>nil</code> $B$rJV$9!#(B -</defun> - -<defun name="mime-read-field"> - <args> field-name <opts> entity -<p> -<var>entity</var> $B$N(B header $BCf$N(B <var>field-name</var> $BMs$r9=J82r@O$7$?(B -$B7k2L$rJV$9!#(B -<p> -$B7k2L$N7A<0$OMsKh$K0[$J$k!#Hs9=B$2=Ms$N>l9g$OJ8;zNs$rJV$7!"9=B$2=Ms$N>l9g(B -$B$O$=$N7A<0$K=>$C$?(B list $B$rJV$9!#(B -<p> -$B7k2LCf$NJ8;zNs$O(B Emacs $B$NFbItI=8=$KJQ49$5$l$k!#(B -<p> -<var>entity</var> $B$,>JN,$5$l$?>l9g$O!"(B -<code>mime-message-structure</code> $B$NCM$rMQ$$$k!#(B -<p> -<var>field-name</var> $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -</defun> - -<defun name="mime-insert-decoded-header"> - <args> entity <opts> invisible-fields visible-fields -<p> -$B8=:_0LCV$K(B <var>entity</var> $B$NI|9f$7$?(B header $B$rA^F~$9$k!#(B -<p> -<var>invisible-fields</var> $B$H(B <var>visible-fields</var> $B$O@55,I=8=$N(B -list $B$G!"$=$l$>$l!"I=<($7$?$/$J$$(B field $BL>$HI=<($7$?$$MsL>$rI=8=$7$?$b$N(B -$B$G$"$k!#(B -<p> -<var>invisible-fields</var> $B$NMWAG$N$I$l$+$K(B match $B$7!"$+$D!"(B -<var>visible-fields</var> $B$NMWAG$N$I$l$K$b(B match $B$7$J$$Ms$OI=<($5$l$J$$!#(B -</defun> - - -<h2> Entity $B$NFbMF(B -<node> Entity-content -<p> -<defun name="mime-entity-content"> - <args> entity -<p> -<var>entity</var> $B$NFbMF$N(B byte $BNs$rJV$9!#(B -</defun> - -<defun name="mime-write-entity-content"> - <args> entity filename -<p> -Write content of <var>entity</var> into <var>filename</var>. -</defun> - -<defun name="mime-write-entity"> - <args> entity filename -<p> -Write representation of <var>entity</var> into <var>filename</var>. -</defun> - -<defun name="mime-write-entity-body"> - <args> entity filename -<p> -Write body of <var>entity</var> into <var>filename</var>. -</defun> - - -<h2> Entity $B$N(B buffer $B$K$h$kI=8=(B -<node> Entity buffer -<p> -<defun name="mime-entity-buffer"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$rJV$9!#(B -</defun> - -<defun name="mime-entity-point-min"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(B<var>entity</var> $B$,@j$a$k(B -$BNN0h$N@hF,0LCV$rJV$9!#(B -</defun> - -<defun name="mime-entity-point-max"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(B<var>entity</var> $B$,@j$a$k(B -$BNN0h$NKvHx0LCV$rJV$9!#(B -</defun> - -<defun name="mime-entity-header-start"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bheader $B$,@j$a$kNN0h$N@hF,(B -$B0LCV$rJV$9!#(B -</defun> - -<defun name="mime-entity-header-end"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bheader $B$,@j$a$kNN0h$NKvHx(B -$B0LCV$rJV$9!#(B -</defun> - -<defun name="mime-entity-body-start"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bbody $B$,@j$a$kNN0h$N@hF,0L(B -$BCV$rJV$9!#(B -</defun> - -<defun name="mime-entity-body-end"> - <args> entity -<p> -<var>entity</var> $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bbody $B$,@j$a$kNN0h$NKvHx0L(B -$BCV$rJV$9!#(B -</defun> - - -<h2> Entity $B$NI=8=$H<B8=(B -<node> mm-backend -<p> -Entity $B$OCj>]2=$5$l$?%G!<%?I=8=$G!"<B:]$N%G!<%?I=8=$H$7$F$OMQES$K1~$8$F(B -$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#(B -<p> -$B$3$3$G!"(Bentity $B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,(B -<concept>representation-type</concept> $B$G!"(Bentity $B$r@8@.$9$k;~$K$O$3$l$r(B -$B;XDj$7$^$9!#(B<cf node="Entity Creation"> -<p> -$BA0@a$^$G$K=R$Y$FMh$?(B entity $B$KBP$9$k=hM}$O!"(Bentity $B$KBP$7$F$=$N=hM}$r0M(B -$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#(BEntity $B$O<+J,$N(B -representation-type $B$rCN$C$F$*$j!"$=$N(B representation-type $B$K1~$8$F<B:](B -$B$N=hM}$r9T$&4X?t$r8F$S=P$7$^$9!#$3$N$h$&$J4X?t$r(B <concept>entity $B=hM}(B -method</concept> $B$H8F$S$^$9!#$^$?!"(Brepresentation-type $BKh$K$3$N$h$&$J4X(B -$B?t$r$^$H$a$?$b$N$r(B <concept>mm-backend</concept> $B$H8F$S$^$9!#(B -<p> -mm-backend $B$O(B representation-type $B$NL>A0$N@hF,$K(B <code>mm</code> $B$H$$$&(B -$B@\F,<-$rIU$1$?4X?tL>$+$i$J$k(B module $B$G!"$=$N(B module $BL>$OF1MM$K(B -representation-type $B$NL>A0$N@hF,$K(B <code>mm</code> $B$rIU$1$?$b$N$K$J$C$F(B -$B$$$^$9!#$3$N(B module $B$O(B representation-type $B$N(B entity $B$,:G=i$K@8@.$5$l$k(B -$B;~$K<+F0E*$K(B require $B$5$l$^$9!#(B - - -<h3> Entity $B$X$NJX$j(B -<node> Request for entity -<p> -<defun name="mime-entity-send"> - <args> entity message <rest> args -<p> -<var>entity</var> $B$K(B <var>message</var> $B$rAw$k!#(B -<p> -<var>args</var> $B$O(B <var>message</var> $B$N0z?t$G$"$k!#(B -</defun> - - -<h3> mm-backend $B$N:n$jJ}(B -<node> mm-backend module -<p> -$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9(B (^_^;$B!K(B -<p> -$B!J$H$j$"$($:!"(Bmm*.el $B$r;29M$K$7$F$/$@$5$$!K(B - - -<h1> Content-Type $BMs$N>pJs(B -<node> Content-Type -<p> -<concept>Content-Type $BMs(B</concept> $B$O(B <dref>media-type</dref> $B$d(B MIME -charset $B$H$$$C$?(B <dref>entity</dref> $B$NFbMF$N<oN`$dI=8=7A<0$J$I$r5-=R(B -$B$9$k$?$a$N$b$N$G!"(B<dref>RFC 2045</dref> $B$GDj5A$5$l$F$$$^$9!#(B - -<memo> -<p> -$BNr;KE*$K$O(B RFC 1049 $B$G(B Content-Type $BMs$,Ds0F$5$l$F$$$k!#C"$7!"(BMIME $B$N(B -media-type $B$N$h$&$J(B type $B$H(B subtype $B$N6hJL$O$J$/!"(BMIME charset $B$N$h$&(B -$B$JJ8;zId9f$N<oN`$rI=8=$9$k$3$H$b$G$-$J$$!#(B -</memo> - -<p> -FLIM $B$O(B Content-Type $BMs$r9=J82r@O$9$k4X?t$H(B Content-Type $BMs$N2r@O7k2L$r(B -$B3JG<$9$k9=B$BN(B <concept>mime-content-type</concept> $B$rDs6!$7$^$9!#(B - - -<h2> Content-Type $BMs$N7A<0(B -<node> Content-Type field -<p> -Content-Type $BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'(B - -<quote> -``Content-Type'' ``:'' <concept>type</concept> ``/'' -<concept>subtype</concept> *( ``;'' <concept>parameter</concept> ) -</quote> -<p> -$BNc$($P!"(B - -<quote> -<verb> -Content-Type: image/jpeg -</verb> -</quote> - -<noindent> -$B$d(B - -<quote> -<verb> -Content-Type: text/plain; charset=iso-2022-jp -</verb> -</quote> - -<noindent> -$B$J$I$N$h$&$KMQ$$$i$l$^$9!#(B -<p> -$B$3$3$G!"(B`type' $B$H(B `subtype' $B$O(B entity $B$N7A<0$r<($9$b$N$G!"N><T$rAm>N$7(B -$B$F!"(B`media-type' $B$H8F$V$3$H$K$7$^$9!#>e5-$NNc$K$*$1$k(B `image/jpeg' $B$d(B -`text/plain' $B$O(B media-type $B$N#1$D$G$9!#(B - -<memo> -<p> -Content-Type $BMs$N$J$$(B entity $B$O(B - -<quote> -<verb> -Content-Type: text/plain; charset=us-ascii -</verb> -</quote> - -<noindent> -$B$H$7$F2r<a$5$l$k!#(B<cf node="us-ascii"> -</memo> - - -<h2> mime-content-type $B9=B$BN(B -<node> mime-content-type -<p> -<define type="Structure" name="mime-content-type"> -<p> -Content-Type $BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#(B -<p> -$B$3$N9=B$BN$r;2>H$9$k$K$O(B <code>mime-content-type-$BMWAGL>(B</code> $B$H$$$&L>(B -$BA0$N;2>H4X?t$rMQ$$$k!#(B -<p> -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -<vl> -<dt>primary-type<dd>media-type $B$N<g7?(B (symbol). -</dd> -<dt>subtype<dd>media-type $B$NI{7?(B (symbol). -</dd> -<dt>parameters<dd>Content-Type $BMs$N(B parameter ($BO"A[(B list). -</dd> -</vl> -</define> - -<defun name="make-mime-content-type"> - <args> type subtype - <opts> parameters -<p>content-type $B$N@8@.;R!#(B -</defun> - -<defun name="mime-content-type-parameter"> -<args> content-type parameter -<p> -<var>content-type</var> $B$N(B <var>parameter</var> $B$NCM$rJV$9!#(B -</defun> - - -<h2> Content-Type $BMs$N2r@O4o(B -<node> Content-Type parser -<p> -<defun name="mime-parse-Content-Type"> - <args> string -<p> -<var>string</var> $B$r(B content-type $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -</defun> - -<defun name="mime-read-Content-Type"> -<p> -$B8=:_$N(B buffer $B$N(B Content-Type $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B -<p> -Content-Type $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -</defun> - - -<h2> Content-Type $B$K4X$9$kM-MQ$J4X?t(B -<node> Content-Type utility -<p> -<defun name="mime-type/subtype-string"> - <args> type <opts> subtype -<p> -<var>type</var> $B$H(B <var>subtype</var> $B$+$i(B type/subtype $B7A<0$NJ8;zNs$rJV(B -$B$9!#(B -</defun> - - -<h1> Content-Disposition $BMs$N>pJs(B -<node> Content-Disposition -<p> -<concept>Content-Disposition $BMs(B</concept> $B$O(B entity $B$NI=<($d(B file $BL>$J$I(B -$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#(B - -<rfc number="2183" type="Standards Track" - author="S. Dorner, K. Moore and R. Troost" - title="Communicating Presentation Information in - Internet Messages: The Content-Disposition Header" - date="August 1997"> -<p> -FLIM $B$O(B Content-Disposition $BMs$r9=J82r@O$9$k4X?t$H(B Content-Disposition -$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN(B -<concept>mime-content-disposition</concept> $B$rDs6!$7$^$9!#(B - - -<h2> mime-content-disposition $B9=B$BN(B -<node> mime-content-disposition -<p> -<define type="Structure" name="mime-content-disposition"> -<p> -Content-Disposition $BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#(B -<p> -$B$3$N9=B$BN$r;2>H$9$k$K$O(B <code>mime-content-disposition-$BMWAGL>(B</code> $B$H(B -$B$$$&L>A0$N;2>H4X?t$rMQ$$$k!#(B -<p> -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -<vl> -<dt>disposition-type<dd>disposition-type (symbol). -</dd> -<dt>parameters<dd>Content-Disposition $BMs$N(B parameter ($BO"A[(B list). -</dd> -</vl> -</define> - -<defun name="mime-content-disposition-parameter"> -<args> content-disposition parameter -<p> -<var>content-disposition</var> $B$N(B <var>parameter</var> $B$NCM$rJV$9!#(B -</defun> - -<defun name="mime-content-disposition-filename"> -<args> content-disposition -<p> -<var>content-disposition</var> $B$N(B filename $B$NCM$rJV$9!#(B -</defun> - - -<h2> Content-Disposition $BMs$N2r@O4o(B -<node> Content-Disposition parser -<p> -<defun name="mime-parse-Content-Disposition"> - <args> string -<p> -<var>string</var> $B$r(B content-disposition $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -</defun> - -<defun name="mime-read-Content-Disposition"> -<p> -$B8=:_$N(B buffer $B$N(B Content-Disposition $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B -<p> -Content-Disposition $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -</defun> - - -<h1> $BId9f2=K!(B -<node> Content-Transfer-Encoding -<p> -<concept>Content-Transfer-Encoding $BMs(B</concept> $B$O(B entity $B$NId9f2=K!$r5-(B -$B=R$9$k$?$a$N$b$N$G$9!#(B -<p> -FLIM $B$G$O(B Content-Transfer-Encoding $BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3(B -$B$l$i$N4X?t$O(B Content-Transfer-Encoding $BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#(B -<p> -$B$^$?!"(BContent-Transfer-Encoding $B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs(B -$B6!$5$l$^$9!#(B - - -<h2> Content-Transfer-Encoding $BMs$N2r@O4o(B -<node> Content-Transfer-Encoding parser -<p> -<defun name="mime-parse-Content-Transfer-Encoding"> - <args> string -<p> -<var>string</var> $B$r(B content-transfer-encoding $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -</defun> - -<defun name="mime-read-Content-Transfer-Encoding"> - <opts>default-encoding -<p> -$B8=:_$N(B buffer $B$N(B Content-Transfer-Encoding $BMs$rFI$_<h$j!"2r@O$7$?7k2L$r(B -$BJV$9!#(B -<p> -Content-Transfer-Encoding $BMs$,B8:_$7$J$$>l9g$O(B -<var>default-encoding</var> $B$rJV$9!#(B -</defun> - - -<h2> $BNN0h$NId9f2=!&I|9f2=(B -<node> Region encoder/decoder -<p> -<defun name="mime-encode-region"> - <args> start end encoding -<p> -Encode region <var>start</var> to <var>end</var> of current buffer -using <var>encoding</var>. -</defun> - -<defun name="mime-decode-region"> - <args> start end encoding -<p> -Decode region <var>start</var> to <var>end</var> of current buffer -using <var>encoding</var>. -</defun> - -<defvar name="mime-encoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to encode region. -<p> -Each element looks like <code>(STRING . FUNCTION)</code> or -<code>(STRING . nil)</code>. <var>string</var> is -content-transfer-encoding. <code>function</code> is region encoder -and <code>nil</code> means not to encode. -</defvar> - -<defvar name="mime-decoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to decode region. -<p> -Each element looks like <code>(STRING . FUNCTION)</code> or -<code>(STRING . nil)</code>. <var>string</var> is -content-transfer-encoding. <code>function</code> is region decoder -and <code>nil</code> means not to decode. -</defvar> - - -<h2> $BJ8;zNs$NId9f2=!&I|9f2=(B -<node> String encoder/decoder -<p> -<defun name="mime-decode-string"> - <args> string encoding -<p> -<var>string</var> $B$r(B <var>encoding</var> $B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#(B -</defun> - -<defvar name="mime-string-decoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to decode string. -<p> -Each element looks like <code>(STRING . FUNCTION)</code>. -STRING is content-transfer-encoding. -FUNCTION is string decoder. -</defvar> - - -<h2> File $B$NId9f2=!&I|9f2=(B -<node> File encoder/decoder -<p> -<defun name="mime-insert-encoded-file"> - <args> filename encoding -<p> -Insert file <var>FILENAME</var> encoded by <var>ENCODING</var> format. -</defun> - -<defun name="mime-write-decoded-region"> - <args> start end filename encoding -<p> -Decode and write current region encoded by <var>encoding</var> into -<var>filename</var>. -<p> -<var>start</var> and <var>end</var> are buffer positions. -</defun> - -<defvar name="mime-file-encoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to insert encoded file. -<p> -Each element looks like <code>(STRING . FUNCTION)</code>. STRING is -content-transfer-encoding. FUNCTION is function to insert encoded -file. -</defvar> - -<defvar name="mime-file-decoding-method-alist"> -<p> -Alist of encoding vs. corresponding method to write decoded region to -file. -<p> -Each element looks like <code>(STRING . FUNCTION)</code>. STRING is -content-transfer-encoding. FUNCTION is function to write decoded -region to file. -</defvar> - - -<h1> Header $B$N(B network $BI=8=(B -<node> encoded-word -<p> -encoded-word $B$O(B header $B$GHs(B <dref>ASCII</dref> $BJ8;z$rI=8=$9$k$?$a$N7A(B -$B<0$G!"(B<concept>RFC 2047</concept> $B$GDj5A$5$l$F$$$^$9!#(B -<p> -<rfc number="2047" type="Standards Track" author="K. Moore" - title="MIME (Multipurpose Internet Mail Extensions) Part - Three: Message Header Extensions for Non-ASCII Text" - date="November 1996" obsolete="1521,1522,1590"> -<p> -$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"(Bencoded-word $B$rMQ$$$:$KHs(B -<dref>ASCII</dref> $BJ8;z$r(B header $B$KF~$l$?5-;v$bB8:_$7$^$9!#(B -<p> -FLIM $B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#(B - - -<h2> Header $B$NId9f2=!&I|9f2=(B -<node> Header encoder/decoder -<p> -<defun name="eword-encode-header"> - <opts> code-conversion separator -<p> -Decode MIME encoded-words in header fields. -<p> -If <var>code-conversion</var> is <code>nil</code>, it decodes only -encoded-words. If it is mime-charset, it decodes non-ASCII bit -patterns as the mime-charset. Otherwise it decodes non-ASCII bit -patterns as the default-mime-charset. -<p> -If <var>separator</var> is not nil, it is used as header separator. -</defun> - -<defun name="eword-encode-header"> - <opts> code-conversion -<p> -Encode header fields to network representation, such as MIME -encoded-word. -<p> -It refer variable <code>eword-field-encoding-method-alist</code>. -</defun> - - -<h1> $B0lHL@_Dj(B -<node> custom -<p> -<define type="group" name="mime"> -<p> -MIME $B4XO"5!G=$K4X$9$k(B group. -<p> -<code>mail</code> $B$H(B <code>news</code> $B$KB0$9$k!#(B -</define> - -<defvar name="default-mime-charset"> -<p> -$BE,@Z$J(B <dref>MIME charset</dref> $B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i$l$k(B -MIME charset. -<p> -$BK\Mh$O(B APEL $B$NJQ?t$G$"$k!#(B -</defvar> - -<defvar name="mime-temp-directory"> -<p> -MIME $B5!G=$K4X$9$k<BAu$,0l;~E*$K;HMQ$9$k(B file $B$r:n@.$9$k(B directory. -<p> -$B4D6-JQ?t(B <code>MIME_TMP_DIR</code>, <code>TM_TMP_DIR</code>, -<code>TMPDIR</code>, <code>TMP</code> $B$b$7$/$O(B <code>TEMP</code> $B$,@_Dj(B -$B$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$FMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"(B -<code>"/tmp/"</code> $B$rMQ$$$k!#(B -</defvar> - - -<h1> $BIUO?(B -<node> Appendix - -<h2> $BMQ8l(B -<node> Glossary - -<h3> 7bit -<node> 7bit -<p> -$B$3$3$G$O(B 0 $B$+$i(B 127 $B$N@0?t$r;X$9!#(B -<p> -0 $B$+$i(B 127 $B$N@0?t$NNs$GI=8=$G$-$k$h$&$J(B data $B$r(B ``7bit $B$N(B data'' $B$H8F(B -$B$V!#(B -<p> -$B$^$?!"(B0 $B$+$i(B 31 $B$*$h$S(B 127 $B$GI=8=$5$l$k@)8fJ8;z$H(B 32 $B$GI=8=$5$l$k6uGr(B -$B$H(B 33 $B$+$i(B 126 $B$GI=8=$5$l$k?^7AJ8;z$+$i$J$kJ8;zNs$N$3$H$r(B ``7bit $B$NJ8(B -$B;zNs(B'' $B$H8F$V!J$3$l$O(B <dref>ISO 2022</dref> $B$N!V(B7 $BC10L7O!W$HF1MM!K!#(B -<p> -$BEAE}E*$J(B Internet $B$N(B <dref>MTA</dref> $B$O(B 7bit $B$N(B data $B$rE>Aw$G$-$k$N$G!"(B -7bit $B$N(B data $B$O(B <dref>Quoted-Printable</dref> $B$d(B <dref>Base64</dref> -$B$H$$$C$?JQ49$r9T$o$J$/$F$b$=$N$^$^E>Aw$G$-$k!#(B -<p> -$B$7$+$7!"(B7bit $B$G$"$l$P$I$s$J(B data $B$G$bNI$$$H$O$$$($J$$!#$J$<$J$i!"#19T(B -$B$ND9$5$,$"$^$j$KD9$$$H!"(BMTA $B$O$=$N(B message $B$rE>Aw$9$k$3$H$,$G$-$J$$$+(B -$B$i$G$"$k!#$A$J$_$K!"(B<dref>RFC 821</dref> $B$O#19T$O2~9TJ8;z$r=|$$$F(B 998 -byte $B0JFb$G$"$k$3$H$r5a$a$F$$$k!#$h$C$F!"$3$l0J>e$N9T$,4^$^$l$k2DG=@-(B -$B$N$"$k(B data, $BNc$($P!"(BPostscript $B$N(B data $B$J$I$O(B Quoted-Printable $BEy$G(B -encode$B$9$kI,MQ$,$"$k!#(B - - -<h3> 8bit -<node> 8bit -<p> -$B$3$3$G$O(B 0 $B$+$i(B 255 $B$N@0?t$r;X$9!#(B -<p> -0 $B$+$i(B 255 $B$N@0?t$NNs$GI=8=$G$-$k$h$&$J(B data $B$r(B ``8bit $B$N(B data'' $B$H8F(B -$B$V!#(B -<p> -$B$^$?!"(B0 $B$+$i(B 31, 127 $B$*$h$S(B 128 $B$+$i(B 159 $B$GI=8=$5$l$k@)8fJ8;z$H(B 32 $B$G(B -$BI=8=$5$l$k6uGr$H(B 33 $B$+$i(B 126 $B$H(B 160 $B$+$i(B 255 $B$GI=8=$5$l$k?^7AJ8;z$+$i(B -$B$J$kJ8;zNs$N$3$H$r(B ``8bit $B$NJ8;zNs(B'' $B$H8F$V!J$3$l$O(B <dref>ISO -2022</dref> $B$N!V(B8 $BC10L7O!W$HF1MM!K!#(B -<p> -<dref>iso-8859-1</dref> $B$d(B <dref>euc-kr</dref> $B$H$$$C$?Id9f2=J8;z=89g(B -$B$O(B 8bit $B$NJ8;zNs$G$"$k!#(B -<p> -$BEAE}E*$J(B Internet $B$N(B <dref>MTA</dref> $B$O(B <dref>7bit</dref> $B$N(B data $B$7(B -$B$+E>Aw$G$-$J$$$N$G!"$=$&$7$?(B MTA $B$r7PM3$9$k>l9g!"(B -<dref>Quoted-Printable</dref> $B$d(B <dref>Base64</dref> $B$H$$$C$?JQ49$r9T(B -$B$o$J$/$F$O$J$i$J$$!#(B -<p> -$B$7$+$7!":G6a$G$O(B 8bit $B$NJ8;zNs$r$=$N$^$^DL$9$3$H$,$G$-$k(B MTA $B$bEP>l$7(B -$B$F$-$?$N$G!"$=$N$^$^Aw$k$3$H$,$G$-$k>l9g$bA}$($F$-$?!#(B -<p> -$B$7$+$7!"(B8bit $B$G$"$l$P$I$s$J(B data $B$G$bNI$$$H$O$$$($J$$!#$J$<$J$i!"#19T(B -$B$ND9$5$,$"$^$j$KD9$$$H!"(BMTA $B$O$=$N(B message $B$rE>Aw$9$k$3$H$,$G$-$J$$$+(B -$B$i$G$"$k!#$A$J$_$K!"(B<dref>RFC 821</dref> $B$O#19T$O2~9TJ8;z$r=|$$$F(B 998 -byte $B0JFb$G$"$k$3$H$r5a$a$F$$$k!#$h$C$F!"$3$l0J>e$N9T$,4^$^$l$k2DG=@-(B -$B$N$"$k(B data, $BNc$($P!"(BPostscript $B$N(B data $B$J$I$O(B Quoted-Printable $BEy$G(B -encode$B$9$kI,MQ$,$"$k!#(B -<p> -$B$^$?!"$3$&$7$?M}M3$+$i!"#19T$,(B 999 byte $B0J>e$N9T$,B8:_$9$k2DG=@-$N$"$k(B -data $B$O(B <a node="binary"><concept>binary</concept></a> $B$H8F$V$3$H$K$9(B -$B$k!#(B -<p> -$B$A$J$_$K!"(B7bit $B$GI=8=$G$-$k(B data $B$O(B 8bit $B$G$bI=8=$G$-$k!#$h$C$F!"(B -``8bit'' $B$H8@$C$?>l9g!"#19T$,(B 998 byte $B0J2<$NG$0U$N(B data $B$r;X$9$3$H$,(B -$B$"$k!#(B - - -<h3> ASCII -<node> ASCII -<p> -$B%"%a%j%+O"K.$G;H$o$l$kJ8;z$rId9f2=$7$?(B<dref>$BId9f2=J8;z=89g(B</dref>$B!#(B -A-Z, a-z $B$N(B Latin $BJ8;z$H?t;z!"4v$D$+$N5-9f$+$i$J$k!#(BISO 646 $B$N0l$D$G!"(B -$B8=:_$O9q:]4p=`HG(B (IRV) $B$K$J$C$F$$$k!#(B - -<standard abbrev="ASCII" title-en="Coded Character Set -- 7-Bit - American Standard Code for Information Interchange" - number="ANSI X3.4" year="1986"> - - -<h3> Base64 -<node> Base64 -<p> -<dref>RFC 2045</dref> $B$GDj5A$5$l$F$$$k(B <dref>MIME</dref> $B$K$*$1$k(B <a -node="binary">binary data</a> $B$N(B network $B$G$NJQ49K!$N#1$D!#(B -<p> -$B!X(B64 $B?J?t!Y$H$$$&0UL#$G!"(B3 byte $B$N(B data $B$r(B 0 $B$+$i(B 63 $B$N?t$rI=$9(B -<dref>ASCII</dref> 4 $BJ8;z$KJQ49$9$kJ}K!!#!J$b$7!"(B4 $BJ8;z$K$J$i$J$1$l$P(B -<concept>pad</concept> $B$H8F$P$l$k5M$aJ*$r$7$FD9$5$rD4@0$9$k!K(B -<p> -$B$3$N(B 65 $B<oN`$NJ8;z$O(B ASCII $B$H(B EBCDIC $B$N6&DLItJ,$+$iA*$P$l$F$*$j!"(B -Internet $B0J30$N(B network $B$r7PM3$9$k>l9g$G$b0BA4$KE>Aw$G$-$k$h$&$K@_7W$5(B -$B$l$F$$$k!#(B - - -<h3> binary -<node> binary -<p> -$BG$0U$N(B byte $BNs$r(B <concept>binary</concept> $B$H8F$V!#(B -<p> -<dref>8bit</dref> $B$H0[$J$k$N$O(B data $B$K9T$N9=B$$r2>Dj$7$J$$$3$H$G$"$k!#(B -<p> -$B$^$?!"9T$N9=B$$,$"$C$F$b!"(B999 byte $B0J>e$+$i$J$k9T$,$"$k>l9g$b(B binary -$B$H8F$V$3$H$K$9$k!#(B -<p> -$B$A$J$_$K!"(B<dref>7bit</dref> $B$d(B 8bit $B$GI=8=$G$-$k(B data $B$O(B binary $B$G$bI=(B -$B8=$G$-$k!#$h$C$F!"(B<concept>binary data</concept> $B$H8@$C$?>l9g!"G$0U$N(B -data $B$r;X$9$3$H$,$"$k!#(B - - -<h3> Coded character set$B!JId9f2=J8;z=89g!K(B, Character code$B!JJ8;zId9f!K(B -<node> Coded character set -<p> -$BJ8;z$H(B byte $BNs$H#1BP#1$KBP1~IU$1$k[#Kf$G$J$$5,B'$N=89g!#(B - - -<h3> media-type -<node> media-type -<p> -<dref>MIME</dref> $B$K$*$1$k(B <dref>entity</dref> $B$N<oN`!#(B -<concept>primary-type</concept> $B$H(B <concept>subtype</concept> $B$+$i$J$k!#(B -<dref>RFC 2046</dref> $B$GDj5A$5$l$F$$$k!#(B -<p> -primary-type $B$OI8=`$G$O(B - -<ul> -<li><concept>text</concept> -</li> -<li><concept>image</concept> -</li> -<li><concept>audio</concept> -</li> -<li><concept>video</concept> -</li> -<li><concept>application</concept> -</li> -<li><a node="multipart"><concept>multipart</concept></a> -</li> -<li><concept>message</concept> -</ul> - -<noindent> -$B$,Dj5A$5$l!"$=$l$>$l$K$O(B application/octet-stream, audio/basic, -image/jpeg, <dref>multipart/mixed</dref>, <dref>text/plain</dref>, -video/mpeg $B$J$I$N$5$^$6$^$J(B subtype $B$,Dj5A$5$l$F$$$k!#(B - -<memo title="$BCm0U(B"> -<p> -$B$3$3$G$O!"(Btext/plain $B$J$I$N(B type/subtype $B$NAH$r$7$P$7$P(B -<concept>primary-type/subtype</concept> $B$H=q$/!#(B -</memo> - -<p> -media-type $B$O!"(BRFC 2046 $B$GDj5A$5$l$F$$$k$b$N$K2C$($F!"EPO?$9$k$3$H$b$G(B -$B$-$k!#8=:_!"EPO?$5$l$F$$$k$b$N$O(B <a -href="ftp://ftp.isi.edu/in-notes/iana/assignments/media-types">MEDIA -TYPES</a> $B$G;2>H$G$-$k!#(B -<p> -$B$^$?!"(Btype $B$b$7$/$O(B subtype $B$K!"A0$K(B `x-' $B$rIU$1$?(B -<concept>x-token</concept> $B$rMQ$$$k$3$H$K$h$j!"EPO?$5$l$F$$$J$$$b$N$r(B -$B;dE*$KMQ$$$k$3$H$b$G$-$k!#$7$+$7!"EvA3$N$3$H$J$,$i!"$3$&$7$?;dE*$J(B -media-type $B$ONJ2r$rF@$?<T$N4V$G$7$+2r<a$G$-$J$$$N$GMxMQ$K$OCm0U$9$k$3(B -$B$H!#(B -<p> -<cf node="Content-Type"> - - -<h3> message -<node> message -<p> -$B$3$3$G$O(B mail $B$H(B news $B5-;v$NAm>N$H$7$FMQ$$$k!#(B - - -<h3> MIME -<node> MIME -<p> -<concept>Multipurpose Internet Mail Extensions</concept> $B$NN,$G!"(B -Internet $B$N(B mail $B$d(B news $B$G(B <a node="us-ascii">us-ascii plain text</a> -$B0J30$NJ8;z$r;H$&$?$a$N(B <dref>RFC 822</dref> $B$KBP$9$k3HD%!#(B -<p> -RFC 2045 $B$OKAF,$G<!$N$h$&$K=R$Y$F$$$k!'(B -<p> -STD 11, RFC 822 $B$O!"(BUS-ASCII message header $B$K4X$7$FHs>o$K>\:Y$K5,Dj$7(B -$B$?(B message $BI=8=(B protocol $B$rDj5A$7$F$$$k!#$7$+$7!"$=$l$OC1$K(B flat $B$J(B -US-ASCII text $B$N$_$KN1$^$j!"(Bmessage $B$NFbMF$d(B message body $B$K4X$9$k5,Dj(B -$B$O$J$5$l$F$$$J$$!#(BMultipurpose Internet Mail Extensions, $B$"$k$$$O(B MIME -$B$HAm>N$5$l$k!"$3$N0lO"$NJ8=q$O!"0J2<$N;v$r2DG=$H$9$k$?$a$K(B message $B$N(B -$B7A<0$r:FDj5A$7$?!'(B - -<ol> -<li>$BJ8=q(B message body $B$K$*$1$k(B US-ASCII $B0J30$NJ8;z=89g(B -</li> -<li>$BHsJ8=q(B message body -</li> -<li>$BJ#?t$NItJ,$+$i$J$k(B message body -</li> -<li>US-ASCII $B0J30$NJ8;z=89g$+$i$J$kJ8=q(B header $B>pJs(B -</ol> - -<p> -<dref>RFC 2045</dref>, <dref>RFC 2046</dref>, <a -node="encoded-word">RFC 2047</a>, <dref>RFC 2048</dref>, <dref>RFC -2049</dref> $B$GDj5A$5$l$F$$$k!#(B - - -<h3> MIME charset -<node> MIME charset -<p> -<dref>Content-Type</dref> $BMs$d(B <dref>encoded-word</dref> $B$N(B charset -parameter $B$GMQ$$$i$l$kEPO?$5$l$?(B<a node="Coded character set">$BId9f2=J8(B -$B;z=89g(B</a>$B!#(B -<p> -<dref>RFC 2045</dref> $B$GDj5A$5$l$F$$$k!#(B -<p> -iso-2022-jp $B$d(B euc-kr $B$O$=$N#1$D!#(B - - -<h3> MTA -<node> MTA -<p> -<concept>Message Transfer Agent</concept> $B$NN,$G!"(Bqmail $B$d(B sendmail $B$J(B -$B$I$N(B mail $BG[Aw(B program $B$H(B inn $B$J$I$N(B news server $B$NAm>N!#(B -<p> -<cf node="MUA"> - - -<h3> MUA -<node> MUA -<p> -<concept>Message User Agent</concept> $B$NN,$G!"(Bmail reader $B$H(B news -reader $B$NAm>N!#(B -<p> -<cf node="MTA"> - - -<h3> Quoted-Printable -<node> Quoted-Printable -<p> -<dref>RFC 2045</dref> $B$GDj5A$5$l$F$$$k(B <dref>MIME</dref> $B$K$*$1$k(B -<dref>binary data</dref> $B$N(B network $B$G$NJQ49K!$N#1$D!#(B -<p> -`=' $B$d@)8fJ8;z$d(B 128 $B0J>e$NJ8;z$J$I$O(B `=AF' $B$N$h$&$K(B `=' $B$N8e$KB3$/(B 16 -$B?J?t$GI=8=$9$k!#$3$N$?$a!"(B<dref>ASCII</dref> $BJ8;zCf?4$N(B data $B$G$O(B -<dref>Base64</dref> $B$KHf$Y$k$H2DFI@-$,9b$/$J$k2DG=@-$,$"$k!#(B -<p> -$B$7$+$7$J$,$i!"(BEBCDIC $B$K$OB8:_$7$J$$J8;z$rMxMQ$9$k>l9g!"(BEBCDIC $B$rMxMQ$7(B -$B$F$$$k(B network $B$G$O0BA4$KE>Aw$9$k$3$H$,$G$-$:!"(BBase64 $B$KHf$Y$F0BA4@-$O(B -$BDc$$!#(B - - -<h3> RFC 822 -<node> RFC 822 -<p> -Internet mail $B$N<g$K(B <concept>message header</concept> $B$K4X$9$k7A<0$K(B -$B4X$9$kI8=`$rDj$a$F$$$k(B RFC. - -<memo> -<p> -news message $B$b$3$l$K=`$8$F$$$k$N$G!"(B<concept>Internet mail</concept> -$B$H=q$/$h$j$b!"(B<concept>Internet message</concept> $B$H=q$$$?J}$,NI$$$+$b(B -$B$7$l$J$$!#(B -</memo> - -<rfc number="822" type="STD 11" author="D. Crocker" title="Standard - for the Format of ARPA Internet Text Messages" - date="August 1982"> - - -<h3> RFC 1036 -<node> RFC 1036 -<p> -USENET $B$G$N(B message $B$N7A<0$rDj$a$?(B RFC. <dref>RFC 822</dref> $B$N(B -subset $B$K$J$C$F$$$k!#(BInternet $B$NI8=`$G$O$J$$$,!"(BUSENET $B0J30$N(B netnews -$B$G$b$3$l$K=`$8$F$$$k$b$N$,B?$$!#(B - -<rfc name="USENET" number="1036" author="M. Horton and R. Adams" - title="Standard for Interchange of USENET Messages" - date="December 1987" obsolete="850"> - - -<h3> RFC 2045 -<node> RFC 2045 -<p> -<rfc number="2045" type="Standards Track" author="N. Freed and - N. Borenstein" title="Multipurpose Internet Mail - Extensions (MIME) Part One: Format of Internet Message - Bodies" date="November 1996" obsolete="1521, 1522, - 1590"> - - -<h3> RFC 2046 -<node> RFC 2046 -<p> -<rfc number="2046" type="Standards Track" author="N. Freed and - N. Borenstein" title="Multipurpose Internet Mail - Extensions (MIME) Part Two: Media Types" - date="November 1996" obsolete="1521, 1522, 1590"> - - -<h3> RFC 2048 -<node> RFC 2048 -<p> -<rfc number="2048" type="Standards Track" author="N. Freed, J. Klensin - and J. Postel" title="Multipurpose Internet Mail - Extensions (MIME) Part Four: Registration Procedures" - date="November 1996" obsolete="1521, 1522, 1590"> - - -<h3> RFC 2049 -<node> RFC 2049 -<p> -<rfc number="2049" type="Standards Track" author="N. Freed and - N. Borenstein" title="Multipurpose Internet Mail - Extensions (MIME) Part Five: Conformance Criteria and - Examples" date="November 1996" obsolete="1521, 1522, - 1590"> - - -<h3> plain text -<node> plain text -<p> -$B=qBN$dAHHG$K4X$9$k>pJs$r;}$?$J$$(B<a node="Coded character set">$BJ8;zId9f(B -</a>$B$N$_$GI=8=$5$l$k(B text $B>pJs!#(B<cf node="text/plain"> - - -<h3> us-ascii -<node> us-ascii -<p> -$B%"%a%j%+O"K.$J$I$G;H$o$l$k1Q8l$J$I$rI=8=$9$k$?$a$N(B <dref>MIME -charset</dref> $B$N#1$D!#(B -<p> -<dref>ASCII</dref> $B$N$_$+$i$J$j(B ISO 2022 $B$K$h$kId9f3HD%$O5v$5$l$J$$!#(B -<p> -Internet message $B$K$*$1$kI8=`$N(B<a node="Coded character set">$BId9f2=J8(B -$B;z=89g(B</a>$B$G$"$j!"L@<(E*$K(B MIME charset $B$,<($5$l$J$$>l9g$O86B'$H$7$F(B -<concept>us-ascii</concept> $B$,;H$o$l$k!#(B -<p> -$B$^$?!"(B<dref>RFC 822</dref> $B$K$*$1$k(B <concept>ASCII</concept> -$B$O(B us-ascii $B$G$"$k!#(B - - -<h2> bug $BJs9p$N;EJ}(B -<node> Bug report -<p> -FLIM $B$N%P%0$r8+$D$1$?$i!"0J2<$N(B address $B$K(B mail $B$rAw$C$F$/$@$5$$!'(B - -<ul> -<li> $BF|K\8l(B <mail>bug-tm-ja@chamonix.jaist.ac.jp</mail> -<li> $B1Q8l(B <mail>bug-tm-en@chamonix.jaist.ac.jp</mail> -</ul> - -<p> -$BC"$7!"$"$^$j$K$b8E$$HG$K4X$9$kJs9p$O4?7^$5$l$^$;$s!#8E$$HG$N(B bug $B$O!"(B -$B?7$7$$HG$G$O<#$C$F$$$k$+$b$7$l$^$;$s!#$^$:!":G?7HG$G3NG'$7$F$_$^$7$g$&!#(B -<p> -$B$=$l$+$i!"E,@Z$JJs9p$r$7$^$7$g$&!#C1$K!V$&$^$/F0$+$J$$!W$H8@$o$l$F$b$I(B -$B$&$$$&>u67$J$N$+$O$5$C$Q$jH=$j$^$;$s!#:GDc8B!"(BOS, emacs, APEL, FLIM, -SEMI, $B;H$C$F$$$k(B MUA $B$N<oN`$*$h$SHG!"@_Dj$r=q$/I,MW$,$"$j$^$9!#$^$?!"(B -error $B$,5/$C$F$$$k>l9g$O(B backtrace $B$rAw$k$3$H$b=EMW$G$9!#(B<cf -file="emacs" node="Bugs"> -<p> -$B$^$?!"(Bbug $B$OBgDqJ#?t$N?M$,Ax6x$9$k$b$N$G$9!J$=$&$G$J$1$l$P!"(Bbug $B$G$O$J(B -$B$$2DG=@-$,$"$j$^$9!K!#$@$+$i!":n<T$KD>@\(B mail $B$rAw$k$H:n<T$OF1$8(B mail -$B$r2?DL$b=q$/1)L\$K$J$j$^$9!#$@$+$i!"I,$:(B bug $BJs9p$O>e5-$N(B address $B$KAw$C(B -$B$F$/$@$5$$!#(B - -<p> -tm ML $B$G$O(B FLIM $B$N%P%0>pJs$N8r49$d:G?7HG$NG[I[!"(BFLIM $B$N2~NI$K4X$9$k5D(B -$BO@$r9T$J$C$F$$$^$9!#(Btm ML $B$K;22C$7$?$$J}$O(B - -<ul> -<li> $BF|K\8l(B <mail>tm-ja-help@chamonix.jaist.ac.jp</mail> -<li> $B1Q8l(B <mail>tm-en-help@chamonix.jaist.ac.jp</mail> -</ul> - -<noindent> -$B$K6u$N(B mail $B$rAw$C$F2<$5$$!#(B - - -<h2> CVS $B$K$h$k3+H/(B -<node> CVS -<p> -FLIM $B$N(B file $B$O(B CVS $B$r;H$C$F4IM}$5$l$F$$$^$9!#$3$N$?$a!"0J2<$NJ}K!$G:G(B -$B?7$N(B FLIM $B$rF~<j$9$k$3$H$,$G$-$^$9!'(B - -<verb> -(0) cvs login - - % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \ - login - - CVS password: [CR] # NULL string - -(1) checkout - - % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \ - checkout [-r TAG] flim -</verb> - -<p> -CVS $B$rMQ$$$?3+H/$K;22C$7$?$$J}$O(B - -<ul> -<li> <mail>cvs@chamonix.jaist.ac.jp</mail> -</ul> - -<noindent> -$B$^$G!"(Baccount $BL>$H(B UNIX $B$N(B passwd $B$HF1$87A<0$N(B crypt $B2=$5$l$?(B password -$B$r1h$($F8fO"Mm$/$@$5$$!#(B - - -<h2> $BNr;K(B -<node> History -<p> -FLIM $B$N(B code $B$N:G8E$NItJ,$O(B $B1]JB(B $B;LCR(B $B;a$,=q$$$?(B <file>mime.el</file> -$B$K5/8;$7$^$9!#$3$N>.$5$J(B program $B$O(B Nemacs $B$GF0:n$9$k(B iso-2022-jp $B$N(B -B-encoding $B@lMQ$N(B encoded-word $B$NI|9f2=%W%m%0%i%`$G$7$?!#(B -<p> -$B$=$N8e!"<i2,(B $BCNI'(B $B$O(B <file>mime.el</file> $B$r85$K(B -<file>tiny-mime.el</file> $B$H$$$&%W%m%0%i%`$r=q$-$^$9!#$3$l$O!"(BNemacs -$B$H(B Mule $B$GF0:n$9$k(B encoded-word $B$NId9f2=!&I|9f2=%W%m%0%i%`$G$7$?!#(B -<file>tiny-mime.el</file> $B$O(B B-encoding $B$@$1$G$J$/(B Q-encoding $B$b(B -support $B$7!"$^$?!"(BMULE $B$G07$&$3$H$,$G$-$k$5$^$6$^$J(B <dref>MIME -charset</dref> $B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"(BNemacs $B$H(B Mule $B$N(B -$BAPJ}$r(B support $B$9$k$?$a$KMQ$$$i$l$?%F%/%K%C%/$O8e$K(B emu package $B$K$^$H(B -$B$a$i$l$^$9!#(B -<p> -$B$3$N:"!"<i2,(B $BCNI'(B $B$O(B <file>tiny-mime.el</file> $B$r$5$^$6$^$J(B MUA $B$G;H$&(B -$B$?$a$N@_Dj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K(B -<file>tiny-mime.el</file> $B$H$H$b$K#1$D$N(B package $B$K$^$H$a$i$l!"(Btm $B$H$$(B -$B$&L>A0$GG[I[$5$l$^$9!#(B -<p> -$B<i2,(B $BCNI'(B $B$O$d$,$F!"(BMIME message $B$r1\Mw$9$k$?$a$N%W%m%0%i%`$G$"$k(B -<file>tm-body.el</file> $B$r=q$-$^$9!#$3$l$O!"$9$0$K(B -<file>tm-view.el</file> $B$H$$$&L>A0$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,(B -<file>tiny-mime.el</file> $B$KBe$o$C$F!"(Btm $B$NCf3K$H$J$j$^$9!#(B -<p> -<file>tm-view.el</file> $B$OEvA3!"(BContent-Transfer-Encoding $B$r07$&I,MW$,(B -$B$"$j$^$9!#$3$NL\E*$N$?$a$K!"(BMEL $B$,@0Hw$5$l$O$8$a$^$7$?!#(BBase64 $B$K4X$7(B -$B$F$O(B <file>tiny-mime.el</file> $B$N(B code $B$,0\$5$l!"$^$?!"?7$?$K(B -Quoted-Printable $B$N(B code $B$,DI2C$5$l$^$7$?!#$3$l$i$,(B -<file>mel-b.el</file> $B$H(B <file>mel-q.el</file> $B$K$J$j$^$7$?!#(B -<p> -$B$^$?!"8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B uuencode $BMQ$N(B <file>mel-u.el</file> $B$,(B -$BDI2C$5$l!"$=$N8e$K!">.NS(B $B=$J?(B $B;a$K$h$C$F(B x-gzip64 $BMQ$N(B -<file>mel-g.el</file> $B$,DI2C$5$l$^$7$?!#(B -<p> -tm $B$G$O8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B <file>tiny-mime.el</file> $B$N:F<BAu$,9T(B -$B$o$l!"$3$N2aDx$G!"(BSTD 11 $B$N(B parser $B$,=q$+$l$^$7$?!#$3$l$O!"8=:_$N(B -<file>std11.el</file> $B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G(B -<file>tiny-mime.el</file> $B$OI|9f2=$r9T$&(B <file>tm-ew-d.el</file> $B$HId(B -$B9f2=$r9T$&(B <file>tm-ew-e.el</file> $B$KJ,$1$i$l$^$7$?!#$3$NN><T$,8=:_$N(B -<file>eword-decode.el</file> $B$H(B <file>eword-encode.el</file> $B$N@hAD$K(B -$BEv$?$j$^$9!#(B -<p> -$B8e$K!"<i2,(B $BCNI'(B $B$i$K$h$C$F(B tm $B$NA4LL=q$-49$(:n6H$,9T$o$l!"$3$N2aDx$G!"(B -tm $B$O(B APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME $B$J$I$KJ,$1$i$l$^$7$?!#(B -$B$3$N$&$A$N(B MEL $B$,(B FLIM $B$ND>@\$N@hAD$KEv$?$j$^$9!#(B -<p> -$B8e$K!"(BAPEL $B$+$i(B <file>std11.el</file> $B$,0\$5$l!"$^$?!"(B -<file>mailcap.el</file>, <file>eword-decode.el</file> $B$*$h$S(B -<file>eword-encode.el</file> $B$,(B SEMI $B$+$i0\$5$l!"(Bpackage $B$NL>A0$,(B FLIM -$B$H$J$j$^$9!#(B -<p> -$B$3$ND>A0$+$iEDCf(B $BE/(B $B;a$,$h$j(B RFC $B$KCi<B$J<BAu$r=q$-;O$a!"$3$l$O!"8=:_!"(B -FLIM $B$N;^$G$"$k(B ``FLIM-FLAM'' $B$H$J$C$F$$$^$9!#(B - - -<h1> $B35G0:w0z(B -<node> Concept Index - -<cindex> - - -<h1> $B4X?t:w0z(B -<node> Function Index - -<findex> - - -<h1> $BJQ?t:w0z(B -<node> Variable Index - -<vindex> - -</body> diff --git a/mime-ja.texi b/mime-ja.texi deleted file mode 100644 index 7474bc2..0000000 --- a/mime-ja.texi +++ /dev/null @@ -1,1480 +0,0 @@ -\input texinfo.tex -@setfilename mime-ja.info -@settitle{FLIM 1.9 MIME $B5!G=@bL@=q(B} -@titlepage -@title FLIM 1.9 MIME $B5!G=@bL@=q(B -@author $B<i2,(B $BCNI'(B <morioka@@jaist.ac.jp> -@subtitle 1998/07/01 -@end titlepage -@node Top, Introduction, (dir), (dir) -@top FLIM 1.9 MIME $B5!G=@bL@=q(B - -@ifinfo - -This file documents MIME features of FLIM, a Internet message -parsing/encoding library for GNU Emacs.@refill - -GNU Emacs $BMQ$N(B Internet Message $B$N2r@O$dId9f2=$K4X$9$k(B library $B$G$"$k(B -FLIM $B$N(B MIME $B5!G=$K4X$7$F@bL@$7$^$9!#(B -@end ifinfo - -@menu -* Introduction:: FLIM $B$C$F2?!)(B -* How to use:: FLIM $B$N(B MIME $B5!G=$N;H$$J}(B -* Entity:: Message $B$H(B Entity -* Content-Type:: Content-Type $BMs$N>pJs(B -* Content-Disposition:: Content-Disposition $BMs$N>pJs(B -* Content-Transfer-Encoding:: $BId9f2=K!(B -* encoded-word:: Header $B$N(B network $BI=8=(B -* custom:: $B0lHL@_Dj(B -* Appendix:: $BIUO?(B -* Concept Index:: $B35G0:w0z(B -* Function Index:: $B4X?t:w0z(B -* Variable Index:: $BJQ?t:w0z(B -@end menu - -@node Introduction, How to use, Top, Top -@chapter FLIM $B$C$F2?!)(B - -FLIM $B$O(B Internet Message $B$NI=8=$dId9f2=$K4X$9$k4pACE*$J5!G=$rDs6!$9$k(B -$B$?$a$N(B library $B$G$9!#(B - - -@node How to use, Entity, Introduction, Top -@chapter FLIM $B$N(B MIME $B5!G=$N;H$$J}(B - -FLIM $B$NDs6!$9$k(B MIME $B5!G=$r;H$&$?$a$K$O(B - -@lisp -(require 'mime) -@end lisp - -@noindent -$B$rI>2A$7$F$/$@$5$$!#(B - - -@node Entity, Content-Type, How to use, Top -@chapter Message $B$H(B Entity -@cindex node-id -@cindex entity-number -@cindex mime-entity -@cindex entity - -RFC 2045 (@ref{RFC 2045}) $B$K$h$l$P!"!V(BEntity $B$H$$$&8l$O!"(Bmessage, $B$b$7$/(B -$B$O!"(Bmultipart entity $B$N(B body $BCf$N#1$D$NItJ,$N!"(BMIME $B$GDj5A$5$l$?(B header -field $B$HFbMF$r;X$9!W$H$J$C$F$$$^$9!#$3$3$G$O!"(BMIME $B$GDj5A$5$l$?(B header -field $B0J30$NA4$F$N(B header $B$H(B body $B$r;X$98l$H$7$F(B @strong{entity}$B$rMQ$$$k(B -$B$3$H$K$7$^$9!#(B@refill - -RFC 2045 $B$NDj5A$O!"(BMIME message $B$,(B entity $B$rC10L$H$9$kLZ9=B$$G$"$k$3$H$r(B -$B<($7$F$$$^$9!#(Bmessage $B$O2<?^$G<($9$h$&$JLZ$H$J$j!"(Bentity $B$O$3$NLZ$K$*$1(B -$B$k@a$H$J$j$^$9!#$D$^$j!"(BMIME $B$O(B message $B$rLZ9=B$$K3HD%$7$?Lu$G$9!#(B -@refill - -FLIM $B$O(B entity $B$N>pJs$rI=8=$9$k$?$a$K(B@strong{mime-entity} $B9=B$BN$rMQ$$$^(B -$B$9!#0J2<$G$OC1$K(B mime-entity $B$H8F$V$3$H$K$7$^$9!#(B@refill - -$BA0=R$N$h$&$K!"(Bmessage $BCf$N3F(B entity $B$OLZ$N@a$KEv$?$j$^$9$,!"$3$NLZ$K$O(B -$B?<$5$HF1$8?<$5$NCf$N=gHV$K=>$C$FHV9f$,IU$1$k$3$H$,$G$-$^$9!#B($A!"(B -@example - - $B(#(!(!(!($(B - $B("(B nil $B("(B - $B(&(!(((!(%(B - $B(#(!(!(!(!(!(!(!(!(!(+(!(!(!(!(!(!(!(!(!($(B - $B(#(*($(B $B(#(*($(B $B(#(*($(B - $B("#0("(B $B("#1("(B $B("#2("(B - $B(&(((%(B $B(&(((%(B $B(&(((%(B - $B("(B $B(#(!(!(!(!(+(!(!(!(!($(B $B("(B - $B(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(B - $B("(B $B#0(B.$B#0("("(B $B#1(B.$B#0("("(B $B#1(B.$B#1("("(B $B#1(B.$B#2("("(B $B#2(B.$B#0("(B - $B(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(B -@end example - -@noindent -$B$N$h$&$K?<$5(B n $B$N@a$K$OD9$5(B n $B$N@0?tNs$N@aHV9f$,?6$l$^$9!#$3$l(B -$B$r(B @strong{entity-number} $B$H8F$S$^$9!#(Bentity-number $B$O(B S $B<0$H(B -$B$7$F$O(B @code{(1 2 3)} $B$N$h$&$J@0?t$N%j%9%H$H$7$FI=8=$5$l$^$9!#(B - -mime-entity $B$G$O!"$3$l$HF1MM$N(B @strong{node-id} $B$rMQ$$$^$9!#(Bnode-id $B$O$A$g(B -$B$&$I(B entity-number $B$r5U$K$7$?%j%9%H$G!"(Bentity-number 1.2.3 $B$KBP1~$9$k(B -node-id $B$O(B @code{(3 2 1)} $B$G$9!#(B@refill - -$BA0=R$N$h$&$K!"(BMIME message $B$O(B entity $B$rC10L$H$7$?LZ9=B$$K$J$C$F$$$k$N$G!"(B -$B$3$N:,$G$"$k(B message $BA4BN$b(B mime-entity $B$GI=8=$9$k$3$H$,$G$-!"(Bbuffer -local $BJQ?t(B @code{mime-message-structure} $B$K3JG<$9$k$3$H$K$7$^$9!#(B -$B$=$7$F!"(Bentity-number $B$d(B node-id $B$rMQ$$$k$3$H$G(B -@code{mime-message-structure} $B$K$*$1$k(B entity $B$NAjBPE*$J0LCV4X78$r(B -$B07$&$3$H$,$G$-$^$9!#(B - - -@menu -* Entity creation:: Entity $B$N@8@.(B -* Entity hierarchy:: Entity $B3,AX(B -* Entity Attributes:: Entity $B$NB0@-(B -* Entity-header:: Entity header $B$N>pJs(B -* Entity-content:: Entity $B$NFbMF(B -* Entity buffer:: Entity $B$N(B buffer $B$K$h$kI=8=(B -* mm-backend:: Entity $B$NI=8=$H<B8=(B -@end menu - -@node Entity creation, Entity hierarchy, Entity, Entity -@section Entity $B$N@8@.(B - -@defun mime-open-entity &optional type location - -Open an entity and return it.@refill - -@var{type} is representation-type. (cf. @ref{mm-backend}) @refill - -@var{location} is location of entity. Specification of it is depended -on representation-type. -@end defun - - -@defun mime-parse-buffer &optional buffer type - -@var{buffer} $B$r(B message $B$H$7$F9=J82r@O$7!"$=$N7k2L$N(B mime-entity $B$r(B -@var{buffer} $B$N(B@code{mime-message-structure} $B$K3JG<$9$k!#(B@refill - -@var{buffer} $B$,>JN,$5$l$?>l9g!"8=:_$N(B buffer $B$r9=J82r@O$9$k!#(B@refill - -@var{type} $B$,;XDj$5$l$?>l9g!"$=$NCM$r@8@.$5$l$k(B mime-entity $B$NI=>]7?$H$7(B -$B$FMQ$$$k!#>JN,$5$l$?>l9g$O(B @var{buffer} $B$H$J$k!#(B(cf. @ref{mm-backend}) -@end defun - - - -@node Entity hierarchy, Entity Attributes, Entity creation, Entity -@section Entity $B3,AX(B - -@defvar mime-message-structure - -$B8=:_$N(B buffer $B$K$*$1$k(B message $BA4BN$N(B mime-entity $B9=B$BN$r3JG<$9$k(Bbuffer -local $BJQ?t!#(B -@end defvar - - -@defun mime-entity-children entity - -@var{entity} $B$K4^$^$l$k(B entity $B$N(B list $B$rJV$9!#(B -@end defun - - -@defun mime-entity-parent entity &optional message - -@var{entity} $B$N?F$N(B entity $B$rJV$9!#(B@refill - -@var{message} $B$,;XDj$5$l$?>l9g!"$3$l$r:,$H8+Jo$9!#(B -@end defun - - -@defun mime-root-entity-p entity - -@var{entity} $B$,:,!JB($A!"(Bmessage $BA4BN!K$G$"$k>l9g$K!"Hs(B-@code{nil} $B$rJV(B -$B$9!#(B -@end defun - - -@defun mime-entity-node-id entity - -@var{entity} $B$N(B node-id $B$rJV$9!#(B -@end defun - - -@defun mime-entity-number entity - -@var{entity} $B$N(B entity-number $B$rJV$9!#(B -@end defun - - -@defun mime-find-entity-from-number entity-number &optional message - -Return entity from @var{entity-number} in @var{message}.@refill - -If @var{message} is not specified, @code{mime-message-structure} is -used. -@end defun - - -@defun mime-find-entity-from-node-id entity-node-id &optional message - -Return entity from @var{entity-node-id} in @var{message}.@refill - -If @var{message} is not specified, @code{mime-message-structure} is -used. -@end defun - - - -@node Entity Attributes, Entity-header, Entity hierarchy, Entity -@section Entity $B$NB0@-(B - -@defun mime-entity-content-type entity - -@var{entity} $B$N(B content-type $B$rJV$9!#(B(cf. @ref{mime-content-type}) -@end defun - - -@defun mime-entity-content-disposition entity - -@var{entity} $B$N(B content-disposition $B$rJV$9!#(B -(cf. @ref{mime-content-disposition}) -@end defun - - -@defun mime-entity-filename entity - -@var{entity} $B$N(B file $BL>$rJV$9!#(B -@end defun - - -@defun mime-entity-encoding entity &optional default-encoding - -@var{entity} $B$N(B content-transfer-encoding $B$rJV$9!#(B -(cf. @ref{Content-Transfer-Encoding}) @refill - -$B$b$7!"(B@var{entity} $B$K(B Content-Transfer-Encoding $BMs$,B8:_$7$J$$>l9g$O!"(B -@var{default-encoding} $B$rJV$9!#$3$l$,;XDj$5$l$J$$>l9g$O!"(B@code{"7bit"} -$B$rMQ$$$k!#(B -@end defun - - -@defun mime-entity-cooked-p entity - -Return non-nil if contents of @var{entity} has been already -code-converted. -@end defun - - - -@node Entity-header, Entity-content, Entity Attributes, Entity -@section Entity header $B$N>pJs(B - -@defun mime-fetch-field field-name &optional entity - -@var{entity} $B$N(B header $BCf$N(B @var{field-name} $BMs$N(B body $B$rJV$9!#(B@refill - -$B7k2L$NJ8;zNs$O(B network $BI=8=$N$^$^$G$"$k!#(B@refill - -@var{entity} $B$,>JN,$5$l$?>l9g$O!"(B@code{mime-message-structure} $B$NCM$rMQ(B -$B$$$k!#(B@refill - -@var{field-name} $BMs$,B8:_$7$J$$>l9g$O(B @code{nil} $B$rJV$9!#(B -@end defun - - -@defun mime-read-field field-name &optional entity - -@var{entity} $B$N(B header $BCf$N(B @var{field-name} $BMs$r9=J82r@O$7$?7k2L$rJV$9!#(B -@refill - -$B7k2L$N7A<0$OMsKh$K0[$J$k!#Hs9=B$2=Ms$N>l9g$OJ8;zNs$rJV$7!"9=B$2=Ms$N>l9g(B -$B$O$=$N7A<0$K=>$C$?(B list $B$rJV$9!#(B@refill - -$B7k2LCf$NJ8;zNs$O(B Emacs $B$NFbItI=8=$KJQ49$5$l$k!#(B@refill - -@var{entity} $B$,>JN,$5$l$?>l9g$O!"(B@code{mime-message-structure} $B$NCM$rMQ(B -$B$$$k!#(B@refill - -@var{field-name} $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -@end defun - - -@defun mime-insert-decoded-header entity &optional invisible-fields visible-fields - -$B8=:_0LCV$K(B @var{entity} $B$NI|9f$7$?(B header $B$rA^F~$9$k!#(B@refill - -@var{invisible-fields} $B$H(B @var{visible-fields} $B$O@55,I=8=$N(Blist $B$G!"$=$l(B -$B$>$l!"I=<($7$?$/$J$$(B field $BL>$HI=<($7$?$$MsL>$rI=8=$7$?$b$N$G$"$k!#(B -@refill - -@var{invisible-fields} $B$NMWAG$N$I$l$+$K(B match $B$7!"$+$D!"(B -@var{visible-fields} $B$NMWAG$N$I$l$K$b(B match $B$7$J$$Ms$OI=<($5$l$J$$!#(B -@end defun - - - -@node Entity-content, Entity buffer, Entity-header, Entity -@section Entity $B$NFbMF(B - -@defun mime-entity-content entity - -@var{entity} $B$NFbMF$N(B byte $BNs$rJV$9!#(B -@end defun - - -@defun mime-write-entity-content entity filename - -Write content of @var{entity} into @var{filename}. -@end defun - - -@defun mime-write-entity entity filename - -Write representation of @var{entity} into @var{filename}. -@end defun - - -@defun mime-write-entity-body entity filename - -Write body of @var{entity} into @var{filename}. -@end defun - - - -@node Entity buffer, mm-backend, Entity-content, Entity -@section Entity $B$N(B buffer $B$K$h$kI=8=(B - -@defun mime-entity-buffer entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$rJV$9!#(B -@end defun - - -@defun mime-entity-point-min entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(B@var{entity} $B$,@j$a$kNN0h$N@hF,(B -$B0LCV$rJV$9!#(B -@end defun - - -@defun mime-entity-point-max entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(B@var{entity} $B$,@j$a$kNN0h$NKvHx(B -$B0LCV$rJV$9!#(B -@end defun - - -@defun mime-entity-header-start entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bheader $B$,@j$a$kNN0h$N@hF,0LCV$r(B -$BJV$9!#(B -@end defun - - -@defun mime-entity-header-end entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bheader $B$,@j$a$kNN0h$NKvHx0LCV$r(B -$BJV$9!#(B -@end defun - - -@defun mime-entity-body-start entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bbody $B$,@j$a$kNN0h$N@hF,0LCV$rJV(B -$B$9!#(B -@end defun - - -@defun mime-entity-body-end entity - -@var{entity} $B$,B8:_$9$k(B buffer $B$K$*$1$k!"(Bbody $B$,@j$a$kNN0h$NKvHx0LCV$rJV(B -$B$9!#(B -@end defun - - - -@node mm-backend, , Entity buffer, Entity -@section Entity $B$NI=8=$H<B8=(B -@cindex mm-backend -@cindex entity $B=hM}(B method -@cindex representation-type - -Entity $B$OCj>]2=$5$l$?%G!<%?I=8=$G!"<B:]$N%G!<%?I=8=$H$7$F$OMQES$K1~$8$F(B -$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#(B@refill - -$B$3$3$G!"(Bentity $B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,(B -@strong{representation-type} $B$G!"(Bentity $B$r@8@.$9$k;~$K$O$3$l$r;XDj$7$^$9!#(B -(cf. @ref{Entity Creation}) @refill - -$BA0@a$^$G$K=R$Y$FMh$?(B entity $B$KBP$9$k=hM}$O!"(Bentity $B$KBP$7$F$=$N=hM}$r0M(B -$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#(BEntity $B$O<+J,$N(B representation-type -$B$rCN$C$F$*$j!"$=$N(B representation-type $B$K1~$8$F<B:]$N=hM}$r9T$&4X?t$r8F(B -$B$S=P$7$^$9!#$3$N$h$&$J4X?t$r(B @strong{entity $B=hM}(Bmethod} $B$H8F$S$^$9!#$^$?!"(B -representation-type $BKh$K$3$N$h$&$J4X?t$r$^$H$a$?$b$N$r(B -@strong{mm-backend} $B$H8F$S$^$9!#(B@refill - -mm-backend $B$O(B representation-type $B$NL>A0$N@hF,$K(B @code{mm} $B$H$$$&(B -$B@\F,<-$rIU$1$?4X?tL>$+$i$J$k(B module $B$G!"$=$N(B module $BL>$OF1MM$K(B -representation-type $B$NL>A0$N@hF,$K(B @code{mm} $B$rIU$1$?$b$N$K$J$C$F(B -$B$$$^$9!#$3$N(B module $B$O(B representation-type $B$N(B entity $B$,:G=i$K@8@.$5$l$k(B -$B;~$K<+F0E*$K(B require $B$5$l$^$9!#(B - - -@menu -* Request for entity:: Entity $B$X$NJX$j(B -* mm-backend module:: mm-backend $B$N:n$jJ}(B -@end menu - -@node Request for entity, mm-backend module, mm-backend, mm-backend -@subsection Entity $B$X$NJX$j(B - -@defun mime-entity-send entity message &rest args - -@var{entity} $B$K(B @var{message} $B$rAw$k!#(B@refill - -@var{args} $B$O(B @var{message} $B$N0z?t$G$"$k!#(B -@end defun - - - -@node mm-backend module, , Request for entity, mm-backend -@subsection mm-backend $B$N:n$jJ}(B - -$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9(B (^_^;$B!K(B@refill - -$B!J$H$j$"$($:!"(Bmm*.el $B$r;29M$K$7$F$/$@$5$$!K(B - - -@node Content-Type, Content-Disposition, Entity, Top -@chapter Content-Type $BMs$N>pJs(B -@cindex mime-content-type -@cindex Content-Type $BMs(B - -@strong{Content-Type $BMs(B} $B$O(B media-type (@ref{media-type}) $B$d(B MIME -charset $B$H$$$C$?(B entity (@ref{entity}) $B$NFbMF$N<oN`$dI=8=7A<0$J$I$r5-=R(B -$B$9$k$?$a$N$b$N$G!"(BRFC 2045 (@ref{RFC 2045}) $B$GDj5A$5$l$F$$$^$9!#(B - -@noindent -@strong{[Memo]} -@quotation - -$BNr;KE*$K$O(B RFC 1049 $B$G(B Content-Type $BMs$,Ds0F$5$l$F$$$k!#C"$7!"(BMIME $B$N(B -media-type $B$N$h$&$J(B type $B$H(B subtype $B$N6hJL$O$J$/!"(BMIME charset $B$N$h$&$J(B -$BJ8;zId9f$N<oN`$rI=8=$9$k$3$H$b$G$-$J$$!#(B -@end quotation - - -FLIM $B$O(B Content-Type $BMs$r9=J82r@O$9$k4X?t$H(B Content-Type $BMs$N2r@O7k2L$r(B -$B3JG<$9$k9=B$BN(B @strong{mime-content-type} $B$rDs6!$7$^$9!#(B - - -@menu -* Content-Type field:: Content-Type $BMs$N7A<0(B -* mime-content-type:: mime-content-type $B9=B$BN(B -* Content-Type parser:: Content-Type $BMs$N2r@O4o(B -* Content-Type utility:: Content-Type $B$K4X$9$kM-MQ$J4X?t(B -@end menu - -@node Content-Type field, mime-content-type, Content-Type, Content-Type -@section Content-Type $BMs$N7A<0(B -@cindex parameter -@cindex subtype -@cindex type - -Content-Type $BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'(B - -@quotation -``Content-Type'' ``:'' @strong{type} ``/'' -@strong{subtype} *( ``;'' @strong{parameter} ) -@end quotation - -$BNc$($P!"(B - -@quotation -@example -Content-Type: image/jpeg -@end example -@end quotation - -@noindent -$B$d(B - -@quotation -@example -Content-Type: text/plain; charset=iso-2022-jp -@end example -@end quotation - -@noindent -$B$J$I$N$h$&$KMQ$$$i$l$^$9!#(B - -$B$3$3$G!"(B`type' $B$H(B `subtype' $B$O(B entity $B$N7A<0$r<($9$b$N$G!"N><T$rAm>N$7(B -$B$F!"(B`media-type' $B$H8F$V$3$H$K$7$^$9!#>e5-$NNc$K$*$1$k(B `image/jpeg' $B$d(B -`text/plain' $B$O(B media-type $B$N#1$D$G$9!#(B - -@noindent -@strong{[Memo]} -@quotation - -Content-Type $BMs$N$J$$(B entity $B$O(B - -@quotation -@example -Content-Type: text/plain; charset=us-ascii -@end example -@end quotation - -@noindent -$B$H$7$F2r<a$5$l$k!#(B(cf. @ref{us-ascii}) -@end quotation - - - -@node mime-content-type, Content-Type parser, Content-Type field, Content-Type -@section mime-content-type $B9=B$BN(B - -@deffn{Structure} mime-content-type - -Content-Type $BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#(B@refill - -$B$3$N9=B$BN$r;2>H$9$k$K$O(B @code{mime-content-type-$BMWAGL>(B} $B$H$$$&L>A0$N;2(B -$B>H4X?t$rMQ$$$k!#(B@refill - -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -@table @var -@item primary-type -media-type $B$N<g7?(B (symbol). - -@item subtype -media-type $B$NI{7?(B (symbol). - -@item parameters -Content-Type $BMs$N(B parameter ($BO"A[(B list). - -@end table -@end deffn - - -@defun make-mime-content-type type subtype - &optional parameters - -content-type $B$N@8@.;R!#(B -@end defun - - -@defun mime-content-type-parameter content-type parameter - -@var{content-type} $B$N(B @var{parameter} $B$NCM$rJV$9!#(B -@end defun - - - -@node Content-Type parser, Content-Type utility, mime-content-type, Content-Type -@section Content-Type $BMs$N2r@O4o(B - -@defun mime-parse-Content-Type string - -@var{string} $B$r(B content-type $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -@end defun - - -@defun mime-read-Content-Type - -$B8=:_$N(B buffer $B$N(B Content-Type $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B@refill - -Content-Type $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -@end defun - - - -@node Content-Type utility, , Content-Type parser, Content-Type -@section Content-Type $B$K4X$9$kM-MQ$J4X?t(B - -@defun mime-type/subtype-string type &optional subtype - -@var{type} $B$H(B @var{subtype} $B$+$i(B type/subtype $B7A<0$NJ8;zNs$rJV$9!#(B -@end defun - - - -@node Content-Disposition, Content-Transfer-Encoding, Content-Type, Top -@chapter Content-Disposition $BMs$N>pJs(B -@cindex mime-content-disposition -@cindex RFC 2183 -@cindex Standards Track -@cindex Content-Disposition $BMs(B - -@strong{Content-Disposition $BMs(B} $B$O(B entity $B$NI=<($d(B file $BL>$J$I(B -$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#(B - - -@noindent -[RFC 2183] -@quotation -S. Dorner, K. Moore and R. Troost, ``Communicating Presentation -Information in Internet Messages: The Content-Disposition Header'', -August 1997, Standards Track. -@end quotation - -FLIM $B$O(B Content-Disposition $BMs$r9=J82r@O$9$k4X?t$H(B Content-Disposition -$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN(B -@strong{mime-content-disposition} $B$rDs6!$7$^$9!#(B - - -@menu -* mime-content-disposition:: mime-content-disposition $B9=B$BN(B -* Content-Disposition parser:: Content-Disposition $BMs$N2r@O4o(B -@end menu - -@node mime-content-disposition, Content-Disposition parser, Content-Disposition, Content-Disposition -@section mime-content-disposition $B9=B$BN(B - -@deffn{Structure} mime-content-disposition - -Content-Disposition $BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#(B@refill - -$B$3$N9=B$BN$r;2>H$9$k$K$O(B @code{mime-content-disposition-$BMWAGL>(B} $B$H$$$&L>(B -$BA0$N;2>H4X?t$rMQ$$$k!#(B@refill - -$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'(B - -@table @var -@item disposition-type -disposition-type (symbol). - -@item parameters -Content-Disposition $BMs$N(B parameter ($BO"A[(B list). - -@end table -@end deffn - - -@defun mime-content-disposition-parameter content-disposition parameter - -@var{content-disposition} $B$N(B @var{parameter} $B$NCM$rJV$9!#(B -@end defun - - -@defun mime-content-disposition-filename content-disposition - -@var{content-disposition} $B$N(B filename $B$NCM$rJV$9!#(B -@end defun - - - -@node Content-Disposition parser, , mime-content-disposition, Content-Disposition -@section Content-Disposition $BMs$N2r@O4o(B - -@defun mime-parse-Content-Disposition string - -@var{string} $B$r(B content-disposition $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -@end defun - - -@defun mime-read-Content-Disposition - -$B8=:_$N(B buffer $B$N(B Content-Disposition $BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#(B -@refill - -Content-Disposition $BMs$,B8:_$7$J$$>l9g$O(B nil $B$rJV$9!#(B -@end defun - - - -@node Content-Transfer-Encoding, encoded-word, Content-Disposition, Top -@chapter $BId9f2=K!(B -@cindex Content-Transfer-Encoding $BMs(B - -@strong{Content-Transfer-Encoding $BMs(B} $B$O(B entity $B$NId9f2=K!$r5-=R$9$k$?$a(B -$B$N$b$N$G$9!#(B@refill - -FLIM $B$G$O(B Content-Transfer-Encoding $BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3(B -$B$l$i$N4X?t$O(B Content-Transfer-Encoding $BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#(B -@refill - -$B$^$?!"(BContent-Transfer-Encoding $B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs(B -$B6!$5$l$^$9!#(B - - -@menu -* Content-Transfer-Encoding parser:: Content-Transfer-Encoding $BMs$N2r@O4o(B -* Region encoder/decoder:: $BNN0h$NId9f2=!&I|9f2=(B -* String encoder/decoder:: $BJ8;zNs$NId9f2=!&I|9f2=(B -* File encoder/decoder:: File $B$NId9f2=!&I|9f2=(B -@end menu - -@node Content-Transfer-Encoding parser, Region encoder/decoder, Content-Transfer-Encoding, Content-Transfer-Encoding -@section Content-Transfer-Encoding $BMs$N2r@O4o(B - -@defun mime-parse-Content-Transfer-Encoding string - -@var{string} $B$r(B content-transfer-encoding $B$H$7$F2r@O$7$?7k2L$rJV$9!#(B -@end defun - - -@defun mime-read-Content-Transfer-Encoding &optional default-encoding - -$B8=:_$N(B buffer $B$N(B Content-Transfer-Encoding $BMs$rFI$_<h$j!"2r@O$7$?7k2L$r(B -$BJV$9!#(B@refill - -Content-Transfer-Encoding $BMs$,B8:_$7$J$$>l9g$O(B@var{default-encoding} $B$r(B -$BJV$9!#(B -@end defun - - - -@node Region encoder/decoder, String encoder/decoder, Content-Transfer-Encoding parser, Content-Transfer-Encoding -@section $BNN0h$NId9f2=!&I|9f2=(B - -@defun mime-encode-region start end encoding - -Encode region @var{start} to @var{end} of current buffer using -@var{encoding}. -@end defun - - -@defun mime-decode-region start end encoding - -Decode region @var{start} to @var{end} of current buffer using -@var{encoding}. -@end defun - - -@defvar mime-encoding-method-alist - -Alist of encoding vs. corresponding method to encode region.@refill - -Each element looks like @code{(STRING . FUNCTION)} or @code{(STRING -. nil)}. @var{string} is content-transfer-encoding. @code{function} is -region encoder and @code{nil} means not to encode. -@end defvar - - -@defvar mime-decoding-method-alist - -Alist of encoding vs. corresponding method to decode region.@refill - -Each element looks like @code{(STRING . FUNCTION)} or @code{(STRING -. nil)}. @var{string} is content-transfer-encoding. @code{function} is -region decoder and @code{nil} means not to decode. -@end defvar - - - -@node String encoder/decoder, File encoder/decoder, Region encoder/decoder, Content-Transfer-Encoding -@section $BJ8;zNs$NId9f2=!&I|9f2=(B - -@defun mime-decode-string string encoding - -@var{string} $B$r(B @var{encoding} $B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#(B -@end defun - - -@defvar mime-string-decoding-method-alist - -Alist of encoding vs. corresponding method to decode string.@refill - -Each element looks like @code{(STRING . FUNCTION)}. STRING is -content-transfer-encoding. FUNCTION is string decoder. -@end defvar - - - -@node File encoder/decoder, , String encoder/decoder, Content-Transfer-Encoding -@section File $B$NId9f2=!&I|9f2=(B - -@defun mime-insert-encoded-file filename encoding - -Insert file @var{FILENAME} encoded by @var{ENCODING} format. -@end defun - - -@defun mime-write-decoded-region start end filename encoding - -Decode and write current region encoded by @var{encoding} into -@var{filename}.@refill - -@var{start} and @var{end} are buffer positions. -@end defun - - -@defvar mime-file-encoding-method-alist - -Alist of encoding vs. corresponding method to insert encoded -file.@refill - -Each element looks like @code{(STRING . FUNCTION)}. STRING is -content-transfer-encoding. FUNCTION is function to insert encoded file. -@end defvar - - -@defvar mime-file-decoding-method-alist - -Alist of encoding vs. corresponding method to write decoded region to -file.@refill - -Each element looks like @code{(STRING . FUNCTION)}. STRING is -content-transfer-encoding. FUNCTION is function to write decoded region -to file. -@end defvar - - - -@node encoded-word, custom, Content-Transfer-Encoding, Top -@chapter Header $B$N(B network $BI=8=(B -@cindex RFC 2047 -@cindex Standards Track -@cindex RFC 2047 - -encoded-word $B$O(B header $B$GHs(B ASCII (@ref{ASCII}) $BJ8;z$rI=8=$9$k$?$a$N7A<0(B -$B$G!"(B@strong{RFC 2047} $B$GDj5A$5$l$F$$$^$9!#(B@refill - - -@noindent -[RFC 2047] -@quotation -K. Moore, ``MIME (Multipurpose Internet Mail Extensions) Part Three: -Message Header Extensions for Non-ASCII Text'', November 1996, Standards -Track (obsolete RFC 1521,1522,1590). -@end quotation - -$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"(Bencoded-word $B$rMQ$$$:$KHs(B ASCII -(@ref{ASCII}) $BJ8;z$r(B header $B$KF~$l$?5-;v$bB8:_$7$^$9!#(B@refill - -FLIM $B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#(B - - -@menu -* Header encoder/decoder:: Header $B$NId9f2=!&I|9f2=(B -@end menu - -@node Header encoder/decoder, , encoded-word, encoded-word -@section Header $B$NId9f2=!&I|9f2=(B - -@defun eword-encode-header &optional code-conversion separator - -Decode MIME encoded-words in header fields.@refill - -If @var{code-conversion} is @code{nil}, it decodes only encoded-words. -If it is mime-charset, it decodes non-ASCII bit patterns as the -mime-charset. Otherwise it decodes non-ASCII bit patterns as the -default-mime-charset.@refill - -If @var{separator} is not nil, it is used as header separator. -@end defun - - -@defun eword-encode-header &optional code-conversion - -Encode header fields to network representation, such as MIME -encoded-word.@refill - -It refer variable @code{eword-field-encoding-method-alist}. -@end defun - - - -@node custom, Appendix, encoded-word, Top -@chapter $B0lHL@_Dj(B - -@deffn{group} mime - -MIME $B4XO"5!G=$K4X$9$k(B group.@refill - -@code{mail} $B$H(B @code{news} $B$KB0$9$k!#(B -@end deffn - - -@defvar default-mime-charset - -$BE,@Z$J(B MIME charset (@ref{MIME charset}) $B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i(B -$B$l$k(BMIME charset.@refill - -$BK\Mh$O(B APEL $B$NJQ?t$G$"$k!#(B -@end defvar - - -@defvar mime-temp-directory - -MIME $B5!G=$K4X$9$k<BAu$,0l;~E*$K;HMQ$9$k(B file $B$r:n@.$9$k(B -directory.@refill - -$B4D6-JQ?t(B @code{MIME_TMP_DIR}, @code{TM_TMP_DIR}, @code{TMPDIR}, -@code{TMP} $B$b$7$/$O(B @code{TEMP} $B$,@_Dj$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$F(B -$BMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"(B@code{"/tmp/"} $B$rMQ$$$k!#(B -@end defvar - - - -@node Appendix, Concept Index, custom, Top -@chapter $BIUO?(B - - -@menu -* Glossary:: $BMQ8l(B -* Bug report:: bug $BJs9p$N;EJ}(B -* CVS:: CVS $B$K$h$k3+H/(B -* History:: $BNr;K(B -@end menu - -@node Glossary, Bug report, Appendix, Appendix -@section $BMQ8l(B - - -@menu -* 7bit:: -* 8bit:: -* ASCII:: -* Base64:: -* binary:: -* Coded character set:: Coded character set$B!JId9f2=J8;z=89g!K(B, Character code$B!JJ8;zId9f!K(B -* media-type:: -* message:: -* MIME:: -* MIME charset:: -* MTA:: -* MUA:: -* Quoted-Printable:: -* RFC 822:: -* RFC 1036:: -* RFC 2045:: -* RFC 2046:: -* RFC 2048:: -* RFC 2049:: -* plain text:: -* us-ascii:: -@end menu - -@node 7bit, 8bit, Glossary, Glossary -@subsection 7bit - -$B$3$3$G$O(B 0 $B$+$i(B 127 $B$N@0?t$r;X$9!#(B@refill - -0 $B$+$i(B 127 $B$N@0?t$NNs$GI=8=$G$-$k$h$&$J(B data $B$r(B ``7bit $B$N(B data'' $B$H8F$V!#(B -@refill - -$B$^$?!"(B0 $B$+$i(B 31 $B$*$h$S(B 127 $B$GI=8=$5$l$k@)8fJ8;z$H(B 32 $B$GI=8=$5$l$k6uGr$H(B -33 $B$+$i(B 126 $B$GI=8=$5$l$k?^7AJ8;z$+$i$J$kJ8;zNs$N$3$H$r(B ``7bit $B$NJ8;zNs(B'' -$B$H8F$V!J$3$l$O(B ISO 2022 (@ref{ISO 2022}) $B$N!V(B7 $BC10L7O!W$HF1MM!K!#(B - -$BEAE}E*$J(B Internet $B$N(B MTA (@ref{MTA}) $B$O(B 7bit $B$N(B data $B$rE>Aw$G$-$k$N$G!"(B -7bit $B$N(B data $B$O(B Quoted-Printable (@ref{Quoted-Printable}) $B$d(B Base64 -(@ref{Base64}) $B$H$$$C$?JQ49$r9T$o$J$/$F$b$=$N$^$^E>Aw$G$-$k!#(B@refill - -$B$7$+$7!"(B7bit $B$G$"$l$P$I$s$J(B data $B$G$bNI$$$H$O$$$($J$$!#$J$<$J$i!"#19T$N(B -$BD9$5$,$"$^$j$KD9$$$H!"(BMTA $B$O$=$N(B message $B$rE>Aw$9$k$3$H$,$G$-$J$$$+$i$G(B -$B$"$k!#$A$J$_$K!"(BRFC 821 (@ref{RFC 821}) $B$O#19T$O2~9TJ8;z$r=|$$$F(B 998 -byte $B0JFb$G$"$k$3$H$r5a$a$F$$$k!#$h$C$F!"$3$l0J>e$N9T$,4^$^$l$k2DG=@-$N(B -$B$"$k(B data, $BNc$($P!"(BPostscript $B$N(B data $B$J$I$O(B Quoted-Printable $BEy$G(B -encode$B$9$kI,MQ$,$"$k!#(B - - -@node 8bit, ASCII, 7bit, Glossary -@subsection 8bit -@cindex binary - -$B$3$3$G$O(B 0 $B$+$i(B 255 $B$N@0?t$r;X$9!#(B@refill - -0 $B$+$i(B 255 $B$N@0?t$NNs$GI=8=$G$-$k$h$&$J(B data $B$r(B ``8bit $B$N(B data'' $B$H8F$V!#(B -@refill - -$B$^$?!"(B0 $B$+$i(B 31, 127 $B$*$h$S(B 128 $B$+$i(B 159 $B$GI=8=$5$l$k@)8fJ8;z$H(B 32 $B$GI=(B -$B8=$5$l$k6uGr$H(B 33 $B$+$i(B 126 $B$H(B 160 $B$+$i(B 255 $B$GI=8=$5$l$k?^7AJ8;z$+$i$J$k(B -$BJ8;zNs$N$3$H$r(B ``8bit $B$NJ8;zNs(B'' $B$H8F$V!J$3$l$O(B ISO 2022 (@ref{ISO 2022}) $B$N!V(B8 $BC10L7O!W$HF1MM!K!#(B@refill - -iso-8859-1 (@ref{iso-8859-1}) $B$d(B euc-kr (@ref{euc-kr}) $B$H$$$C$?Id9f2=J8(B -$B;z=89g$O(B 8bit $B$NJ8;zNs$G$"$k!#(B@refill - -$BEAE}E*$J(B Internet $B$N(B MTA (@ref{MTA}) $B$O(B 7bit (@ref{7bit}) $B$N(B data $B$7$+E>(B -$BAw$G$-$J$$$N$G!"$=$&$7$?(B MTA $B$r7PM3$9$k>l9g!"(BQuoted-Printable -(@ref{Quoted-Printable}) $B$d(B Base64 (@ref{Base64}) $B$H$$$C$?JQ49$r9T$o$J$/(B -$B$F$O$J$i$J$$!#(B@refill - -$B$7$+$7!":G6a$G$O(B 8bit $B$NJ8;zNs$r$=$N$^$^DL$9$3$H$,$G$-$k(B MTA $B$bEP>l$7$F(B -$B$-$?$N$G!"$=$N$^$^Aw$k$3$H$,$G$-$k>l9g$bA}$($F$-$?!#(B@refill - -$B$7$+$7!"(B8bit $B$G$"$l$P$I$s$J(B data $B$G$bNI$$$H$O$$$($J$$!#$J$<$J$i!"#19T$N(B -$BD9$5$,$"$^$j$KD9$$$H!"(BMTA $B$O$=$N(B message $B$rE>Aw$9$k$3$H$,$G$-$J$$$+$i$G(B -$B$"$k!#$A$J$_$K!"(BRFC 821 (@ref{RFC 821}) $B$O#19T$O2~9TJ8;z$r=|$$$F(B 998 -byte $B0JFb$G$"$k$3$H$r5a$a$F$$$k!#$h$C$F!"$3$l0J>e$N9T$,4^$^$l$k2DG=@-$N(B -$B$"$k(B data, $BNc$($P!"(BPostscript $B$N(B data $B$J$I$O(B Quoted-Printable $BEy$G(B -encode$B$9$kI,MQ$,$"$k!#(B@refill - -$B$^$?!"$3$&$7$?M}M3$+$i!"#19T$,(B 999 byte $B0J>e$N9T$,B8:_$9$k2DG=@-$N$"$k(B -data $B$O(B @strong{binary} (@ref{binary}) $B$H8F$V$3$H$K$9$k!#(B@refill - -$B$A$J$_$K!"(B7bit $B$GI=8=$G$-$k(B data $B$O(B 8bit $B$G$bI=8=$G$-$k!#$h$C$F!"(B -``8bit'' $B$H8@$C$?>l9g!"#19T$,(B 998 byte $B0J2<$NG$0U$N(B data $B$r;X$9$3$H$,(B -$B$"$k!#(B - - -@node ASCII, Base64, 8bit, Glossary -@subsection ASCII -@cindex ANSI X3.4:1986 -@cindex ASCII - -$B%"%a%j%+O"K.$G;H$o$l$kJ8;z$rId9f2=$7$?Id9f2=J8;z=89g(B (@ref{$BId9f2=J8;z=8(B $B9g(B})$B!#(BA-Z, a-z $B$N(B Latin $BJ8;z$H?t;z!"4v$D$+$N5-9f$+$i$J$k!#(BISO 646 $B$N0l$D(B -$B$G!"8=:_$O9q:]4p=`HG(B (IRV) $B$K$J$C$F$$$k!#(B - - -@noindent -[ASCII] -@quotation -``Coded Character Set -- 7-Bit American Standard Code for Information -Interchange'', ANSI X3.4:1986. -@end quotation - - - -@node Base64, binary, ASCII, Glossary -@subsection Base64 -@cindex pad - -RFC 2045 (@ref{RFC 2045}) $B$GDj5A$5$l$F$$$k(B MIME (@ref{MIME}) $B$K$*$1$k(B -binary data (@ref{binary}) $B$N(B network $B$G$NJQ49K!$N#1$D!#(B@refill - -$B!X(B64 $B?J?t!Y$H$$$&0UL#$G!"(B3 byte $B$N(B data $B$r(B 0 $B$+$i(B 63 $B$N?t$rI=$9(B ASCII -(@ref{ASCII}) 4 $BJ8;z$KJQ49$9$kJ}K!!#!J$b$7!"(B4 $BJ8;z$K$J$i$J$1$l$P(B -@strong{pad} $B$H8F$P$l$k5M$aJ*$r$7$FD9$5$rD4@0$9$k!K(B@refill - -$B$3$N(B 65 $B<oN`$NJ8;z$O(B ASCII $B$H(B EBCDIC $B$N6&DLItJ,$+$iA*$P$l$F$*$j!"(B -Internet $B0J30$N(B network $B$r7PM3$9$k>l9g$G$b0BA4$KE>Aw$G$-$k$h$&$K@_7W$5(B -$B$l$F$$$k!#(B - - -@node binary, Coded character set, Base64, Glossary -@subsection binary -@cindex binary data -@cindex binary - -$BG$0U$N(B byte $BNs$r(B @strong{binary} $B$H8F$V!#(B@refill - -8bit (@ref{8bit}) $B$H0[$J$k$N$O(B data $B$K9T$N9=B$$r2>Dj$7$J$$$3$H$G$"$k!#(B - -$B$^$?!"9T$N9=B$$,$"$C$F$b!"(B999 byte $B0J>e$+$i$J$k9T$,$"$k>l9g$b(B binary $B$H(B -$B8F$V$3$H$K$9$k!#(B@refill - -$B$A$J$_$K!"(B7bit (@ref{7bit}) $B$d(B 8bit $B$GI=8=$G$-$k(B data $B$O(B binary $B$G$bI=8=(B -$B$G$-$k!#$h$C$F!"(B@strong{binary data} $B$H8@$C$?>l9g!"G$0U$N(B data $B$r;X$9$3(B -$B$H$,$"$k!#(B - - -@node Coded character set, media-type, binary, Glossary -@subsection Coded character set$B!JId9f2=J8;z=89g!K(B, Character code$B!JJ8;zId9f!K(B - -$BJ8;z$H(B byte $BNs$H#1BP#1$KBP1~IU$1$k[#Kf$G$J$$5,B'$N=89g!#(B - - -@node media-type, message, Coded character set, Glossary -@subsection media-type -@cindex x-token -@cindex primary-type/subtype -@cindex message -@cindex multipart -@cindex application -@cindex video -@cindex audio -@cindex image -@cindex text -@cindex subtype -@cindex primary-type - -MIME (@ref{MIME}) $B$K$*$1$k(B entity (@ref{entity}) $B$N<oN`!#(B -@strong{primary-type} $B$H(B @strong{subtype} $B$+$i$J$k!#(BRFC 2046 (@ref{RFC 2046}) $B$GDj5A$5$l$F$$$k!#(B@refill - -primary-type $B$OI8=`$G$O(B - -@itemize @bullet -@item -@strong{text} -@item -@strong{image} -@item -@strong{audio} -@item -@strong{video} -@item -@strong{application} -@item -@strong{multipart} (@ref{multipart}) -@item -@strong{message} -@end itemize - -@noindent -$B$,Dj5A$5$l!"$=$l$>$l$K$O(B application/octet-stream, audio/basic, -image/jpeg, multipart/mixed (@ref{multipart/mixed}), text/plain -(@ref{text/plain}), video/mpeg $B$J$I$N$5$^$6$^$J(B subtype $B$,Dj5A$5$l$F$$$k!#(B - -@noindent -@strong{[$BCm0U(B]} -@quotation - -$B$3$3$G$O!"(Btext/plain $B$J$I$N(B type/subtype $B$NAH$r$7$P$7$P(B -@strong{primary-type/subtype} $B$H=q$/!#(B -@end quotation - - -media-type $B$O!"(BRFC 2046 $B$GDj5A$5$l$F$$$k$b$N$K2C$($F!"EPO?$9$k$3$H$b$G$-(B -$B$k!#8=:_!"EPO?$5$l$F$$$k$b$N$O(B MEDIA TYPES -(ftp://ftp.isi.edu/in-notes/iana/assignments/media-types) $B$G;2>H$G$-$k!#(B - -$B$^$?!"(Btype $B$b$7$/$O(B subtype $B$K!"A0$K(B `x-' $B$rIU$1$?(B @strong{x-token} $B$rMQ(B -$B$$$k$3$H$K$h$j!"EPO?$5$l$F$$$J$$$b$N$r;dE*$KMQ$$$k$3$H$b$G$-$k!#$7$+$7!"(B -$BEvA3$N$3$H$J$,$i!"$3$&$7$?;dE*$J(B media-type $B$ONJ2r$rF@$?<T$N4V$G$7$+2r<a(B -$B$G$-$J$$$N$GMxMQ$K$OCm0U$9$k$3$H!#(B@refill - -(cf. @ref{Content-Type}) - - - -@node message, MIME, media-type, Glossary -@subsection message - -$B$3$3$G$O(B mail $B$H(B news $B5-;v$NAm>N$H$7$FMQ$$$k!#(B - - -@node MIME, MIME charset, message, Glossary -@subsection MIME -@cindex Multipurpose Internet Mail Extensions - -@strong{Multipurpose Internet Mail Extensions} $B$NN,$G!"(BInternet $B$N(B mail -$B$d(B news $B$G(B us-ascii plain text (@ref{us-ascii}) $B0J30$NJ8;z$r;H$&$?$a$N(B -RFC 822 (@ref{RFC 822}) $B$KBP$9$k3HD%!#(B@refill - -RFC 2045 $B$OKAF,$G<!$N$h$&$K=R$Y$F$$$k!'(B@refill - -STD 11, RFC 822 $B$O!"(BUS-ASCII message header $B$K4X$7$FHs>o$K>\:Y$K5,Dj$7(B -$B$?(B message $BI=8=(B protocol $B$rDj5A$7$F$$$k!#$7$+$7!"$=$l$OC1$K(B flat $B$J(B -US-ASCII text $B$N$_$KN1$^$j!"(Bmessage $B$NFbMF$d(B message body $B$K4X$9$k5,Dj(B -$B$O$J$5$l$F$$$J$$!#(BMultipurpose Internet Mail Extensions, $B$"$k$$$O(B MIME -$B$HAm>N$5$l$k!"$3$N0lO"$NJ8=q$O!"0J2<$N;v$r2DG=$H$9$k$?$a$K(B message $B$N(B -$B7A<0$r:FDj5A$7$?!'(B - -@enumerate -@item -$BJ8=q(B message body $B$K$*$1$k(B US-ASCII $B0J30$NJ8;z=89g(B -@item -$BHsJ8=q(B message body -@item -$BJ#?t$NItJ,$+$i$J$k(B message body -@item -US-ASCII $B0J30$NJ8;z=89g$+$i$J$kJ8=q(B header $B>pJs(B -@end enumerate - - -RFC 2045 (@ref{RFC 2045}), RFC 2046 (@ref{RFC 2046}), RFC 2047 -(@ref{encoded-word}), RFC 2048 (@ref{RFC 2048}), RFC 2049 (@ref{RFC 2049}) $B$GDj5A$5$l$F$$$k!#(B - - -@node MIME charset, MTA, MIME, Glossary -@subsection MIME charset - -Content-Type (@ref{Content-Type}) $BMs$d(B encoded-word (@ref{encoded-word}) -$B$N(B charset parameter $B$GMQ$$$i$l$kEPO?$5$l$?Id9f2=J8;z=89g(B(@ref{Coded character set})$B!#(B@refill - -RFC 2045 (@ref{RFC 2045}) $B$GDj5A$5$l$F$$$k!#(B@refill - -iso-2022-jp $B$d(B euc-kr $B$O$=$N#1$D!#(B - - -@node MTA, MUA, MIME charset, Glossary -@subsection MTA -@cindex Message Transfer Agent - -@strong{Message Transfer Agent} $B$NN,$G!"(Bqmail $B$d(B sendmail $B$J$I$N(B mail $BG[(B -$BAw(B program $B$H(B inn $B$J$I$N(B news server $B$NAm>N!#(B@refill - -(cf. @ref{MUA}) - - - -@node MUA, Quoted-Printable, MTA, Glossary -@subsection MUA -@cindex Message User Agent - -@strong{Message User Agent} $B$NN,$G!"(Bmail reader $B$H(B news reader $B$NAm>N!#(B -@refill - -(cf. @ref{MTA}) - - - -@node Quoted-Printable, RFC 822, MUA, Glossary -@subsection Quoted-Printable - -RFC 2045 (@ref{RFC 2045}) $B$GDj5A$5$l$F$$$k(B MIME (@ref{MIME}) $B$K$*$1$k(B -binary data (@ref{binary data}) $B$N(B network $B$G$NJQ49K!$N#1$D!#(B@refill - -`=' $B$d@)8fJ8;z$d(B 128 $B0J>e$NJ8;z$J$I$O(B `=AF' $B$N$h$&$K(B `=' $B$N8e$KB3$/(B 16 -$B?J?t$GI=8=$9$k!#$3$N$?$a!"(BASCII (@ref{ASCII}) $BJ8;zCf?4$N(B data $B$G$O(B -Base64 (@ref{Base64}) $B$KHf$Y$k$H2DFI@-$,9b$/$J$k2DG=@-$,$"$k!#(B@refill - -$B$7$+$7$J$,$i!"(BEBCDIC $B$K$OB8:_$7$J$$J8;z$rMxMQ$9$k>l9g!"(BEBCDIC $B$rMxMQ$7(B -$B$F$$$k(B network $B$G$O0BA4$KE>Aw$9$k$3$H$,$G$-$:!"(BBase64 $B$KHf$Y$F0BA4@-$O(B -$BDc$$!#(B - - -@node RFC 822, RFC 1036, Quoted-Printable, Glossary -@subsection RFC 822 -@cindex RFC 822 -@cindex STD 11 -@cindex Internet message -@cindex Internet mail -@cindex message header - -Internet mail $B$N<g$K(B @strong{message header} $B$K4X$9$k7A<0$K(B -$B4X$9$kI8=`$rDj$a$F$$$k(B RFC. - -@noindent -@strong{[Memo]} -@quotation - -news message $B$b$3$l$K=`$8$F$$$k$N$G!"(B@strong{Internet mail} $B$H=q$/$h$j$b!"(B -@strong{Internet message} $B$H=q$$$?J}$,NI$$$+$b$7$l$J$$!#(B -@end quotation - - - -@noindent -[RFC 822] -@quotation -D. Crocker, ``Standard for the Format of ARPA Internet Text Messages'', -August 1982, STD 11. -@end quotation - - - -@node RFC 1036, RFC 2045, RFC 822, Glossary -@subsection RFC 1036 -@cindex RFC 1036 -@cindex USENET - -USENET $B$G$N(B message $B$N7A<0$rDj$a$?(B RFC. RFC 822 (@ref{RFC 822}) $B$N(B -subset $B$K$J$C$F$$$k!#(BInternet $B$NI8=`$G$O$J$$$,!"(BUSENET $B0J30$N(B netnews $B$G(B -$B$b$3$l$K=`$8$F$$$k$b$N$,B?$$!#(B - - -@noindent -[USENET: RFC 1036] -@quotation -M. Horton and R. Adams, ``Standard for Interchange of USENET Messages'', -December 1987, (obsolete RFC 850). -@end quotation - - - -@node RFC 2045, RFC 2046, RFC 1036, Glossary -@subsection RFC 2045 -@cindex RFC 2045 -@cindex Standards Track - - -@noindent -[RFC 2045] -@quotation -N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions -(MIME) Part One: Format of Internet Message Bodies'', November 1996, -Standards Track (obsolete RFC 1521, 1522, 1590). -@end quotation - - - -@node RFC 2046, RFC 2048, RFC 2045, Glossary -@subsection RFC 2046 -@cindex RFC 2046 -@cindex Standards Track - - -@noindent -[RFC 2046] -@quotation -N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions -(MIME) Part Two: Media Types'', November 1996, Standards Track (obsolete -RFC 1521, 1522, 1590). -@end quotation - - - -@node RFC 2048, RFC 2049, RFC 2046, Glossary -@subsection RFC 2048 -@cindex RFC 2048 -@cindex Standards Track - - -@noindent -[RFC 2048] -@quotation -N. Freed, J. Klensin and J. Postel, ``Multipurpose Internet Mail -Extensions (MIME) Part Four: Registration Procedures'', November 1996, -Standards Track (obsolete RFC 1521, 1522, 1590). -@end quotation - - - -@node RFC 2049, plain text, RFC 2048, Glossary -@subsection RFC 2049 -@cindex RFC 2049 -@cindex Standards Track - - -@noindent -[RFC 2049] -@quotation -N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions -(MIME) Part Five: Conformance Criteria and Examples'', November 1996, -Standards Track (obsolete RFC 1521, 1522, 1590). -@end quotation - - - -@node plain text, us-ascii, RFC 2049, Glossary -@subsection plain text - -$B=qBN$dAHHG$K4X$9$k>pJs$r;}$?$J$$J8;zId9f(B(@ref{Coded character set})$B$N$_(B -$B$GI=8=$5$l$k(B text $B>pJs!#(B(cf. @ref{text/plain}) - - - -@node us-ascii, , plain text, Glossary -@subsection us-ascii -@cindex ASCII -@cindex us-ascii - -$B%"%a%j%+O"K.$J$I$G;H$o$l$k1Q8l$J$I$rI=8=$9$k$?$a$N(B MIME charset -(@ref{MIME charset}) $B$N#1$D!#(B@refill - -ASCII (@ref{ASCII}) $B$N$_$+$i$J$j(B ISO 2022 $B$K$h$kId9f3HD%$O5v$5$l$J$$!#(B - -Internet message $B$K$*$1$kI8=`$NId9f2=J8;z=89g(B(@ref{Coded character set}) -$B$G$"$j!"L@<(E*$K(B MIME charset $B$,<($5$l$J$$>l9g$O86B'$H$7$F(B -@strong{us-ascii} $B$,;H$o$l$k!#(B@refill - -$B$^$?!"(BRFC 822 (@ref{RFC 822}) $B$K$*$1$k(B @strong{ASCII} $B$O(B us-ascii $B$G$"$k!#(B - - -@node Bug report, CVS, Glossary, Appendix -@section bug $BJs9p$N;EJ}(B - -FLIM $B$N%P%0$r8+$D$1$?$i!"0J2<$N(B address $B$K(B mail $B$rAw$C$F$/$@$5$$!'(B - -@itemize @bullet -@item - $BF|K\8l(B <bug-tm-ja@@chamonix.jaist.ac.jp> -@item - $B1Q8l(B <bug-tm-en@@chamonix.jaist.ac.jp> -@end itemize - - -$BC"$7!"$"$^$j$K$b8E$$HG$K4X$9$kJs9p$O4?7^$5$l$^$;$s!#8E$$HG$N(B bug $B$O!"?7(B -$B$7$$HG$G$O<#$C$F$$$k$+$b$7$l$^$;$s!#$^$:!":G?7HG$G3NG'$7$F$_$^$7$g$&!#(B -@refill - -$B$=$l$+$i!"E,@Z$JJs9p$r$7$^$7$g$&!#C1$K!V$&$^$/F0$+$J$$!W$H8@$o$l$F$b$I$&(B -$B$$$&>u67$J$N$+$O$5$C$Q$jH=$j$^$;$s!#:GDc8B!"(BOS, emacs, APEL, FLIM, SEMI, -$B;H$C$F$$$k(B MUA $B$N<oN`$*$h$SHG!"@_Dj$r=q$/I,MW$,$"$j$^$9!#$^$?!"(Berror $B$,(B -$B5/$C$F$$$k>l9g$O(B backtrace $B$rAw$k$3$H$b=EMW$G$9!#(B(cf. @ref{(emacs)Bugs}) - -$B$^$?!"(Bbug $B$OBgDqJ#?t$N?M$,Ax6x$9$k$b$N$G$9!J$=$&$G$J$1$l$P!"(Bbug $B$G$O$J(B -$B$$2DG=@-$,$"$j$^$9!K!#$@$+$i!":n<T$KD>@\(B mail $B$rAw$k$H:n<T$OF1$8(B mail -$B$r2?DL$b=q$/1)L\$K$J$j$^$9!#$@$+$i!"I,$:(B bug $BJs9p$O>e5-$N(B address $B$KAw$C(B -$B$F$/$@$5$$!#(B - -tm ML $B$G$O(B FLIM $B$N%P%0>pJs$N8r49$d:G?7HG$NG[I[!"(BFLIM $B$N2~NI$K4X$9$k5D(B -$BO@$r9T$J$C$F$$$^$9!#(Btm ML $B$K;22C$7$?$$J}$O(B - -@itemize @bullet -@item - $BF|K\8l(B <tm-ja-help@@chamonix.jaist.ac.jp> -@item - $B1Q8l(B <tm-en-help@@chamonix.jaist.ac.jp> -@end itemize - -@noindent -$B$K6u$N(B mail $B$rAw$C$F2<$5$$!#(B - - -@node CVS, History, Bug report, Appendix -@section CVS $B$K$h$k3+H/(B - -FLIM $B$N(B file $B$O(B CVS $B$r;H$C$F4IM}$5$l$F$$$^$9!#$3$N$?$a!"0J2<$NJ}K!$G:G(B -$B?7$N(B FLIM $B$rF~<j$9$k$3$H$,$G$-$^$9!'(B - -@example -(0) cvs login - - % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \ - login - - CVS password: [CR] # NULL string - -(1) checkout - - % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \ - checkout [-r TAG] flim -@end example - - -CVS $B$rMQ$$$?3+H/$K;22C$7$?$$J}$O(B - -@itemize @bullet -@item - <cvs@@chamonix.jaist.ac.jp> -@end itemize - -@noindent -$B$^$G!"(Baccount $BL>$H(B UNIX $B$N(B passwd $B$HF1$87A<0$N(B crypt $B2=$5$l$?(B password -$B$r1h$($F8fO"Mm$/$@$5$$!#(B - - -@node History, , CVS, Appendix -@section $BNr;K(B - -FLIM $B$N(B code $B$N:G8E$NItJ,$O(B $B1]JB(B $B;LCR(B $B;a$,=q$$$?(B @file{mime.el}$B$K5/8;$7(B -$B$^$9!#$3$N>.$5$J(B program $B$O(B Nemacs $B$GF0:n$9$k(B iso-2022-jp $B$N(B B-encoding -$B@lMQ$N(B encoded-word $B$NI|9f2=%W%m%0%i%`$G$7$?!#(B@refill - -$B$=$N8e!"<i2,(B $BCNI'(B $B$O(B @file{mime.el} $B$r85$K(B@file{tiny-mime.el} $B$H$$$&%W%m(B -$B%0%i%`$r=q$-$^$9!#$3$l$O!"(BNemacs $B$H(B Mule $B$GF0:n$9$k(B encoded-word $B$NId9f(B -$B2=!&I|9f2=%W%m%0%i%`$G$7$?!#(B@file{tiny-mime.el} $B$O(B B-encoding $B$@$1$G$J$/(B -Q-encoding $B$b(Bsupport $B$7!"$^$?!"(BMULE $B$G07$&$3$H$,$G$-$k$5$^$6$^$J(B MIME -charset (@ref{MIME charset}) $B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"(B -Nemacs $B$H(B Mule $B$NAPJ}$r(B support $B$9$k$?$a$KMQ$$$i$l$?%F%/%K%C%/$O8e$K(B emu -package $B$K$^$H$a$i$l$^$9!#(B@refill - -$B$3$N:"!"<i2,(B $BCNI'(B $B$O(B @file{tiny-mime.el} $B$r$5$^$6$^$J(B MUA $B$G;H$&$?$a$N@_(B -$BDj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K(B@file{tiny-mime.el} $B$H$H$b$K#1$D$N(B -package $B$K$^$H$a$i$l!"(Btm $B$H$$$&L>A0$GG[I[$5$l$^$9!#(B@refill - -$B<i2,(B $BCNI'(B $B$O$d$,$F!"(BMIME message $B$r1\Mw$9$k$?$a$N%W%m%0%i%`$G$"$k(B -@file{tm-body.el} $B$r=q$-$^$9!#$3$l$O!"$9$0$K(B@file{tm-view.el} $B$H$$$&L>A0(B -$B$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,(B@file{tiny-mime.el} $B$KBe$o$C$F!"(Btm $B$NCf(B -$B3K$H$J$j$^$9!#(B@refill - -@file{tm-view.el} $B$OEvA3!"(BContent-Transfer-Encoding $B$r07$&I,MW$,$"$j$^$9!#(B -$B$3$NL\E*$N$?$a$K!"(BMEL $B$,@0Hw$5$l$O$8$a$^$7$?!#(BBase64 $B$K4X$7$F$O(B -@file{tiny-mime.el} $B$N(B code $B$,0\$5$l!"$^$?!"?7$?$K(BQuoted-Printable $B$N(B -code $B$,DI2C$5$l$^$7$?!#$3$l$i$,(B@file{mel-b.el} $B$H(B @file{mel-q.el} $B$K$J$j(B -$B$^$7$?!#(B@refill - -$B$^$?!"8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B uuencode $BMQ$N(B @file{mel-u.el} $B$,DI2C$5$l!"(B -$B$=$N8e$K!">.NS(B $B=$J?(B $B;a$K$h$C$F(B x-gzip64 $BMQ$N(B@file{mel-g.el} $B$,DI2C$5$l$^(B -$B$7$?!#(B@refill - -tm $B$G$O8e$K!"<i2,(B $BCNI'(B $B$K$h$C$F(B @file{tiny-mime.el} $B$N:F<BAu$,9T$o$l!"$3(B -$B$N2aDx$G!"(BSTD 11 $B$N(B parser $B$,=q$+$l$^$7$?!#$3$l$O!"8=:_$N(B -@file{std11.el} $B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G(B @file{tiny-mime.el} $B$OI|(B -$B9f2=$r9T$&(B @file{tm-ew-d.el} $B$HId9f2=$r9T$&(B @file{tm-ew-e.el} $B$KJ,$1$i$l(B -$B$^$7$?!#$3$NN><T$,8=:_$N(B @file{eword-decode.el} $B$H(B -@file{eword-encode.el} $B$N@hAD$KEv$?$j$^$9!#(B@refill - -$B8e$K!"<i2,(B $BCNI'(B $B$i$K$h$C$F(B tm $B$NA4LL=q$-49$(:n6H$,9T$o$l!"$3$N2aDx$G!"(Btm -$B$O(B APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME $B$J$I$KJ,$1$i$l$^$7$?!#$3(B -$B$N$&$A$N(B MEL $B$,(B FLIM $B$ND>@\$N@hAD$KEv$?$j$^$9!#(B@refill - -$B8e$K!"(BAPEL $B$+$i(B @file{std11.el} $B$,0\$5$l!"$^$?!"(B@file{mailcap.el}, -@file{eword-decode.el} $B$*$h$S(B @file{eword-encode.el} $B$,(B SEMI $B$+$i0\$5$l!"(B -package $B$NL>A0$,(B FLIM$B$H$J$j$^$9!#(B@refill - -$B$3$ND>A0$+$iEDCf(B $BE/(B $B;a$,$h$j(B RFC $B$KCi<B$J<BAu$r=q$-;O$a!"$3$l$O!"8=:_!"(B -FLIM $B$N;^$G$"$k(B ``FLIM-FLAM'' $B$H$J$C$F$$$^$9!#(B - - -@node Concept Index, Function Index, Appendix, Top -@chapter $B35G0:w0z(B - -@printindex cp - -@node Function Index, Variable Index, Concept Index, Top -@chapter $B4X?t:w0z(B - -@printindex fn - -@node Variable Index, , Function Index, Top -@chapter $BJQ?t:w0z(B - -@printindex vr -@bye diff --git a/mime-lib.el b/mime-lib.el deleted file mode 100644 index bdee3ec..0000000 --- a/mime-lib.el +++ /dev/null @@ -1,31 +0,0 @@ -;;; mime-lib.el --- MIME library module - -;; Copyright (C) 1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> -;; Keywords: MIME, multimedia, mail, news - -;; This file is part of FLIM (Faithful Library about Internet Message). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'mime) - -(provide 'mime-lib) - -;;; mime-lib.el ends here diff --git a/mime-parse.el b/mime-parse.el deleted file mode 100644 index fa20a85..0000000 --- a/mime-parse.el +++ /dev/null @@ -1,270 +0,0 @@ -;;; mime-parse.el --- MIME message parser - -;; Copyright (C) 1994,1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> -;; Keywords: parse, MIME, multimedia, mail, news - -;; This file is part of SEMI (Spadework for Emacs MIME Interfaces). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'emu) -(require 'std11) -(require 'mime-def) - -(eval-when-compile (require 'cl)) - - -;;; @ field parser -;;; - -(defconst mime/content-parameter-value-regexp - (concat "\\(" - std11-quoted-string-regexp - "\\|[^; \t\n]*\\)")) - -(defconst mime::parameter-regexp - (concat "^[ \t]*\;[ \t]*\\(" mime-token-regexp "\\)" - "[ \t]*=[ \t]*\\(" mime/content-parameter-value-regexp "\\)")) - -(defun mime-parse-parameter (str) - (if (string-match mime::parameter-regexp str) - (let ((e (match-end 2))) - (cons - (cons (downcase (substring str (match-beginning 1) (match-end 1))) - (std11-strip-quoted-string - (substring str (match-beginning 2) e)) - ) - (substring str e) - )))) - - -;;; @ Content-Type -;;; - -;;;###autoload -(defun mime-parse-Content-Type (string) - "Parse STRING as field-body of Content-Type field. -Return value is - (PRIMARY-TYPE SUBTYPE (NAME1 . VALUE1)(NAME2 . VALUE2) ...) -or nil. PRIMARY-TYPE and SUBTYPE are symbol and NAME_n and VALUE_n -are string." - (setq string (std11-unfold-string string)) - (if (string-match `,(concat "^\\(" mime-token-regexp - "\\)/\\(" mime-token-regexp "\\)") string) - (let* ((type (downcase - (substring string (match-beginning 1) (match-end 1)))) - (subtype (downcase - (substring string (match-beginning 2) (match-end 2)))) - ret dest) - (setq string (substring string (match-end 0))) - (while (setq ret (mime-parse-parameter string)) - (setq dest (cons (car ret) dest) - string (cdr ret)) - ) - (make-mime-content-type (intern type)(intern subtype) - (nreverse dest)) - ))) - -;;;###autoload -(defun mime-read-Content-Type () - "Read field-body of Content-Type field from current-buffer, -and return parsed it. Format of return value is as same as -`mime-parse-Content-Type'." - (let ((str (std11-field-body "Content-Type"))) - (if str - (mime-parse-Content-Type str) - ))) - - -;;; @ Content-Disposition -;;; - -(defconst mime-disposition-type-regexp mime-token-regexp) - -;;;###autoload -(defun mime-parse-Content-Disposition (string) - "Parse STRING as field-body of Content-Disposition field." - (setq string (std11-unfold-string string)) - (if (string-match `,(concat "^" mime-disposition-type-regexp) string) - (let* ((e (match-end 0)) - (type (downcase (substring string 0 e))) - ret dest) - (setq string (substring string e)) - (while (setq ret (mime-parse-parameter string)) - (setq dest (cons (car ret) dest) - string (cdr ret)) - ) - (cons (cons 'type (intern type)) - (nreverse dest)) - ))) - -;;;###autoload -(defun mime-read-Content-Disposition () - "Read field-body of Content-Disposition field from current-buffer, -and return parsed it." - (let ((str (std11-field-body "Content-Disposition"))) - (if str - (mime-parse-Content-Disposition str) - ))) - - -;;; @ Content-Transfer-Encoding -;;; - -;;;###autoload -(defun mime-parse-Content-Transfer-Encoding (string) - "Parse STRING as field-body of Content-Transfer-Encoding field." - (if (string-match "[ \t\n\r]+$" string) - (setq string (match-string 0 string)) - ) - (downcase string)) - -;;;###autoload -(defun mime-read-Content-Transfer-Encoding (&optional default-encoding) - "Read field-body of Content-Transfer-Encoding field from -current-buffer, and return it. -If is is not found, return DEFAULT-ENCODING." - (let ((str (std11-field-body "Content-Transfer-Encoding"))) - (if str - (mime-parse-Content-Transfer-Encoding str) - default-encoding))) - - -;;; @ message parser -;;; - -(defun mime-parse-multipart (entity) - (goto-char (point-min)) - (let* ((representation-type - (mime-entity-representation-type-internal entity)) - (content-type (mime-entity-content-type-internal entity)) - (dash-boundary - (concat "--" (mime-content-type-parameter content-type "boundary"))) - (delimiter (concat "\n" (regexp-quote dash-boundary))) - (close-delimiter (concat delimiter "--[ \t]*$")) - (rsep (concat delimiter "[ \t]*\n")) - (dc-ctl - (if (eq (mime-content-type-subtype content-type) 'digest) - (make-mime-content-type 'message 'rfc822) - (make-mime-content-type 'text 'plain) - )) - (header-end (mime-entity-header-end-internal entity)) - (body-end (mime-entity-body-end-internal entity))) - (save-restriction - (goto-char body-end) - (narrow-to-region header-end - (if (re-search-backward close-delimiter nil t) - (match-beginning 0) - body-end)) - (goto-char header-end) - (if (re-search-forward rsep nil t) - (let ((cb (match-end 0)) - ce ncb ret children - (node-id (mime-entity-node-id-internal entity)) - (i 0)) - (while (re-search-forward rsep nil t) - (setq ce (match-beginning 0)) - (setq ncb (match-end 0)) - (save-restriction - (narrow-to-region cb ce) - (setq ret (mime-parse-message representation-type dc-ctl - entity (cons i node-id))) - ) - (setq children (cons ret children)) - (goto-char (setq cb ncb)) - (setq i (1+ i)) - ) - (setq ce (point-max)) - (save-restriction - (narrow-to-region cb ce) - (setq ret (mime-parse-message representation-type dc-ctl - entity (cons i node-id))) - ) - (setq children (cons ret children)) - (mime-entity-set-children-internal entity (nreverse children)) - ) - (mime-entity-set-content-type-internal - entity (make-mime-content-type 'message 'x-broken)) - nil) - ))) - -(defun mime-parse-encapsulated (entity) - (mime-entity-set-children-internal - entity - (save-restriction - (narrow-to-region (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity)) - (list (mime-parse-message - (mime-entity-representation-type-internal entity) nil - entity (cons 0 (mime-entity-node-id-internal entity)))) - ))) - -(defun mime-parse-message (representation-type &optional default-ctl - parent node-id) - (let ((header-start (point-min)) - header-end - body-start - (body-end (point-max)) - content-type) - (goto-char header-start) - (if (re-search-forward "^$" nil t) - (setq header-end (match-end 0) - body-start (if (= header-end body-end) - body-end - (1+ header-end))) - (setq header-end (point-min) - body-start (point-min))) - (save-restriction - (narrow-to-region header-start header-end) - (setq content-type (or (let ((str (std11-fetch-field "Content-Type"))) - (if str - (mime-parse-Content-Type str) - )) - default-ctl)) - ) - (make-mime-entity-internal representation-type - (current-buffer) - content-type nil parent node-id - (current-buffer) - header-start header-end - body-start body-end) - )) - - -;;; @ for buffer -;;; - -;;;###autoload -(defun mime-parse-buffer (&optional buffer representation-type) - "Parse BUFFER as a MIME message. -If buffer is omitted, it parses current-buffer." - (save-excursion - (if buffer (set-buffer buffer)) - (setq mime-message-structure - (mime-parse-message (or representation-type 'buffer) nil)) - )) - - -;;; @ end -;;; - -(provide 'mime-parse) - -;;; mime-parse.el ends here diff --git a/mime.el b/mime.el deleted file mode 100644 index 9200173..0000000 --- a/mime.el +++ /dev/null @@ -1,344 +0,0 @@ -;;; mime.el --- MIME library module - -;; Copyright (C) 1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> -;; Keywords: MIME, multimedia, mail, news - -;; This file is part of FLIM (Faithful Library about Internet Message). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'alist) -(require 'std11) -(require 'mime-def) -(require 'eword-decode) - -(autoload 'eword-encode-field "eword-encode" - "Encode header field STRING, and return the result.") -(autoload 'eword-encode-header "eword-encode" - "Encode header fields to network representation, such as MIME encoded-word.") - - -(autoload 'mime-parse-Content-Type "mime-parse" - "Parse STRING as field-body of Content-Type field.") -(autoload 'mime-read-Content-Type "mime-parse" - "Read field-body of Content-Type field from current-buffer, -and return parsed it.") - -(autoload 'mime-parse-Content-Disposition "mime-parse" - "Parse STRING as field-body of Content-Disposition field.") -(autoload 'mime-read-Content-Disposition "mime-parse" - "Read field-body of Content-Disposition field from current-buffer, -and return parsed it.") - -(autoload 'mime-parse-Content-Transfer-Encoding "mime-parse" - "Parse STRING as field-body of Content-Transfer-Encoding field.") -(autoload 'mime-read-Content-Transfer-Encoding "mime-parse" - "Read field-body of Content-Transfer-Encoding field from -current-buffer, and return it.") - -(autoload 'mime-parse-buffer "mime-parse" - "Parse BUFFER as a MIME message.") - - -;;; @ Entity Representation and Implementation -;;; - -(defsubst mime-find-function (service type) - (let ((imps (cdr (assq type mime-entity-implementation-alist)))) - (if imps - (cdr (assq service imps)) - (require (intern (format "mm%s" type))) - (cdr (assq service - (cdr (assq type mime-entity-implementation-alist)))) - ))) - -(defsubst mime-entity-function (entity service) - (mime-find-function service - (mime-entity-representation-type-internal entity))) - -(defsubst mime-entity-send (entity service &rest args) - (apply (mime-find-function - service (mime-entity-representation-type-internal entity)) - entity - args)) - -(defsubst mm-arglist-to-arguments (arglist) - (let (dest) - (while arglist - (let ((arg (car arglist))) - (or (memq arg '(&optional &rest)) - (setq dest (cons arg dest))) - ) - (setq arglist (cdr arglist))) - (nreverse dest))) - -(defmacro mm-define-generic (name args &optional doc) - (if doc - `(defun ,(intern (format "mime-%s" name)) ,args - ,doc - (mime-entity-send ,(car args) ',name - ,@(mm-arglist-to-arguments (cdr args))) - ) - `(defun ,(intern (format "mime-%s" name)) ,args - (mime-entity-send ,(car args) ',name - ,@(mm-arglist-to-arguments (cdr args))) - ))) - -(put 'mm-define-generic 'lisp-indent-function 'defun) - -(defun mime-open-entity (type location) - "Open an entity and return it. -TYPE is representation-type. -LOCATION is location of entity. Specification of it is depended on -representation-type." - (let ((entity (make-mime-entity-internal type location))) - (mime-entity-send entity 'initialize-instance) - entity)) - -(mm-define-generic entity-cooked-p (entity) - "Return non-nil if contents of ENTITY has been already code-converted.") - - -;;; @ Entity as node of message -;;; - -(defun mime-entity-children (entity) - (or (mime-entity-children-internal entity) - (mime-entity-send entity 'entity-children))) - -(defalias 'mime-entity-node-id 'mime-entity-node-id-internal) - -(defun mime-entity-number (entity) - "Return entity-number of ENTITY." - (reverse (mime-entity-node-id-internal entity))) - -(defun mime-find-entity-from-number (entity-number &optional message) - "Return entity from ENTITY-NUMBER in MESSAGE. -If MESSAGE is not specified, `mime-message-structure' is used." - (or message - (setq message mime-message-structure)) - (let ((sn (car entity-number))) - (if (null sn) - message - (let ((rc (nth sn (mime-entity-children message)))) - (if rc - (mime-find-entity-from-number (cdr entity-number) rc) - )) - ))) - -(defun mime-find-entity-from-node-id (entity-node-id &optional message) - "Return entity from ENTITY-NODE-ID in MESSAGE. -If MESSAGE is not specified, `mime-message-structure' is used." - (mime-find-entity-from-number (reverse entity-node-id) message)) - -(defun mime-entity-parent (entity &optional message) - "Return mother entity of ENTITY. -If MESSAGE is specified, it is regarded as root entity." - (if (equal entity message) - nil - (mime-entity-parent-internal entity))) - -(defun mime-root-entity-p (entity &optional message) - "Return t if ENTITY is root-entity (message). -If MESSAGE is specified, it is regarded as root entity." - (null (mime-entity-parent entity message))) - - -;;; @ Entity Buffer -;;; - -(defun mime-entity-buffer (entity) - (or (mime-entity-buffer-internal entity) - (mime-entity-send entity 'entity-buffer))) - -(mm-define-generic entity-point-min (entity) - "Return the start point of ENTITY in the buffer which contains ENTITY.") - -(mm-define-generic entity-point-max (entity) - "Return the end point of ENTITY in the buffer which contains ENTITY.") - -(defun mime-entity-header-start (entity) - (or (mime-entity-header-start-internal entity) - (mime-entity-send entity 'entity-header-start))) - -(defun mime-entity-header-end (entity) - (or (mime-entity-header-end-internal entity) - (mime-entity-send entity 'entity-header-end))) - -(defun mime-entity-body-start (entity) - (or (mime-entity-body-start-internal entity) - (mime-entity-send entity 'entity-body-start))) - -(defun mime-entity-body-end (entity) - (or (mime-entity-body-end-internal entity) - (mime-entity-send entity 'entity-body-end))) - - -;;; @ Entity Header -;;; - -(defun mime-fetch-field (field-name &optional entity) - (or (symbolp field-name) - (setq field-name (intern (capitalize (capitalize field-name))))) - (or entity - (setq entity mime-message-structure)) - (let* ((header (mime-entity-original-header-internal entity)) - (field-body (cdr (assq field-name header)))) - (or field-body - (progn - (if (setq field-body - (mime-entity-send entity 'fetch-field - (symbol-name field-name))) - (mime-entity-set-original-header-internal - entity (put-alist field-name field-body header)) - ) - field-body)))) - -(defalias 'mime-entity-content-type 'mime-entity-content-type-internal) - -(defun mime-entity-content-disposition (entity) - (or (mime-entity-content-disposition-internal entity) - (let ((ret (mime-fetch-field 'Content-Disposition entity))) - (if ret - (let ((disposition (mime-parse-Content-Disposition ret))) - (when disposition - (mime-entity-set-content-disposition-internal - entity disposition) - disposition)))))) - -(defun mime-entity-encoding (entity &optional default-encoding) - (or (mime-entity-encoding-internal entity) - (let ((encoding - (or (let ((ret (mime-fetch-field - 'Content-Transfer-Encoding entity))) - (and ret (mime-parse-Content-Transfer-Encoding ret))) - default-encoding "7bit"))) - (mime-entity-set-encoding-internal entity encoding) - encoding))) - -(defun mime-read-field (field-name &optional entity) - (or (symbolp field-name) - (setq field-name (capitalize (capitalize field-name)))) - (or entity - (setq entity mime-message-structure)) - (cond ((eq field-name 'Content-Type) - (mime-entity-content-type entity) - ) - ((eq field-name 'Content-Disposition) - (mime-entity-content-disposition entity) - ) - ((eq field-name 'Content-Transfer-Encoding) - (mime-entity-encoding entity) - ) - (t - (let* ((header (mime-entity-parsed-header-internal entity)) - (field (cdr (assq field-name header)))) - (or field - (let ((field-body (mime-fetch-field field-name entity))) - (when field-body - (cond ((memq field-name '(From Resent-From - To Resent-To - Cc Resent-Cc - Bcc Resent-Bcc - Reply-To Resent-Reply-To)) - (setq field (std11-parse-addresses - (eword-lexical-analyze field-body))) - ) - ((memq field-name '(Sender Resent-Sender)) - (setq field (std11-parse-address - (eword-lexical-analyze field-body))) - ) - ((memq field-name eword-decode-ignored-field-list) - (setq field field-body)) - ((memq field-name eword-decode-structured-field-list) - (setq field (eword-decode-structured-field-body - field-body))) - (t - (setq field (ew-decode-field (symbol-name field-name) - field-body)) - )) - (mime-entity-set-parsed-header-internal - entity (put-alist field-name field header)) - field))))))) - -(mm-define-generic insert-decoded-header (entity &optional invisible-fields - visible-fields) - "Insert before point a decoded header of ENTITY.") - - -;;; @ Entity Attributes -;;; - -(defun mime-entity-uu-filename (entity) - (if (member (mime-entity-encoding entity) mime-uuencode-encoding-name-list) - (save-excursion - (set-buffer (mime-entity-buffer entity)) - (goto-char (mime-entity-body-start entity)) - (if (re-search-forward "^begin [0-9]+ " - (mime-entity-body-end entity) t) - (if (looking-at ".+$") - (buffer-substring (match-beginning 0)(match-end 0)) - ))))) - -(defun mime-entity-filename (entity) - "Return filename of ENTITY." - (or (mime-entity-uu-filename entity) - (mime-content-disposition-filename - (mime-entity-content-disposition entity)) - (cdr (let ((param (mime-content-type-parameters - (mime-entity-content-type entity)))) - (or (assoc "name" param) - (assoc "x-name" param)) - )))) - - -(defsubst mime-entity-media-type (entity) - (mime-content-type-primary-type (mime-entity-content-type entity))) -(defsubst mime-entity-media-subtype (entity) - (mime-content-type-subtype (mime-entity-content-type entity))) -(defsubst mime-entity-parameters (entity) - (mime-content-type-parameters (mime-entity-content-type entity))) -(defsubst mime-entity-type/subtype (entity-info) - (mime-type/subtype-string (mime-entity-media-type entity-info) - (mime-entity-media-subtype entity-info))) - - -;;; @ Entity Content -;;; - -(mm-define-generic entity-content (entity) - "Return content of ENTITY as byte sequence (string).") - -(mm-define-generic write-entity-content (entity filename) - "Write content of ENTITY into FILENAME.") - -(mm-define-generic write-entity (entity filename) - "Write header and body of ENTITY into FILENAME.") - -(mm-define-generic write-entity-body (entity filename) - "Write body of ENTITY into FILENAME.") - - -;;; @ end -;;; - -(provide 'mime) - -;;; mime.el ends here diff --git a/mmbuffer.el b/mmbuffer.el deleted file mode 100644 index 5913265..0000000 --- a/mmbuffer.el +++ /dev/null @@ -1,194 +0,0 @@ -;;; mmbuffer.el --- MIME entity module for binary buffer - -;; Copyright (C) 1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> -;; Keywords: MIME, multimedia, mail, news - -;; This file is part of FLIM (Faithful Library about Internet Message). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'mime) -(require 'mime-parse) - -(mm-define-backend buffer) - -(mm-define-method initialize-instance ((entity buffer)) - (mime-entity-set-buffer-internal - entity (mime-entity-location-internal entity)) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (setq mime-message-structure entity) - (let ((header-start (point-min)) - header-end - body-start - (body-end (point-max))) - (goto-char header-start) - (if (re-search-forward "^$" nil t) - (setq header-end (match-end 0) - body-start (if (= header-end body-end) - body-end - (1+ header-end))) - (setq header-end (point-min) - body-start (point-min))) - (save-restriction - (narrow-to-region header-start header-end) - (mime-entity-set-content-type-internal - entity - (let ((str (std11-fetch-field "Content-Type"))) - (if str - (mime-parse-Content-Type str) - ))) - ) - (mime-entity-set-header-start-internal entity header-start) - (mime-entity-set-header-end-internal entity header-end) - (mime-entity-set-body-start-internal entity body-start) - (mime-entity-set-body-end-internal entity body-end) - ))) - -(mm-define-method entity-point-min ((entity buffer)) - (mime-entity-header-start-internal entity)) - -(mm-define-method entity-point-max ((entity buffer)) - (mime-entity-body-end-internal entity)) - -(mm-define-method fetch-field ((entity buffer) field-name) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (save-restriction - (narrow-to-region (mime-entity-header-start-internal entity) - (mime-entity-header-end-internal entity)) - (std11-fetch-field field-name) - ))) - -(mm-define-method entity-cooked-p ((entity buffer)) nil) - -(mm-define-method entity-children ((entity buffer)) - (let* ((content-type (mime-entity-content-type entity)) - (primary-type (mime-content-type-primary-type content-type))) - (cond ((eq primary-type 'multipart) - (mime-parse-multipart entity) - ) - ((and (eq primary-type 'message) - (memq (mime-content-type-subtype content-type) - '(rfc822 news external-body) - )) - (mime-parse-encapsulated entity) - )) - )) - -(mm-define-method entity-content ((entity buffer)) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (mime-decode-string - (buffer-substring (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity)) - (mime-entity-encoding entity)))) - -(mm-define-method write-entity-content ((entity buffer) filename) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (mime-write-decoded-region (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity) - filename - (or (mime-entity-encoding entity) "7bit")) - )) - -(mm-define-method write-entity ((entity buffer) filename) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (write-region-as-binary (mime-entity-header-start-internal entity) - (mime-entity-body-end-internal entity) - filename) - )) - -(mm-define-method write-entity-body ((entity buffer) filename) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (write-region-as-binary (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity) - filename) - )) - -(defun mime-visible-field-p (field-name visible-fields invisible-fields) - (or (catch 'found - (while visible-fields - (let ((regexp (car visible-fields))) - (if (string-match regexp field-name) - (throw 'found t) - )) - (setq visible-fields (cdr visible-fields)) - )) - (catch 'found - (while invisible-fields - (let ((regexp (car invisible-fields))) - (if (string-match regexp field-name) - (throw 'found nil) - )) - (setq invisible-fields (cdr invisible-fields)) - ) - t))) - -(mm-define-method insert-decoded-header ((entity buffer) - &optional invisible-fields - visible-fields) - (save-restriction - (narrow-to-region (point)(point)) - (let ((the-buf (current-buffer)) - (src-buf (mime-entity-buffer-internal entity)) - (h-end (mime-entity-header-end-internal entity)) - beg p end field-name len field-body decoded) - (save-excursion - (set-buffer src-buf) - (goto-char (mime-entity-header-start-internal entity)) - (save-restriction - (narrow-to-region (point) h-end) - (while (re-search-forward std11-field-head-regexp nil t) - (setq beg (match-beginning 0) - p (match-end 0) - field-name (buffer-substring beg (1- p)) - len (string-width field-name) - end (std11-field-end)) - (when (mime-visible-field-p field-name - visible-fields invisible-fields) - (save-excursion - (set-buffer the-buf) - (setq field-body (ew-lf-crlf-to-crlf - (save-excursion - (set-buffer src-buf) - (buffer-substring p end)))) - (setq decoded (ew-decode-field field-name field-body)) - (unless (equal field-body decoded) - (setq decoded (ew-crlf-refold - decoded - (1+ (string-width field-name)) - fill-column))) - (insert field-name) - (insert ":") - (insert (ew-crlf-to-lf decoded)) - (insert "\n") - )))))))) - - -;;; @ end -;;; - -(provide 'mmbuffer) - -;;; mmbuffer.el ends here diff --git a/mmcooked.el b/mmcooked.el deleted file mode 100644 index cd261f4..0000000 --- a/mmcooked.el +++ /dev/null @@ -1,75 +0,0 @@ -;;; mmcooked.el --- MIME entity implementation for binary buffer - -;; Copyright (C) 1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> -;; Keywords: MIME, multimedia, mail, news - -;; This file is part of FLIM (Faithful Library about Internet Message). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(require 'mmbuffer) - -(mm-define-backend cooked (buffer)) - -(mm-define-method entity-cooked-p ((entity cooked)) t) - -(mm-define-method write-entity-content ((entity cooked) filename) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (let ((encoding (or (mime-entity-encoding entity) "7bit"))) - (if (member encoding '("7bit" "8bit" "binary")) - (write-region (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity) filename) - (mime-write-decoded-region (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity) - filename encoding) - )))) - -(mm-define-method write-entity ((entity cooked) filename) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (write-region (mime-entity-header-start-internal entity) - (mime-entity-body-end-internal entity) - filename) - )) - -(mm-define-method write-entity-body ((entity cooked) filename) - (save-excursion - (set-buffer (mime-entity-buffer-internal entity)) - (write-region (mime-entity-body-start-internal entity) - (mime-entity-body-end-internal entity) - filename) - )) - -(mm-define-method insert-decoded-header ((entity cooked) - &optional invisible-fields - visible-fields) - (let (default-mime-charset) - (funcall (mime-find-function 'insert-decoded-header 'buffer) - entity invisible-fields visible-fields) - )) - - -;;; @ end -;;; - -(provide 'mmcooked) - -;;; mmcooked.el ends here diff --git a/natset.el b/natset.el deleted file mode 100644 index 2a09041..0000000 --- a/natset.el +++ /dev/null @@ -1,296 +0,0 @@ -(provide 'natset) - -;;; pacage for set of natural number. -;; (natural number includes zero.) - -;;; predicates - -(defun natset-empty-p (ns) - "Returns t if NS is empty." - (equal ns ())) - -(defun natset-full-p (ns) - "Returns t if NS is full." - (equal ns '(0))) - -(defun natset-closed-p (ns) - "Returns t if NS is closed." - (= (logand (length ns) 1) 0)) - -(defun natset-open-p (ns) - "Returns t if NS is open." - (= (logand (length ns) 1) 1)) - -(defun natset-has-p (ns i) - "Returns t if I is in NS." - (not (natset-empty-p (natset-intersection (natset-single i) ns)))) - -(defun natset-has-intersection-p (ns1 ns2) - "Returns t if the intersection of NS1 and NS2 is not empty." - (not (natset-empty-p (natset-intersection ns1 ns2)))) - -(defun natset-include-p (ns1 ns2) - "Returns t if NS1 includes NS2." - (equal ns1 (natset-union ns1 ns2))) - -;;; accessor - -(defun natset-start (ns) - "Returns start element in NS." - (if (natset-empty-p ns) - (error "natset empty" ns)) - (car ns)) - -;;; primitive constructor - -(defun natset-empty () - "Returns a empty set. -{}" - ()) - -(defun natset-full () - "Returns a full set. -{i | 0 <= i}" - '(0)) - -(defun natset-single (&rest elts) - "Returns a set contains singleton elements. -{i | i in ELTS}" - (let ((ns (natset-empty))) - (while elts - (setq ns (natset-union ns (natset-seg (car elts) (car elts))) - elts (cdr elts))) - ns)) - -(defun natset-seg (start &optional end) - "Returns a set contains one segment. -{i | START <= i and i <= END} - -If END is nil, Return the set {i | START <= i}" - (if end - (list start (1+ end)) - (list start))) - -;;; complex constructor - -(defun natset-start-set (ns) - "Returns a set contains start boundaries for NS. -{i | NS does not contains i-1 and NS contains i}" - (let ((res ())) - (while ns - (setq res (cons (1+ (car ns)) (cons (car ns) res)) - ns (cddr ns))) - (nreverse res))) - -(defun natset-end-set (ns) - "Returns a set contains end boundaries for NS. -{i | NS contains i-1 and NS does not contains i}" - (let ((res ())) - (setq ns (cdr ns)) - (while ns - (setq res (cons (1+ (car ns)) (cons (car ns) res)) - ns (cddr ns))) - (nreverse res))) - -(defun natset-boundary-set (ns) - "Returns a set contains start and end boundaries for NS. -{i | NS contains i-1 xor NS does not contains i}" - (natset-union (natset-start-set ns) (natset-end-set ns))) - -(defun natset-minmax (ns) - "Returns a set contains a range from minimum to maximam of NS. -{i | There exists j, k in NS, j <= i <= k}" - (cond - ((null ns) ()) - ((natset-open-p ns) (list (car ns))) - (t - (list (car ns) (nth (1- (length ns)) ns))))) - -;;; set operation - -(defun natset-negate (ns) - "Returns negated set. -{i | 0 <= i and NS does not contains i}" - (if (and (consp ns) (= (car ns) 0)) - (cdr ns) - (cons 0 ns))) - -(defun natset-union (&rest nss) - "Returns unioned set. -{i | There exists ns in NSS s.t ns contains i}" - (let ((ns (natset-empty))) - (while nss - (setq ns (natset-union2 ns (car nss)) - nss (cdr nss))) - ns)) - -(defun natset-intersection (&rest nss) - "Returns intersectioned set. -{i | For all ns in NSS, ns contains i}" - (natset-negate (apply 'natset-union (mapcar 'natset-negate nss)))) - -(defun natset-sub (ns &rest nss) - "Returns subtracted set. -{i | NS contains i and for all ns in NSS, ns does not contains i}" - (setq ns (natset-intersection ns (natset-negate (apply 'natset-union nss))))) - -;;; enumeration - -(defun natset-enum (ns) - (if (natset-open-p ns) - (error "natset open" ns)) - (let ((res ()) i j) - (while ns - (setq i (car ns) - j (cadr ns) - ns (cddr ns)) - (while (< i j) - (setq res (cons i res) - i (1+ i)))) - (nreverse res))) - -;;; code generation - -(defun natset-take-seg (ns) - (cond - ((null ns) (error "NS empty" ns)) - ((null (cdr ns)) (cons ns ())) - (t (cons (list (car ns) (cadr ns)) (cddr ns))))) - -(defun natset-valid-filter (ns valid) - "Returns a filtered set R. -R includes intersection between VALID and NS. -R does not include intersecton between VALID and negated NS. -Element does not contained in VALID is unspecified." - (let* ((res (natset-intersection valid ns)) - (len (length res)) - (u-set (natset-negate valid)) - tmp1 tmp2 tmpl) - (while u-set - (setq tmp1 (natset-take-seg u-set)) - (setq tmp2 (natset-union (car tmp1) res) - tmpl (length tmp2)) - (if (or (< tmpl len) (and (= tmpl len) (equal 0 (car tmp2)))) - (setq res tmp2 - len (length tmp2))) - (setq u-set (cdr tmp1))) - res)) - -(defun natset-gen-pred-exp (ns var &optional valid) - "Returns a expression to test value of variable VAR is in NS or not. - -If VALID is not nil, the condition value of VAR is in VALID is assumed. -It is impossible to set VALID to empty set because empty set is represented as nil." - (if valid (setq ns (natset-valid-filter ns valid))) - (cond - ((null ns) nil) - ((= (car ns) 0) (natset-gen-pred-exp-internal (cdr ns) var nil 0)) - (t (natset-gen-pred-exp-internal ns var t 0)))) - -(defun natset-gen-ccl-branch (reg fail &rest clauses) - (let* ((natsets (mapcar 'car clauses))) - (let ((range (apply 'natset-union natsets)) tmp) - (unless (natset-empty-p range) - (setq natsets (cons (natset-negate range) - natsets) - clauses (cons (cons (car natsets) - fail) - clauses))) - (setq range (natset-full) - tmp natsets) - (while tmp - (setcar tmp - (natset-intersection - (car tmp) - range)) - (setq range (natset-sub range (car tmp)) - tmp (cdr tmp)))) - (let ((b (natset-enum - (natset-sub - (apply - 'natset-union - (mapcar - 'natset-boundary-set - natsets)) - (natset-single 0))))) - (natset-gen-ccl-branch-internal reg 0 b clauses)))) - -(defun natset-gen-ccl-branch-internal (reg s b clauses) - (cond - ((null b) - (cdr (natset-assoc s clauses))) - ((null (cdr b)) - `(if (,reg < ,(car b)) - ,(cdr (natset-assoc s clauses)) - ,(cdr (natset-assoc (car b) clauses)))) - (t - (let* ((div (natset-divide (length b))) - (l (append b ())) - (g (nthcdr (1- div) l)) - (m (cadr g))) - (setq g (prog1 (cddr g) (setcdr g ()))) - `(if (,reg < ,m) - ,(natset-gen-ccl-branch-internal reg s l clauses) - ,(natset-gen-ccl-branch-internal reg m g clauses)))))) - -(defun natset-assoc (key alist) - (catch 'return - (while alist - (when (natset-has-p (caar alist) key) - (throw 'return (car alist))) - (setq alist (cdr alist))) - nil)) - -;;; internal primitive - -(defun natset-union2 (ns1 ns2) - (let (res start (end t)) - (while (and end (or (consp ns1) (consp ns2))) - (if (and (consp ns1) (or (null ns2) (<= (car ns1) (car ns2)))) - (setq start (car ns1) - end (cadr ns1) - ns1 (cddr ns1)) - (setq start (car ns2) - end (cadr ns2) - ns2 (cddr ns2))) - (while (and end - (or (and (consp ns1) (<= (car ns1) end)) - (and (consp ns2) (<= (car ns2) end)))) - (if (and (consp ns1) (<= (car ns1) end)) - (progn - (if (or (null (cadr ns1)) (< end (cadr ns1))) (setq end (cadr ns1))) - (setq ns1 (cddr ns1))) - (progn - (if (or (null (cadr ns2)) (< end (cadr ns2))) (setq end (cadr ns2))) - (setq ns2 (cddr ns2))))) - (setq res (cons start res)) - (if end (setq res (cons end res)))) - (nreverse res))) - -; n is greater or equal 2. -; returns one of 1 .. n-1 -; (In reality, returns greatest 2^i - 1) -(defun natset-divide (n) - (let ((l 2) tmp) - (while (< (setq tmp (lsh l 1)) n) - (setq l tmp)) - (1- l))) - -(defun natset-gen-pred-exp-internal (ns var bool base) - (cond - ((null ns) (not bool)) - ((null (cdr ns)) - (if (<= (car ns) base) - bool - (if bool `(<= ,(car ns) ,var) `(< ,var ,(car ns))))) - (t - (let* ((div (natset-divide (length ns))) - (l (append ns ())) - (g (nthcdr (1- div) l)) - (m (cadr g)) - ) - (setq g (prog1 (cddr g) (setcdr g ()))) - `(if (< ,var ,m) - ,(natset-gen-pred-exp-internal l var bool base) - ,(natset-gen-pred-exp-internal - g var (if (= (logand div 1) 1) bool (not bool)) m)))))) diff --git a/rx.el b/rx.el deleted file mode 100644 index 08c60d0..0000000 --- a/rx.el +++ /dev/null @@ -1,394 +0,0 @@ -;;; regular expression - -;;; core -;; rx ::= [] {} -;; | () {""} -;; | (* . rx) closure -;; | (| . rxs) alternative -;; | (rx . rx) concatination -;; | (cc c1 c2 c3 ...) character class (natset) -;;; sugar -;; | (+ . rx) positive closure -;; | "..." string -;; | c character -;; | (non-ascii) (cc 128) -;; | [ range ... ] -;; | [ ^ range ... ] -;;; internal -;; | pc primitive character class -;; | (act . int) action - -;; range ::= c -;; | "..." -;; | (c1 c2) [c1 c2] -;; | (c1 . c2) [c1 c2) -;; | (c) [c1 inf) -;; | non-ascii - -(require 'natset) -(require 'automata) -(provide 'rx) - -(defun rx-empty-p (rx) (equal rx [])) -(defun rx-null-p (rx) (equal rx ())) -(defun rx-act-p (rx) (and (consp rx) (eq (car rx) 'act))) -(defun rx-cc-p (rx) (and (consp rx) (eq (car rx) 'cc))) -(defalias 'rx-pc-p 'integerp) - -(defun rx-clo-p (rx) (and (consp rx) (eq (car rx) '*))) -(defun rx-alt-p (rx) (and (consp rx) (eq (car rx) '|))) -(defun rx-con-p (rx) (and (consp rx) (or (null (car rx)) (not (symbolp (car rx)))))) - -(defun rx-clo (rx) - (cond - ((rx-empty-p rx) ()) - ((rx-null-p rx) rx) - ((rx-act-p rx) rx) - ((rx-clo-p rx) rx) - (t (cons '* rx)))) -(defun rx-alt (rxs) - (cond - ((null rxs) []) - ((null (cdr rxs)) (car rxs)) - (t (cons '| rxs)))) -(defun rx-alt2 (r1 r2) - (cond - ((rx-empty-p r1) r2) - ((rx-empty-p r2) r1) - ((equal r1 r2) r1) - (t (list '| r1 r2)))) -(defun rx-con (r1 r2) - (cond - ((rx-empty-p r1) []) - ((rx-empty-p r2) []) - ((rx-null-p r1) r2) - ((rx-null-p r2) r1) - ((and (rx-act-p r1) (rx-act-p r2)) r2) - (t (cons r1 r2)))) -(defun rx-act (obj) (cons 'act obj)) -(defun rx-cc (cs) (cons 'cc cs)) - -;;; regular expression preprocessing - -(defun rx-range-to-ns (range) - (cond - ((char-or-char-int-p range) - (natset-single (char-int range))) - ((stringp range) - (let ((ns (natset-empty)) (chars (string-to-int-list range))) - (while chars - (setq ns (natset-union ns (natset-single (car chars))) - chars (cdr chars))) - ns)) - ((eq range 'non-ascii) - (natset-seg 128)) - ((and (consp range) - (null (cdr range)) - (char-or-char-int-p (car range))) - (natset-seg (car range))) - ((and (consp range) - (consp (cdr range)) - (null (cddr range)) - (char-or-char-int-p (car range)) - (char-or-char-int-p (cadr range))) - (natset-seg (char-int (car range)) (char-int (cadr range)))) - ((and (consp range) - (char-or-char-int-p (car range)) - (char-or-char-int-p (cdr range))) - (natset-seg (char-int (car range)) (1- (char-int (cdr range))))) - (t (error "not range %s" range)))) - -(defun rx-vcc-to-rx (vcc) - (let ((l (append vcc ())) neg ns) - (if (eq (car l) '^) - (setq l (cdr l) - neg t)) - (setq l (mapcar 'rx-range-to-ns l)) - (setq ns (natset-empty)) - (while l - (setq ns (natset-union ns (car l)) - l (cdr l))) - (if neg (setq ns (natset-negate ns))) - (if (natset-empty-p ns) - [] - (rx-cc ns)))) - -(defun rx-desugar (rx) - (cond - ((stringp rx) (rx-desugar (string-to-int-list rx))) - ((vectorp rx) (rx-vcc-to-rx rx)) - ((char-or-char-int-p rx) (rx-cc (natset-single (char-int rx)))) - ((and (consp rx) (eq (car rx) '+)) (let ((r (rx-desugar (cdr rx)))) (rx-con r (rx-clo r)))) - ((and (consp rx) (eq (car rx) 'non-ascii)) (rx-cc (natset-seg 128))) - ((and (consp rx) (eq (car rx) 'any)) (rx-cc (natset-full))) - ((rx-empty-p rx) rx) - ((rx-null-p rx) rx) - ((rx-act-p rx) rx) - ((rx-cc-p rx) rx) - ((rx-clo-p rx) (rx-clo (rx-desugar (cdr rx)))) - ((rx-alt-p rx) (rx-alt (mapcar 'rx-desugar (cdr rx)))) - ((rx-con-p rx) (rx-con (rx-desugar (car rx)) (rx-desugar (cdr rx)))) - (t (error "not rx %s" rx)))) - -(defun rx-collect-cc (rx &optional cs) - (cond - ((rx-empty-p rx) cs) - ((rx-null-p rx) cs) - ((rx-act-p rx) cs) - ((rx-cc-p rx) (append (cdr rx) cs)) - ((rx-clo-p rx) (rx-collect-cc (cdr rx) cs)) - ((rx-alt-p rx) - (setq rx (cdr rx)) - (while (consp rx) - (setq cs (rx-collect-cc (car rx) cs) - rx (cdr rx))) - cs) - ((rx-con-p rx) (rx-collect-cc (car rx) (rx-collect-cc (cdr rx) cs))) - (t (error "not rx %s" rx)))) - -(defun rx-cc-to-pc (rx cs) - (cond - ((rx-empty-p rx) rx) - ((rx-null-p rx) rx) - ((rx-act-p rx) rx) - ((rx-cc-p rx) - (setq rx (cdr rx)) - (let (res) - (while (and (consp rx) (consp (cdr rx))) - (let ((start (car rx)) (end (cadr rx))) - (setq res (rx-filter (lambda (c) (and (<= start c) (< c end))) cs res) - rx (cddr rx)))) - (if (consp rx) - (let ((start (car rx))) - (setq res (rx-filter (lambda (c) (<= start c)) cs res)))) - (rx-alt (rx-sort-int res)))) - ((rx-clo-p rx) (rx-clo (rx-cc-to-pc (cdr rx) cs))) - ((rx-alt-p rx) (rx-alt (mapcar (lambda (r) (rx-cc-to-pc r cs)) (cdr rx)))) - ((rx-con-p rx) (rx-con (rx-cc-to-pc (car rx) cs) (rx-cc-to-pc (cdr rx) cs))) - (t (error "not rx %s" rx)))) - -(defun rx-categolize-char (rx) - (let ((cs (rx-sort-int (rx-collect-cc rx)))) - (cons - (rx-cc-to-pc rx cs) - cs))) - -;;; simplification - -(defun rx-nullable-p (rx) - (cond - ((rx-empty-p rx) nil) - ((rx-null-p rx) t) - ((rx-act-p rx) t) - ((rx-pc-p rx) nil) - ((rx-clo-p rx) t) - ((rx-alt-p rx) - (setq rx (cdr rx)) - (while (and (consp rx) (not (rx-nullable-p (car rx)))) - (setq rx (cdr rx))) - (consp rx)) - ((rx-con-p rx) - (and (rx-nullable-p (car rx)) (rx-nullable-p (cdr rx)))) - (t (error "not rx %s" rx)))) - -(defun rx-simplify (rx) - (cond - ((rx-empty-p rx) rx) - ((rx-null-p rx) rx) - ((rx-act-p rx) rx) - ((rx-pc-p rx) rx) - ((rx-clo-p rx) - (rx-clo (rx-simplify (cdr rx)))) - ((rx-alt-p rx) - (let ((in (cdr rx)) (out ()) - already-simplified-list already-simplified) - (while (consp in) - (setq rx (car in) - in (cdr in) - already-simplified (car already-simplified-list) - already-simplified-list (cdr already-simplified-list)) - (if (rx-alt-p rx) - (setq in (append (cdr rx) in)) - (progn - (setq rx (if already-simplified rx (rx-simplify rx))) - (cond - ((rx-empty-p rx)) ; [] is identity element for alternation. - ((rx-alt-p rx) - (setq in (append (cdr rx) in) - already-simplified-list (append (make-list (length (cdr rx)) nil) already-simplified-list))) - ((not (member rx out)) - (setq out (cons rx out))))))) - (rx-alt (rx-sort-rx (reverse out))))) - ((rx-con-p rx) - (catch 'return - (let ((in (list (car rx) (cdr rx))) (out ()) - already-simplified-list already-simplified) - (while (consp in) - (setq rx (car in) - in (cdr in) - already-simplified (car already-simplified-list) - already-simplified-list (cdr already-simplified-list)) - (if (rx-con-p rx) - (setq in (rx-cons* (car rx) (cdr rx) in)) - (progn - (setq rx (if already-simplified rx (rx-simplify rx))) - (cond - ((rx-empty-p rx) ; [] is zero element for concatination. - (throw 'return [])) - ((rx-null-p rx)) ; () is identity element for concatination. - ((rx-con-p rx) - (setq in (rx-cons* (car rx) (cdr rx) in)) - already-simplified-list (rx-cons* t t already-simplified-list)) - (t - (setq out (cons rx out))))))) - (if (= (length out) 1) - (car out) - (nreverse out))))) - (t (error "not rx %s" rx)))) - -;;; head property - -(defun rx-head-pcs (rx &optional res) - (cond - ((rx-empty-p rx) res) - ((rx-null-p rx) res) - ((rx-act-p rx) res) - ((rx-pc-p rx) (if (member rx res) res (cons rx res))) - ((rx-clo-p rx) (rx-head-pcs (cdr rx) res)) - ((rx-alt-p rx) - (setq rx (cdr rx)) - (while (consp rx) - (setq res (rx-head-pcs (car rx) res) - rx (cdr rx))) - res) - ((rx-con-p rx) - (setq res (rx-head-pcs (car rx) res)) - (if (rx-nullable-p (car rx)) - (setq res (rx-head-pcs (cdr rx) res))) - res) - (t (error "not rx %s" rx)))) - -(defun rx-head-act (rx &optional res) - (cond - ((rx-empty-p rx) res) - ((rx-null-p rx) res) - ((rx-act-p rx) (rx-better-act rx res)) - ((rx-pc-p rx) res) - ((rx-clo-p rx) (rx-head-act (cdr rx) res)) - ((rx-alt-p rx) - (setq rx (cdr rx)) - (while (consp rx) - (setq res (rx-head-act (car rx) res) - rx (cdr rx))) - res) - ((rx-con-p rx) - (setq res (rx-head-act (car rx) res)) - (if (rx-nullable-p (car rx)) - (setq res (rx-head-act (cdr rx) res))) - res) - (t (error "not rx %s" rx)))) - -;;; stepping - -(defun rx-step-internal (rx pc) - (cond - ((rx-empty-p rx) []) - ((rx-null-p rx) []) - ((rx-act-p rx) []) - ((rx-pc-p rx) (if (= rx pc) () [])) - ((rx-clo-p rx) (rx-con (rx-step-internal (cdr rx) pc) rx)) - ((rx-alt-p rx) (rx-alt (mapcar (lambda (r) (rx-step-internal r pc)) (cdr rx)))) - ((rx-con-p rx) - (if (rx-nullable-p (car rx)) - (rx-alt2 - (rx-con (rx-step-internal (car rx) pc) (cdr rx)) - (rx-step-internal (cdr rx) pc)) - (rx-con (rx-step-internal (car rx) pc) (cdr rx)))) - (t (error "not rx %s" rx)))) - -(defun rx-step (rx &rest pcs) - (while (consp pcs) - (setq rx (rx-simplify (rx-step-internal rx (car pcs))) - pcs (cdr pcs))) - rx) - -;;; utilities - -(defun rx-better-act (a1 a2) - (cond - ((null a2) a1) - ((< (cdr a1) (cdr a2)) a1) - (t a2))) - -(defun rx-cons* (elt &rest lst) - (if (null lst) - elt - (cons elt (apply 'rx-cons* (car lst) (cdr lst))))) - -(defun rx-filter (fun lst &optional rest) - (if (null lst) - rest - (if (funcall fun (car lst)) - (cons (car lst) (rx-filter fun (cdr lst) rest)) - (rx-filter fun (cdr lst) rest)))) - -(defun rx-cmp-index (rx) - (cond - ((rx-null-p rx) (list 0)) - ((rx-act-p rx) (list 1 (cdr rx))) - ((rx-empty-p rx) (list 2)) - ((rx-clo-p rx) (list 3 (cdr rx))) - ((rx-alt-p rx) (cons 4 (cdr rx))) - ((rx-con-p rx) (list 5 (car rx) (cdr rx))) - ((rx-pc-p rx) (list 6 rx)) - (t (error "not rx %s" rx)))) - -(defun rx-cmp-int (i1 i2) - (cond - ((< i1 i2) -1) - ((> i1 i2) 1) - (t 0))) - -(defun rx-cmp-rx (r1 r2) - (let ((i1 (rx-cmp-index r1)) (i2 (rx-cmp-index r2))) - (cond - ((< (car i1) (car i2)) -1) - ((> (car i1) (car i2)) 1) - (t (setq i1 (cdr i1) - i2 (cdr i2)) - (catch 'result - (while (and (consp i1) (consp i2)) - (let ((r (if (and (integerp (car i1)) (integerp (car i2))) - (rx-cmp-int (car i1) (car i2)) - (rx-cmp-rx (car i1) (car i2))))) - (if (not (zerop r)) - (throw 'result r) - (setq i1 (cdr i1) - i2 (cdr i2))))) - (if (null i1) (if (null i2) 0 -1) 1)))))) - -(defun rx-sort-rx (l &optional res) - (if (null l) - res - (let ((e (car l)) lt gt cmp) - (setq l (cdr l)) - (while (consp l) - (setq cmp (rx-cmp-rx (car l) e)) - (cond - ((< cmp 0) (setq lt (cons (car l) lt))) - ((< 0 cmp) (setq gt (cons (car l) gt)))) - (setq l (cdr l))) - (rx-sort-rx lt (cons e (rx-sort-rx gt res)))))) - -(defun rx-sort-int (l &optional res) - (if (null l) - res - (let ((e (car l)) lt gt) - (setq l (cdr l)) - (while (consp l) - (cond - ((< (car l) e) (setq lt (cons (car l) lt))) - ((< e (car l)) (setq gt (cons (car l) gt)))) - (setq l (cdr l))) - (rx-sort-int lt (cons e (rx-sort-int gt res)))))) - diff --git a/std11.el b/std11.el deleted file mode 100644 index 080cae2..0000000 --- a/std11.el +++ /dev/null @@ -1,836 +0,0 @@ -;;; std11.el --- STD 11 functions for GNU Emacs - -;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. - -;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> -;; Keywords: mail, news, RFC 822, STD 11 - -;; This file is part of MU (Message Utilities). - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2, or (at -;; your option) any later version. - -;; This program is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Code: - -(autoload 'buffer-substring-no-properties "emu") -(autoload 'member "emu") - - -;;; @ field -;;; - -(defconst std11-field-name-regexp "[!-9;-~]+") -(defconst std11-field-head-regexp - (concat "^" std11-field-name-regexp ":")) -(defconst std11-next-field-head-regexp - (concat "\n" std11-field-name-regexp ":")) - -(defun std11-field-end () - "Move to end of field and return this point. [std11.el]" - (if (re-search-forward std11-next-field-head-regexp nil t) - (goto-char (match-beginning 0)) - (if (re-search-forward "^$" nil t) - (goto-char (1- (match-beginning 0))) - (end-of-line) - )) - (point) - ) - -(defsubst std11-fetch-field (name) - "Return the value of the header field NAME. -The buffer is expected to be narrowed to just the headers of the message." - (save-excursion - (goto-char (point-min)) - (let ((case-fold-search t)) - (if (re-search-forward (concat "^" name ":[ \t]*") nil t) - (buffer-substring-no-properties (match-end 0) (std11-field-end)) - )))) - -(defun std11-field-body (name &optional boundary) - "Return the value of the header field NAME. -If BOUNDARY is not nil, it is used as message header separator." - (save-excursion - (save-restriction - (std11-narrow-to-header boundary) - (std11-fetch-field name) - ))) - -(defun std11-find-field-body (field-names &optional boundary) - "Return the first found field-body specified by FIELD-NAMES -of the message header in current buffer. If BOUNDARY is not nil, it is -used as message header separator. [std11.el]" - (save-excursion - (save-restriction - (std11-narrow-to-header boundary) - (let ((case-fold-search t) - field-name) - (catch 'tag - (while (setq field-name (car field-names)) - (goto-char (point-min)) - (if (re-search-forward (concat "^" field-name ":[ \t]*") nil t) - (throw 'tag - (buffer-substring-no-properties - (match-end 0) (std11-field-end))) - ) - (setq field-names (cdr field-names)) - )))))) - -(defun std11-field-bodies (field-names &optional default-value boundary) - "Return list of each field-bodies of FIELD-NAMES of the message header -in current buffer. If BOUNDARY is not nil, it is used as message -header separator. [std11.el]" - (save-excursion - (save-restriction - (std11-narrow-to-header boundary) - (let* ((case-fold-search t) - (dest (make-list (length field-names) default-value)) - (s-rest field-names) - (d-rest dest) - field-name) - (while (setq field-name (car s-rest)) - (goto-char (point-min)) - (if (re-search-forward (concat "^" field-name ":[ \t]*") nil t) - (setcar d-rest - (buffer-substring-no-properties - (match-end 0) (std11-field-end))) - ) - (setq s-rest (cdr s-rest) - d-rest (cdr d-rest)) - ) - dest)))) - - -;;; @ unfolding -;;; - -(defun std11-unfold-string (string) - "Unfold STRING as message header field. [std11.el]" - (let ((dest "")) - (while (string-match "\n\\([ \t]\\)" string) - (setq dest (concat dest - (substring string 0 (match-beginning 0)) - (match-string 1 string) - )) - (setq string (substring string (match-end 0))) - ) - (concat dest string) - )) - - -;;; @ header -;;; - -(defun std11-narrow-to-header (&optional boundary) - "Narrow to the message header. -If BOUNDARY is not nil, it is used as message header separator. -\[std11.el]" - (narrow-to-region - (goto-char (point-min)) - (if (re-search-forward - (concat "^\\(" (regexp-quote (or boundary "")) "\\)?$") - nil t) - (match-beginning 0) - (point-max) - ))) - -(defun std11-header-string (regexp &optional boundary) - "Return string of message header fields matched by REGEXP. -If BOUNDARY is not nil, it is used as message header separator. -\[std11.el]" - (let ((case-fold-search t)) - (save-excursion - (save-restriction - (std11-narrow-to-header boundary) - (goto-char (point-min)) - (let (field header) - (while (re-search-forward std11-field-head-regexp nil t) - (setq field - (buffer-substring (match-beginning 0) (std11-field-end))) - (if (string-match regexp field) - (setq header (concat header field "\n")) - )) - header) - )))) - -(defun std11-header-string-except (regexp &optional boundary) - "Return string of message header fields not matched by REGEXP. -If BOUNDARY is not nil, it is used as message header separator. -\[std11.el]" - (let ((case-fold-search t)) - (save-excursion - (save-restriction - (std11-narrow-to-header boundary) - (goto-char (point-min)) - (let (field header) - (while (re-search-forward std11-field-head-regexp nil t) - (setq field - (buffer-substring (match-beginning 0) (std11-field-end))) - (if (not (string-match regexp field)) - (setq header (concat header field "\n")) - )) - header) - )))) - -(defun std11-collect-field-names (&optional boundary) - "Return list of all field-names of the message header in current buffer. -If BOUNDARY is not nil, it is used as message header separator. -\[std11.el]" - (save-excursion - (save-restriction - (std11-narrow-to-header boundary) - (goto-char (point-min)) - (let (dest name) - (while (re-search-forward std11-field-head-regexp nil t) - (setq name (buffer-substring-no-properties - (match-beginning 0)(1- (match-end 0)))) - (or (member name dest) - (setq dest (cons name dest)) - ) - ) - dest)))) - - -;;; @ quoted-string -;;; - -(defun std11-wrap-as-quoted-pairs (string specials) - (let (dest - (i 0) - (b 0) - (len (length string)) - ) - (while (< i len) - (let ((chr (aref string i))) - (if (memq chr specials) - (setq dest (concat dest (substring string b i) "\\") - b i) - )) - (setq i (1+ i)) - ) - (concat dest (substring string b)) - )) - -(defconst std11-non-qtext-char-list '(?\" ?\\ ?\r ?\n)) - -(defun std11-wrap-as-quoted-string (string) - "Wrap STRING as RFC 822 quoted-string. [std11.el]" - (concat "\"" - (std11-wrap-as-quoted-pairs string std11-non-qtext-char-list) - "\"")) - -(defun std11-strip-quoted-pair (string) - "Strip quoted-pairs in STRING. [std11.el]" - (let (dest - (b 0) - (i 0) - (len (length string)) - ) - (while (< i len) - (let ((chr (aref string i))) - (if (eq chr ?\\) - (setq dest (concat dest (substring string b i)) - b (1+ i) - i (+ i 2)) - (setq i (1+ i)) - ))) - (concat dest (substring string b)) - )) - -(defun std11-strip-quoted-string (string) - "Strip quoted-string STRING. [std11.el]" - (let ((len (length string))) - (or (and (>= len 2) - (let ((max (1- len))) - (and (eq (aref string 0) ?\") - (eq (aref string max) ?\") - (std11-strip-quoted-pair (substring string 1 max)) - ))) - string))) - - -;;; @ lexical analyze -;;; - -(defconst std11-space-chars " \t\n") -(defconst std11-spaces-regexp (` (, (concat "[" std11-space-chars "]+")))) -(defconst std11-special-char-list '(?\] ?\[ - ?\( ?\) ?< ?> ?@ - ?, ?\; ?: ?\\ ?\" - ?.)) -(defconst std11-atom-regexp - (` (, (concat "^[^" std11-special-char-list std11-space-chars "]+")))) - -(defun std11-analyze-spaces (string) - (if (and (string-match std11-spaces-regexp string) - (= (match-beginning 0) 0)) - (let ((end (match-end 0))) - (cons (cons 'spaces (substring string 0 end)) - (substring string end) - )))) - -(defun std11-analyze-special (str) - (if (and (> (length str) 0) - (memq (aref str 0) std11-special-char-list)) - (cons (cons 'specials (substring str 0 1)) - (substring str 1) - ))) - -(defun std11-analyze-atom (str) - (if (string-match std11-atom-regexp str) - (let ((end (match-end 0))) - (cons (cons 'atom (substring str 0 end)) - (substring str end) - )))) - -(defun std11-check-enclosure (str open close &optional recursive from) - (let ((len (length str)) - (i (or from 0)) - ) - (if (and (> len i) - (eq (aref str i) open)) - (let (p chr) - (setq i (1+ i)) - (catch 'tag - (while (< i len) - (setq chr (aref str i)) - (cond ((eq chr ?\\) - (setq i (1+ i)) - (if (>= i len) - (throw 'tag nil) - ) - (setq i (1+ i)) - ) - ((eq chr close) - (throw 'tag (1+ i)) - ) - ((eq chr open) - (if (and recursive - (setq p (std11-check-enclosure - str open close recursive i)) - ) - (setq i p) - (throw 'tag nil) - )) - (t - (setq i (1+ i)) - )) - )))))) - -(defun std11-analyze-quoted-string (str) - (let ((p (std11-check-enclosure str ?\" ?\"))) - (if p - (cons (cons 'quoted-string (substring str 1 (1- p))) - (substring str p)) - ))) - -(defun std11-analyze-domain-literal (str) - (let ((p (std11-check-enclosure str ?\[ ?\]))) - (if p - (cons (cons 'domain-literal (substring str 1 (1- p))) - (substring str p)) - ))) - -(defun std11-analyze-comment (str) - (let ((p (std11-check-enclosure str ?\( ?\) t))) - (if p - (cons (cons 'comment (substring str 1 (1- p))) - (substring str p)) - ))) - -(defun std11-lexical-analyze (str) - (let (dest ret) - (while (not (string-equal str "")) - (setq ret - (or (std11-analyze-quoted-string str) - (std11-analyze-domain-literal str) - (std11-analyze-comment str) - (std11-analyze-spaces str) - (std11-analyze-special str) - (std11-analyze-atom str) - '((error) . "") - )) - (setq dest (cons (car ret) dest)) - (setq str (cdr ret)) - ) - (nreverse dest) - )) - - -;;; @ parser -;;; - -(defun std11-ignored-token-p (token) - (let ((type (car token))) - (or (eq type 'spaces)(eq type 'comment)) - )) - -(defun std11-parse-token (lal) - (let (token itl) - (while (and lal - (progn - (setq token (car lal)) - (std11-ignored-token-p token) - )) - (setq lal (cdr lal)) - (setq itl (cons token itl)) - ) - (cons (nreverse (cons token itl)) - (cdr lal)) - )) - -(defun std11-parse-ascii-token (lal) - (let (token itl parsed token-value) - (while (and lal - (setq token (car lal)) - (or (std11-ignored-token-p token) - (if (and (setq token-value (cdr token)) - (find-non-ascii-charset-string token-value) - ) - (setq token nil) - ))) - (setq lal (cdr lal)) - (setq itl (cons token itl)) - ) - (if (and token - (setq parsed (nreverse (cons token itl))) - ) - (cons parsed (cdr lal)) - ))) - -(defun std11-parse-token-or-comment (lal) - (let (token itl) - (while (and lal - (progn - (setq token (car lal)) - (eq (car token) 'spaces) - )) - (setq lal (cdr lal)) - (setq itl (cons token itl)) - ) - (cons (nreverse (cons token itl)) - (cdr lal)) - )) - -(defun std11-parse-word (lal) - (let ((ret (std11-parse-ascii-token lal))) - (if ret - (let ((elt (car ret)) - (rest (cdr ret)) - ) - (if (or (assq 'atom elt) - (assq 'quoted-string elt)) - (cons (cons 'word elt) rest) - ))))) - -(defun std11-parse-word-or-comment (lal) - (let ((ret (std11-parse-token-or-comment lal))) - (if ret - (let ((elt (car ret)) - (rest (cdr ret)) - ) - (cond ((or (assq 'atom elt) - (assq 'quoted-string elt)) - (cons (cons 'word elt) rest) - ) - ((assq 'comment elt) - (cons (cons 'comment-word elt) rest) - )) - )))) - -(defun std11-parse-phrase (lal) - (let (ret phrase) - (while (setq ret (std11-parse-word-or-comment lal)) - (setq phrase (append phrase (cdr (car ret)))) - (setq lal (cdr ret)) - ) - (if phrase - (cons (cons 'phrase phrase) lal) - ))) - -(defun std11-parse-local-part (lal) - (let ((ret (std11-parse-word lal))) - (if ret - (let ((local-part (cdr (car ret))) dot) - (setq lal (cdr ret)) - (while (and (setq ret (std11-parse-ascii-token lal)) - (setq dot (car ret)) - (string-equal (cdr (assq 'specials dot)) ".") - (setq ret (std11-parse-word (cdr ret))) - (setq local-part - (append local-part dot (cdr (car ret))) - ) - (setq lal (cdr ret)) - )) - (cons (cons 'local-part local-part) lal) - )))) - -(defun std11-parse-sub-domain (lal) - (let ((ret (std11-parse-ascii-token lal))) - (if ret - (let ((sub-domain (car ret))) - (if (or (assq 'atom sub-domain) - (assq 'domain-literal sub-domain) - ) - (cons (cons 'sub-domain sub-domain) - (cdr ret) - ) - ))))) - -(defun std11-parse-domain (lal) - (let ((ret (std11-parse-sub-domain lal))) - (if ret - (let ((domain (cdr (car ret))) dot) - (setq lal (cdr ret)) - (while (and (setq ret (std11-parse-ascii-token lal)) - (setq dot (car ret)) - (string-equal (cdr (assq 'specials dot)) ".") - (setq ret (std11-parse-sub-domain (cdr ret))) - (setq domain - (append domain dot (cdr (car ret))) - ) - (setq lal (cdr ret)) - )) - (cons (cons 'domain domain) lal) - )))) - -(defun std11-parse-at-domain (lal) - (let ((ret (std11-parse-ascii-token lal)) at-sign) - (if (and ret - (setq at-sign (car ret)) - (string-equal (cdr (assq 'specials at-sign)) "@") - (setq ret (std11-parse-domain (cdr ret))) - ) - (cons (cons 'at-domain (append at-sign (cdr (car ret)))) - (cdr ret)) - ))) - -(defun std11-parse-addr-spec (lal) - (let ((ret (std11-parse-local-part lal)) - addr) - (if (and ret - (prog1 - (setq addr (cdr (car ret))) - (setq lal (cdr ret)) - (and (setq ret (std11-parse-at-domain lal)) - (setq addr (append addr (cdr (car ret)))) - (setq lal (cdr ret)) - ))) - (cons (cons 'addr-spec addr) lal) - ))) - -(defun std11-parse-route (lal) - (let ((ret (std11-parse-at-domain lal)) - route comma colon) - (if (and ret - (progn - (setq route (cdr (car ret))) - (setq lal (cdr ret)) - (while (and (setq ret (std11-parse-ascii-token lal)) - (setq comma (car ret)) - (string-equal (cdr (assq 'specials comma)) ",") - (setq ret (std11-parse-at-domain (cdr ret))) - ) - (setq route (append route comma (cdr (car ret)))) - (setq lal (cdr ret)) - ) - (and (setq ret (std11-parse-ascii-token lal)) - (setq colon (car ret)) - (string-equal (cdr (assq 'specials colon)) ":") - (setq route (append route colon)) - ) - )) - (cons (cons 'route route) - (cdr ret) - ) - ))) - -(defun std11-parse-route-addr (lal) - (let ((ret (std11-parse-ascii-token lal)) - < route addr-spec >) - (if (and ret - (setq < (car ret)) - (string-equal (cdr (assq 'specials <)) "<") - (setq lal (cdr ret)) - (progn (and (setq ret (std11-parse-route lal)) - (setq route (cdr (car ret))) - (setq lal (cdr ret)) - ) - (setq ret (std11-parse-addr-spec lal)) - ) - (setq addr-spec (cdr (car ret))) - (setq lal (cdr ret)) - (setq ret (std11-parse-ascii-token lal)) - (setq > (car ret)) - (string-equal (cdr (assq 'specials >)) ">") - ) - (cons (cons 'route-addr (append route addr-spec)) - (cdr ret) - ) - ))) - -(defun std11-parse-phrase-route-addr (lal) - (let ((ret (std11-parse-phrase lal)) phrase) - (if ret - (progn - (setq phrase (cdr (car ret))) - (setq lal (cdr ret)) - )) - (if (setq ret (std11-parse-route-addr lal)) - (cons (list 'phrase-route-addr - phrase - (cdr (car ret))) - (cdr ret)) - ))) - -(defun std11-parse-mailbox (lal) - (let ((ret (or (std11-parse-phrase-route-addr lal) - (std11-parse-addr-spec lal))) - mbox comment) - (if (and ret - (prog1 - (setq mbox (car ret)) - (setq lal (cdr ret)) - (if (and (setq ret (std11-parse-token-or-comment lal)) - (setq comment (cdr (assq 'comment (car ret)))) - ) - (setq lal (cdr ret)) - ))) - (cons (list 'mailbox mbox comment) - lal) - ))) - -(defun std11-parse-group (lal) - (let ((ret (std11-parse-phrase lal)) - phrase colon comma mbox semicolon) - (if (and ret - (setq phrase (cdr (car ret))) - (setq lal (cdr ret)) - (setq ret (std11-parse-ascii-token lal)) - (setq colon (car ret)) - (string-equal (cdr (assq 'specials colon)) ":") - (setq lal (cdr ret)) - (progn - (and (setq ret (std11-parse-mailbox lal)) - (setq mbox (list (car ret))) - (setq lal (cdr ret)) - (progn - (while (and (setq ret (std11-parse-ascii-token lal)) - (setq comma (car ret)) - (string-equal - (cdr (assq 'specials comma)) ",") - (setq lal (cdr ret)) - (setq ret (std11-parse-mailbox lal)) - (setq mbox (cons (car ret) mbox)) - (setq lal (cdr ret)) - ) - ))) - (and (setq ret (std11-parse-ascii-token lal)) - (setq semicolon (car ret)) - (string-equal (cdr (assq 'specials semicolon)) ";") - ))) - (cons (list 'group phrase (nreverse mbox)) - (cdr ret) - ) - ))) - -(defun std11-parse-address (lal) - (or (std11-parse-group lal) - (std11-parse-mailbox lal) - )) - -(defun std11-parse-addresses (lal) - (let ((ret (std11-parse-address lal))) - (if ret - (let ((dest (list (car ret)))) - (setq lal (cdr ret)) - (while (and (setq ret (std11-parse-ascii-token lal)) - (string-equal (cdr (assq 'specials (car ret))) ",") - (setq ret (std11-parse-address (cdr ret))) - ) - (setq dest (cons (car ret) dest)) - (setq lal (cdr ret)) - ) - (nreverse dest) - )))) - -(defun std11-parse-msg-id (lal) - (let ((ret (std11-parse-ascii-token lal)) - < addr-spec >) - (if (and ret - (setq < (car ret)) - (string-equal (cdr (assq 'specials <)) "<") - (setq lal (cdr ret)) - (setq ret (std11-parse-addr-spec lal)) - (setq addr-spec (car ret)) - (setq lal (cdr ret)) - (setq ret (std11-parse-ascii-token lal)) - (setq > (car ret)) - (string-equal (cdr (assq 'specials >)) ">") - ) - (cons (cons 'msg-id (cdr addr-spec)) - (cdr ret)) - ))) - - -;;; @ composer -;;; - -(defun std11-addr-to-string (seq) - "Return string from lexical analyzed list SEQ -represents addr-spec of RFC 822. [std11.el]" - (mapconcat (function - (lambda (token) - (let ((name (car token))) - (cond - ((eq name 'spaces) "") - ((eq name 'comment) "") - ((eq name 'quoted-string) - (concat "\"" (cdr token) "\"")) - (t (cdr token))) - ))) - seq "") - ) - -(defun std11-address-string (address) - "Return string of address part from parsed ADDRESS of RFC 822. -\[std11.el]" - (cond ((eq (car address) 'group) - (mapconcat (function std11-address-string) - (car (cdr address)) - ", ") - ) - ((eq (car address) 'mailbox) - (let ((addr (nth 1 address))) - (std11-addr-to-string - (if (eq (car addr) 'phrase-route-addr) - (nth 2 addr) - (cdr addr) - ) - ))))) - -(defun std11-full-name-string (address) - "Return string of full-name part from parsed ADDRESS of RFC 822. -\[std11.el]" - (cond ((eq (car address) 'group) - (mapconcat (function - (lambda (token) - (cdr token) - )) - (nth 1 address) "") - ) - ((eq (car address) 'mailbox) - (let ((addr (nth 1 address)) - (comment (nth 2 address)) - phrase) - (if (eq (car addr) 'phrase-route-addr) - (setq phrase - (mapconcat - (function - (lambda (token) - (let ((type (car token))) - (cond ((eq type 'quoted-string) - (std11-strip-quoted-pair (cdr token)) - ) - ((eq type 'comment) - (concat - "(" - (std11-strip-quoted-pair (cdr token)) - ")") - ) - (t - (cdr token) - ))))) - (nth 1 addr) "")) - ) - (cond ((> (length phrase) 0) phrase) - (comment (std11-strip-quoted-pair comment)) - ) - )))) - -(defun std11-msg-id-string (msg-id) - "Return string from parsed MSG-ID of RFC 822." - (concat "<" (std11-addr-to-string (cdr msg-id)) ">") - ) - -(defun std11-fill-msg-id-list-string (string &optional column) - "Fill list of msg-id in STRING, and return the result." - (or column - (setq column 12)) - (let ((lal (std11-lexical-analyze string)) - dest) - (let ((ret (std11-parse-msg-id lal))) - (if ret - (let* ((str (std11-msg-id-string (car ret))) - (len (length str))) - (setq lal (cdr ret)) - (if (> (+ len column) 76) - (setq dest (concat dest "\n " str) - column (1+ len)) - (setq dest str - column (+ column len)) - )) - (setq dest (concat dest (cdr (car lal))) - lal (cdr lal)) - )) - (while lal - (let ((ret (std11-parse-msg-id lal))) - (if ret - (let* ((str (std11-msg-id-string (car ret))) - (len (1+ (length str)))) - (setq lal (cdr ret)) - (if (> (+ len column) 76) - (setq dest (concat dest "\n " str) - column len) - (setq dest (concat dest " " str) - column (+ column len)) - )) - (setq dest (concat dest (cdr (car lal))) - lal (cdr lal)) - ))) - dest)) - - -;;; @ parser with lexical analyzer -;;; - -(defun std11-parse-address-string (string) - "Parse STRING as mail address. [std11.el]" - (std11-parse-address (std11-lexical-analyze string)) - ) - -(defun std11-parse-addresses-string (string) - "Parse STRING as mail address list. [std11.el]" - (std11-parse-addresses (std11-lexical-analyze string)) - ) - -(defun std11-extract-address-components (string) - "Extract full name and canonical address from STRING. -Returns a list of the form (FULL-NAME CANONICAL-ADDRESS). -If no name can be extracted, FULL-NAME will be nil. [std11.el]" - (let* ((structure (car (std11-parse-address-string - (std11-unfold-string string)))) - (phrase (std11-full-name-string structure)) - (address (std11-address-string structure)) - ) - (list phrase address) - )) - - -;;; @ end -;;; - -(provide 'std11) - -;;; std11.el ends here -- 1.7.10.4