⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbfilter_jis.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			s = -1;		}	}	if (s >= 0) {		if (s < 0x80) { /* ASCII */			if ((filter->status & 0xff00) != 0) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x28, filter->data));		/* '(' */				CK((*filter->output_function)(0x42, filter->data));		/* 'B' */			}			filter->status = 0;			CK((*filter->output_function)(s, filter->data));		} else if (s < 0x100) { /* kana */			if ((filter->status & 0xff00) != 0x100) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x28, filter->data));		/* '(' */				CK((*filter->output_function)(0x49, filter->data));		/* 'I' */			}			filter->status = 0x100;			CK((*filter->output_function)(s & 0x7f, filter->data));		} else if (s < 0x8080) { /* X 0208 */			if ((filter->status & 0xff00) != 0x200) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x24, filter->data));		/* '$' */				CK((*filter->output_function)(0x42, filter->data));		/* 'B' */			}			filter->status = 0x200;			CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));			CK((*filter->output_function)(s & 0x7f, filter->data));		} else if (s < 0x10000) { /* X 0212 */			if ((filter->status & 0xff00) != 0x300) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x24, filter->data));		/* '$' */				CK((*filter->output_function)(0x28, filter->data));		/* '(' */				CK((*filter->output_function)(0x44, filter->data));		/* 'D' */			}			filter->status = 0x300;			CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));			CK((*filter->output_function)(s & 0x7f, filter->data));		} else { /* X 0201 latin */			if ((filter->status & 0xff00) != 0x400) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x28, filter->data));		/* '(' */				CK((*filter->output_function)(0x4a, filter->data));		/* 'J' */			}			filter->status = 0x400;			CK((*filter->output_function)(s & 0x7f, filter->data));		}	} else {		if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {			CK(mbfl_filt_conv_illegal_output(c, filter));		}	}	return c;}/* * wchar => ISO-2022-JP */intmbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter){	int s;	s = 0;	if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) {		s = ucs_a1_jis_table[c - ucs_a1_jis_table_min];	} else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) {		s = ucs_a2_jis_table[c - ucs_a2_jis_table_min];	} else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) {		s = ucs_i_jis_table[c - ucs_i_jis_table_min];	} else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) {		s = ucs_r_jis_table[c - ucs_r_jis_table_min];	}	if (s <= 0) {		if (c == 0xa5) {			/* YEN SIGN */			s = 0x1005c;		} else if (c == 0x203e) {	/* OVER LINE */			s = 0x1007e;		} else if (c == 0xff3c) {	/* FULLWIDTH REVERSE SOLIDUS */			s = 0x2140;		} else if (c == 0xff5e) {	/* FULLWIDTH TILDE */			s = 0x2141;		} else if (c == 0x2225) {	/* PARALLEL TO */			s = 0x2142;		} else if (c == 0xff0d) {	/* FULLWIDTH HYPHEN-MINUS */			s = 0x215d;		} else if (c == 0xffe0) {	/* FULLWIDTH CENT SIGN */			s = 0x2171;		} else if (c == 0xffe1) {	/* FULLWIDTH POUND SIGN */			s = 0x2172;		} else if (c == 0xffe2) {	/* FULLWIDTH NOT SIGN */			s = 0x224c;		}		if (c == 0) {			s = 0;		} else if (s <= 0) {			s = -1;		}	} else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) {		s = -1;	}	if (s >= 0) {		if (s < 0x80) { /* ASCII */			if ((filter->status & 0xff00) != 0) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x28, filter->data));		/* '(' */				CK((*filter->output_function)(0x42, filter->data));		/* 'B' */			}			filter->status = 0;			CK((*filter->output_function)(s, filter->data));		} else if (s < 0x10000) { /* X 0208 */			if ((filter->status & 0xff00) != 0x200) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x24, filter->data));		/* '$' */				CK((*filter->output_function)(0x42, filter->data));		/* 'B' */			}			filter->status = 0x200;			CK((*filter->output_function)((s >> 8) & 0x7f, filter->data));			CK((*filter->output_function)(s & 0x7f, filter->data));		} else { /* X 0201 latin */			if ((filter->status & 0xff00) != 0x400) {				CK((*filter->output_function)(0x1b, filter->data));		/* ESC */				CK((*filter->output_function)(0x28, filter->data));		/* '(' */				CK((*filter->output_function)(0x4a, filter->data));		/* 'J' */			}			filter->status = 0x400;			CK((*filter->output_function)(s & 0x7f, filter->data));		}	} else {		if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {			CK(mbfl_filt_conv_illegal_output(c, filter));		}	}	return c;}intmbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter){	/* back to latin */	if ((filter->status & 0xff00) != 0) {		CK((*filter->output_function)(0x1b, filter->data));		/* ESC */		CK((*filter->output_function)(0x28, filter->data));		/* '(' */		CK((*filter->output_function)(0x42, filter->data));		/* 'B' */	}	filter->status &= 0xff;	return 0;}static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter){retry:	switch (filter->status & 0xf) {/*	case 0x00:	 ASCII *//*	case 0x10:	 X 0201 latin *//*	case 0x20:	 X 0201 kana *//*	case 0x80:	 X 0208 *//*	case 0x90:	 X 0212 */	case 0:		if (c == 0x1b) {			filter->status += 2;		} else if (c == 0x0e) {			/* "kana in" */			filter->status = 0x20;		} else if (c == 0x0f) {			/* "kana out" */			filter->status = 0;		} else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) {		/* kanji first char */			filter->status += 1;		} else if (c >= 0 && c < 0x80) {		/* latin, CTLs */			;		} else {			filter->flag = 1;	/* bad */		}		break;/*	case 0x81:	 X 0208 second char *//*	case 0x91:	 X 0212 second char */	case 1:		filter->status &= ~0xf;		if (c == 0x1b) {			goto retry;		} else if (c < 0x21 || c > 0x7e) {		/* bad */			filter->flag = 1;		}		break;	/* ESC */	case 2:		if (c == 0x24) {		/* '$' */			filter->status++;		} else if (c == 0x28) {		/* '(' */			filter->status += 3;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	/* ESC $ */	case 3:		if (c == 0x40 || c == 0x42) {		/* '@' or 'B' */			filter->status = 0x80;		} else if (c == 0x28) {		/* '(' */			filter->status++;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	/* ESC $ ( */	case 4:		if (c == 0x40 || c == 0x42) {		/* '@' or 'B' */			filter->status = 0x80;		} else if (c == 0x44) {		/* 'D' */			filter->status = 0x90;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	/* ESC ( */	case 5:		if (c == 0x42 || c == 0x48) {		/* 'B' or 'H' */			filter->status = 0;		} else if (c == 0x4a) {		/* 'J' */			filter->status = 0x10;		} else if (c == 0x49) {		/* 'I' */			filter->status = 0x20;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	default:		filter->status = 0;		break;	}	return c;}static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter){retry:	switch (filter->status & 0xf) {/*	case 0x00:	 ASCII *//*	case 0x10:	 X 0201 latin *//*	case 0x80:	 X 0208 */	case 0:		if (c == 0x1b) {			filter->status += 2;		} else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) {		/* kanji first char */			filter->status += 1;		} else if (c >= 0 && c < 0x80) {		/* latin, CTLs */			;		} else {			filter->flag = 1;	/* bad */		}		break;/*	case 0x81:	 X 0208 second char */	case 1:		if (c == 0x1b) {			filter->status++;		} else {			filter->status &= ~0xf;			if (c < 0x21 || c > 0x7e) {		/* bad */				filter->flag = 1;			}		}		break;	/* ESC */	case 2:		if (c == 0x24) {		/* '$' */			filter->status++;		} else if (c == 0x28) {		/* '(' */			filter->status += 3;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	/* ESC $ */	case 3:		if (c == 0x40 || c == 0x42) {		/* '@' or 'B' */			filter->status = 0x80;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	/* ESC ( */	case 5:		if (c == 0x42) {		/* 'B' */			filter->status = 0;		} else if (c == 0x4a) {		/* 'J' */			filter->status = 0x10;		} else {			filter->flag = 1;	/* bad */			filter->status &= ~0xf;			goto retry;		}		break;	default:		filter->status = 0;		break;	}	return c;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -