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]