mattwil Tue May 5 01:35:13 2009 UTC
Modified files:
/ZendEngine2zend_highlight.c zend_language_scanner.l
/php-src/ext/standard/tests/strings highlight_file.phpt
Log:
Implemented manual scanning for strings/comments, plus misc. fixes
For details, see http://news.php.net/php.internals/43808
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_highlight.c?r1=1.65&r2=1.66&diff_format=u
Index: ZendEngine2/zend_highlight.c
diff -u ZendEngine2/zend_highlight.c:1.65 ZendEngine2/zend_highlight.c:1.66
--- ZendEngine2/zend_highlight.c:1.65 Wed Dec 31 11:12:29 2008
+++ ZendEngine2/zend_highlight.cTue May 5 01:35:13 2009
@@ -17,7 +17,7 @@
+--+
*/
-/* $Id: zend_highlight.c,v 1.65 2008/12/31 11:12:29 sebastian Exp $ */
+/* $Id: zend_highlight.c,v 1.66 2009/05/05 01:35:13 mattwil Exp $ */
#include "zend.h"
#include
@@ -127,14 +127,8 @@
zend_printf("",
last_color);
}
}
- switch (token_type) {
- case T_END_HEREDOC:
- zend_html_puts(Z_STRVAL(token), Z_STRLEN(token)
TSRMLS_CC);
- break;
- default:
- zend_html_puts(LANG_SCNG(yy_text),
LANG_SCNG(yy_leng) TSRMLS_CC);
- break;
- }
+
+ zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)
TSRMLS_CC);
if (Z_TYPE(token) == IS_STRING ||
Z_TYPE(token) == IS_UNICODE) {
@@ -156,19 +150,6 @@
Z_TYPE(token) = 0;
}
- /* handler for trailing comments, see bug #42767 */
- if (LANG_SCNG(yy_leng) && LANG_SCNG(yy_text) < LANG_SCNG(yy_limit)) {
- if (last_color != syntax_highlighter_ini->highlight_comment) {
- if (last_color !=
syntax_highlighter_ini->highlight_html) {
- zend_printf("");
- }
- if (syntax_highlighter_ini->highlight_comment !=
syntax_highlighter_ini->highlight_html) {
- zend_printf("",
syntax_highlighter_ini->highlight_comment);
- }
- }
- zend_html_puts(LANG_SCNG(yy_text), (LANG_SCNG(yy_limit) -
LANG_SCNG(yy_text)) TSRMLS_CC);
- }
-
if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("\n");
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.l?r1=1.205&r2=1.206&diff_format=u
Index: ZendEngine2/zend_language_scanner.l
diff -u ZendEngine2/zend_language_scanner.l:1.205
ZendEngine2/zend_language_scanner.l:1.206
--- ZendEngine2/zend_language_scanner.l:1.205 Thu Mar 26 20:01:38 2009
+++ ZendEngine2/zend_language_scanner.l Tue May 5 01:35:13 2009
@@ -21,7 +21,7 @@
+--+
*/
-/* $Id: zend_language_scanner.l,v 1.205 2009/03/26 20:01:38 felipe Exp $ */
+/* $Id: zend_language_scanner.l,v 1.206 2009/05/05 01:35:13 mattwil Exp $ */
#if 0
# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
@@ -115,13 +115,19 @@
} \
}
+/* To save initial string length after scanning to first variable,
CG(doc_comment_len) can be reused */
+#define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) CG(doc_comment_len) = (len)
+#define GET_DOUBLE_QUOTES_SCANNED_LENGTH()CG(doc_comment_len)
+
+#define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <=
'Z') || (c) == '_' || (c) >= 0x7F)
+
#define ZEND_IS_OCT(c) ((c)>='0' && (c)<='7')
#define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') ||
((c)>='A' && (c)<='F'))
BEGIN_EXTERN_C()
static void _yy_push_state(int new_state TSRMLS_DC)
- {
+{
zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(),
sizeof(int));
YYSETCONDITION(new_state);
}
@@ -1324,63 +1330,8 @@
WHITESPACE [ \n\r\t]+
TABS_AND_SPACES [ \t]*
TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?...@]
-ANY_CHAR [^\x00]
+ANY_CHAR [^]
NEWLINE ("\r"|"\n"|"\r\n")
-NULL [\x00]{1}
-
-/*
- * LITERAL_DOLLAR matches unescaped $ that aren't followed by a label character
- * or a { and therefore will be taken literally. The case of literal $ before
- * a variable or "${" is handled in a rule for each string type
- */
-DOUBLE_QUOTES_LITERAL_DOLLAR ("$"+([^a-zA-Z_\x7f-\xff$"\\{]|("\\"{ANY_CHAR})))
-BACKQUOTE_LITERAL_DOLLAR ("$"+([^a-zA-Z_\x7f-\xff$`\\{]|("\\"{ANY_CHAR})))
-HEREDOC_LITERAL_DOLLAR ("$"+([^a-zA-Z_\x7f-\xff$\n\r\\{]|("\\"[^\n\r])))
-
-/*
- * Usually, HEREDOC_NEWLINE will just function like a simple NEWLINE, but some
- * special cases need to be handled. HEREDOC_CHARS doesn't allow a line to
- * match when { or $, and/or \ is at the end. (("{"*|"$"*)"\\"?) handles that,
- * along with cases where { or $, a