On Sun, 13 Mar 2005 02:31:42 +0100, David ZÃlke <[EMAIL PROTECTED]> wrote: > No... that won't make it possible to jump directly to line numbers. It has > to be <a id="..."> I don't think that's true. I may be wrong, as I didn't consult any standards or recommendations, but I did create a test that worked successfully in Mozilla using <li id="test">.
> Bear in mind that ids mustn't start with a number: > http://www.w3.org/TR/html4/types.html#type-name > > David > > > -----Original Message----- > > From: Gordon P. Hemsley [mailto:[EMAIL PROTECTED] > > Sent: Sunday, March 13, 2005 1:23 AM > > To: Jeffery Fernandez; Johannes Schlueter; internals@lists.php.net; > > [EMAIL PROTECTED] > > Subject: Re: [PHP-DEV] [patch] highlight_[file|string] and line numbers > > > > Instead of using <a id="[line]" /> (which I'm not sure is even valid), > > you can simply just embed the id into the <li> tag: <li id="[line]">. > > > > And that's just _my_ 2 cents. > > > > > > On Sun, 13 Mar 2005 10:47:19 +1100, Jeffery Fernandez > > <[EMAIL PROTECTED]> wrote: > > > Johannes Schlueter wrote: > > > > > > >Hi, > > > > > > > >some days (or even weeks?) ago Lukas asked on IRC wether there is a way > > to get > > > >PHP code highlighted with linenumbers. The first reaction of most > > people > > > >(including me) was "no" since you can't copy&paste the code but after > > > >thinking I found out that <ol> works really fine. So I've implemented > > it that > > > >way and added an optional bool parameter to the highlight functions. > > > >Additionally I've added two other parameters to these functions: The > > first > > > >one is a bool that adds jump targets (<a id="[line]"/>), second one is > > a > > > >prefix to this number (<a id="[prefix][line]"/>) which is needed to > > make sure > > > >the jump target is unique even if more than one snippet is added to the > > > >output. > > > > > > > >This doesn't work with .phps yet since we would a new php.ini setting > > which I > > > >didn't want to add or numbered output would need to become default. > > > > > > > >My patch is attached and, if it doesn't come through, available on > > > >http://www.schlueters.de/zend_highlight_20050312_1.diff a sample output > > is at > > > >http://www.schlueters.de/highlight_pma.html > > > > > > > >johannes > > > > > > > > > > > > > > > > > > > That looks very good but there seems to be serious html issues when I > > > validated that page... Total 1789 erros when I validated that page at > > > w3c. If you can fix that it would be awesome. > > > > > > my 2c > > > > > > >----------------------------------------------------------------------- > > - > > > > > > > >Index: Zend/zend_highlight.h > > > >=================================================================== > > > >RCS file: /repository/ZendEngine2/zend_highlight.h,v > > > >retrieving revision 1.24 > > > >diff -u -r1.24 zend_highlight.h > > > >--- Zend/zend_highlight.h 8 Jan 2004 17:31:47 -0000 1.24 > > > >+++ Zend/zend_highlight.h 12 Mar 2005 14:40:12 -0000 > > > >@@ -41,11 +41,16 @@ > > > > > > > > BEGIN_EXTERN_C() > > > > ZEND_API void zend_highlight(zend_syntax_highlighter_ini > > *syntax_highlighter_ini TSRMLS_DC); > > > >+ZEND_API void zend_highlight_numbered(zend_syntax_highlighter_ini > > *syntax_highlighter_ini, zend_bool mark_lines, char *line_prefix > > TSRMLS_DC); > > > > ZEND_API void zend_strip(TSRMLS_D); > > > > ZEND_API int highlight_file(char *filename, > > zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC); > > > >+ZEND_API int highlight_file_ex(char *filename, > > zend_syntax_highlighter_ini *syntax_highlighter_ini, zend_bool numbered, > > zend_bool mark_lines, char *line_prefix TSRMLS_DC); > > > > ZEND_API int highlight_string(zval *str, zend_syntax_highlighter_ini > > *syntax_highlighter_ini, char *str_name TSRMLS_DC); > > > >+ZEND_API int highlight_string_ex(zval *str, > > zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name, > > zend_bool numbered, zend_bool mark_lines, char *line_prefix TSRMLS_DC); > > > > ZEND_API void zend_html_putc(char c); > > > >+ZEND_API void zend_html_putc_ex(char c, char *last_color, int *line, > > char *line_prefix); > > > > ZEND_API void zend_html_puts(const char *s, uint len TSRMLS_DC); > > > >+ZEND_API void zend_html_puts_ex(const char *s, uint len, char > > *last_color, int *line, char *line_prefix TSRMLS_DC); > > > > END_EXTERN_C() > > > > > > > > extern zend_syntax_highlighter_ini syntax_highlighter_ini; > > > >Index: Zend/zend_highlight.c > > > >=================================================================== > > > >RCS file: /repository/ZendEngine2/zend_highlight.c,v > > > >retrieving revision 1.47 > > > >diff -u -r1.47 zend_highlight.c > > > >--- Zend/zend_highlight.c 2 Jan 2005 23:53:43 -0000 1.47 > > > >+++ Zend/zend_highlight.c 12 Mar 2005 14:40:12 -0000 > > > >@@ -53,9 +53,35 @@ > > > > } > > > > } > > > > > > > >+ZEND_API void zend_html_putc_ex(char c, char *last_color, int *line, > > char *line_prefix) > > > >+{ > > > >+ if (c == '\n') { > > > >+ /* the is needed to work around > > https://bugzilla.mozilla.org/show_bug.cgi?id=194831 */ > > > >+ zend_printf(" </span></code></li>\n<li>"); > > > >+ if (last_color != NULL) { > > > >+ if (line && *line) { > > > >+ if (line_prefix) { > > > >+ zend_printf("<a id=\"%s%d\"/>", > > line_prefix, ++*line); > > > >+ } else { > > > >+ zend_printf("<a id=\"%d\"/>", > > ++*line); > > > >+ } > > > >+ } > > > >+ zend_printf("<code><span style=\"color: %s\">", > > last_color); > > > >+ } else { > > > >+ zend_printf("<code><span>"); > > > >+ } > > > >+ } else { > > > >+ zend_html_putc(c); > > > >+ } > > > >+} > > > > > > > > ZEND_API void zend_html_puts(const char *s, uint len TSRMLS_DC) > > > > { > > > >+ zend_html_puts_ex(s, len, NULL, NULL, NULL TSRMLS_CC); > > > >+} > > > >+ > > > >+ZEND_API void zend_html_puts_ex(const char *s, uint len, char > > *last_color, int *line, char *line_prefix TSRMLS_DC) > > > >+{ > > > > const char *ptr=s, *end=s+len; > > > > > > > > #ifdef ZEND_MULTIBYTE > > > >@@ -83,7 +109,11 @@ > > > > ptr++; > > > > } > > > > } else { > > > >- zend_html_putc(*ptr++); > > > >+ if (last_color == NULL) { > > > >+ zend_html_putc(*ptr++); > > > >+ } else { > > > >+ zend_html_putc_ex(*ptr++, last_color, > > line, line_prefix); > > > >+ } > > > > } > > > > } > > > > > > > >@@ -196,6 +226,108 @@ > > > > } > > > > > > > > > > > >+ZEND_API void zend_highlight_numbered(zend_syntax_highlighter_ini > > *syntax_highlighter_ini, zend_bool mark_lines, char *line_prefix > > TSRMLS_DC) > > > >+{ > > > >+ zval token; > > > >+ int token_type; > > > >+ char *last_color = syntax_highlighter_ini->highlight_html; > > > >+ char *next_color; > > > >+ int in_string=0, post_heredoc = 0; > > > >+ int line = 0; > > > >+ > > > >+ if (mark_lines) { > > > >+ line = 1; > > > >+ if (line_prefix) { > > > >+ zend_printf("<ol><li><a id=\"%s%d\"/><code><span > > style=\"color: %s\">", line_prefix, line, last_color); > > > >+ } else { > > > >+ zend_printf("<ol><li><a id=\"%d\"/><code><span > > style=\"color: %s\">", line, last_color); > > > >+ } > > > >+ } else { > > > >+ zend_printf("<ol><li><code><span style=\"color: %s\">", > > last_color); > > > >+ } > > > >+ /* highlight stuff coming back from zendlex() */ > > > >+ token.type = 0; > > > >+ while ((token_type=lex_scan(&token TSRMLS_CC))) { > > > >+ switch (token_type) { > > > >+ case T_INLINE_HTML: > > > >+ next_color = syntax_highlighter_ini- > > >highlight_html; > > > >+ break; > > > >+ case T_COMMENT: > > > >+ case T_DOC_COMMENT: > > > >+ next_color = syntax_highlighter_ini- > > >highlight_comment; > > > >+ break; > > > >+ case T_OPEN_TAG: > > > >+ case T_OPEN_TAG_WITH_ECHO: > > > >+ next_color = syntax_highlighter_ini- > > >highlight_default; > > > >+ break; > > > >+ case T_CLOSE_TAG: > > > >+ next_color = syntax_highlighter_ini- > > >highlight_default; > > > >+ break; > > > >+ case T_CONSTANT_ENCAPSED_STRING: > > > >+ next_color = syntax_highlighter_ini- > > >highlight_string; > > > >+ break; > > > >+ case '"': > > > >+ next_color = syntax_highlighter_ini- > > >highlight_string; > > > >+ in_string = !in_string; > > > >+ break; > > > >+ case T_WHITESPACE: > > > >+ zend_html_puts_ex(LANG_SCNG(yy_text), > > LANG_SCNG(yy_leng), last_color, &line, line_prefix TSRMLS_CC); /* no > > color needed */ > > > >+ token.type = 0; > > > >+ continue; > > > >+ break; > > > >+ default: > > > >+ if (in_string) { > > > >+ next_color = > > syntax_highlighter_ini->highlight_string; > > > >+ } else if (token.type == 0) { > > > >+ next_color = > > syntax_highlighter_ini->highlight_keyword; > > > >+ } else { > > > >+ next_color = > > syntax_highlighter_ini->highlight_default; > > > >+ } > > > >+ break; > > > >+ } > > > >+ > > > >+ if (last_color != next_color) { > > > >+ last_color = next_color; > > > >+ zend_printf("</span><span style=\"color: %s\">", > > last_color); > > > >+ > > > >+ } > > > >+ switch (token_type) { > > > >+ case T_END_HEREDOC: > > > >+ zend_html_puts_ex(token.value.str.val, > > token.value.str.len, last_color, &line, line_prefix TSRMLS_CC); > > > >+ post_heredoc = 1; > > > >+ break; > > > >+ default: > > > >+ zend_html_puts_ex(LANG_SCNG(yy_text), > > LANG_SCNG(yy_leng), last_color, &line, line_prefix TSRMLS_CC); > > > >+ if (post_heredoc) { > > > >+ zend_html_putc_ex('\n', > > last_color, &line, line_prefix); > > > >+ post_heredoc = 0; > > > >+ } > > > >+ break; > > > >+ } > > > >+ > > > >+ if (token.type == IS_STRING) { > > > >+ switch (token_type) { > > > >+ case T_OPEN_TAG: > > > >+ case T_OPEN_TAG_WITH_ECHO: > > > >+ case T_CLOSE_TAG: > > > >+ case T_WHITESPACE: > > > >+ case T_COMMENT: > > > >+ case T_DOC_COMMENT: > > > >+ break; > > > >+ default: > > > >+ efree(token.value.str.val); > > > >+ break; > > > >+ } > > > >+ } else if (token_type == T_END_HEREDOC) { > > > >+ efree(token.value.str.val); > > > >+ } > > > >+ token.type = 0; > > > >+ } > > > >+ zend_printf("</span>"); > > > >+ zend_printf("</code></li></ol>"); > > > >+} > > > >+ > > > >+ > > > > > > > > ZEND_API void zend_strip(TSRMLS_D) > > > > { > > > >Index: Zend/zend_language_scanner.l > > > >=================================================================== > > > >RCS file: /repository/ZendEngine2/zend_language_scanner.l,v > > > >retrieving revision 1.124 > > > >diff -u -r1.124 zend_language_scanner.l > > > >--- Zend/zend_language_scanner.l 7 Mar 2005 16:48:49 -0000 > > 1.124 > > > >+++ Zend/zend_language_scanner.l 12 Mar 2005 14:40:13 -0000 > > > >@@ -557,11 +557,11 @@ > > > > > > > > > > > > BEGIN_EXTERN_C() > > > >-int highlight_file(char *filename, zend_syntax_highlighter_ini > > *syntax_highlighter_ini TSRMLS_DC) > > > >+int highlight_file_ex(char *filename, zend_syntax_highlighter_ini > > *syntax_highlighter_ini, zend_bool numbered, zend_bool mark_lines, char > > *line_prefix TSRMLS_DC) > > > > { > > > > zend_lex_state original_lex_state; > > > > zend_file_handle file_handle; > > > >- > > > >+ > > > > file_handle.type = ZEND_HANDLE_FILENAME; > > > > file_handle.filename = filename; > > > > file_handle.free_filename = 0; > > > >@@ -571,7 +571,11 @@ > > > > zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, > > filename); > > > > return FAILURE; > > > > } > > > >- zend_highlight(syntax_highlighter_ini TSRMLS_CC); > > > >+ if (numbered) { > > > >+ zend_highlight_numbered(syntax_highlighter_ini, mark_lines, > > line_prefix TSRMLS_CC); > > > >+ } else { > > > >+ zend_highlight(syntax_highlighter_ini TSRMLS_CC); > > > >+ } > > > > #ifdef ZEND_MULTIBYTE > > > > if (SCNG(script_org)) { > > > > efree(SCNG(script_org)); > > > >@@ -587,7 +591,12 @@ > > > > return SUCCESS; > > > > } > > > > > > > >-int highlight_string(zval *str, zend_syntax_highlighter_ini > > *syntax_highlighter_ini, char *str_name TSRMLS_DC) > > > >+int highlight_file(char *filename, zend_syntax_highlighter_ini > > *syntax_highlighter_ini TSRMLS_DC) > > > >+{ > > > >+ return highlight_file_ex(filename, syntax_highlighter_ini, 0, 0, > > NULL TSRMLS_CC); > > > >+} > > > >+ > > > >+int highlight_string_ex(zval *str, zend_syntax_highlighter_ini > > *syntax_highlighter_ini, char *str_name, zend_bool numbered, zend_bool > > mark_lines, char *line_prefix TSRMLS_DC) > > > > { > > > > zend_lex_state original_lex_state; > > > > zval tmp = *str; > > > >@@ -598,7 +607,11 @@ > > > > if (zend_prepare_string_for_scanning(str, str_name > > TSRMLS_CC)==FAILURE) { > > > > return FAILURE; > > > > } > > > >- zend_highlight(syntax_highlighter_ini TSRMLS_CC); > > > >+ if (numbered) { > > > >+ zend_highlight_numbered(syntax_highlighter_ini, mark_lines, > > line_prefix TSRMLS_CC); > > > >+ } else { > > > >+ zend_highlight(syntax_highlighter_ini TSRMLS_CC); > > > >+ } > > > > #ifdef ZEND_MULTIBYTE > > > > if (SCNG(script_org)) { > > > > efree(SCNG(script_org)); > > > >@@ -613,6 +626,11 @@ > > > > zval_dtor(str); > > > > return SUCCESS; > > > > } > > > >+ > > > >+int highlight_string(zval *str, zend_syntax_highlighter_ini > > *syntax_highlighter_ini, char *str_name TSRMLS_DC) > > > >+{ > > > >+ return highlight_string_ex(str, syntax_highlighter_ini, str_name, > > 0, 0, NULL TSRMLS_CC); > > > >+} > > > > END_EXTERN_C() > > > > > > > > #ifdef ZEND_MULTIBYTE > > > >Index: ext/standard/basic_functions.c > > > >=================================================================== > > > >RCS file: /repository/php-src/ext/standard/basic_functions.c,v > > > >retrieving revision 1.705 > > > >diff -u -r1.705 basic_functions.c > > > >--- ext/standard/basic_functions.c 7 Mar 2005 19:37:26 -0000 > > 1.705 > > > >+++ ext/standard/basic_functions.c 12 Mar 2005 14:40:14 -0000 > > > >@@ -2353,15 +2353,19 @@ > > > > syntax_highlighter_ini->highlight_string = > > INI_STR("highlight.string"); > > > > } > > > > > > > >-/* {{{ proto bool highlight_file(string file_name [, bool return] ) > > > >+/* {{{ proto bool highlight_file(string file_name [, bool return [, > > bool numbered [, bool mark_lines [, string mark_prefix]]]] ) > > > > Syntax highlight a source file */ > > > > PHP_FUNCTION(highlight_file) > > > > { > > > > zval *filename; > > > > zend_syntax_highlighter_ini syntax_highlighter_ini; > > > > zend_bool i = 0; > > > >+ zend_bool numbered = 0; > > > >+ zend_bool mark_lines = 0; > > > >+ char *line_prefix = NULL; > > > >+ int line_prefix_len = 0; > > > > > > > >- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", > > &filename, &i) == FAILURE) { > > > >+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|bbbs", > > &filename, &i, &numbered, &mark_lines, &line_prefix, &line_prefix_len) == > > FAILURE) { > > > > RETURN_FALSE; > > > > } > > > > convert_to_string(filename); > > > >@@ -2380,7 +2384,7 @@ > > > > > > > > php_get_highlight_struct(&syntax_highlighter_ini); > > > > > > > >- if (highlight_file(Z_STRVAL_P(filename), &syntax_highlighter_ini > > TSRMLS_CC) == FAILURE) { > > > >+ if (highlight_file_ex(Z_STRVAL_P(filename), > > &syntax_highlighter_ini, numbered, mark_lines, line_prefix TSRMLS_CC) == > > FAILURE) { > > > > RETURN_FALSE; > > > > } > > > > > > > >@@ -2472,7 +2476,7 @@ > > > > } > > > > /* }}} */ > > > > > > > >-/* {{{ proto bool highlight_string(string string [, bool return] ) > > > >+/* {{{ proto bool highlight_string(string string [, bool return [, > > bool mark_lines [, string mark_prefix]]] ) > > > > Syntax highlight a string or optionally return it */ > > > > PHP_FUNCTION(highlight_string) > > > > { > > > >@@ -2480,9 +2484,13 @@ > > > > zend_syntax_highlighter_ini syntax_highlighter_ini; > > > > char *hicompiled_string_description; > > > > zend_bool i = 0; > > > >+ zend_bool numbered = 0; > > > >+ zend_bool mark_lines = 0; > > > >+ char *line_prefix = NULL; > > > >+ int line_prefix_len = 0; > > > > int old_error_reporting = EG(error_reporting); > > > > > > > >- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", > > &expr, &i) == FAILURE) { > > > >+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|bbbs", > > &expr, &i, &numbered, &mark_lines, &line_prefix, &line_prefix_len) == > > FAILURE) { > > > > RETURN_FALSE; > > > > } > > > > convert_to_string(expr); > > > >@@ -2497,7 +2505,7 @@ > > > > > > > > hicompiled_string_description = > > zend_make_compiled_string_description("highlighted code" TSRMLS_CC); > > > > > > > >- if (highlight_string(expr, &syntax_highlighter_ini, > > hicompiled_string_description TSRMLS_CC) == FAILURE) { > > > >+ if (highlight_string_ex(expr, &syntax_highlighter_ini, > > hicompiled_string_description, numbered, mark_lines, line_prefix > > TSRMLS_CC) == FAILURE) { > > > > efree(hicompiled_string_description); > > > > RETURN_FALSE; > > > > } > > > > > > > > > > > > > > > > > > -- > > > PHP Internals - PHP Runtime Development Mailing List > > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > > > -- > > Gordon P. Hemsley > > [EMAIL PROTECTED] > > http://www.lttp.net/ â http://cmsforme.sourceforge.net/ > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Gordon P. Hemsley [EMAIL PROTECTED] http://www.lttp.net/ â http://cmsforme.sourceforge.net/ -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php