Author: Tobias Schlitt Date: 2007-03-15 16:43:25 +0100 (Thu, 15 Mar 2007) New Revision: 4759
Log: - Refactored progressbar to support 2 different backends: 1 for Posix conform systems, 1 for Windows. Added: trunk/ConsoleTools/src/interfaces/progressbar_renderer.php trunk/ConsoleTools/src/progressbar/ trunk/ConsoleTools/src/progressbar/posix_renderer.php trunk/ConsoleTools/src/progressbar/windows_renderer.php Modified: trunk/ConsoleTools/src/console_autoload.php trunk/ConsoleTools/src/progressbar.php Modified: trunk/ConsoleTools/src/console_autoload.php =================================================================== --- trunk/ConsoleTools/src/console_autoload.php 2007-03-15 10:42:34 UTC (rev 4758) +++ trunk/ConsoleTools/src/console_autoload.php 2007-03-15 15:43:25 UTC (rev 4759) @@ -23,6 +23,9 @@ 'ezcConsoleTableOptions' => 'ConsoleTools/options/table.php', 'ezcConsoleProgressbar' => 'ConsoleTools/progressbar.php', 'ezcConsoleProgressbarOptions' => 'ConsoleTools/options/progressbar.php', + 'ezcConsoleProgressbarRenderer' => 'ConsoleTools/interfaces/progressbar_renderer.php', + 'ezcConsoleProgressbarPosixRenderer' => 'ConsoleTools/progressbar/posix_renderer.php', + 'ezcConsoleProgressbarWindowsRenderer' => 'ConsoleTools/progressbar/windows_renderer.php', 'ezcConsoleProgressMonitor' => 'ConsoleTools/progressmonitor.php', 'ezcConsoleProgressMonitorOptions' => 'ConsoleTools/options/progressmonitor.php', 'ezcConsoleStatusbar' => 'ConsoleTools/statusbar.php', Added: trunk/ConsoleTools/src/interfaces/progressbar_renderer.php =================================================================== --- trunk/ConsoleTools/src/interfaces/progressbar_renderer.php 2007-03-15 10:42:34 UTC (rev 4758) +++ trunk/ConsoleTools/src/interfaces/progressbar_renderer.php 2007-03-15 15:43:25 UTC (rev 4759) @@ -0,0 +1,373 @@ +<?php + +abstract class ezcConsoleProgressbarRenderer +{ + /** + * Container to hold the properties + * + * @var array(string=>mixed) + */ + protected $properties; + + /** + * Storage for actual values to be replaced in the format string. + * Actual values are stored here and will be inserted into the bar + * before printing it. + * + * @var array(string => string) + */ + protected $valueMap = array( + 'bar' => '', + 'fraction' => '', + 'act' => '', + 'max' => '', + ); + + /** + * Stores the bar utilization. + * + * This array saves how much space a specific part of the bar utilizes to not + * recalculate those on every step. + * + * @var array(string => int) + */ + protected $measures = array( + 'barSpace' => 0, + 'fractionSpace' => 0, + 'actSpace' => 0, + 'maxSpace' => 0, + 'fixedCharSpace' => 0, + ); + + /** + * The current step the progress bar should show. + * + * @var int + */ + protected $currentStep = 0; + + /** + * The maximum number of steps to go. + * Calculated once from the settings. + * + * @var int + */ + protected $numSteps = 0; + + /** + * The ezcConsoleOutput object to use. + * + * @var ezcConsoleOutput + */ + protected $output; + + /** + * Indicates if the starting point for the bar has been stored. + * Per default this is false to indicate that no start position has been + * stored, yet. + * + * @var bool + */ + protected $started = false; + + /** + * Start the progress bar + * Starts the progress bar and sticks it to the current line. + * No output will be done yet. Call [EMAIL PROTECTED] ezcConsoleProgressbar::output()} + * to print the bar. + * + * @return void + */ + public abstract function start(); + + /** + * Draw the progress bar. + * Prints the progress-bar to the screen. If start() has not been called + * yet, the current line is used for [EMAIL PROTECTED] ezcConsolProgressbar::start()}. + * + * @return void + */ + public abstract function output(); + + /** + * Finish the progress bar. + * Finishes the bar (jump to 100% if not happened yet,...) and jumps + * to the next line to allow new output. Also resets the values of the + * output handler used, if changed. + * + * @return void + */ + public abstract function finish(); + + /** + * Creates a new progress bar. + * + * @param ezcConsoleOutput $outHandler Handler to utilize for output + * @param int $max Maximum value, where progressbar + * reaches 100%. + * @param array(string=>string) $options Options + * + * @see ezcConsoleProgressbar::$options + */ + public function __construct( ezcConsoleOutput $outHandler, $max, array $options = array() ) + { + $this->output = $outHandler; + $this->__set( 'max', $max ); + $this->properties['options'] = new ezcConsoleProgressbarOptions( $options ); + } + + /** + * Set new options. + * This method allows you to change the options of progressbar. + * + * @param ezcConsoleProgresbarOptions $options The options to set. + * + * @throws ezcBaseSettingNotFoundException + * If you tried to set a non-existent option value. + * @throws ezcBaseSettingValueException + * If the value is not valid for the desired option. + * @throws ezcBaseValueException + * If you submit neither an array nor an instance of + * ezcConsoleProgresbarOptions. + */ + public function setOptions( $options ) + { + if ( is_array( $options ) ) + { + $this->properties['options']->merge( $options ); + } + else if ( $options instanceof ezcConsoleProgressbarOptions ) + { + $this->properties['options'] = $options; + } + else + { + throw new ezcBaseValueException( "options", $options, "instance of ezcConsoleProgressbarOptions" ); + } + } + + /** + * Returns the current options. + * Returns the options currently set for this progressbar. + * + * @return ezcConsoleProgressbarOptions The current options. + */ + public function getOptions() + { + return $this->properties['options']; + } + + /** + * Property read access. + * + * @param string $key Name of the property. + * @return mixed Value of the property or null. + * + * @throws ezcBasePropertyNotFoundException + * If the the desired property is not found. + * @ignore + */ + public function __get( $key ) + { + switch ( $key ) + { + case 'options': + return $this->properties['options']; + case 'step': + // Step is now an option + return $this->properties['options']->step; + case 'max': + return $this->properties[$key]; + default: + break; + } + throw new ezcBasePropertyNotFoundException( $key ); + } + + /** + * Property write access. + * + * @param string $key Name of the property. + * @param mixed $val The value for the property. + * + * @throws ezcBasePropertyNotFoundException + * If a desired property could not be found. + * @throws ezcBaseValueException + * If a desired property value is out of range. + * @ignore + */ + public function __set( $key, $val ) + { + switch ( $key ) + { + case 'options': + if ( !( $val instanceof ezcConsoleProgressbarOptions ) ) + { + throw new ezcBaseValueException( 'options', $val, 'instance of ezcConsoleProgressbarOptions' ); + }; + break; + case 'max': + if ( ( !is_int( $val ) && !is_float( $val ) ) || $val < 0 ) + { + throw new ezcBaseValueException( $key, $val, 'number >= 0' ); + } + break; + case 'step': + if ( ( !is_int( $val ) && !is_float( $val ) ) || $val < 0 ) + { + throw new ezcBaseValueException( $key, $val, 'number >= 0' ); + } + // Step is now an option. + $this->properties['options']->step = $val; + return; + default: + throw new ezcBasePropertyNotFoundException( $key ); + break; + } + // Changes settings or options, need for recalculating measures + $this->started = false; + $this->properties[$key] = $val; + } + + /** + * Property isset access. + * + * @param string $key Name of the property. + * @return bool True is the property is set, otherwise false. + * @ignore + */ + public function __isset( $key ) + { + switch ( $key ) + { + case 'options': + case 'max': + case 'step': + return true; + } + return false; + } + + /** + * Advance the progress bar. + * Advances the progress bar by $step steps. Redraws the bar by default, + * using the [EMAIL PROTECTED] ezcConsoleProgressbar::output()} method. + * + * @param bool $redraw Whether to redraw the bar immediately. + * @param float $steps How far the progress bar should advance on this call. + * @return void + */ + public function advance( $redraw = true, $step = 1 ) + { + $this->currentStep += $step; + if ( $redraw === true && $this->currentStep % $this->properties['options']->redrawFrequency === 0 ) + { + $this->output(); + } + } + + /** + * Generate all values to be replaced in the format string. + * + * @return void + */ + protected function generateValues() + { + // Bar + $barFilledSpace = ceil( $this->measures['barSpace'] / $this->numSteps * $this->currentStep ); + // Sanitize value if it gets to large by rounding + $barFilledSpace = $barFilledSpace > $this->measures['barSpace'] ? $this->measures['barSpace'] : $barFilledSpace; + $bar = str_pad( + str_pad( + $this->properties['options']->progressChar, + $barFilledSpace, + $this->properties['options']->barChar, + STR_PAD_LEFT + ), + $this->measures['barSpace'], + $this->properties['options']->emptyChar, + STR_PAD_RIGHT + ); + $this->valueMap['bar'] = $bar; + + // Fraction + $fractionVal = sprintf( + $this->properties['options']->fractionFormat, + ( $fractionVal = ( $this->properties['options']->step * $this->currentStep ) / $this->max * 100 ) > 100 ? 100 : $fractionVal + ); + $this->valueMap['fraction'] = str_pad( + $fractionVal, + strlen( sprintf( $this->properties['options']->fractionFormat, 100 ) ), + ' ', + STR_PAD_LEFT + ); + + // Act / max + $actVal = sprintf( + $this->properties['options']->actFormat, + ( $actVal = $this->currentStep * $this->properties['options']->step ) > $this->max ? $this->max : $actVal + ); + $this->valueMap['act'] = str_pad( + $actVal, + strlen( sprintf( $this->properties['options']->actFormat, $this->max ) ), + ' ', + STR_PAD_LEFT + ); + $this->valueMap['max'] = sprintf( $this->properties['options']->maxFormat, $this->max ); + } + + /** + * Insert values into bar format string. + * + * @return void + */ + protected function insertValues() + { + $bar = $this->properties['options']->formatString; + foreach ( $this->valueMap as $name => $val ) + { + $bar = str_replace( "%{$name}%", $val, $bar ); + } + return $bar; + } + + /** + * Calculate several measures necessary to generate a bar. + * + * @return void + */ + protected function calculateMeasures() + { + // Calc number of steps bar goes through + $this->numSteps = ( int ) round( $this->max / $this->properties['options']->step ); + // Calculate measures + $this->measures['fixedCharSpace'] = strlen( $this->stripEscapeSequences( $this->insertValues() ) ); + if ( strpos( $this->properties['options']->formatString,'%max%' ) !== false ) + { + $this->measures['maxSpace'] = strlen( sprintf( $this->properties['options']->maxFormat, $this->max ) ); + + } + if ( strpos( $this->properties['options']->formatString, '%act%' ) !== false ) + { + $this->measures['actSpace'] = strlen( sprintf( $this->properties['options']->actFormat, $this->max ) ); + } + if ( strpos( $this->properties['options']->formatString, '%fraction%' ) !== false ) + { + $this->measures['fractionSpace'] = strlen( sprintf( $this->properties['options']->fractionFormat, 100 ) ); + } + $this->measures['barSpace'] = $this->properties['options']->width - array_sum( $this->measures ); + } + + /** + * Strip all escape sequences from a string to measure it's size correctly. + * + * @param mixed $str + * @return void + */ + protected function stripEscapeSequences( $str ) + { + return preg_replace( '/\033\[[0-9a-f;]*m/i', '', $str ); + } +} + +?> Property changes on: trunk/ConsoleTools/src/interfaces/progressbar_renderer.php ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/ConsoleTools/src/progressbar/posix_renderer.php =================================================================== --- trunk/ConsoleTools/src/progressbar/posix_renderer.php 2007-03-15 10:42:34 UTC (rev 4758) +++ trunk/ConsoleTools/src/progressbar/posix_renderer.php 2007-03-15 15:43:25 UTC (rev 4759) @@ -0,0 +1,54 @@ +<?php + +class ezcConsoleProgressbarPosixRenderer extends ezcConsoleProgressbarRenderer +{ + + /** + * Start the progress bar + * Starts the progress bar and sticks it to the current line. + * No output will be done yet. Call [EMAIL PROTECTED] ezcConsoleProgressbar::output()} + * to print the bar. + * + * @return void + */ + public function start() + { + $this->calculateMeasures(); + $this->output->storePos(); + $this->started = true; + } + + /** + * Draw the progress bar. + * Prints the progress-bar to the screen. If start() has not been called + * yet, the current line is used for [EMAIL PROTECTED] ezcConsolProgressbar::start()}. + * + * @return void + */ + public function output() + { + if ( $this->started === false ) + { + $this->start(); + } + $this->output->restorePos(); + $this->generateValues(); + echo $this->insertValues(); + } + + /** + * Finish the progress bar. + * Finishes the bar (jump to 100% if not happened yet,...) and jumps + * to the next line to allow new output. Also resets the values of the + * output handler used, if changed. + * + * @return void + */ + public function finish() + { + $this->currentStep = $this->numSteps; + $this->output(); + } +} + +?> Property changes on: trunk/ConsoleTools/src/progressbar/posix_renderer.php ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/ConsoleTools/src/progressbar/windows_renderer.php =================================================================== --- trunk/ConsoleTools/src/progressbar/windows_renderer.php 2007-03-15 10:42:34 UTC (rev 4758) +++ trunk/ConsoleTools/src/progressbar/windows_renderer.php 2007-03-15 15:43:25 UTC (rev 4759) @@ -0,0 +1,56 @@ +<?php + +class ezcConsoleProgressbarWindowsRenderer extends ezcConsoleProgressbarRenderer +{ + + /** + * Start the progress bar + * Starts the progress bar and sticks it to the current line. + * No output will be done yet. Call [EMAIL PROTECTED] ezcConsoleProgressbar::output()} + * to print the bar. + * + * @return void + */ + public function start() + { + $this->calculateMeasures(); + $this->started = true; + } + + /** + * Draw the progress bar. + * Prints the progress-bar to the screen. If start() has not been called + * yet, the current line is used for [EMAIL PROTECTED] ezcConsolProgressbar::start()}. + * + * @return void + */ + public function output() + { + if ( $this->started === false ) + { + $this->start(); + } + + // Echo width number of backspaces. + echo str_repeat( "\x8", $this->options->width ); + + $this->Values(); + echo $this->insertValues(); + } + + /** + * Finish the progress bar. + * Finishes the bar (jump to 100% if not happened yet,...) and jumps + * to the next line to allow new output. Also resets the values of the + * output handler used, if changed. + * + * @return void + */ + public function finish() + { + $this->currentStep = $this->numSteps; + $this->output(); + } +} + +?> Property changes on: trunk/ConsoleTools/src/progressbar/windows_renderer.php ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/ConsoleTools/src/progressbar.php =================================================================== --- trunk/ConsoleTools/src/progressbar.php 2007-03-15 10:42:34 UTC (rev 4758) +++ trunk/ConsoleTools/src/progressbar.php 2007-03-15 15:43:25 UTC (rev 4759) @@ -49,89 +49,66 @@ */ class ezcConsoleProgressbar { - /** - * Container to hold the properties - * - * @var array(string=>mixed) - */ - protected $properties; + private $delegate; /** - * Storage for actual values to be replaced in the format string. - * Actual values are stored here and will be inserted into the bar - * before printing it. - * - * @var array(string => string) - */ - protected $valueMap = array( - 'bar' => '', - 'fraction' => '', - 'act' => '', - 'max' => '', - ); - - /** - * Stores the bar utilization. + * Creates a new progress bar. * - * This array saves how much space a specific part of the bar utilizes to not - * recalculate those on every step. - * - * @var array(string => int) + * @param ezcConsoleOutput $outHandler Handler to utilize for output + * @param int $max Maximum value, where progressbar + * reaches 100%. + * @param array(string=>string) $options Options + * + * @see ezcConsoleProgressbar::$options */ - protected $measures = array( - 'barSpace' => 0, - 'fractionSpace' => 0, - 'actSpace' => 0, - 'maxSpace' => 0, - 'fixedCharSpace' => 0, - ); - + public function __construct( ezcConsoleOutput $outHandler, $max, array $options = array() ) + { + if ( ezcBaseFeatures::os() === "Windows" ) + { + $this->delegate = new ezcConsoleProgressbarWindowsRenderer( $outHandler, $max, $options ); + } + else + { + $this->delegate = new ezcConsoleProgressbarPosixRenderer( $outHandler, $max, $options ); + } + } + /** - * The current step the progress bar should show. + * Start the progress bar + * Starts the progress bar and sticks it to the current line. + * No output will be done yet. Call [EMAIL PROTECTED] ezcConsoleProgressbar::output()} + * to print the bar. * - * @var int + * @return void */ - protected $currentStep = 0; + public function start() + { + $this->delegate->start(); + } /** - * The maximum number of steps to go. - * Calculated once from the settings. + * Draw the progress bar. + * Prints the progress-bar to the screen. If start() has not been called + * yet, the current line is used for [EMAIL PROTECTED] ezcConsolProgressbar::start()}. * - * @var int + * @return void */ - protected $numSteps = 0; - + public function output() + { + $this->delegate->output(); + } + /** - * The ezcConsoleOutput object to use. + * Finish the progress bar. + * Finishes the bar (jump to 100% if not happened yet,...) and jumps + * to the next line to allow new output. Also resets the values of the + * output handler used, if changed. * - * @var ezcConsoleOutput + * @return void */ - protected $output; - - /** - * Indicates if the starting point for the bar has been stored. - * Per default this is false to indicate that no start position has been - * stored, yet. - * - * @var bool - */ - protected $started = false; - - /** - * Creates a new progress bar. - * - * @param ezcConsoleOutput $outHandler Handler to utilize for output - * @param int $max Maximum value, where progressbar - * reaches 100%. - * @param array(string=>string) $options Options - * - * @see ezcConsoleProgressbar::$options - */ - public function __construct( ezcConsoleOutput $outHandler, $max, array $options = array() ) + public function finish() { - $this->output = $outHandler; - $this->__set( 'max', $max ); - $this->properties['options'] = new ezcConsoleProgressbarOptions( $options ); + $this->delegate->finish(); } /** @@ -150,18 +127,7 @@ */ public function setOptions( $options ) { - if ( is_array( $options ) ) - { - $this->properties['options']->merge( $options ); - } - else if ( $options instanceof ezcConsoleProgressbarOptions ) - { - $this->properties['options'] = $options; - } - else - { - throw new ezcBaseValueException( "options", $options, "instance of ezcConsoleProgressbarOptions" ); - } + $this->delegate->setOptions( $options ); } /** @@ -172,7 +138,7 @@ */ public function getOptions() { - return $this->properties['options']; + return $this->delegate->getOptions(); } /** @@ -187,19 +153,7 @@ */ public function __get( $key ) { - switch ( $key ) - { - case 'options': - return $this->properties['options']; - case 'step': - // Step is now an option - return $this->properties['options']->step; - case 'max': - return $this->properties[$key]; - default: - break; - } - throw new ezcBasePropertyNotFoundException( $key ); + return $this->delegate->$key; } /** @@ -216,35 +170,7 @@ */ public function __set( $key, $val ) { - switch ( $key ) - { - case 'options': - if ( !( $val instanceof ezcConsoleProgressbarOptions ) ) - { - throw new ezcBaseValueException( 'options', $val, 'instance of ezcConsoleProgressbarOptions' ); - }; - break; - case 'max': - if ( ( !is_int( $val ) && !is_float( $val ) ) || $val < 0 ) - { - throw new ezcBaseValueException( $key, $val, 'number >= 0' ); - } - break; - case 'step': - if ( ( !is_int( $val ) && !is_float( $val ) ) || $val < 0 ) - { - throw new ezcBaseValueException( $key, $val, 'number >= 0' ); - } - // Step is now an option. - $this->properties['options']->step = $val; - return; - default: - throw new ezcBasePropertyNotFoundException( $key ); - break; - } - // Changes settings or options, need for recalculating measures - $this->started = false; - $this->properties[$key] = $val; + $this->delegate->$key = $val; } /** @@ -256,50 +182,10 @@ */ public function __isset( $key ) { - switch ( $key ) - { - case 'options': - case 'max': - case 'step': - return true; - } - return false; + return isset( $this->delegate->$key ); } /** - * Start the progress bar - * Starts the progress bar and sticks it to the current line. - * No output will be done yet. Call [EMAIL PROTECTED] ezcConsoleProgressbar::output()} - * to print the bar. - * - * @return void - */ - public function start() - { - $this->calculateMeasures(); - $this->output->storePos(); - $this->started = true; - } - - /** - * Draw the progress bar. - * Prints the progress-bar to the screen. If start() has not been called - * yet, the current line is used for [EMAIL PROTECTED] ezcConsolProgressbar::start()}. - * - * @return void - */ - public function output() - { - if ( $this->started === false ) - { - $this->start(); - } - $this->output->restorePos(); - $this->generateValues(); - echo $this->insertValues(); - } - - /** * Advance the progress bar. * Advances the progress bar by $step steps. Redraws the bar by default, * using the [EMAIL PROTECTED] ezcConsoleProgressbar::output()} method. @@ -310,128 +196,8 @@ */ public function advance( $redraw = true, $step = 1 ) { - $this->currentStep += $step; - if ( $redraw === true && $this->currentStep % $this->properties['options']->redrawFrequency === 0 ) - { - $this->output(); - } + $this->delegate->advance( $redraw, $step ); } - /** - * Finish the progress bar. - * Finishes the bar (jump to 100% if not happened yet,...) and jumps - * to the next line to allow new output. Also resets the values of the - * output handler used, if changed. - * - * @return void - */ - public function finish() - { - $this->currentStep = $this->numSteps; - $this->output(); - } - - /** - * Generate all values to be replaced in the format string. - * - * @return void - */ - protected function generateValues() - { - // Bar - $barFilledSpace = ceil( $this->measures['barSpace'] / $this->numSteps * $this->currentStep ); - // Sanitize value if it gets to large by rounding - $barFilledSpace = $barFilledSpace > $this->measures['barSpace'] ? $this->measures['barSpace'] : $barFilledSpace; - $bar = str_pad( - str_pad( - $this->properties['options']->progressChar, - $barFilledSpace, - $this->properties['options']->barChar, - STR_PAD_LEFT - ), - $this->measures['barSpace'], - $this->properties['options']->emptyChar, - STR_PAD_RIGHT - ); - $this->valueMap['bar'] = $bar; - - // Fraction - $fractionVal = sprintf( - $this->properties['options']->fractionFormat, - ( $fractionVal = ( $this->properties['options']->step * $this->currentStep ) / $this->max * 100 ) > 100 ? 100 : $fractionVal - ); - $this->valueMap['fraction'] = str_pad( - $fractionVal, - strlen( sprintf( $this->properties['options']->fractionFormat, 100 ) ), - ' ', - STR_PAD_LEFT - ); - - // Act / max - $actVal = sprintf( - $this->properties['options']->actFormat, - ( $actVal = $this->currentStep * $this->properties['options']->step ) > $this->max ? $this->max : $actVal - ); - $this->valueMap['act'] = str_pad( - $actVal, - strlen( sprintf( $this->properties['options']->actFormat, $this->max ) ), - ' ', - STR_PAD_LEFT - ); - $this->valueMap['max'] = sprintf( $this->properties['options']->maxFormat, $this->max ); - } - - /** - * Insert values into bar format string. - * - * @return void - */ - protected function insertValues() - { - $bar = $this->properties['options']->formatString; - foreach ( $this->valueMap as $name => $val ) - { - $bar = str_replace( "%{$name}%", $val, $bar ); - } - return $bar; - } - - /** - * Calculate several measures necessary to generate a bar. - * - * @return void - */ - protected function calculateMeasures() - { - // Calc number of steps bar goes through - $this->numSteps = ( int ) round( $this->max / $this->properties['options']->step ); - // Calculate measures - $this->measures['fixedCharSpace'] = strlen( $this->stripEscapeSequences( $this->insertValues() ) ); - if ( strpos( $this->properties['options']->formatString,'%max%' ) !== false ) - { - $this->measures['maxSpace'] = strlen( sprintf( $this->properties['options']->maxFormat, $this->max ) ); - - } - if ( strpos( $this->properties['options']->formatString, '%act%' ) !== false ) - { - $this->measures['actSpace'] = strlen( sprintf( $this->properties['options']->actFormat, $this->max ) ); - } - if ( strpos( $this->properties['options']->formatString, '%fraction%' ) !== false ) - { - $this->measures['fractionSpace'] = strlen( sprintf( $this->properties['options']->fractionFormat, 100 ) ); - } - $this->measures['barSpace'] = $this->properties['options']->width - array_sum( $this->measures ); - } - - /** - * Strip all escape sequences from a string to measure it's size correctly. - * - * @param mixed $str - * @return void - */ - protected function stripEscapeSequences( $str ) - { - return preg_replace( '/\033\[[0-9a-f;]*m/i', '', $str ); - } } ?> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components