iliaa Sun Nov 23 20:17:28 2003 EDT Modified files: /php-src NEWS /php-src/ext/standard basic_functions.c basic_functions.h Log: Added php_strip_whitespace() and php_check_syntax() functions. Index: php-src/NEWS diff -u php-src/NEWS:1.1500 php-src/NEWS:1.1501 --- php-src/NEWS:1.1500 Wed Nov 19 16:10:33 2003 +++ php-src/NEWS Sun Nov 23 20:17:26 2003 @@ -5,6 +5,8 @@ . dba_key_split() to split inifile keys in an array. (Marcus) . time_nanosleep() signal safe sleep (Magnus, Ilia) . headers_list(). (Sara) + . php_strip_whitespace(). strip whitespace & comments from a script. (Ilia) + . php_check_syntax(). check php script for parse errors. (Ilia) - Fixed bug #26072 (--disable-libxml does not work). (Jani) - Fixed bug #26083 (Non-working write support in ext/dom). (Ilia) - Fixed bug #24394 (Serializing cross-referenced objects causes segfault). Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.642 php-src/ext/standard/basic_functions.c:1.643 --- php-src/ext/standard/basic_functions.c:1.642 Wed Nov 19 16:10:29 2003 +++ php-src/ext/standard/basic_functions.c Sun Nov 23 20:17:27 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.642 2003/11/19 21:10:29 pollita Exp $ */ +/* $Id: basic_functions.c,v 1.643 2003/11/24 01:17:27 iliaa Exp $ */ #include "php.h" #include "php_streams.h" @@ -35,6 +35,12 @@ #include "ext/standard/dns.h" #include "ext/standard/php_uuencode.h" +typedef struct yy_buffer_state *YY_BUFFER_STATE; + +#include "zend.h" +#include "zend_language_scanner.h" +#include "zend_language_parser.h" + #include <stdarg.h> #include <stdlib.h> #include <math.h> @@ -606,6 +612,8 @@ PHP_FE(highlight_file, NULL) PHP_FALIAS(show_source, highlight_file, NULL) PHP_FE(highlight_string, NULL) + PHP_FE(php_strip_whitespace, NULL) + PHP_FE(php_check_syntax, NULL) PHP_FE(ini_get, NULL) PHP_FE(ini_get_all, NULL) @@ -2306,6 +2314,85 @@ } /* }}} */ +/* {{{ proto string php_strip_whitespace(string file_name) + Return source with stripped comments and whitespace */ +PHP_FUNCTION(php_strip_whitespace) +{ + char *filename; + int filename_len; + zend_lex_state original_lex_state; + zend_file_handle file_handle = {0}; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) { + RETURN_FALSE; + } + + php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); + + file_handle.type = ZEND_HANDLE_FILENAME; + file_handle.filename = filename; + file_handle.free_filename = 0; + file_handle.opened_path = NULL; + zend_save_lexical_state(&original_lex_state TSRMLS_CC); + if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) { + RETURN_EMPTY_STRING(); + } + + zend_strip(TSRMLS_C); + + zend_destroy_file_handle(&file_handle TSRMLS_CC); + zend_restore_lexical_state(&original_lex_state TSRMLS_CC); + + php_ob_get_buffer(return_value TSRMLS_CC); + php_end_ob_buffer(0, 0 TSRMLS_CC); + + return; +} +/* }}} */ + +/* {{{ proto bool php_check_syntax(string file_name [, &$error_message]) + Check the syntax of the specified file. */ +PHP_FUNCTION(php_check_syntax) +{ + char *filename; + int filename_len; + zval *errm=NULL; + zend_file_handle file_handle = {0}; + + int old_errors = PG(display_errors); + int log_errors = PG(log_errors); + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &filename, &filename_len, &errm) == FAILURE) { + RETURN_FALSE; + } + + file_handle.type = ZEND_HANDLE_FILENAME; + file_handle.filename = filename; + file_handle.free_filename = 0; + file_handle.opened_path = NULL; + + PG(log_errors) = PG(display_errors) = 0; + + if (php_lint_script(&file_handle TSRMLS_CC) != SUCCESS) { + if (errm && PZVAL_IS_REF(errm)) { + char *error_str; + + convert_to_string_ex(&errm); + spprintf(&error_str, 0, "%s in %s on line %d", PG(last_error_message), PG(last_error_file), PG(last_error_lineno)); + ZVAL_STRING(errm, error_str, 0); + } + RETVAL_FALSE; + } else { + RETVAL_TRUE; + } + + PG(display_errors) = old_errors; + PG(log_errors) = log_errors; + + return; +} +/* }}} */ + /* {{{ proto bool highlight_string(string string [, bool return] ) Syntax highlight a string or optionally return it */ PHP_FUNCTION(highlight_string) @@ -2314,6 +2401,7 @@ zend_syntax_highlighter_ini syntax_highlighter_ini; char *hicompiled_string_description; zend_bool i = 0; + int old_error_reporting = EG(error_reporting); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &expr, &i) == FAILURE) { RETURN_FALSE; @@ -2324,6 +2412,8 @@ php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC); } + EG(error_reporting) = E_ERROR; + php_get_highlight_struct(&syntax_highlighter_ini); hicompiled_string_description = zend_make_compiled_string_description("highlighted code" TSRMLS_CC); @@ -2334,6 +2424,8 @@ } efree(hicompiled_string_description); + EG(error_reporting) = old_error_reporting; + if (i) { php_ob_get_buffer (return_value TSRMLS_CC); php_end_ob_buffer (0, 0 TSRMLS_CC); Index: php-src/ext/standard/basic_functions.h diff -u php-src/ext/standard/basic_functions.h:1.128 php-src/ext/standard/basic_functions.h:1.129 --- php-src/ext/standard/basic_functions.h:1.128 Fri Nov 14 17:55:54 2003 +++ php-src/ext/standard/basic_functions.h Sun Nov 23 20:17:27 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.h,v 1.128 2003/11/14 22:55:54 iliaa Exp $ */ +/* $Id: basic_functions.h,v 1.129 2003/11/24 01:17:27 iliaa Exp $ */ #ifndef BASIC_FUNCTIONS_H #define BASIC_FUNCTIONS_H @@ -81,6 +81,8 @@ PHP_FUNCTION(register_shutdown_function); PHP_FUNCTION(highlight_file); PHP_FUNCTION(highlight_string); +PHP_FUNCTION(php_strip_whitespace); +PHP_FUNCTION(php_check_syntax); ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini); PHP_FUNCTION(ini_get);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php