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]