annotate vendor/chi-teck/drupal-code-generator/src/Twig/TwigEnvironment.php @ 4:a9cd425dd02b

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:11:55 +0000
parents c75dbcec494b
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace DrupalCodeGenerator\Twig;
Chris@0 4
Chris@0 5 use DrupalCodeGenerator\Utils;
Chris@0 6 use Twig_Environment;
Chris@0 7 use Twig_LoaderInterface;
Chris@0 8 use Twig_SimpleFilter;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * Stores the Twig configuration.
Chris@0 12 */
Chris@0 13 class TwigEnvironment extends Twig_Environment {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * Constructs Twig environment object.
Chris@0 17 *
Chris@0 18 * @param \Twig_LoaderInterface $loader
Chris@0 19 * The Twig loader.
Chris@0 20 */
Chris@0 21 public function __construct(Twig_LoaderInterface $loader) {
Chris@0 22 parent::__construct($loader);
Chris@0 23
Chris@4 24 $this->addFilter(new Twig_SimpleFilter('plural', [Utils::class, 'pluralize']), ['deprecated' => TRUE]);
Chris@0 25
Chris@4 26 $this->addFilter(new Twig_SimpleFilter('pluralize', [Utils::class, 'pluralize']));
Chris@0 27
Chris@0 28 $this->addFilter(new Twig_SimpleFilter('article', function ($string) {
Chris@0 29 $article = in_array(strtolower($string[0]), ['a', 'e', 'i', 'o', 'u']) ? 'an' : 'a';
Chris@0 30 return $article . ' ' . $string;
Chris@0 31 }));
Chris@0 32
Chris@0 33 $this->addFilter(new Twig_SimpleFilter('underscore2hyphen', function ($string) {
Chris@0 34 // @codeCoverageIgnoreStart
Chris@0 35 return str_replace('_', '-', $string);
Chris@0 36 // @codeCoverageIgnoreEnd
Chris@0 37 }, ['deprecated' => TRUE]));
Chris@0 38
Chris@0 39 $this->addFilter(new Twig_SimpleFilter('hyphen2underscore', function ($string) {
Chris@0 40 // @codeCoverageIgnoreStart
Chris@0 41 return str_replace('-', '_', $string);
Chris@0 42 // @codeCoverageIgnoreEnd
Chris@0 43 }, ['deprecated' => TRUE]));
Chris@0 44
Chris@0 45 $this->addFilter(new Twig_SimpleFilter('u2h', function ($string) {
Chris@0 46 return str_replace('_', '-', $string);
Chris@0 47 }));
Chris@0 48
Chris@0 49 $this->addFilter(new Twig_SimpleFilter('h2u', function ($string) {
Chris@0 50 return str_replace('-', '_', $string);
Chris@0 51 }));
Chris@0 52
Chris@0 53 $this->addFilter(new Twig_SimpleFilter('camelize', function ($string, $upper_mode = TRUE) {
Chris@0 54 return Utils::camelize($string, $upper_mode);
Chris@0 55 }));
Chris@0 56
Chris@0 57 $this->addTokenParser(new TwigSortTokenParser());
Chris@0 58 }
Chris@0 59
Chris@4 60 /**
Chris@4 61 * {@inheritdoc}
Chris@4 62 */
Chris@4 63 public function tokenize($source, $name = NULL) {
Chris@4 64 if (!$source instanceof \Twig_Source) {
Chris@4 65 $source = new \Twig_Source($source, $name);
Chris@4 66 }
Chris@4 67 // Remove leading whitespaces to preserve indentation.
Chris@4 68 // @see https://github.com/twigphp/Twig/issues/1423
Chris@4 69 $code = $source->getCode();
Chris@4 70 if (strpos($code, '{% verbatim %}') === FALSE) {
Chris@4 71 $code = preg_replace("/\n +\{%/", "\n{%", $source->getCode());
Chris@4 72 }
Chris@4 73 // Twig source has no setters.
Chris@4 74 $source = new \Twig_Source($code, $source->getName(), $source->getPath());
Chris@4 75 return parent::tokenize($source, $name);
Chris@4 76 }
Chris@4 77
Chris@0 78 }