sas Thu Mar 8 10:59:46 2001 EDT Modified files: /php4/ext/ircg ircg_scanner.c Log: Add handling for underline/bold control sequences
Index: php4/ext/ircg/ircg_scanner.c diff -u php4/ext/ircg/ircg_scanner.c:1.5 php4/ext/ircg/ircg_scanner.c:1.6 --- php4/ext/ircg/ircg_scanner.c:1.5 Sat Mar 3 09:01:31 2001 +++ php4/ext/ircg/ircg_scanner.c Thu Mar 8 10:59:46 2001 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.5 on Sat Mar 3 16:35:30 2001 */ -#line 1 "/usr/home/sas/chat/php4/ext/ircg/ircg_scanner.re" +/* Generated by re2c 0.5 on Thu Mar 8 19:50:44 2001 */ +#line 1 "/home/sas/src/php4/ext/ircg/ircg_scanner.re" /* +----------------------------------------------------------------------+ | PHP version 4.0 | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.c,v 1.5 2001/03/03 17:01:31 sas Exp $ */ +/* $Id: ircg_scanner.c,v 1.6 2001/03/08 18:59:46 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -56,12 +56,14 @@ int bg_code; int fg_code; int font_tag_open; + int bold_tag_open; + int underline_tag_open; smart_str scheme; smart_str *result; } ircg_msg_scanner; -#line 71 +#line 75 #define YYFILL(n) { } @@ -123,6 +125,34 @@ } } +static void handle_bold(STD_PARA, int final) +{ + switch (ctx->bold_tag_open) { + case 0: + if (!final) smart_str_appends(ctx->result, "<b>"); + break; + case 1: + smart_str_appends(ctx->result, "</b>"); + break; + } + + ctx->bold_tag_open = 1 - ctx->bold_tag_open; +} + +static void handle_underline(STD_PARA, int final) +{ + switch (ctx->underline_tag_open) { + case 0: + if (!final) smart_str_appends(ctx->result, "<ul>"); + break; + case 1: + smart_str_appends(ctx->result, "</ul>"); + break; + } + + ctx->underline_tag_open = 1 - ctx->underline_tag_open; +} + static void commit_color_stuff(STD_PARA) { finish_color_stuff(STD_ARGS); @@ -145,17 +175,17 @@ smart_str_appends(ctx->result, entity); } -void ircg_mirc_color(const char *msg, smart_str *result) { +void ircg_mirc_color(const char *msg, smart_str *result, size_t msg_len) { int mode = STATE_PLAIN; const char *end, *xp, *q, *start; - size_t msg_len; ircg_msg_scanner mctx, *ctx = &mctx; mctx.result = result; mctx.scheme.c = NULL; - mctx.font_tag_open = 0; + mctx.font_tag_open = mctx.bold_tag_open = mctx.underline_tag_open = 0; - msg_len = strlen(msg); + if (msg_len == -1) + msg_len = strlen(msg); end = msg + msg_len; xp = msg; @@ -208,83 +238,96 @@ yy0: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; - if(yych <= '<'){ + if(yych <= '&'){ if(yych <= '\003'){ - if(yych <= '\000') goto yy13; + if(yych <= '\000') goto yy17; + if(yych <= '\001') goto yy16; if(yych <= '\002') goto yy12; goto yy4; } else { - if(yych == '&') goto yy10; - if(yych <= ';') goto yy12; - goto yy6; + if(yych == '\025') goto yy14; + if(yych <= '%') goto yy16; + goto yy10; } } else { - if(yych <= '@'){ - if(yych == '>') goto yy8; - goto yy12; + if(yych <= '>'){ + if(yych == '<') goto yy6; + if(yych <= '=') goto yy16; + goto yy8; } else { - if(yych <= 'Z') goto yy2; - if(yych <= '`') goto yy12; - if(yych >= '{') goto yy12; + if(yych <= 'Z'){ + if(yych <= '@') goto yy16; + } else { + if(yych <= '`') goto yy16; + if(yych >= '{') goto yy16; + } } } yy2: yych = *++YYCURSOR; - if(yybm[0+yych] & 128) goto yy17; - if(yych == ':') goto yy19; - goto yy16; + if(yybm[0+yych] & 128) goto yy21; + if(yych == ':') goto yy23; + goto yy20; yy3: -#line 181 +#line 215 { passthru(STD_ARGS); continue; } yy4: yych = *++YYCURSOR; yy5: -#line 177 +#line 209 { mctx.fg_code = mctx.bg_code = -1; STATE = STATE_COLOR_FG; continue; } yy6: yych = *++YYCURSOR; yy7: -#line 178 +#line 210 { add_entity(STD_ARGS, "<"); continue; } yy8: yych = *++YYCURSOR; yy9: -#line 179 +#line 211 { add_entity(STD_ARGS, ">"); continue; } yy10: yych = *++YYCURSOR; yy11: -#line 180 +#line 212 { add_entity(STD_ARGS, "&"); continue; } yy12: yych = *++YYCURSOR; - goto yy16; -yy13: yych = *++YYCURSOR; -yy14: -#line 183 +yy13: +#line 213 + { handle_bold(STD_ARGS, 0); continue; } +yy14: yych = *++YYCURSOR; +yy15: +#line 214 + { handle_underline(STD_ARGS, 0); continue; } +yy16: yych = *++YYCURSOR; + goto yy20; +yy17: yych = *++YYCURSOR; +yy18: +#line 217 { goto stop; } -yy15: ++YYCURSOR; +yy19: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy16: if(yybm[0+yych] & 64) goto yy15; +yy20: if(yybm[0+yych] & 64) goto yy19; goto yy3; -yy17: ++YYCURSOR; +yy21: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy18: if(yybm[0+yych] & 128) goto yy17; +yy22: if(yybm[0+yych] & 128) goto yy21; if(yych <= '\000') goto yy3; - if(yych <= '.') goto yy15; + if(yych <= '.') goto yy19; if(yych <= '/') goto yy3; - if(yych >= ';') goto yy15; -yy19: yyaccept = 0; + if(yych >= ';') goto yy19; +yy23: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych != '/') goto yy16; -yy20: yych = *++YYCURSOR; - if(yych == '/') goto yy22; -yy21: YYCURSOR = YYMARKER; + if(yych != '/') goto yy20; +yy24: yych = *++YYCURSOR; + if(yych == '/') goto yy26; +yy25: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy3; } -yy22: yych = *++YYCURSOR; -yy23: -#line 176 +yy26: yych = *++YYCURSOR; +yy27: +#line 208 { handle_scheme(STD_ARGS); STATE = STATE_URL; continue; } } -#line 184 +#line 218 break; @@ -329,43 +372,43 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - goto yy24; -yy25: ++YYCURSOR; -yy24: + goto yy28; +yy29: ++YYCURSOR; +yy28: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '>'){ if(yych <= '"'){ - if(yych != '!') goto yy28; + if(yych != '!') goto yy32; } else { - if(yych == '<') goto yy28; - if(yych >= '>') goto yy28; + if(yych == '<') goto yy32; + if(yych >= '>') goto yy32; } } else { if(yych <= '`'){ - if(yych <= 'Z') goto yy26; - if(yych != '_') goto yy28; + if(yych <= 'Z') goto yy30; + if(yych != '_') goto yy32; } else { - if(yych <= 'z') goto yy26; - if(yych != '~') goto yy28; + if(yych <= 'z') goto yy30; + if(yych != '~') goto yy32; } } -yy26: yych = *++YYCURSOR; - goto yy31; -yy27: -#line 192 +yy30: yych = *++YYCURSOR; + goto yy35; +yy31: +#line 226 { handle_url(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy28: yych = *++YYCURSOR; -yy29: -#line 193 +yy32: yych = *++YYCURSOR; +yy33: +#line 227 { passthru(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy30: ++YYCURSOR; +yy34: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy31: if(yybm[0+yych] & 128) goto yy30; - goto yy27; +yy35: if(yybm[0+yych] & 128) goto yy34; + goto yy31; } -#line 194 +#line 228 break; @@ -375,27 +418,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy32; -yy33: ++YYCURSOR; -yy32: + goto yy36; +yy37: ++YYCURSOR; +yy36: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy36; - if(yych >= ':') goto yy36; -yy34: yych = *++YYCURSOR; - if(yych <= '/') goto yy35; - if(yych <= '9') goto yy38; -yy35: -#line 201 + if(yych <= '/') goto yy40; + if(yych >= ':') goto yy40; +yy38: yych = *++YYCURSOR; + if(yych <= '/') goto yy39; + if(yych <= '9') goto yy42; +yy39: +#line 235 { handle_color_digit(STD_ARGS, 0); STATE = STATE_COLOR_COMMA; continue; } -yy36: yych = *++YYCURSOR; -yy37: -#line 202 +yy40: yych = *++YYCURSOR; +yy41: +#line 236 { finish_color_stuff(STD_ARGS); passthru(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy38: yych = *++YYCURSOR; - goto yy35; +yy42: yych = *++YYCURSOR; + goto yy39; } -#line 203 +#line 237 break; @@ -405,22 +448,22 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy39; -yy40: ++YYCURSOR; -yy39: + goto yy43; +yy44: ++YYCURSOR; +yy43: if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych != ',') goto yy43; -yy41: yych = *++YYCURSOR; -yy42: -#line 210 + if(yych != ',') goto yy47; +yy45: yych = *++YYCURSOR; +yy46: +#line 244 { STATE = STATE_COLOR_BG; continue; } -yy43: yych = *++YYCURSOR; -yy44: -#line 211 +yy47: yych = *++YYCURSOR; +yy48: +#line 245 { YYCURSOR--; commit_color_stuff(STD_ARGS); STATE = STATE_PLAIN; continue; } } -#line 212 +#line 246 break; @@ -430,27 +473,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy45; -yy46: ++YYCURSOR; -yy45: + goto yy49; +yy50: ++YYCURSOR; +yy49: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy49; - if(yych >= ':') goto yy49; -yy47: yych = *++YYCURSOR; - if(yych <= '/') goto yy48; - if(yych <= '9') goto yy51; -yy48: -#line 219 + if(yych <= '/') goto yy53; + if(yych >= ':') goto yy53; +yy51: yych = *++YYCURSOR; + if(yych <= '/') goto yy52; + if(yych <= '9') goto yy55; +yy52: +#line 253 { handle_color_digit(STD_ARGS, 1); commit_color_stuff(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy49: yych = *++YYCURSOR; -yy50: -#line 220 +yy53: yych = *++YYCURSOR; +yy54: +#line 254 { commit_color_stuff(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy51: yych = *++YYCURSOR; - goto yy48; +yy55: yych = *++YYCURSOR; + goto yy52; } -#line 221 +#line 255 break; } @@ -459,4 +502,6 @@ smart_str_free(&ctx->scheme); finish_color_stuff(STD_ARGS); + handle_bold(STD_ARGS, 1); + handle_underline(STD_ARGS, 1); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]