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]