public function indexAction() { $lexers = Pygmentize::lexers(); $lexers['objcpp'] = $lexers['objc++']; unset($lexers['objc++']); unset($lexers['obj-c++']); $lexers['objectivecpp'] = $lexers['objectivec++']; unset($lexers['objective-c++']); foreach ($lexers as $k => $v) { unset($lexers[$k]); $k = str_replace('-', '', $k); $k = str_replace('+', '', $k); $k = str_replace(' ', '', $k); $lexers[$k] = $v; } unset($lexers['antlrc#']); unset($lexers['antlr-c#']); unset($lexers['c++']); unset($lexers['c++-objdumb']); unset($lexers['c#']); ksort($lexers); return $this->render('HighlightBundle:docs:index.html.twig', array('lexers' => $lexers)); }
/** * Parses a token and returns a node. * * @param \Twig_Token $token A Twig_Token instance * @throws \Exception * @throws \Twig_Error_Syntax * @return \Twig_NodeInterface A Twig_NodeInterface instance */ public function parse(\Twig_Token $token) { $lineNo = $token->getLine(); $stream = $this->parser->getStream(); $pygmentizeLexers = array_keys(Pygmentize::lexers()); $acceptedLexers = array(); foreach ($pygmentizeLexers as $lexer) { $k = str_replace('+', '', $lexer); $k = str_replace('-', '', $k); $k = str_replace(' ', '', $k); $acceptedLexers[$k] = $lexer; } $additionalLexers = array('twig' => 'jinja', 'twightml' => 'html+jinja', 'htmltwig' => 'html+jinja', 'composer' => 'json', 'objcpp' => 'obj-c++', 'objectivecpp' => 'objective-c++'); $lexer = null; if (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) { if ($stream->test(\Twig_Token::BLOCK_END_TYPE)) { throw new \Twig_Error_Syntax('A lexer is needed for highlighting. ', $stream->getCurrent()->getLine(), $stream->getFilename()); } $lexer = $this->parser->getExpressionParser()->parseExpression(); if (array_key_exists($lexer->getAttribute('name'), $acceptedLexers)) { $lexer->setAttribute('name', $acceptedLexers[$lexer->getAttribute('name')]); } else { if (array_key_exists($lexer->getAttribute('name'), $additionalLexers)) { $lexer->setAttribute('name', $additionalLexers[$lexer->getAttribute('name')]); } else { throw new \Twig_Error_Syntax('Unexpected lexer: ' . $lexer->getAttribute('name'), $stream->getCurrent()->getLine(), $stream->getFilename()); } } } $stream->expect(\Twig_Token::BLOCK_END_TYPE); $source = $this->parser->subparse(array($this, 'decideBlockEnd'), true); if (!$source instanceof \Twig_Node && !$source instanceof \Twig_Node_Text && !$source instanceof \Twig_Node_Expression) { throw new \Twig_Error_Syntax('A message inside a highlight tag must be a simple text.', $source->getLine(), $stream->getFilename()); } $stream->expect(\Twig_Token::BLOCK_END_TYPE); return new HighlightNode($source, $lexer, $lineNo, $this->getTag()); }