From: <be...@us...> - 2007-06-10 21:36:17
|
Revision: 973 http://geshi.svn.sourceforge.net/geshi/?rev=973&view=rev Author: benbe Date: 2007-06-10 14:36:17 -0700 (Sun, 10 Jun 2007) Log Message: ----------- add: Aplied patch for SF Tracker issue #1705482 add: Implemented custom line break specification add: Added language-specific tab-width Modified Paths: -------------- branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/docs/CHANGES branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/geshi.php trunk/geshi-1.0.X/src/docs/CHANGES trunk/geshi-1.0.X/src/geshi.php Modified: branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/docs/CHANGES =================================================================== --- branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/docs/CHANGES 2007-06-03 13:03:06 UTC (rev 972) +++ branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/docs/CHANGES 2007-06-10 21:36:17 UTC (rev 973) @@ -22,6 +22,9 @@ - Fixed tab replacement code not generating the correct number of spaces in some cases (Guillermo Calvo) - Fixed two typos in Z80 language file + - Applied fix for bug 1705482 (Jason Frame) + * Configurable line endings (Replace \n by custom string) + * per-language tab-widths (Adjustable for width>=1) - Added language files * Motorola 68k Assembler (for MC68HC908GP32 Microcontroller) (BenBE) Version 1.0.7.19 Modified: branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/geshi.php =================================================================== --- branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/geshi.php 2007-06-03 13:03:06 UTC (rev 972) +++ branches/RELEASE_1_0_7_STABLE/geshi-1.0.X/src/geshi.php 2007-06-10 21:36:17 UTC (rev 973) @@ -313,6 +313,14 @@ */ var $highlight_extra_lines_style = 'color: #cc0; background-color: #ffc;'; + /** + * The line ending + * If null, nl2br() will be used on the result string. + * Otherwise, all instances of \n will be replaced with $line_ending + * @var string + */ + var $line_ending = null; + /** * Number at which line numbers should start at * @var int @@ -373,6 +381,12 @@ */ var $tab_width = 8; + /** + * Should we use language-defined tab stop widths? + * @var int + */ + var $use_language_tab_width = false; + /** * Default target for keyword links * @var string @@ -973,8 +987,36 @@ */ function set_tab_width($width) { $this->tab_width = intval($width); + //Check if it fit's the constraints: + if($this->tab_width < 1) { + //Return it to the default + $this->tab_width = 8; + } } + /** + * Sets whether or not to use tab-stop width specifed by language + * + * @param boolean Whether to use language-specific tab-stop widths + */ + function set_use_language_tab_width($use) { + $this->use_language_tab_width = (bool) $use; + } + + /** + * Returns the tab width to use, based on the current language and user + * preference + * + * @return int Tab width + */ + function get_real_tab_width() { + if (!$this->use_language_tab_width || !isset($this->language_data['TAB_WIDTH'])) { + return $this->tab_width; + } else { + return $this->language_data['TAB_WIDTH']; + } + } + /** * Enables/disables strict highlighting. Default is off, calling this * method without parameters will turn it on. See documentation @@ -1311,6 +1353,15 @@ $this->highlight_extra_lines_style = $styles; } + /** + * Sets the line-ending + * + * @param string The new line-ending + */ + function set_line_ending($line_ending) { + $this->line_ending = (string)$line_ending; + } + /** * Sets what number line numbers should start at. Should * be a positive integer, and will be converted to one. @@ -1835,6 +1886,7 @@ /// Replace tabs with the correct number of spaces if (false !== strpos($result, "\t")) { $lines = explode("\n", $result); + $tab_width = $this->get_real_tab_width(); foreach ($lines as $key => $line) { if (false === strpos($line, "\t")) { $lines[$key] = $line; @@ -1842,7 +1894,6 @@ } $pos = 0; - $tab_width = $this->tab_width; $length = strlen($line); $result_line = ''; @@ -1907,13 +1958,17 @@ $result = implode("\n", $lines); } // Other whitespace - $result = str_replace(' ', ' ', $result); + // BenBE: Fix to reduce the number of replacements to be done + $result = str_replace("\n ", "\n ", $result); $result = str_replace(' ', ' ', $result); - $result = str_replace("\n ", "\n ", $result); if ($this->line_numbers == GESHI_NO_LINE_NUMBERS) { - $result = nl2br($result); - } + if ($this->line_ending === null) { + $result = nl2br($result); + } else { + $result = str_replace("\n", $this->line_ending, $result); + } + } return $result; } Modified: trunk/geshi-1.0.X/src/docs/CHANGES =================================================================== --- trunk/geshi-1.0.X/src/docs/CHANGES 2007-06-03 13:03:06 UTC (rev 972) +++ trunk/geshi-1.0.X/src/docs/CHANGES 2007-06-10 21:36:17 UTC (rev 973) @@ -22,6 +22,9 @@ - Fixed tab replacement code not generating the correct number of spaces in some cases (Guillermo Calvo) - Fixed two typos in Z80 language file + - Applied fix for bug 1705482 (Jason Frame) + * Configurable line endings (Replace \n by custom string) + * per-language tab-widths (Adjustable for width>=1) - Added language files * Motorola 68k Assembler (for MC68HC908GP32 Microcontroller) (BenBE) Version 1.0.7.19 Modified: trunk/geshi-1.0.X/src/geshi.php =================================================================== --- trunk/geshi-1.0.X/src/geshi.php 2007-06-03 13:03:06 UTC (rev 972) +++ trunk/geshi-1.0.X/src/geshi.php 2007-06-10 21:36:17 UTC (rev 973) @@ -313,6 +313,14 @@ */ var $highlight_extra_lines_style = 'color: #cc0; background-color: #ffc;'; + /** + * The line ending + * If null, nl2br() will be used on the result string. + * Otherwise, all instances of \n will be replaced with $line_ending + * @var string + */ + var $line_ending = null; + /** * Number at which line numbers should start at * @var int @@ -373,6 +381,12 @@ */ var $tab_width = 8; + /** + * Should we use language-defined tab stop widths? + * @var int + */ + var $use_language_tab_width = false; + /** * Default target for keyword links * @var string @@ -973,8 +987,36 @@ */ function set_tab_width($width) { $this->tab_width = intval($width); + //Check if it fit's the constraints: + if($this->tab_width < 1) { + //Return it to the default + $this->tab_width = 8; + } } + /** + * Sets whether or not to use tab-stop width specifed by language + * + * @param boolean Whether to use language-specific tab-stop widths + */ + function set_use_language_tab_width($use) { + $this->use_language_tab_width = (bool) $use; + } + + /** + * Returns the tab width to use, based on the current language and user + * preference + * + * @return int Tab width + */ + function get_real_tab_width() { + if (!$this->use_language_tab_width || !isset($this->language_data['TAB_WIDTH'])) { + return $this->tab_width; + } else { + return $this->language_data['TAB_WIDTH']; + } + } + /** * Enables/disables strict highlighting. Default is off, calling this * method without parameters will turn it on. See documentation @@ -1311,6 +1353,15 @@ $this->highlight_extra_lines_style = $styles; } + /** + * Sets the line-ending + * + * @param string The new line-ending + */ + function set_line_ending($line_ending) { + $this->line_ending = (string)$line_ending; + } + /** * Sets what number line numbers should start at. Should * be a positive integer, and will be converted to one. @@ -1827,6 +1878,7 @@ /// Replace tabs with the correct number of spaces if (false !== strpos($result, "\t")) { $lines = explode("\n", $result); + $tab_width = $this->get_real_tab_width(); foreach ($lines as $key => $line) { if (false === strpos($line, "\t")) { $lines[$key] = $line; @@ -1834,7 +1886,6 @@ } $pos = 0; - $tab_width = $this->tab_width; $length = strlen($line); $result_line = ''; @@ -1904,8 +1955,12 @@ $result = str_replace(' ', ' ', $result); if ($this->line_numbers == GESHI_NO_LINE_NUMBERS) { - $result = nl2br($result); - } + if ($this->line_ending === null) { + $result = nl2br($result); + } else { + $result = str_replace("\n", $this->line_ending, $result); + } + } return $result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |