davidg          Fri Feb 23 16:01:00 2001 EDT

  Modified files:              
    /php4/ext/midgard   preparser-parser.y preparser-scanner.l 
  Log:
  passing include()'ed files thru the preparser.
  
  
Index: php4/ext/midgard/preparser-parser.y
diff -u php4/ext/midgard/preparser-parser.y:1.4 php4/ext/midgard/preparser-parser.y:1.5
--- php4/ext/midgard/preparser-parser.y:1.4     Tue Feb 20 03:14:55 2001
+++ php4/ext/midgard/preparser-parser.y Fri Feb 23 16:00:59 2001
@@ -1,5 +1,5 @@
 %{
-/* $Id: preparser-parser.y,v 1.4 2001/02/20 11:14:55 emile Exp $
+/* $Id: preparser-parser.y,v 1.5 2001/02/24 00:00:59 davidg Exp $
 Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
 Copyright (C) 2000 The Midgard Project ry
 Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]>
@@ -42,7 +42,7 @@
 %token MGD_SNIP
 %token MGD_SNIPE
 %token MGD_EVAL
-%token MGD_EVALE
+%token MGD_INCLUDE
 
 %%
 
@@ -183,6 +183,17 @@
    mgd_append_output_buffer_const("mgd_eval(");
    mgd_append_output_buffer_data($2);
    mgd_append_output_buffer_const(")");
+   mgd_free_buffer($2);
+ }
+ | MGD_INCLUDE STRING {
+#ifdef PARSER_DEBUG
+   mgd_append_output_buffer_const("parsed include: ");
+   mgd_append_output_buffer_data($2);
+#endif
+   mgd_append_output_buffer_const("$midgard->pp_tmp=\"?>\"."
+                                                                                      
+ "implode(\"\\n\",file(");
+   mgd_append_output_buffer_data($2);
+   mgd_append_output_buffer_const(")).\"<?\";mgd_eval($midgard->pp_tmp);");
    mgd_free_buffer($2);
  }
 ;
Index: php4/ext/midgard/preparser-scanner.l
diff -u php4/ext/midgard/preparser-scanner.l:1.4 
php4/ext/midgard/preparser-scanner.l:1.5
--- php4/ext/midgard/preparser-scanner.l:1.4    Thu Feb 22 17:08:43 2001
+++ php4/ext/midgard/preparser-scanner.l        Fri Feb 23 16:00:59 2001
@@ -1,6 +1,6 @@
 
 %{
-/* $Id: preparser-scanner.l,v 1.4 2001/02/23 01:08:43 davidg Exp $
+/* $Id: preparser-scanner.l,v 1.5 2001/02/24 00:00:59 davidg Exp $
 Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]>
 Copyright (C) 2000 The Midgard Project ry
 Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]>
@@ -48,6 +48,9 @@
 %x IN_EVAL
 %x IN_EVALQ
 %x IN_EVALQQ
+%x IN_INCLUDE
+%x IN_INCLUDEQ
+%x IN_INCLUDEQQ
 
 %option stack
 %option noyywrap
@@ -259,6 +262,67 @@
 }
 
 <IN_EVAL>{ANY} {
+  if(yytext[0] == '(') par_stack++;
+  if(yytext[0] == ')') par_stack--;
+  if(par_stack < 0) {
+    yy_pop_state();
+    return STRING;
+  }
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+}
+
+<IN_PHP>[^a-zA-Z0-9_]"include"{WHITESPACE}*"(" {
+/* TODO: change the [^_] to make it conditional, so it's not part of the match
+ */
+  mgd_append_byte(mgd_output_buffer, mgdtext);
+  yy_push_state(IN_INCLUDE);
+  par_stack=0;
+  in_string = 0;
+  mgdlval.gstring = g_byte_array_new();
+  return MGD_INCLUDE;
+}
+
+<IN_INCLUDE>{quote} {
+  yy_push_state(IN_INCLUDEQ);
+  in_string = mgdtext[0];
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+}
+
+<IN_INCLUDE>{dquote} {
+  yy_push_state(IN_INCLUDEQQ);
+  in_string = mgdtext[0];
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+}
+
+<IN_INCLUDEQ>[\\]{quote} {
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+  mgd_append_byte(mgdlval.gstring, mgdtext+1);
+}
+
+<IN_INCLUDEQ>{quote} {
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+  yy_pop_state();
+}
+
+<IN_INCLUDEQ>{ANY} {
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+}
+
+<IN_INCLUDEQQ>[\\]{dquote} {
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+  mgd_append_byte(mgdlval.gstring, mgdtext+1);
+}
+
+<IN_INCLUDEQQ>{dquote} {
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+  yy_pop_state();
+}
+
+<IN_INCLUDEQQ>{ANY} {
+  mgd_append_byte(mgdlval.gstring, mgdtext);
+}
+
+<IN_INCLUDE>{ANY} {
   if(yytext[0] == '(') par_stack++;
   if(yytext[0] == ')') par_stack--;
   if(par_stack < 0) {



-- 
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]

Reply via email to