* \e$B8=:_!"\e(Bnkf \e$B$O\e(B SorceForge \e$B$K$F%a%s%F%J%s%9$,B3$1$i$l$F$$$^$9!#\e(B
* http://sourceforge.jp/projects/nkf/
***********************************************************************/
-/* $Id: nkf.c,v 1.143 2007/10/10 19:35:39 naruse Exp $ */
+/* $Id: nkf.c,v 1.145 2007/11/02 21:40:15 naruse Exp $ */
#define NKF_VERSION "2.0.8"
-#define NKF_RELEASE_DATE "2007-10-11"
+#define NKF_RELEASE_DATE "2007-11-03"
#define COPY_RIGHT \
"Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW\n" \
"Copyright (C) 2002-2007 Kono, Furukawa, Naruse, mastodon"
('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
char mimeout_buf[MIMEOUT_BUF_LENGTH+1];
int mimeout_buf_count = 0;
int mimeout_preserve_space = 0;
-#define itoh4(c) (c>=10?c+'A'-10:c+'0')
void open_mime(nkf_char mode)
{
base64_count = 0;
} else if(!nkf_isalnum(c)) {
(*o_mputc)('=');
- (*o_mputc)(itoh4(((c>>4)&0xf)));
- (*o_mputc)(itoh4((c&0xf)));
+ (*o_mputc)(bin2hex(((c>>4)&0xf)));
+ (*o_mputc)(bin2hex((c&0xf)));
base64_count += 3;
} else {
(*o_mputc)(c);
(*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);
(*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;
}
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;i<mimeout_buf_count;i++) {
mimeout_buf_count = 0;
}
return;
- }
+ }
if (mimeout_buf_count>0 && SP<c && c!='=') {
mimeout_buf[mimeout_buf_count++] = (char)c;
if (mimeout_buf_count>MIMEOUT_BUF_LENGTH) {