** E-Mail: furukawa@tcp-ip.or.jp
** \e$B$^$G8fO"Mm$r$*4j$$$7$^$9!#\e(B
***********************************************************************/
-/* $Id: nkf.c,v 1.51 2004/12/31 17:19:43 naruse Exp $ */
+/* $Id: nkf.c,v 1.54 2005/01/02 05:46:01 naruse Exp $ */
#define NKF_VERSION "2.0.4"
#define NKF_RELEASE_DATE "2005-01-01"
#include "config.h"
int j;
p = (unsigned char *)long_option[i].name;
for (j=0;*p && (*p != '=') && *p == cp[j];p++, j++);
- if (!*p || *p == cp[j]){
+ if (*p == cp[j]){
p = &cp[j];
break;
}
{
switch(mimeout_mode) {
case 'Q':
- if(c>=DEL) {
+ if(c==SPACE){
+ (*o_mputc)('_');
+ base64_count++;
+ } else if (c==CR||c==NL) {
+ (*o_mputc)(c);
+ base64_count = 0;
+ } else if(c<SPACE||c=='='||c=='?'||c=='_'||DEL<=c) {
(*o_mputc)('=');
(*o_mputc)(itoh4(((c>>4)&0xf)));
(*o_mputc)(itoh4((c&0xf)));
mimeout_mode='B';
base64_count += 2;
break;
+ default:
+ (*o_mputc)(c);
+ base64_count++;
+ break;
}
}
int i = 0;
int j = 0;
- if (mimeout_f==FIXED_MIME && base64_count>50) {
- eof_mime();
- (*o_mputc)(NL);
+ if (mimeout_f==FIXED_MIME && base64_count>71) {
+ if (mimeout_mode=='Q') {
+ if (c!=CR && c!=NL) {
+ (*o_mputc)('=');
+ (*o_mputc)(NL);
+ }
+ } else {
+ eof_mime();
+ (*o_mputc)(NL);
+ }
base64_count=0;
- } else if (mimeout_f!=FIXED_MIME && (c==CR||c==NL)) {
+ } else if (mimeout_f!=FIXED_MIME && !mimeout_mode && (c==CR||c==NL)) {
base64_count=0;
}
if (c!=EOF && mimeout_f!=FIXED_MIME) {
base64_count++;
return;
} else if (mimeout_mode) {
- if (base64_count>63) {
- eof_mime();
- (*o_mputc)(NL);
- (*o_mputc)(SPACE);
- base64_count=1;
- mimeout_preserve_space = TRUE;
+ if (mimeout_buf_count>0
+ && (mimeout_buf[mimeout_buf_count-1]==CR || mimeout_buf[mimeout_buf_count-1]==NL)) {
+ if (c==SPACE || c==TAB) {
+ for (i=0;i<mimeout_buf_count;i++) {
+ mimeout_addchar(mimeout_buf[i]);
+ }
+ mimeout_buf_count = 0;
+ } else if (SPACE<c && c<DEL) {
+ eof_mime();
+ for (i=0;i<mimeout_buf_count;i++) {
+ (*o_mputc)(mimeout_buf[i]);
+ }
+ base64_count = 0;
+ mimeout_buf_count = 0;
+ }
}
if (c==SPACE || c==TAB || c==CR || c==NL) {
for (i=0;i<mimeout_buf_count;i++) {
mimeout_buf[mimeout_buf_count++] = c;
if (mimeout_buf_count>MIMEOUT_BUF_LENGTH) {
eof_mime();
- base64_count = 0;
for (i=0;i<mimeout_buf_count;i++) {
(*o_mputc)(mimeout_buf[i]);
base64_count++;
}
+ mimeout_buf_count = 0;
}
return;
}
- if (mimeout_buf_count>0 && SPACE<c) {
+
+ if (mimeout_buf_count>0 && SPACE<c && c!='=') {
mimeout_buf[mimeout_buf_count++] = c;
if (mimeout_buf_count>MIMEOUT_BUF_LENGTH) {
- } else {
- return;
+ j = mimeout_buf_count;
+ mimeout_buf_count = 0;
+ for (i=0;i<j;i++) {
+ mimeout_addchar(mimeout_buf[i]);
+ }
}
+ return;
}
} else if (!mimeout_mode) {
if (c==SPACE || c==TAB || c==CR || c==NL) {
}
} else if (c == EOF) { /* c==EOF */
j = mimeout_buf_count;
+ mimeout_buf_count = 0;
i = 0;
for (;i<j;i++) {
if (mimeout_buf[i]==SPACE || mimeout_buf[i]==TAB
|| mimeout_buf[i]==CR || mimeout_buf[i]==NL)
break;
- (*mime_putc)(mimeout_buf[i]);
+ mimeout_addchar(mimeout_buf[i]);
}
eof_mime();
for (;i<j;i++) {
j = mimeout_buf_count;
mimeout_buf_count = 0;
for (i=0;i<j;i++) {
+ if (mimeout_buf[i]==CR || mimeout_buf[i]==NL)
+ break;
mimeout_addchar(mimeout_buf[i]);
}
+ if (i<j) {
+ eof_mime();
+ base64_count=0;
+ for (;i<j;i++) {
+ (*o_mputc)(mimeout_buf[i]);
+ }
+ open_mime(output_mode);
+ }
}
mimeout_addchar(c);
}