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