From: <ora...@us...> - 2007-02-28 22:07:27
|
Revision: 943 http://geshi.svn.sourceforge.net/geshi/?rev=943&view=rev Author: oracleshinoda Date: 2007-02-28 14:07:28 -0800 (Wed, 28 Feb 2007) Log Message: ----------- Merged bugfix from stable Modified Paths: -------------- trunk/geshi-1.0.X/src/docs/CHANGES trunk/geshi-1.0.X/src/geshi.php Modified: trunk/geshi-1.0.X/src/docs/CHANGES =================================================================== --- trunk/geshi-1.0.X/src/docs/CHANGES 2007-02-28 22:05:37 UTC (rev 942) +++ trunk/geshi-1.0.X/src/docs/CHANGES 2007-02-28 22:07:28 UTC (rev 943) @@ -12,6 +12,9 @@ Please send any bug reports to ni...@ge..., or use the bug report tracker at sourceforge (http://sourceforge.net/tracker/?group_id=114997&atid=670231) +Version 1.0.7.19 + - Fixed invalid HTML being generated and doctypes not being highlighted over + multiple lines properly when line numbers are on (Validome) Version 1.0.7.18 - Added language files * ZiLOG Z80 Assembly (BenBE) Modified: trunk/geshi-1.0.X/src/geshi.php =================================================================== --- trunk/geshi-1.0.X/src/geshi.php 2007-02-28 22:05:37 UTC (rev 942) +++ trunk/geshi-1.0.X/src/geshi.php 2007-02-28 22:07:28 UTC (rev 943) @@ -1396,6 +1396,7 @@ // Whether to highlight inside a block of code $HIGHLIGHT_INSIDE_STRICT = false; $HARDQUOTE_OPEN = false; + $STRICTATTRS = ''; $stuff_to_parse = ''; $result = ''; @@ -1496,6 +1497,7 @@ $attributes = ' class="sc' . $script_key . '"'; } $result .= "<span$attributes>"; + $STRICTATTRS = $attributes; } } @@ -1777,7 +1779,11 @@ $stuff_to_parse = ''; } else { - $result .= GeSHi::hsc($part); + if ($STRICTATTRS != '') { + $part = str_replace("\n", "</span>\n<span$STRICTATTRS>", GeSHi::hsc($part)); + $STRICTATTRS = ''; + } + $result .= $part; } // Close the <span> that surrounds the block if ($this->strict_mode && $this->language_data['STYLES']['SCRIPT'][$script_key] != '' && @@ -1818,80 +1824,80 @@ * @access private */ function indent($result) { - /// Replace tabs with the correct number of spaces - if (false !== strpos($result, "\t")) { - $lines = explode("\n", $result); - foreach ($lines as $key => $line) { - if (false === strpos($line, "\t")) { - $lines[$key] = $line; - continue; - } + /// Replace tabs with the correct number of spaces + if (false !== strpos($result, "\t")) { + $lines = explode("\n", $result); + foreach ($lines as $key => $line) { + if (false === strpos($line, "\t")) { + $lines[$key] = $line; + continue; + } - $pos = 0; - $tab_width = $this->tab_width; - $length = strlen($line); - $result_line = ''; + $pos = 0; + $tab_width = $this->tab_width; + $length = strlen($line); + $result_line = ''; - $IN_TAG = false; - for ($i = 0; $i < $length; $i++) { - $char = substr($line, $i, 1); - // Simple engine to work out whether we're in a tag. - // If we are we modify $pos. This is so we ignore HTML - // in the line and only workout the tab replacement - // via the actual content of the string - // This test could be improved to include strings in the - // html so that < or > would be allowed in user's styles - // (e.g. quotes: '<' '>'; or similar) - if ($IN_TAG && '>' == $char) { - $IN_TAG = false; - $result_line .= '>'; - ++$pos; + $IN_TAG = false; + for ($i = 0; $i < $length; $i++) { + $char = substr($line, $i, 1); + // Simple engine to work out whether we're in a tag. + // If we are we modify $pos. This is so we ignore HTML + // in the line and only workout the tab replacement + // via the actual content of the string + // This test could be improved to include strings in the + // html so that < or > would be allowed in user's styles + // (e.g. quotes: '<' '>'; or similar) + if ($IN_TAG && '>' == $char) { + $IN_TAG = false; + $result_line .= '>'; + ++$pos; + } + else if (!$IN_TAG && '<' == $char) { + $IN_TAG = true; + $result_line .= '<'; + ++$pos; + } + else if (!$IN_TAG && '&' == $char) { + $substr = substr($line, $i + 3, 4); + //$substr_5 = substr($line, 5, 1); + $posi = strpos($substr, ';'); + if (false !== $posi) { + $pos += $posi + 3; } - else if (!$IN_TAG && '<' == $char) { - $IN_TAG = true; - $result_line .= '<'; - ++$pos; - } - else if (!$IN_TAG && '&' == $char) { - $substr = substr($line, $i + 3, 4); - //$substr_5 = substr($line, 5, 1); - $posi = strpos($substr, ';'); - if (false !== $posi) { - $pos += $posi + 3; - } - $result_line .= '&'; - } - else if (!$IN_TAG && "\t" == $char) { - $str = ''; - // OPTIMISE - move $strs out. Make an array: - // $tabs = array( - // 1 => ' ', - // 2 => ' ', - // 3 => ' ' etc etc - // to use instead of building a string every time - $strs = array(0 => ' ', 1 => ' '); - for ($k = 0; $k < ($tab_width - (($i - $pos) % $tab_width)); $k++) $str .= $strs[$k % 2]; - $result_line .= $str; - $pos++; + $result_line .= '&'; + } + else if (!$IN_TAG && "\t" == $char) { + $str = ''; + // OPTIMISE - move $strs out. Make an array: + // $tabs = array( + // 1 => ' ', + // 2 => ' ', + // 3 => ' ' etc etc + // to use instead of building a string every time + $strs = array(0 => ' ', 1 => ' '); + for ($k = 0; $k < ($tab_width - (($i - $pos) % $tab_width)); $k++) $str .= $strs[$k % 2]; + $result_line .= $str; + $pos++; - if (false === strpos($line, "\t", $i + 1)) { - $result_line .= substr($line, $i + 1); - break; - } + if (false === strpos($line, "\t", $i + 1)) { + $result_line .= substr($line, $i + 1); + break; } - else if ($IN_TAG) { - ++$pos; - $result_line .= $char; - } - else { - $result_line .= $char; - //++$pos; - } } - $lines[$key] = $result_line; + else if ($IN_TAG) { + ++$pos; + $result_line .= $char; + } + else { + $result_line .= $char; + //++$pos; + } } - $result = implode("\n", $lines); + $lines[$key] = $result_line; } + $result = implode("\n", $lines); + } // Other whitespace // BenBE: Fix to reduce the number of replacements to be done $result = str_replace("\n ", "\n ", $result); @@ -1967,7 +1973,7 @@ return ''; // HTML fix. Again, dirty hackage... } - else if (!($this->language == 'html4strict' && '>' == $keyword)) { + else if (!($this->language == 'html4strict' && ('>' == $keyword || '<' == $keyword))) { return '</a>'; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |