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 }
|