Skip to content

Commit 8bb0585

Browse files
committed
support for events and what not
1 parent 0f711e8 commit 8bb0585

File tree

4 files changed

+106
-67
lines changed

4 files changed

+106
-67
lines changed

src/PatternLab/PatternEngine/Twig/Loaders/FilesystemLoader.php

+27-17
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
namespace PatternLab\PatternEngine\Twig\Loaders;
1414

1515
use \PatternLab\Config;
16+
use \PatternLab\Dispatcher;
1617
use \PatternLab\PatternEngine\Loader;
1718
use \PatternLab\PatternEngine\Twig\TwigUtil;
1819

@@ -24,37 +25,46 @@ class FilesystemLoader extends Loader {
2425
public function __construct($options = array()) {
2526

2627
// set-up default vars
27-
$twigDebug = Config::getOption("twigDebug");
28+
$twigDebug = Config::getOption("twigDebug");
2829

2930
// set-up the paths to be searched for templates
30-
$dirPaths = array();
31-
$dirPaths[] = $options["templatePath"];
32-
$dirPaths[] = $options["partialsPath"];
31+
$filesystemLoaderPaths = array();
32+
$filesystemLoaderPaths[] = $options["templatePath"];
33+
$filesystemLoaderPaths[] = $options["partialsPath"];
3334

3435
// see if source/_macros exists. if so add it to be searchable
35-
$macrosPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_macros";
36+
$macrosPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_macros";
3637
if (is_dir($macrosPath)) {
37-
$dirPaths[] = $macrosPath;
38+
$filesystemLoaderPaths[] = $macrosPath;
3839
}
3940

4041
// see if source/_layouts exists. if so add it to be searchable
41-
$layoutsPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_layouts";
42+
$layoutsPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_layouts";
4243
if (is_dir($layoutsPath)) {
43-
$dirPaths[] = $layoutsPath;
44+
$filesystemLoaderPaths[] = $layoutsPath;
4445
}
4546

4647
// set-up Twig
47-
$twigLoader = new \Twig_Loader_Filesystem($dirPaths);
48-
$this->instance = new \Twig_Environment($twigLoader, array("debug" => $twigDebug));
48+
$twigLoader = new \Twig_Loader_Filesystem($filesystemLoaderPaths);
49+
$instance = new \Twig_Environment($twigLoader, array("debug" => $twigDebug));
4950

5051
// customize Twig
51-
$this->instance = TwigUtil::loadFilters($this->instance);
52-
$this->instance = TwigUtil::loadFunctions($this->instance);
53-
$this->instance = TwigUtil::loadTags($this->instance);
54-
$this->instance = TwigUtil::loadTests($this->instance);
55-
$this->instance = TwigUtil::loadDateFormats($this->instance);
56-
$this->instance = TwigUtil::loadDebug($this->instance);
57-
$this->instance = TwigUtil::loadMacros($this->instance);
52+
TwigUtil::setInstance($instance);
53+
TwigUtil::loadFilters();
54+
TwigUtil::loadFunctions();
55+
TwigUtil::loadTags();
56+
TwigUtil::loadTests();
57+
TwigUtil::loadDateFormats();
58+
TwigUtil::loadDebug();
59+
TwigUtil::loadMacros();
60+
61+
// set-up the dispatcher
62+
$dispatcherInstance = Dispatcher::getInstance();
63+
$dispatcherInstance->dispatch("twigLoader.customize");
64+
$dispatcherInstance->dispatch("twigFilesystemLoader.customize");
65+
66+
// add node visitor
67+
$this->instance = TwigUtil::getInstance();
5868

5969
}
6070

src/PatternLab/PatternEngine/Twig/Loaders/PatternLoader.php

+30-21
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace PatternLab\PatternEngine\Twig\Loaders;
1515

1616
use \PatternLab\Config;
17-
use \PatternLab\PatternEngine\Twig\PatternDataNodeVisitor;
17+
use \PatternLab\Dispatcher;
1818
use \PatternLab\PatternEngine\Twig\Loaders\Twig\PatternPartialLoader as Twig_Loader_PatternPartialLoader;
1919
use \PatternLab\PatternEngine\Twig\Loaders\Twig\PatternStringLoader as Twig_Loader_PatternStringLoader;
2020
use \PatternLab\PatternEngine\Loader;
@@ -28,23 +28,20 @@ class PatternLoader extends Loader {
2828
public function __construct($options = array()) {
2929

3030
// set-up default vars
31-
$twigDebug = Config::getOption("twigDebug");
32-
$twigAutoescape = Config::getOption("twigAutoescape");
31+
$twigDebug = Config::getOption("twigDebug");
32+
$twigAutoescape = Config::getOption("twigAutoescape");
3333

34-
// set-up the loader list
35-
$loaders = array();
34+
// go through various places where things can exist
3635
$filesystemLoaderPaths = array();
37-
$loaders[] = new Twig_Loader_PatternPartialLoader(Config::getOption("patternSourceDir"),array("patternPaths" => $options["patternPaths"]));
38-
3936

4037
// see if source/_macros exists
41-
$macrosPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_macros";
38+
$macrosPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_macros";
4239
if (is_dir($macrosPath)) {
4340
$filesystemLoaderPaths[] = $macrosPath;
4441
}
4542

4643
// see if source/_layouts exists. if so add it to be searchable
47-
$layoutsPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_layouts";
44+
$layoutsPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_layouts";
4845
if (is_dir($layoutsPath)) {
4946
$filesystemLoaderPaths[] = $layoutsPath;
5047
}
@@ -63,30 +60,42 @@ public function __construct($options = array()) {
6360
$filesystemLoaderPaths[] = $object->getPathname();
6461
}
6562
}
63+
64+
// set-up the loader list in order that they should be checked
65+
// 1. Patterns 2. Filesystem 3. String
66+
$loaders = array();
67+
$loaders[] = new Twig_Loader_PatternPartialLoader(Config::getOption("patternSourceDir"),array("patternPaths" => $options["patternPaths"]));
6668

6769
// add the paths to the filesystem loader if the paths existed
6870
if (count($filesystemLoaderPaths) > 0) {
6971
$filesystemLoader = new \Twig_Loader_Filesystem($filesystemLoaderPaths);
7072
$loaders[] = TwigUtil::addPaths($filesystemLoader, $patternSourceDir);
7173
}
72-
73-
$loaders[] = new \Twig_Loader_String();
74+
$loaders[] = new \Twig_Loader_String();
7475

7576
// set-up Twig
76-
$twigLoader = new \Twig_Loader_Chain($loaders);
77-
$this->instance = new \Twig_Environment($twigLoader, array("debug" => $twigDebug, "autoescape" => $twigAutoescape));
77+
$twigLoader = new \Twig_Loader_Chain($loaders);
78+
$instance = new \Twig_Environment($twigLoader, array("debug" => $twigDebug, "autoescape" => $twigAutoescape));
7879

7980
// customize Twig
80-
$this->instance = TwigUtil::loadFilters($this->instance);
81-
$this->instance = TwigUtil::loadFunctions($this->instance);
82-
$this->instance = TwigUtil::loadTags($this->instance);
83-
$this->instance = TwigUtil::loadTests($this->instance);
84-
$this->instance = TwigUtil::loadDateFormats($this->instance);
85-
$this->instance = TwigUtil::loadDebug($this->instance);
86-
$this->instance = TwigUtil::loadMacros($this->instance);
81+
TwigUtil::setInstance($instance);
82+
TwigUtil::loadFilters();
83+
TwigUtil::loadFunctions();
84+
TwigUtil::loadTags();
85+
TwigUtil::loadTests();
86+
TwigUtil::loadDateFormats();
87+
TwigUtil::loadDebug();
88+
TwigUtil::loadMacros();
89+
TwigUtil::addNodeVisitor();
90+
91+
// set-up the dispatcher
92+
$dispatcherInstance = Dispatcher::getInstance();
93+
$dispatcherInstance->dispatch("twigLoader.customize");
94+
$dispatcherInstance->dispatch("twigPatternLoader.customize");
8795

8896
// add node visitor
89-
$this->instance->addNodeVisitor(new PatternDataNodeVisitor());
97+
$this->instance = TwigUtil::getInstance();
98+
9099
}
91100

92101
/**

src/PatternLab/PatternEngine/Twig/Loaders/StringLoader.php

+28-18
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
namespace PatternLab\PatternEngine\Twig\Loaders;
1414

1515
use \PatternLab\Config;
16+
use \PatternLab\Dispatcher;
1617
use \PatternLab\PatternEngine\Loader;
1718
use \PatternLab\PatternEngine\Twig\TwigUtil;
1819

@@ -24,43 +25,52 @@ class StringLoader extends Loader {
2425
public function __construct($options = array()) {
2526

2627
// set-up the defaults
27-
$twigDebug = Config::getOption("twigDebug");
28+
$twigDebug = Config::getOption("twigDebug");
2829

29-
// set-up the loader list
30-
$loaders = array();
30+
// go through various places where things can exist
3131
$filesystemLoaderPaths = array();
3232

3333
// see if source/_macros exists
34-
$macrosPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_macros";
34+
$macrosPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_macros";
3535
if (is_dir($macrosPath)) {
3636
$filesystemLoaderPaths[] = $macrosPath;
3737
}
3838

3939
// see if source/_layouts exists. if so add it to be searchable
40-
$layoutsPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_layouts";
40+
$layoutsPath = Config::getOption("sourceDir").DIRECTORY_SEPARATOR."_layouts";
4141
if (is_dir($layoutsPath)) {
4242
$filesystemLoaderPaths[] = $layoutsPath;
4343
}
4444

45+
// set-up the loader list
46+
$loaders = array();
4547
// add the paths to the filesystem loader if the paths existed
4648
if (count($filesystemLoaderPaths) > 0) {
47-
$loaders[] = new \Twig_Loader_Filesystem($filesystemLoaderPaths);
49+
$loaders[] = new \Twig_Loader_Filesystem($filesystemLoaderPaths);
4850
}
49-
50-
$loaders[] = new \Twig_Loader_String();
51+
$loaders[] = new \Twig_Loader_String();
5152

5253
// set-up Twig
53-
$twigLoader = new \Twig_Loader_Chain($loaders);
54-
$this->instance = new \Twig_Environment($twigLoader, array("debug" => $twigDebug));
54+
$twigLoader = new \Twig_Loader_Chain($loaders);
55+
$instance = new \Twig_Environment($twigLoader, array("debug" => $twigDebug));
5556

56-
// customize the loader
57-
$this->instance = TwigUtil::loadFilters($this->instance);
58-
$this->instance = TwigUtil::loadFunctions($this->instance);
59-
$this->instance = TwigUtil::loadTags($this->instance);
60-
$this->instance = TwigUtil::loadTests($this->instance);
61-
$this->instance = TwigUtil::loadDateFormats($this->instance);
62-
$this->instance = TwigUtil::loadDebug($this->instance);
63-
$this->instance = TwigUtil::loadMacros($this->instance);
57+
// customize Twig
58+
TwigUtil::setInstance($instance);
59+
TwigUtil::loadFilters();
60+
TwigUtil::loadFunctions();
61+
TwigUtil::loadTags();
62+
TwigUtil::loadTests();
63+
TwigUtil::loadDateFormats();
64+
TwigUtil::loadDebug();
65+
TwigUtil::loadMacros();
66+
67+
// set-up the dispatcher
68+
$dispatcherInstance = Dispatcher::getInstance();
69+
$dispatcherInstance->dispatch("twigLoader.customize");
70+
$dispatcherInstance->dispatch("twigStringLoader.customize");
71+
72+
// add node visitor
73+
$this->instance = TwigUtil::getInstance();
6474

6575
}
6676

src/PatternLab/PatternEngine/Twig/TwigUtil.php

+21-11
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@
1414

1515
use \PatternLab\Config;
1616
use \PatternLab\Console;
17+
use \PatternLab\PatternEngine\Twig\PatternDataNodeVisitor;
1718
use \Symfony\Component\Finder\Finder;
1819

1920
class TwigUtil {
2021

21-
protected $instance = '';
22+
protected static $instance = '';
2223

2324
/**
2425
* Get an instance of the Twig environment
@@ -27,11 +28,11 @@ class TwigUtil {
2728
*/
2829
public static function getInstance() {
2930

30-
if (empty($this->instance)) {
31+
if (empty(self::$instance)) {
3132
return false;
3233
}
3334

34-
return $this->instance;
35+
return self::$instance;
3536

3637
}
3738

@@ -45,7 +46,16 @@ public static function setInstance($instance = "") {
4546
Console::writeError("please set the instance");
4647
}
4748

48-
$this->instance = $instance;
49+
self::$instance = $instance;
50+
51+
}
52+
53+
/**
54+
* Adds a node visitor
55+
*/
56+
public static function addNodeVisitor() {
57+
58+
self::$instance->addNodeVisitor(new PatternDataNodeVisitor());
4959

5060
}
5161

@@ -79,7 +89,7 @@ public static function loadDateFormats() {
7989
$intervalFormat = Config::getOption("twigDefaultIntervalFormat");
8090

8191
if ($dateFormat && $intervalFormat && !empty($dateFormat) && !empty($intervalFormat)) {
82-
$this->instance->getExtension("core")->setDateFormat($dateFormat, $intervalFormat);
92+
self::$instance->getExtension("core")->setDateFormat($dateFormat, $intervalFormat);
8393
}
8494

8595
}
@@ -90,7 +100,7 @@ public static function loadDateFormats() {
90100
public static function loadDebug() {
91101

92102
if (Config::getOption("twigDebug")) {
93-
$this->instance->addExtension(new \Twig_Extension_Debug());
103+
self::$instance->addExtension(new \Twig_Extension_Debug());
94104
}
95105

96106
}
@@ -121,7 +131,7 @@ public static function loadFilters() {
121131

122132
// $filter should be defined in the included file
123133
if (isset($filter)) {
124-
$this->instance->addFilter($filter);
134+
self::$instance->addFilter($filter);
125135
unset($filter);
126136
}
127137

@@ -159,7 +169,7 @@ public static function loadFunctions() {
159169

160170
// $function should be defined in the included file
161171
if (isset($function)) {
162-
$this->instance->addFunction($function);
172+
self::$instance->addFunction($function);
163173
unset($function);
164174
}
165175

@@ -194,7 +204,7 @@ public static function loadMacros() {
194204
if ($baseName[0] != "_") {
195205

196206
// add the macro to the global context
197-
$this->instance->addGlobal($file->getBasename(".".$macroExt), $this->instance->loadTemplate($baseName));
207+
self::$instance->addGlobal($file->getBasename(".".$macroExt), self::$instance->loadTemplate($baseName));
198208

199209
}
200210

@@ -230,7 +240,7 @@ public static function loadTags() {
230240

231241
// Project_{filenameBase}_TokenParser should be defined in the include
232242
$className = "Project_".$file->getBasename(".".$tagExt)."_TokenParser";
233-
$this->instance->addTokenParser(new $className());
243+
self::$instance->addTokenParser(new $className());
234244

235245
}
236246

@@ -266,7 +276,7 @@ public static function loadTests() {
266276

267277
// $test should be defined in the included file
268278
if (isset($test)) {
269-
$this->instance->addTest($test);
279+
self::$instance->addTest($test);
270280
unset($test);
271281
}
272282

0 commit comments

Comments
 (0)