Attached is a patch to change the behavior of source highlighting
functions to use <span style="color"> instead of <font color="color">.
This patch also introduces \n and \t when the parser encounters one
(this change is mainly for readability).
The reasoning is: the <font> tag is depreciated1, and \n and \t should
be preserved, and not just translated into <br /> and 's
(respectively).
Please CC me on replies.
Regards,
-Lisa
<Vix ulla tam iniqua pax, quin bello vel aequissimo sit potior
Hi,
At the very least, the portion that adds in \n to <br > is necessary to
fix a bug in Internet Explorer experienced by PEAR documentation users.
The source code examples in the manual at pear.php.net are highlighted
with highlight_string(), and the lack of \n causes the rendered page
examples (not HTML source - viewable graphical text) to cut-and-paste as
a single line, something very annoying to deal with.
Regards,
Greg
Lisa Seelye wrote:
Attached is a patch to change the behavior of source highlighting
functions to use <span style="color"> instead of <font color="color">.
This patch also introduces \n and \t when the parser encounters one
(this change is mainly for readability).The reasoning is: the <font> tag is depreciated1, and \n and \t should
be preserved, and not just translated into <br /> and 's
(respectively).Please CC me on replies.
--- cvs/ZendEngine2/zend_highlight.c 2003-08-11 01:24:41.000000000 -0400
+++ cvs-diff/ZendEngine2/zend_highlight.c 2003-10-28 14:05:59.000000000 -0500
@@ -30,7 +30,7 @@
{
switch (c) {
case '\n':
ZEND_PUTS("<br />");
ZEND_PUTS("<br />\n"); break; case '<': ZEND_PUTS("<");@@ -45,7 +45,7 @@
ZEND_PUTS(" ");
break;
case '\t':
ZEND_PUTS(" ");
ZEND_PUTS(" \t"); break; default: ZEND_PUTC(c);@@ -104,8 +104,8 @@
char *next_color;
int in_string=0;
- zend_printf("<code>");
- zend_printf("<font color="%s">\n", last_color);
zend_printf("<code>\n");
zend_printf("<span style="color: %s";>\n", last_color);
/* highlight stuff coming back from zendlex() */
token.type = 0;
while ((token_type=lex_scan(&token TSRMLS_CC))) {
@@ -151,11 +151,11 @@if (last_color != next_color) { if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("</font>");
zend_printf("</span>"); } last_color = next_color; if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("<font color=\"%s\">", last_color);
zend_printf("<span style=\"color: %s\">", last_color); } } switch (token_type) {@@ -192,10 +192,10 @@
token.type = 0;
}
if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("</font>\n");
}zend_printf("</span>\n");
- zend_printf("</font>\n");
- zend_printf("</code>");
- zend_printf("</span>\n");
- zend_printf("</code>\n");
}@@ -264,4 +264,3 @@
- indent-tabs-mode: t
- End:
*/
- Thus wrote Lisa Seelye (lisa@gentoo.org):
Attached is a patch to change the behavior of source highlighting
functions to use <span style="color"> instead of <font color="color">.
This patch also introduces \n and \t when the parser encounters one
(this change is mainly for readability).
Slight problem with:
zend_printf("<span style="color: %s;">\n", last_color);
Although it is a much more elegant solution. Some people consider
inline style attributes bad.
Curt
"I used to think I was indecisive, but now I'm not so sure."
Lisa,
With my testing, <br />\n causes a double line break in Netscape Mail
and Internet Explorer 6 on windows. However, using \n inside <pre>
instead of <br /> works in both browsers. For my test, I took the page
at http://pear.php.net/manual/en/core.pear.pear.seterrorhandling.php and
replaced the <br /> with \n. I've uploaded a copy to:
http://www.chiaraquartet.net/test_br.html
I would appreciate it if people with older versions of Netscape/IE, any
version of Mozilla, Opera, Konqueror, etc. would take a look and speak
up if the example doesn't work correctly.
Regards,
Greg
Lisa Seelye wrote:
Attached is a patch to change the behavior of source highlighting
functions to use <span style="color"> instead of <font color="color">.
This patch also introduces \n and \t when the parser encounters one
(this change is mainly for readability).The reasoning is: the <font> tag is depreciated1, and \n and \t should
be preserved, and not just translated into <br /> and 's
(respectively).Please CC me on replies.
--- cvs/ZendEngine2/zend_highlight.c 2003-08-11 01:24:41.000000000 -0400
+++ cvs-diff/ZendEngine2/zend_highlight.c 2003-10-28 14:05:59.000000000 -0500
@@ -30,7 +30,7 @@
{
switch (c) {
case '\n':
ZEND_PUTS("<br />");
ZEND_PUTS("<br />\n"); break; case '<': ZEND_PUTS("<");@@ -45,7 +45,7 @@
ZEND_PUTS(" ");
break;
case '\t':
ZEND_PUTS(" ");
ZEND_PUTS(" \t"); break; default: ZEND_PUTC(c);@@ -104,8 +104,8 @@
char *next_color;
int in_string=0;
- zend_printf("<code>");
- zend_printf("<font color="%s">\n", last_color);
zend_printf("<code>\n");
zend_printf("<span style="color: %s";>\n", last_color);
/* highlight stuff coming back from zendlex() */
token.type = 0;
while ((token_type=lex_scan(&token TSRMLS_CC))) {
@@ -151,11 +151,11 @@if (last_color != next_color) { if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("</font>");
zend_printf("</span>"); } last_color = next_color; if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("<font color=\"%s\">", last_color);
zend_printf("<span style=\"color: %s\">", last_color); } } switch (token_type) {@@ -192,10 +192,10 @@
token.type = 0;
}
if (last_color != syntax_highlighter_ini->highlight_html) {
zend_printf("</font>\n");
}zend_printf("</span>\n");
- zend_printf("</font>\n");
- zend_printf("</code>");
- zend_printf("</span>\n");
- zend_printf("</code>\n");
}@@ -264,4 +264,3 @@
- indent-tabs-mode: t
- End:
*/
Lisa,
With my testing, <br />\n causes a double line break in Netscape Mail
and Internet Explorer 6 on windows. However, using \n inside <pre>
instead of <br /> works in both browsers. For my test, I took the page
at http://pear.php.net/manual/en/core.pear.pear.seterrorhandling.php andreplaced the <br /> with \n. I've uploaded a copy to:
http://www.chiaraquartet.net/test_br.html
I would appreciate it if people with older versions of Netscape/IE, any
version of Mozilla, Opera, Konqueror, etc. would take a look and speak
up if the example doesn't work correctly.
The purpose of the \n (and \t) was to break up the outputted html
source. During my browser testing, Opera 7.21, Netscape 4.76, Mozilla
1.5, and IE 6 all behaved normally: Within the pre-formatted <code>
blocks, all of the test browsers did not display any problems. That is
to say, the existing <br /> put page breaks, and the new \n introduced a
carriage return in the html source.
I would dare say the behavior of Netscape Mail (double line break) is
exclusive to it. I could not reproduce any double line break in IE 6
(with the requisite service packs and security patches).
With regards to your test page, it looks fine (rendered and source) with
Opera 7.21.
--
Regards,
-Lisa
<Vix ulla tam iniqua pax, quin bello vel aequissimo sit potior