Merge remote branch 'everzet/console-privatisation-errors'

* everzet/console-privatisation-errors:
  if we moved definition under private area, than we need to use only public API for that, to be able to redefine it is subclasses
  start => finish, begin => end. Mixing them is a bad choice.
  ability to define custom regex's for style placeholders
  we need ability to get style parameters same way we set them with setStyle
This commit is contained in:
Fabien Potencier 2011-03-12 13:10:09 +01:00
commit dcc1948fb6
2 changed files with 40 additions and 4 deletions

View File

@ -235,7 +235,7 @@ class Application
'<comment>Options:</comment>', '<comment>Options:</comment>',
); );
foreach ($this->definition->getOptions() as $option) { foreach ($this->getDefinition()->getOptions() as $option) {
$messages[] = sprintf(' %-29s %s %s', $messages[] = sprintf(' %-29s %s %s',
'<info>--'.$option->getName().'</info>', '<info>--'.$option->getName().'</info>',
$option->getShortcut() ? '<info>-'.$option->getShortcut().'</info>' : ' ', $option->getShortcut() ? '<info>-'.$option->getShortcut().'</info>' : ' ',

View File

@ -68,6 +68,22 @@ abstract class Output implements OutputInterface
self::$styles[strtolower($name)] = $options; self::$styles[strtolower($name)] = $options;
} }
/**
* Gets style options from style with specified name.
*
* @param string $name
*
* @return array
*/
static public function getStyle($name)
{
if (!isset(self::$styles[strtolower($name)])) {
throw new \InvalidArgumentException('Undefined style: ' . $name);
}
return self::$styles[strtolower($name)];
}
/** /**
* Sets the decorated flag. * Sets the decorated flag.
* *
@ -164,6 +180,26 @@ abstract class Output implements OutputInterface
*/ */
abstract public function doWrite($message, $newline); abstract public function doWrite($message, $newline);
/**
* Gets regex for a style start.
*
* @return string
*/
protected function getBeginStyleRegex()
{
return '#<([a-z][a-z0-9\-_=;]+)>#i';
}
/**
* Gets regex for a style end.
*
* @return string
*/
protected function getEndStyleRegex()
{
return '#</([a-z][a-z0-9\-_]*)?>#i';
}
/** /**
* Formats a message according to the given styles. * Formats a message according to the given styles.
* *
@ -173,9 +209,9 @@ abstract class Output implements OutputInterface
*/ */
protected function format($message) protected function format($message)
{ {
$message = preg_replace_callback('#<([a-z][a-z0-9\-_=;]+)>#i', array($this, 'replaceStartStyle'), $message); $message = preg_replace_callback($this->getBeginStyleRegex(), array($this, 'replaceBeginStyle'), $message);
return preg_replace_callback('#</([a-z][a-z0-9\-_]*)?>#i', array($this, 'replaceEndStyle'), $message); return preg_replace_callback($this->getEndStyleRegex(), array($this, 'replaceEndStyle'), $message);
} }
/** /**
@ -187,7 +223,7 @@ abstract class Output implements OutputInterface
* *
* @throws \InvalidArgumentException When style is unknown * @throws \InvalidArgumentException When style is unknown
*/ */
private function replaceStartStyle($match) private function replaceBeginStyle($match)
{ {
if (!$this->decorated) { if (!$this->decorated) {
return ''; return '';