Patch strip-comments-whitespace for CGI/CLI related Bug #53622
Patch version 2011-01-04 15:01 UTC
Return to Bug #53622 |
Download this patch
Patch Revisions:
Developer: aharvey@php.net
Index: Zend/zend_highlight.c
===================================================================
--- Zend/zend_highlight.c (revision 307076)
+++ Zend/zend_highlight.c (working copy)
@@ -166,7 +166,7 @@
zend_printf("</code>");
}
-ZEND_API void zend_strip(TSRMLS_D)
+ZEND_API void zend_strip(zend_bool comments, zend_bool whitespace TSRMLS_DC)
{
zval token;
int token_type;
@@ -176,15 +176,30 @@
while ((token_type=lex_scan(&token TSRMLS_CC))) {
switch (token_type) {
case T_WHITESPACE:
- if (!prev_space) {
- zend_write(" ", sizeof(" ") - 1);
- prev_space = 1;
+ if (whitespace) {
+ if (!prev_space) {
+ zend_write(" ", sizeof(" ") - 1);
+ prev_space = 1;
+ }
+
+ token.type = 0;
+ continue;
}
- /* lack of break; is intentional */
+ else {
+ zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
+ break;
+ }
+
case T_COMMENT:
case T_DOC_COMMENT:
- token.type = 0;
- continue;
+ if (comments) {
+ token.type = 0;
+ continue;
+ }
+ else {
+ zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
+ break;
+ }
case T_END_HEREDOC:
zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
Index: Zend/zend_highlight.h
===================================================================
--- Zend/zend_highlight.h (revision 307076)
+++ Zend/zend_highlight.h (working copy)
@@ -40,7 +40,7 @@
BEGIN_EXTERN_C()
ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC);
-ZEND_API void zend_strip(TSRMLS_D);
+ZEND_API void zend_strip(zend_bool comments, zend_bool whitespace TSRMLS_DC);
ZEND_API int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC);
ZEND_API int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC);
ZEND_API void zend_html_putc(char c);
Index: sapi/cgi/cgi_main.c
===================================================================
--- sapi/cgi/cgi_main.c (revision 307076)
+++ sapi/cgi/cgi_main.c (working copy)
@@ -2435,7 +2435,7 @@
break;
case PHP_MODE_STRIP:
if (open_file_for_scanning(&file_handle TSRMLS_CC) == SUCCESS) {
- zend_strip(TSRMLS_C);
+ zend_strip(1, 1 TSRMLS_CC);
zend_file_handle_dtor(&file_handle TSRMLS_CC);
php_output_teardown();
}
Index: sapi/cli/php_cli.c
===================================================================
--- sapi/cli/php_cli.c (revision 307076)
+++ sapi/cli/php_cli.c (working copy)
@@ -120,6 +120,8 @@
#define PHP_MODE_REFLECTION_EXT_INFO 11
#define PHP_MODE_REFLECTION_ZEND_EXTENSION 12
#define PHP_MODE_SHOW_INI_CONFIG 13
+#define PHP_MODE_STRIP_COMMENTS 14
+#define PHP_MODE_STRIP_WHITESPACE 15
const char HARDCODED_INI[] =
"html_errors=0\n"
@@ -174,6 +176,8 @@
{14, 1, "ri"},
{14, 1, "rextinfo"},
{15, 0, "ini"},
+ {16, 0, "strip-comments"},
+ {17, 0, "strip-whitespace"},
{'-', 0, NULL} /* end of args */
};
@@ -551,6 +555,10 @@
#endif
" --ri <name> Show configuration for extension <name>.\n"
"\n"
+ " --strip-comments\n"
+ " Output source with stripped comments.\n"
+ " --strip-whitespace\n"
+ " Output source with stripped whitespace.\n"
, prog, prog, prog, prog, prog, prog);
}
/* }}} */
@@ -1057,6 +1065,12 @@
case 15:
behavior = PHP_MODE_SHOW_INI_CONFIG;
break;
+ case 16:
+ behavior = (behavior == PHP_MODE_STRIP_WHITESPACE) ? PHP_MODE_STRIP : PHP_MODE_STRIP_COMMENTS;
+ break;
+ case 17:
+ behavior = (behavior == PHP_MODE_STRIP_COMMENTS) ? PHP_MODE_STRIP : PHP_MODE_STRIP_WHITESPACE;
+ break;
default:
break;
}
@@ -1264,10 +1278,22 @@
break;
case PHP_MODE_STRIP:
if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
- zend_strip(TSRMLS_C);
+ zend_strip(1, 1 TSRMLS_CC);
}
goto out;
break;
+ case PHP_MODE_STRIP_COMMENTS:
+ if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
+ zend_strip(1, 0 TSRMLS_CC);
+ }
+ goto out;
+ break;
+ case PHP_MODE_STRIP_WHITESPACE:
+ if (open_file_for_scanning(&file_handle TSRMLS_CC)==SUCCESS) {
+ zend_strip(0, 1 TSRMLS_CC);
+ }
+ goto out;
+ break;
case PHP_MODE_HIGHLIGHT:
{
zend_syntax_highlighter_ini syntax_highlighter_ini;
Index: ext/standard/basic_functions.c
===================================================================
--- ext/standard/basic_functions.c (revision 307076)
+++ ext/standard/basic_functions.c (working copy)
@@ -742,8 +742,10 @@
ZEND_ARG_INFO(0, return)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO(arginfo_php_strip_whitespace, 0)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_php_strip_whitespace, 0, 0, 1)
ZEND_ARG_INFO(0, file_name)
+ ZEND_ARG_INFO(0, strip_comments)
+ ZEND_ARG_INFO(0, strip_whitespace)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_highlight_string, 0, 0, 1)
@@ -5099,16 +5101,17 @@
}
/* }}} */
-/* {{{ proto string php_strip_whitespace(string file_name)
+/* {{{ proto string php_strip_whitespace(string file_name [, bool strip_comments [, bool strip_whitespace]] )
Return source with stripped comments and whitespace */
PHP_FUNCTION(php_strip_whitespace)
{
char *filename;
int filename_len;
+ zend_bool strip_comments = 1, strip_whitespace = 1;
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) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|bb", &filename, &filename_len, &strip_comments, &strip_whitespace) == FAILURE) {
RETURN_FALSE;
}
@@ -5125,7 +5128,7 @@
RETURN_EMPTY_STRING();
}
- zend_strip(TSRMLS_C);
+ zend_strip(strip_comments, strip_whitespace TSRMLS_CC);
zend_destroy_file_handle(&file_handle TSRMLS_CC);
zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
|