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("&amp;"); goto state_plain; }
        winquotes               { ADD_CONST("&quot;"); 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

Reply via email to