[ Index ] |
|
Code source de PRADO 3.0.6 |
1 <?php 2 3 require_once(dirname(__FILE__)."/Extensions.php"); /* for the PHP_Shell_Interface */ 4 5 /** 6 * 7 */ 8 class PHP_Shell_Options implements PHP_Shell_Extension { 9 /* 10 * instance of the current class 11 * 12 * @var PHP_Shell_Options 13 */ 14 static protected $instance; 15 16 /** 17 * known options and their setors 18 * 19 * @var array 20 * @see registerOption 21 */ 22 protected $options = array(); 23 24 /** 25 * known options and their setors 26 * 27 * @var array 28 * @see registerOptionAlias 29 */ 30 protected $option_aliases = array(); 31 32 public function register() { 33 $cmd = PHP_Shell_Commands::getInstance(); 34 $cmd->registerCommand('#^:set #', $this, 'cmdSet', ':set <var>', 'set a shell variable'); 35 } 36 37 /** 38 * register a option 39 * 40 * @param string name of the option 41 * @param object a object handle 42 * @param string method-name of the setor in the object 43 * @param string (unused) 44 */ 45 public function registerOption($option, $obj, $setor, $getor = null) { 46 if (!method_exists($obj, $setor)) { 47 throw new Exception(sprintf("setor %s doesn't exist on class %s", $setor, get_class($obj))); 48 } 49 50 $this->options[trim($option)] = array("obj" => $obj, "setor" => $setor); 51 } 52 53 /** 54 * set a shell-var 55 * 56 * :set al to enable autoload 57 * :set bg=dark to enable highlighting with a dark backgroud 58 */ 59 public function cmdSet($l) { 60 if (!preg_match('#:set\s+([a-z]+)\s*(?:=\s*([a-z0-9]+)\s*)?$#i', $l, $a)) { 61 print(':set failed: either :set <option> or :set <option> = <value>'); 62 return; 63 } 64 65 $this->execute($a[1], isset($a[2]) ? $a[2] : null); 66 } 67 68 /** 69 * get all the option names 70 * 71 * @return array names of all options 72 */ 73 public function getOptions() { 74 return array_keys($this->options); 75 } 76 77 /** 78 * map a option to another option 79 * 80 * e.g.: bg maps to background 81 * 82 * @param string alias 83 * @param string option 84 */ 85 public function registerOptionAlias($alias, $option) { 86 if (!isset($this->options[$option])) { 87 throw new Exception(sprintf("Option %s is not known", $option)); 88 } 89 90 $this->option_aliases[trim($alias)] = trim($option); 91 92 } 93 94 /** 95 * execute a :set command 96 * 97 * calls the setor for the :set <option> 98 * 99 * 100 */ 101 private function execute($key, $value) { 102 /* did we hit a alias (bg for backgroud) ? */ 103 if (isset($this->option_aliases[$key])) { 104 $opt_key = $this->option_aliases[$key]; 105 } else { 106 $opt_key = $key; 107 } 108 109 if (!isset($this->options[$opt_key])) { 110 print (':set '.$key.' failed: unknown key'); 111 return; 112 } 113 114 if (!isset($this->options[$opt_key]["setor"])) { 115 return; 116 } 117 118 $setor = $this->options[$opt_key]["setor"]; 119 $obj = $this->options[$opt_key]["obj"]; 120 $obj->$setor($key, $value); 121 } 122 123 static function getInstance() { 124 if (is_null(self::$instance)) { 125 $class = __CLASS__; 126 self::$instance = new $class(); 127 } 128 return self::$instance; 129 } 130 } 131 132
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 21:07:04 2007 | par Balluche grâce à PHPXref 0.7 |