summaryrefslogtreecommitdiff
path: root/framework/Vendor/PhpShell/PHP/Shell/Extensions.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Vendor/PhpShell/PHP/Shell/Extensions.php')
-rw-r--r--framework/Vendor/PhpShell/PHP/Shell/Extensions.php86
1 files changed, 86 insertions, 0 deletions
diff --git a/framework/Vendor/PhpShell/PHP/Shell/Extensions.php b/framework/Vendor/PhpShell/PHP/Shell/Extensions.php
new file mode 100644
index 00000000..9b210c47
--- /dev/null
+++ b/framework/Vendor/PhpShell/PHP/Shell/Extensions.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+* the interface for all shell extensions
+*
+* Extension can hook into the execution of the shell
+*
+* examples:
+* - execution time for parsing and execute
+* - colours for the output
+* - inline help
+*
+*
+*/
+interface PHP_Shell_Extension {
+ public function register();
+}
+
+/**
+* storage class for Shell Extensions
+*
+*
+*/
+class PHP_Shell_Extensions {
+ /**
+ * @var PHP_Shell_Extensions
+ */
+ static protected $instance;
+
+ /**
+ * storage for the extension
+ *
+ * @var array
+ */
+ protected $exts = array();
+
+ /**
+ * the extension object gives access to the register objects
+ * through the a simple $exts->name->...
+ *
+ * @param string registered name of the extension
+ * @return PHP_Shell_Extension object handle
+ */
+ public function __get($key) {
+ if (!isset($this->exts[$key])) {
+ throw new Exception("Extension $s is not known.");
+ }
+ return $this->exts[$key];
+ }
+
+ /**
+ * register set of extensions
+ *
+ * @param array set of (name, class-name) pairs
+ */
+ public function registerExtensions($exts) {
+ foreach ($exts as $k => $v) {
+ $this->registerExtension($k, $v);
+ }
+ }
+
+ /**
+ * register a single extension
+ *
+ * @param string name of the registered extension
+ * @param PHP_Shell_Extension the extension object
+ */
+ public function registerExtension($k, PHP_Shell_Extension $obj) {
+ $obj->register();
+
+ $this->exts[$k] = $obj;
+ }
+
+ /**
+ * @return object a singleton of the class
+ */
+ static function getInstance() {
+ if (is_null(self::$instance)) {
+ $class = __CLASS__;
+ self::$instance = new $class();
+ }
+ return self::$instance;
+ }
+}
+
+