From: <mi...@us...> - 2008-08-12 18:48:51
|
Revision: 1755 http://geshi.svn.sourceforge.net/geshi/?rev=1755&view=rev Author: milianw Date: 2008-08-12 18:49:00 +0000 (Tue, 12 Aug 2008) Log Message: ----------- fix: use a fugly combination of two tables inside a wrapping table for GESHI_HEADER_PRE_TABLE. this should fix the problems on windows with bold fonts and their font-height TODO: documentation, move header and footer maybe inside the wrapping table? 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 2008-08-12 08:25:32 UTC (rev 1754) +++ trunk/geshi-1.0.X/src/docs/CHANGES 2008-08-12 18:49:00 UTC (rev 1755) @@ -16,6 +16,10 @@ - Fixed broken Escape chars if classes were disabled - start_line_numbers_at() was ignored when GESHI_HEADER_PRE_TABLE was set (revulo) - Fixed a problem allowing Remote Code Inclusion under certain circumstances (BenBE) + - Changed the markup for the (in 1.0.8) new GESHI_HEADER_PRE_TABLE, because on Windows + some fonts had different heights when boldened. The new markup with a wrapping table + which includes two more tables, one for linenumbers and one for the code, should work + even there... (milian) - Improvements to language files (BenBE, milian) * Added MinSpareThread\MaxSpareThreads to Apache highlighter (BenBE) * Added new Keyword group for APT sources.list highlighter (BenBE) Modified: trunk/geshi-1.0.X/src/geshi.php =================================================================== --- trunk/geshi-1.0.X/src/geshi.php 2008-08-12 08:25:32 UTC (rev 1754) +++ trunk/geshi-1.0.X/src/geshi.php 2008-08-12 18:49:00 UTC (rev 1755) @@ -3551,7 +3551,8 @@ } // Add HTML whitespace stuff if we're using the <div> header - if ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) { + if ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID + && $this->header_type != GESHI_HEADER_PRE_TABLE) { $this->indent($parsed_code); } @@ -3572,16 +3573,53 @@ // If we're using line numbers, we insert <li>s and appropriate // markup to style them (otherwise we don't need to do anything) - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->header_type != GESHI_HEADER_PRE_TABLE) { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { // If we're using the <pre> header, we shouldn't add newlines because // the <pre> will line-break them (and the <li>s already do this for us) - $ls = ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) ? "\n" : ''; + if (in_array($this->header_type, + array(GESHI_HEADER_PRE, GESHI_HEADER_PRE_VALID))) { + $ls = ''; + } else { + $ls = "\n"; + } // Set vars to defaults for following loop $i = 0; // Foreach line... - for ($i = 0, $n = count($code); $i < $n;) { + $n = count($code); + if ($this->header_type == GESHI_HEADER_PRE_TABLE) { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + if ($this->use_classes) { + $attrs = ' class="ln"'; + } else { + $attrs = ' style="'. $this->table_linenumber_style .'"'; + } + $parsed_code .= '<table><tr><td><table'.$attrs.'>'; + // get linenumbers + // we don't merge it with the for below, since it should be better for + // memory consumption this way + for ($i = 0; $i < $n; ++$i) { + if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS && + $i % $this->line_nth_row == ($this->line_nth_row - 1)) { + if ($this->use_classes) { + $def_attr = ' class="li2"'; + } else { + $def_attr = ' style="' . $this->line_style2 . '"'; + } + } else { + if ($this->use_classes) { + $def_attr = ' class="li1"'; + } else { + $def_attr = ' style="' . $this->line_style1 . '"'; + } + } + $parsed_code .= "<tr$def_attr><td>".($this->line_numbers_start + $i).'</td></tr>'; + } + $parsed_code .= '</table></td><td><table>'; + } + } + for ($i = 0; $i < $n;) { //Reset the attributes for a new line ... $attrs = array(); @@ -3619,16 +3657,6 @@ } } - //Check which type of tag to insert for this line - if ($this->header_type == GESHI_HEADER_PRE_VALID) { - $start = "<pre$def_attr>"; - $end = '</pre>'; - } else { - // Span or div? - $start = "<div$def_attr>"; - $end = '</div>'; - } - ++$i; // Are we supposed to use ids? If so, add them @@ -3655,9 +3683,25 @@ $attr_string .= ' ' . $key . '="' . implode(' ', $attr) . '"'; } - $parsed_code .= "<li$attr_string>$start{$code[$i-1]}$end</li>$ls"; + //Check which type of tag to insert for this line + if ($this->header_type == GESHI_HEADER_PRE_TABLE) { + $start = "<tr$attr_string><td><pre$def_attr>"; + $end = '</pre></td></tr>'; + } elseif ($this->header_type == GESHI_HEADER_PRE_VALID) { + $start = "<li$attr_string><pre$def_attr>"; + $end = '</pre></li>'; + } else { + // Span or div? + $start = "<li$attr_string><div$def_attr>"; + $end = '</div></li>'; + } + + $parsed_code .= "$start{$code[$i-1]}$end$ls"; unset($code[$i - 1]); } + if ($this->header_type == GESHI_HEADER_PRE_TABLE) { + $parsed_code .= '</table></td></tr></table>'; + } } else { $n = count($code); if ($this->use_classes) { @@ -3667,26 +3711,6 @@ } if ($this->header_type == GESHI_HEADER_PRE_VALID) { $parsed_code .= '<pre'. $attributes .'>'; - } elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) { - if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - if ($this->use_classes) { - $attrs = ' class="ln"'; - } else { - $attrs = ' style="'. $this->table_linenumber_style .'"'; - } - $parsed_code .= '<td'.$attrs.'><pre>'; - // get linenumbers - // we don't merge it with the for below, since it should be better for - // memory consumption this way - for ($i = 0; $i < $n; ++$i) { - $parsed_code .= $this->line_numbers_start + $i; - if ($i != $n) { - $parsed_code .= "\n"; - } - } - $parsed_code .= '</pre></td><td>'; - } - $parsed_code .= '<pre'. $attributes .'>'; } // No line numbers, but still need to handle highlighting lines extra. // Have to use divs so the full width of the code is highlighted @@ -3738,12 +3762,9 @@ unset($code[$i]); } - if ($this->header_type == GESHI_HEADER_PRE_VALID || $this->header_type == GESHI_HEADER_PRE_TABLE) { + if ($this->header_type == GESHI_HEADER_PRE_VALID) { $parsed_code .= '</pre>'; } - if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) { - $parsed_code .= '</td>'; - } } $parsed_code .= $this->footer(); @@ -3794,11 +3815,7 @@ } else { $attr = " style=\"{$this->header_content_style}\""; } - if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) { - $header = "<thead><tr><td colspan=\"2\" $attr>$header</td></tr></thead>"; - } else { - $header = "<div$attr>$header</div>"; - } + $header = "<div$attr>$header</div>"; } if (GESHI_HEADER_NONE == $this->header_type) { @@ -3816,7 +3833,7 @@ $this->header_type == GESHI_HEADER_PRE_VALID) { return "<div$attributes>$header<ol$ol_attributes>"; } else if ($this->header_type == GESHI_HEADER_PRE_TABLE) { - return "<table$attributes>$header<tbody><tr class=\"li1\">"; + return "<div$attributes>$header"; } } else { if ($this->header_type == GESHI_HEADER_PRE) { @@ -3849,11 +3866,7 @@ } else { $attr = " style=\"{$this->footer_content_style}\""; } - if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->linenumbers != GESHI_NO_LINE_NUMBERS) { - $footer = "<tfoot><tr><td colspan=\"2\">$footer</td></tr></tfoot>"; - } else { - $footer = "<div$attr>$footer</div>"; - } + $footer = "<div$attr>$footer</div>"; } if (GESHI_HEADER_NONE == $this->header_type) { @@ -3869,7 +3882,7 @@ } elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) { if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { - return "</tr></tbody>$footer</table>"; + return "$footer</div>"; } return ($this->force_code_block ? '</div>' : '') . "$footer</div>"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |