sas Tue Jun 3 10:26:23 2003 EDT Modified files: /php4/ext/ircg ircg_scanner.re Log: MFB arbitrary RGB colors Index: php4/ext/ircg/ircg_scanner.re diff -u php4/ext/ircg/ircg_scanner.re:1.23 php4/ext/ircg/ircg_scanner.re:1.24 --- php4/ext/ircg/ircg_scanner.re:1.23 Sat Apr 26 16:43:16 2003 +++ php4/ext/ircg/ircg_scanner.re Tue Jun 3 10:26:23 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.re,v 1.23 2003/04/26 20:43:16 sas Exp $ */ +/* $Id: ircg_scanner.re,v 1.24 2003/06/03 14:26:23 sas Exp $ */ #include "php_ircg_alloc.h" @@ -38,20 +38,12 @@ "teal", "lightcyan", "lightblue", - "pink", - "gray", + "#ff00ff", + "#bebebe", "lightgrey" }; -enum { - STATE_PLAIN, - STATE_URL, - STATE_COLOR_FG, - STATE_COLOR_COMMA, - STATE_COLOR_BG -}; - typedef struct { int bg_code; int fg_code; @@ -59,6 +51,8 @@ int bold_tag_open; int underline_tag_open; int italic_tag_open; + char fg_color[6]; + char bg_color[6]; smart_str scheme; smart_str *result; @@ -72,13 +66,15 @@ alnum = [a-zA-Z0-9]; digit = [0-9]; scheme = alpha alnum*; -coloresc = ""; -bold = ""; +coloresc = "\003"; +colorhex = "\004"; +bold = "\002"; underline = "\037"; -italic = ""; +italic = "\035"; ircnl = "\036"; rst = "\017"; winquotes = [\204\223\224]; +hex = [a-fA-F0-9]; */ #define YYFILL(n) do { } while (0) @@ -90,8 +86,12 @@ #define STD_PARA ircg_msg_scanner *ctx, const char *start, const char *YYCURSOR #define STD_ARGS ctx, start, YYCURSOR -#define PASSTHRU() do { \ - smart_str_appendl_ex(result, start, YYCURSOR - start, 1); \ +#define PASSTHRU() do { \ + size_t __len = xp - start; \ + if (__len == 1) \ + smart_str_appendc_ex(mctx.result, start, 1); \ + else \ + smart_str_appendl_ex(mctx.result, start, __len, 1); \ } while (0) static inline void handle_scheme(STD_PARA) @@ -133,6 +133,11 @@ } } +static void handle_hex(STD_PARA, int mode) +{ + memcpy(mode == 0 ? ctx->fg_color : ctx->bg_color, start, 6); +} + #define IS_VALID_CODE(n) (n >= 0 && n <= 15) static void finish_color_stuff(STD_PARA) @@ -201,6 +206,18 @@ smart_str_appends_ex(result, entity, 1); \ } while (0) +static void commit_color_hex(STD_PARA) +{ + finish_color_stuff(STD_ARGS); + + if (ctx->fg_color[0] != 0) { + smart_str_appends_ex(ctx->result, "<font color=\"", 1); + smart_str_appendl_ex(ctx->result, ctx->fg_color, 6, 1); + smart_str_appends_ex(ctx->result, "\">", 1); + ctx->font_tag_open = 1; + } +} + static void do_reset(STD_PARA) { finish_color_stuff(STD_ARGS); @@ -235,6 +252,7 @@ "&" { ADD_CONST("&"); goto state_plain; } winquotes { ADD_CONST("""); goto state_plain; } ircnl { if (gen_br) ADD_CONST("<br>"); goto state_plain; } + colorhex { mctx.fg_color[0] = mctx.bg_color[0] = 0; goto state_color_hex; } bold { handle_bold(STD_ARGS, 0); goto state_plain; } underline { handle_underline(STD_ARGS, 0); goto state_plain; } italic { handle_italic(STD_ARGS, 0); goto state_plain; } @@ -242,7 +260,31 @@ anynoneof { PASSTHRU(); goto state_plain; } */ -state_url: +statc_color_hex: + start = YYCURSOR; +/*!re2c + hex hex hex hex hex hex { handle_hex(STD_ARGS, 0); goto state_color_hex_bg; } + "," { goto state_color_hex_bg; } + any { finish_color_stuff(STD_ARGS); PASSTHRU(); goto state_plain; } +*/ + + +state_color_hex_comma: + start = YYCURSOR; +/*!re2c + "," { goto state_color_hex_bg; } + any { YYCURSOR--; commit_color_hex(STD_ARGS); goto state_plain; } +*/ + + +state_color_hex_bg: + start = YYCURSOR; +/*!re2c + hex hex hex hex hex hex { handle_hex(STD_ARGS, 1); commit_color_hex(STD_ARGS); goto state_plain; } + any { commit_color_hex(STD_ARGS); PASSTHRU(); goto state_plain; } +*/ + +state_url: start = YYCURSOR; /*!re2c [-a-zA-Z0-9~_?=.@&+/#:;!*'()%,$]+ { handle_url(STD_ARGS); goto state_plain; } @@ -254,23 +296,24 @@ start = YYCURSOR; /*!re2c digit digit? { handle_color_digit(STD_ARGS, 0); goto state_color_comma; } + "," { goto state_color_bg; } any { finish_color_stuff(STD_ARGS); PASSTHRU(); goto state_plain; } */ - + state_color_comma: start = YYCURSOR; /*!re2c "," { goto state_color_bg; } any { YYCURSOR--; commit_color_stuff(STD_ARGS); goto state_plain; } */ - + state_color_bg: start = YYCURSOR; /*!re2c digit digit? { handle_color_digit(STD_ARGS, 1); commit_color_stuff(STD_ARGS); goto state_plain; } - any { commit_color_stuff(STD_ARGS); goto state_plain; } + any { commit_color_stuff(STD_ARGS); PASSTHRU(); goto state_plain; } */ stop:
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php