sas             Tue Jun  3 10:16:23 2003 EDT

  Modified files:              (Branch: PHP_4_3)
    /php4/ext/ircg      ircg_scanner.re 
  Log:
  Add arbitrary color handling
  
  
Index: php4/ext/ircg/ircg_scanner.re
diff -u php4/ext/ircg/ircg_scanner.re:1.18.8.1 php4/ext/ircg/ircg_scanner.re:1.18.8.2
--- php4/ext/ircg/ircg_scanner.re:1.18.8.1      Tue Jan 28 09:33:03 2003
+++ php4/ext/ircg/ircg_scanner.re       Tue Jun  3 10:16:23 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ircg_scanner.re,v 1.18.8.1 2003/01/28 14:33:03 sas Exp $ */
+/* $Id: ircg_scanner.re,v 1.18.8.2 2003/06/03 14:16:23 sas Exp $ */
 
 #include <ext/standard/php_smart_str.h>
 #include <stdio.h>
@@ -36,20 +36,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;
@@ -57,6 +49,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;
@@ -70,12 +64,14 @@
 alnum = [a-zA-Z0-9];
 digit = [0-9];
 scheme = alpha alnum*;
-coloresc = "";
-bold = "";
+coloresc = "\003";
+colorhex = "\004";
+bold = "\002";
 underline = "\037";
-italic = "";
+italic = "\35";
 ircnl = "\036";
 winquotes = [\204\223\224];
+hex = [a-fA-F0-9];
 */
 
 #define YYFILL(n) do { } while (0)
@@ -87,10 +83,13 @@
 #define STD_PARA ircg_msg_scanner *ctx, const char *start, const char *YYCURSOR
 #define STD_ARGS ctx, start, YYCURSOR
 
-static inline void passthru(STD_PARA)
-{
-       smart_str_appendl_ex(ctx->result, start, YYCURSOR - start, 1);
-}
+#define passthru(na,nb,nc) 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)
 {
@@ -131,6 +130,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)
@@ -195,6 +199,18 @@
        }
 }
 
+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 add_entity(STD_PARA, const char *entity)
 {
        smart_str_appends_ex(ctx->result, entity, 1);
@@ -221,6 +237,7 @@
 /*!re2c
        scheme "://"    { if (auto_links) { handle_scheme(STD_ARGS); goto state_url; } 
else { passthru(STD_ARGS); goto state_plain; } }
        coloresc                { mctx.fg_code = mctx.bg_code = -1; goto 
state_color_fg; }
+       colorhex                { mctx.fg_color[0] = mctx.bg_color[0] = 0; goto 
state_color_hex; }
        "<"                             { add_entity(STD_ARGS, "&lt;"); goto 
state_plain; }
        ">"                             { add_entity(STD_ARGS, "&gt;"); goto 
state_plain; }
        "&"                             { add_entity(STD_ARGS, "&amp;"); goto 
state_plain; }
@@ -232,7 +249,31 @@
        anynoneof               { passthru(STD_ARGS); 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(STD_ARGS); 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(STD_ARGS); goto state_plain; }
+*/
+
+state_url:
        start = YYCURSOR;
 /*!re2c
        [-a-zA-Z0-9~_?=.@&+/#:;!*'()%,$]+               { handle_url(STD_ARGS); goto 
state_plain; }
@@ -244,23 +285,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(STD_ARGS); 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(STD_ARGS); 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