@@ -26,13 +26,8 @@ public function __construct(FilesystemLoader $loader, array $options = []) {
2626
2727 $ this ->addFilter (new TwigFilter ('pluralize ' , [Utils::class, 'pluralize ' ]));
2828 $ this ->addFilter (new TwigFilter ('camelize ' , [Utils::class, 'camelize ' ]));
29-
30- $ article = static function (string $ input ): string {
31- $ first_char = \strtolower ($ input [0 ]);
32- $ article = \in_array ($ first_char , ['a ' , 'e ' , 'i ' , 'o ' , 'u ' ]) ? 'an ' : 'a ' ;
33- return $ article . ' ' . $ input ;
34- };
35- $ this ->addFilter (new TwigFilter ('article ' , $ article ));
29+ $ this ->addFilter (new TwigFilter ('sort_namespaces ' , [self ::class, 'sortNamespaces ' ]));
30+ $ this ->addFilter (new TwigFilter ('article ' , [self ::class, 'article ' ]));
3631
3732 $ u2h = static fn (string $ input ): string => \str_replace ('_ ' , '- ' , $ input );
3833 $ this ->addFilter (new TwigFilter ('u2h ' , $ u2h ));
@@ -64,4 +59,23 @@ public function tokenize(Source $source): TokenStream {
6459 return parent ::tokenize ($ source );
6560 }
6661
62+ /**
63+ * {@selfdoc}
64+ */
65+ public static function sortNamespaces (string $ input ): string {
66+ $ lines = \explode (\PHP_EOL , $ input );
67+ $ lines = \array_unique ($ lines );
68+ \sort ($ lines , \SORT_FLAG_CASE | \SORT_NATURAL );
69+ return \trim (\implode (\PHP_EOL , $ lines )) . \PHP_EOL ;
70+ }
71+
72+ /**
73+ * {@selfdoc}
74+ */
75+ public static function article (string $ input ): string {
76+ $ first_char = \strtolower ($ input [0 ]);
77+ $ article = \in_array ($ first_char , ['a ' , 'e ' , 'i ' , 'o ' , 'u ' ]) ? 'an ' : 'a ' ;
78+ return $ article . ' ' . $ input ;
79+ }
80+
6781}
0 commit comments