From 64602ecc748d2971f4b704c85b9be624842716f0 Mon Sep 17 00:00:00 2001 From: "NARUSE, Yui" Date: Sat, 3 Nov 2007 05:17:35 +0000 Subject: [PATCH] * Fix: wordwrap for mime encode. [nkf-bugs#11329] --- nkf.c | 32 +++++++++++++++--- nkf_test.pl | 107 ++---------------------------------------------------------- 2 files changed, 29 insertions(+), 110 deletions(-) diff --git a/nkf.c b/nkf.c index a7432ae..95aaf75 100644 --- a/nkf.c +++ b/nkf.c @@ -30,7 +30,7 @@ * 現在、nkf は SorceForge にてメンテナンスが続けられています。 * http://sourceforge.jp/projects/nkf/ ***********************************************************************/ -/* $Id: nkf.c,v 1.143 2007/10/10 19:35:39 naruse Exp $ */ +/* $Id: nkf.c,v 1.144 2007/11/02 20:17:35 naruse Exp $ */ #define NKF_VERSION "2.0.8" #define NKF_RELEASE_DATE "2007-10-11" #define COPY_RIGHT \ @@ -223,6 +223,9 @@ void djgpp_setbinmode(FILE *fp) ('a'<=c&&c<='f') ? (c-'a'+10) : 0) #define bin2hex(c) ("0123456789ABCDEF"[c&15]) #define is_eucg3(c2) (((unsigned short)c2 >> 8) == SS3) +#define nkf_noescape_mime(c) ((c == CR) || (c == LF) || \ + ((c > SP) && (c < DEL) && (c != '?') && (c != '=') && (c != '_') \ + && (c != '.') && (c != 0x22))) #define CP932_TABLE_BEGIN 0xFA #define CP932_TABLE_END 0xFC @@ -5707,6 +5710,12 @@ void mime_prechar(nkf_char c2, nkf_char c1) (*o_base64conv)(0,LF); (*o_base64conv)(0,SP); } + } else { + if (base64_count + mimeout_buf_count/3*4> 66){ + (*o_base64conv)(EOF,0); + (*o_base64conv)(0,LF); + (*o_base64conv)(0,SP); + } }/*else if (mime_lastchar2){ if (c1 <=DEL && !nkf_isspace(c1)){ (*o_base64conv)(0,SP); @@ -5801,9 +5810,20 @@ void mime_putc(nkf_char c) (*o_mputc)(SP); base64_count++; } - } - (*o_mputc)(c); - base64_count++; + } else { + if (base64_count > 70) { + close_mime(); + (*o_mputc)(LF); + base64_count = 0; + open_mime(output_mode); + } + if (!nkf_noescape_mime(c)) { + mimeout_addchar(c); + return; + } + } + (*o_mputc)(c); + base64_count++; } return; } @@ -5882,6 +5902,8 @@ void mime_putc(nkf_char c) base64_count = 0; mimeout_buf_count = 0; } + mimeout_buf[mimeout_buf_count++] = (char)c; + return; } if (c==SP || c==TAB || c==CR || c==LF) { for (i=0;i0 && SPMIMEOUT_BUF_LENGTH) { diff --git a/nkf_test.pl b/nkf_test.pl index cff39b5..4c1301b 100644 --- a/nkf_test.pl +++ b/nkf_test.pl @@ -2,7 +2,7 @@ # # nkf test program for nkf-2 # -# $Id: nkf_test.pl,v 1.23 2007/10/10 19:35:39 naruse Exp $ +# $Id: nkf_test.pl,v 1.24 2007/11/02 20:17:35 naruse Exp $ # # Shinji KONO # Sun Aug 18 12:25:40 JST 1996 @@ -722,110 +722,7 @@ eofeof printf "%-40s", "test_data/mime_out"; &test("$nkf -jM",$example{'test_data/mime_out'},$example{'test_data/mime_out.ans'},$example{'test_data/mime_out.ans.alt'},$example{'test_data/mime_out.ans.alt2'}); -# test_data/mime_out2 - -$example{'test_data/mime_out2'} = unpack('u',<<'eofeof'); -M5&AI&ES=&EN -M9R!M97-S86=E(&AA;F1L:6YG('-O9G1W87)E+@H*4W5B:F5C=#H@=&5S=#$@ -M=&5S=#(@@L2"MX+&@J<@=&5S=#,@@L2"MX+&@O$@=&5S=#0*"E-U8FIE8W0Z -M('1EXSJ()/ZEGN,ZB!! -M4T-)22!!4T-)29/ZEGN,ZB!!4T-)20H*@J`@@J(@@J0@@J8@@J@@@JD@@JL@ -M@JT@@J\@@K$@@K,@@K4@@K<@@KD@@KL@@KT@@K\@@L(@@L0@@L8@@L@@@LD@ -8@LH@@LL@@LP*"@H*"@H*"@H*"@H*"@H* -eofeof - -$example{'test_data/mime_out2.ans'} = unpack('u',<<'eofeof'); -M5&AI2!T;R!C;VYF=7-E(&5X:7-T -M:6YG(&UE5)#2D5G8DM%26='>5)#2D-K8DM%23T_/2!T97-T,R`*(#T_25-/+3(P -M,C(M2E`_0C]'>5)#2D59:T]34DE*2$UB2T5)/3\]("!T97-T-`H*05-#24D@ -M/3])4T\M,C`R,BU*4#]"/T=Y4D-2;GA,6$1H5)# -M2D-)8DM%26='>5)#2D-18DM%26='>5)#2D-98DM%26='>5)#2D-G8DM%26<_ -M/0H@/3])4T\M,C`R,BU*4#]"/T=Y4D-*0V]B2T5)9T=Y4D-*0W-B2T5)9T=Y -M4D-*0S!B2T5)9T=Y4D-*0SAB2T5)9S\]"B`]/TE33RTR,#(R+4I0/T(_1WE2 -M0TI$16)+14EG1WE20TI$36)+14EG1WE20TI$56)+14EG1WE20TI$8V)+14EG -M/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#2D1K8DM%26='>5)#2D1S8DM%26=' -M>5)#2D0P8DM%26='>5)#2D0X8DM%26<_/0H@/3])4T\M,C`R,BU*4#]"/T=Y -M4D-*145B2T5)9T=Y4D-*15%B2T5)9T=Y4D-*15EB2T5)9T=Y4D-*16=B2T5) -M9S\]"B`]/TE33RTR,#(R+4I0/T(_1WE20TI%;V)+14EG1WE20TI%5)#2D4T8DM%23T_/0H*"@H*"@H*"@H*"@H*"@H` -eofeof - -$example{'test_data/mime_out2.ans.alt'} = unpack('u',<<'eofeof'); -M5&AI2!T;R!C;VYF=7-E(&5X:7-T -M:6YG"B!M97-S86=E(&AA;F1L:6YG('-O9G1W87)E+@H*4W5B:F5C=#H@=&5S -M=#$@=&5S=#(@/3])4T\M,C`R,BU*4#]"/T=Y4D-*15EK3U-224I#:V)+14D] -M/ST@=&5S=#,*(#T_25-/+3(P,C(M2E`_0C]'>5)#2D59:T]34DE*2$UB2T5) -M/3\]('1E5)#2D59:T]34DE*2$UB2T5)/3\]("!T97-T -M-`H*05-#24D@/3])4T\M,C`R,BU*4#]"/T=Y4D-2;GA,6$1H5)#2D-)8DM%26='>5)#2D-18DM%26='>5)#2D-98DM%26='>5)# -M2D-G8DM%26='>5)#2D-O8DM%23T_/0H@/3])4T\M,C`R,BU*4#]"/T=Y4D-' -M>6A#24)S:U%I47)'>6A#24)S:U%I471'>6A#24)S:U%I479'>6A#24)S:U%I -M47A'>6A#/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#1WEH0TE"6A#24)S:U%I4D5'>6A#24)S:U%I4D='>6A#24)S:U%I4DE'>6A#24)S -M:U%I4DM'>6A#/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#1WEH0TE"2!T;R!C;VYF=7-E(&5X:7-T -M:6YG(&UE5)#2D59:T]34DE*2$UB2T5) -M/3\]('1E5)#2D59:T]34DE'>6A#/ST*(#T_25-/+3(P,C(M2E`_0C]' -M>5)#2DA-8DM%23T_/2`@=&5S=#0*"D%30TE)(#T_25-/+3(P,C(M2E`_0C]' -M>5)#4FYX3%A$:'-'>6A#/ST@05-#24D@05-#24D@"B`]/TE33RTR,#(R+4I0 -M/T(_1WE20U)N>$Q81&AS1WEH0TE"5)#2D-)8DM%26='>5)#2D-1 -M8DM%26='>5)#2D-98DM%26='>5)#2D-G8DM%26='>5)#2D-O8DM%26<_/0H@ -M/3])4T\M,C`R,BU*4#]"/T=Y4D-*0W-B2T5)9T=Y4D-*0S!B2T5)9T=Y4D-* -M0SAB2T5)9T=Y4D-*1$5B2T5)9T=Y4D-*1$UB2T5)9S\]"B`]/TE33RTR,#(R -M+4I0/T(_1WE20TI$56)+14EG1WE20TI$8V)+14EG1WE20TI$:V)+14EG1WE2 -M0TI$5)# -M2D0X8DM%26='>5)#2D5%8DM%26='>5)#2D518DM%26='>5)#2D598DM%26=' -M>5)#2D5G8DM%26<_/0H@/3])4T\M,C`R,BU*4#]"/T=Y4D-*16]B2T5)9T=Y -M4D-*17-B2T5)9T=Y4D-*17=B2T5)9T=Y4D-*13!B2T5)9T=Y4D-*131B2T5) -92T-G;TM#9V]+0V=O2T-G;TM#9V]+/ST*(``` -eofeof - -printf "%-40s", "test_data/mime_out2"; - &test("$nkf -jM",$example{'test_data/mime_out2'},$example{'test_data/mime_out2.ans'},$example{'test_data/mime_out2.ans.alt'},$example{'test_data/mime_out2.ans.alt2'}); -# test_data/mime_out +# test_data/mime_out3 $example{'test_data/mime_out3'} = "\x82\xD9\x82\xB0 A"; -- 2.11.0