public function testCallable() { $source = 'abc'; $expected = Console::open(['color' => 'red']) . 'abc' . Console::close() . Console::reset(); $token = $this->_factory->create('token', ['pos' => 0, 'length' => 3]); $iterator = new Result($source); $iterator->merge([$token, $token->getEnd()]); $mock = $this->getMock('stdClass', ['call']); $mock->expects($this->once())->method('call')->with($token)->willReturn(['color' => 'red']); $formatter = new CliFormatter(['token' => [$mock, 'call']]); $this->assertEquals($expected, $formatter->format($iterator)); }
public function format(Tokens $tokens) { $source = $tokens->getSource(); $result = ''; $last = 0; /** @var Token $token */ foreach ($tokens as $token) { $result .= substr($source, $last, $token->pos - $last); if (($style = ArrayHelper::resolve($this->_styles, $token->name)) !== null) { $result .= $token->isStart() ? Console::open(is_callable($style) ? $style($token) : $style) : Console::close(); } $last = $token->pos; } $result .= substr($source, $last) . Console::reset(); return $result; }