Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phprequire_once(dirname(__FILE__)."/Extensions.php"); /* for the PHP_Shell_Interface *//****/class PHP_Shell_Options implements PHP_Shell_Extension {/** instance of the current class** @var PHP_Shell_Options*/static protected $instance;/*** known options and their setors** @var array* @see registerOption*/protected $options = array();/*** known options and their setors** @var array* @see registerOptionAlias*/protected $option_aliases = array();public function register() {// $cmd = PHP_Shell_Commands::getInstance();// $cmd->registerCommand('#^:set #', $this, 'cmdSet', ':set <var>', 'set a shell variable');}/*** register a option** @param string name of the option* @param object a object handle* @param string method-name of the setor in the object* @param string (unused)*/public function registerOption($option, $obj, $setor, $getor = null) {if (!method_exists($obj, $setor)) {throw new Exception(sprintf("setor %s doesn't exist on class %s", $setor, get_class($obj)));}$this->options[trim($option)] = array("obj" => $obj, "setor" => $setor);}/*** set a shell-var** :set al to enable autoload* :set bg=dark to enable highlighting with a dark backgroud*/public function cmdSet($l) {if (!preg_match('#:set\s+([a-z]+)\s*(?:=\s*([a-z0-9]+)\s*)?$#i', $l, $a)) {print(':set failed: either :set <option> or :set <option> = <value>');return;}$this->execute($a[1], isset($a[2]) ? $a[2] : null);}/*** get all the option names** @return array names of all options*/public function getOptions() {return array_keys($this->options);}/*** map a option to another option** e.g.: bg maps to background** @param string alias* @param string option*/public function registerOptionAlias($alias, $option) {if (!isset($this->options[$option])) {throw new Exception(sprintf("Option %s is not known", $option));}$this->option_aliases[trim($alias)] = trim($option);}/*** execute a :set command** calls the setor for the :set <option>***/private function execute($key, $value) {/* did we hit a alias (bg for backgroud) ? */if (isset($this->option_aliases[$key])) {$opt_key = $this->option_aliases[$key];} else {$opt_key = $key;}if (!isset($this->options[$opt_key])) {print (':set '.$key.' failed: unknown key');return;}if (!isset($this->options[$opt_key]["setor"])) {return;}$setor = $this->options[$opt_key]["setor"];$obj = $this->options[$opt_key]["obj"];$obj->$setor($key, $value);}static function getInstance() {if (is_null(self::$instance)) {$class = __CLASS__;self::$instance = new $class();}return self::$instance;}}