diff -u ../../php4cvs/Zend/zend_highlight.c ./zend_highlight.c
--- ../../php4cvs/Zend/zend_highlight.c Sun Sep 15 23:56:30 2002
+++ ./zend_highlight.c Fri Sep 20 00:07:11 2002
@@ -24,6 +24,7 @@
#include "zend_highlight.h"
#include "zend_ptr_stack.h"
#include "zend_globals.h"
+#include "main/SAPI.h"
ZEND_API void zend_html_putc(char c)
{
@@ -52,7 +53,6 @@
}
}
-
ZEND_API void zend_html_puts(const char *s, uint len)
{
const char *ptr=s, *end=s+len;
@@ -76,18 +76,33 @@
}
}
-
-
ZEND_API void zend_highlight(zend_syntax_highlighter_ini
*syntax_highlighter_ini TSRMLS_DC)
{
zval token;
int token_type;
char *last_color = syntax_highlighter_ini->highlight_html;
char *next_color;
- int in_string=0;
+ int in_string = 0, lineno = 0, highlight_format = 0;
+ char *strtok_buf = NULL, *strtoken, *val;
+
+ if (SG(request_info).query_string) {
+ strtoken = strtok_r(SG(request_info).query_string, "&", &strtok_buf);
+ while (strtoken) {
+ val = strchr(strtoken, '=');
+ if (val && strncmp(strtoken, "HIGHLIGHT_FORMAT", 16) == 0 &&
strncmp(val, "=lineno", 7) == 0) {
+ highlight_format = 1;
+ } else if (val && strncmp(strtoken, "HIGHLIGHT_FORMAT", 16) ==
+0 &&
strncmp(val, "=default", 8) == 0) {
+ highlight_format = 0;
+ }
+ strtoken = strtok_r(NULL, ".", &strtok_buf);
+ }
+ }
+
+ zend_printf("<pre>");
+ if (highlight_format == HL_FORMAT_LINENO) {
+ zend_highlight_puts("\n", 1, highlight_format, &lineno, last_color);
+ }
- zend_printf("<code>");
- zend_printf("<font color=\"%s\">\n", last_color);
/* highlight stuff coming back from zendlex() */
token.type = 0;
while ((token_type=lex_scan(&token TSRMLS_CC))) {
@@ -113,7 +128,7 @@
in_string = !in_string;
break;
case T_WHITESPACE:
- zend_html_puts(LANG_SCNG(yy_text),
LANG_SCNG(yy_leng)); /* no color
needed */
+ zend_highlight_puts(LANG_SCNG(yy_text),
+LANG_SCNG(yy_leng),
highlight_format, &lineno, last_color); /* no color needed */
token.type = 0;
continue;
break;
@@ -141,10 +156,10 @@
}
switch (token_type) {
case T_END_HEREDOC:
- zend_html_puts(token.value.str.val,
token.value.str.len);
+ zend_highlight_puts(token.value.str.val,
+token.value.str.len,
highlight_format, &lineno, last_color);
break;
default:
- zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
+ zend_highlight_puts(LANG_SCNG(yy_text),
+LANG_SCNG(yy_leng),
highlight_format, &lineno, last_color);
break;
}
@@ -172,14 +187,11 @@
token.type = 0;
}
if (last_color != syntax_highlighter_ini->highlight_html) {
- zend_printf("</font>\n");
+ zend_printf("</font>");
}
- zend_printf("</font>\n");
- zend_printf("</code>");
+ zend_printf("</font>\n</pre>");
}
-
-
ZEND_API void zend_strip(TSRMLS_D)
{
zval token;
@@ -191,7 +203,7 @@
case T_COMMENT:
token.type = 0;
continue;
-
+
case T_WHITESPACE:
if (token.type) {
putchar(' ');
@@ -237,6 +249,45 @@
}
}
token.type = 0;
+ }
+}
+
+ZEND_API void zend_highlight_putc(char c, int highlight_format, int
*lineno, char *color)
+{
+ switch (c) {
+ case '\n':
+ if (highlight_format == HL_FORMAT_LINENO) {
+ ++(*lineno);
+ zend_printf("</font>\n<a name=\"%d\">% 4d</a>: <font
+color=\"%s\">",
*lineno, *lineno, color);
+ } else {
+ zend_printf("\n");
+ }
+ break;
+ case '<':
+ ZEND_PUTS("<");
+ break;
+ case '>':
+ ZEND_PUTS(">");
+ break;
+ case '&':
+ ZEND_PUTS("&");
+ break;
+ case '\t':
+ ZEND_PUTS(" ");
+ break;
+ default:
+ ZEND_PUTC(c);
+ break;
+ }
+}
+
+
+ZEND_API void zend_highlight_puts(const char *s, uint len, int
highlight_format, int *lineno, char *color)
+{
+ const char *ptr = s, *end = s + len;
+
+ while (ptr < end) {
+ zend_highlight_putc(*ptr++, highlight_format, lineno, color);
}
}
/*
diff -u ../../php4cvs/Zend/zend_highlight.h ./zend_highlight.h
--- ../../php4cvs/Zend/zend_highlight.h Sat May 11 13:35:52 2002
+++ ./zend_highlight.h Fri Sep 20 00:07:13 2002
@@ -27,7 +27,8 @@
#define HL_STRING_COLOR "#DD0000" /* red */
#define HL_BG_COLOR "#FFFFFF" /* white */
#define HL_KEYWORD_COLOR "#007700" /* green */
-
+#define HL_FORMAT_DEFAULT 0
+#define HL_FORMAT_LINENO 1
typedef struct _zend_syntax_highlighter_ini {
char *highlight_html;
@@ -45,6 +46,8 @@
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);
ZEND_API void zend_html_puts(const char *s, uint len);
+ZEND_API void zend_highlight_putc(char c, int highlight_format, int
*lineno, char *color);
+ZEND_API void zend_highlight_puts(const char *s, uint len, int
highlight_format, int *lineno, char *color);
END_EXTERN_C()
extern zend_syntax_highlighter_ini syntax_highlighter_ini;
--------------------------------------------------------------------
mail2web - Check your email from the web at
http://mail2web.com/ .
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php