function list var $keywords; // array of keywords for each language var $langs_ini; // direct read of ini file // array of lang=> (keys => val) function phpide_languages () { // load the config file global $application; $homedir=getenv("HOME"); if (substr(PHP_OS, 0, 3) == 'WIN') { $homedir = "C:\Program Files"; } $filename = dirname(__FILE__).DIRECTORY_SEPARATOR ."LanguageModes"; //$this->read_config_ini($filename); $altfile = $homedir . DIRECTORY_SEPARATOR . "." . APPNAME . DIRECTORY_SEPARATOR . "LanguageModes"; if (file_exists($altfile )) { $filename = $altfile; } $this->read_config_ini($filename); /* add seperator */ $this->language_menu = &new GtkMenu(); $this->language_menu_item = &new GtkMenuItem(); $this->language_menu_item->show(); $this->language_menu->add($this->language_menu_item); // load all the classes foreach ($this->langs_ini as $lang=>$data) { //$lang = trim($lang); if ($lang == "Languages") continue; // add to menu! $title = $lang; if (@$data["title"]) $title =$this->langs_ini[$lang]["title"]; $this->language_menu_item = &new GtkMenuItem($title); $this->language_menu_item->connect("activate",array(&$this,"change_language"),$lang); $this->language_menu_item->show(); $this->language_menu->add($this->language_menu_item); // load parsers $dir = dirname(__FILE__). "/$lang" ; if (file_exists($dir)) if (is_dir($dir)) { if (file_exists(dirname(__FILE__)."/$lang/phpide_parser_$lang.class")) require_once(dirname(__FILE__)."/$lang/phpide_parser_$lang.class"); // load any function defs. // this needs cleaning up to use help files from devhelp $dh = opendir(dirname(__FILE__)."/$lang"); while (($file = readdir($dh)) != NULL) { if (!ereg("_functions",$file)) continue; $this->read_function_file($lang,dirname(__FILE__)."/$lang/$file"); } } } $this->language_config_dialog = &new language_config( dirname(__FILE__) . "/languages_dialog.glade"); $this->language_config_dialog->init($this->language_config_dialog->language); // load language onto menu. $this->language_selector = $application->glade->get_widget("change_language"); $this->language_menu->show(); $this->language_selector->set_submenu( $this->language_menu); } function read_function_file($lang,$file) { //echo "loading $lang, $file"; $data = file($file); for ($i=0;$ifunctions[$lang][$info[1]] = trim($line); if (!@$this->keywords[$lang] ) $this->keywords[$lang]=""; $this->keywords[$lang] .= " " . $info[1]; } } function get_definition($URL,$function) { //echo "LANG IS ". $this->documents[$URL]; if (!($lang = $this->documents[$URL])) return; return @$this->functions[$lang][$function]; } function read_config_ini($filename) { // well parse_ini_file is barfed on large files - buffer overflows.! // $this->lang_ini = parse_ini_file ($filename, TRUE); $args = array(); $major=""; $data = file($filename); foreach($data as $line) { $tline = trim($line); if (!trim($tline)) continue; if (($tline{0} == "[") && ($tline{strlen($tline)-1} == "]")) { $major = substr($tline,1,-1); continue; } if (!$major) continue; if (!strpos($tline,"=")) continue; $p=strpos($tline,"="); $left = trim(substr($tline,0,$p)); $right = trim(substr($tline,$p+1)); //echo "SET $major, $left, $right\n"; if (@$args) unset($args); if (ereg("keywords([0-9]+)",$left,$args)) if ($args[1] > 4) continue; $this->langs_ini[$major][$left]=$right; } foreach($this->langs_ini as $major=>$data) { $f =$filename . "." . strtolower(str_replace(" ", "_",$major)); if (file_exists($f)) { $d = implode("",file($f)); $d = str_replace("\n", " ", $d); $this->langs_ini[$major]["keywords5"]=$d; continue; } } } function save_ini() { $homedir=getenv("HOME"); $out = ""; foreach ($this->langs_ini as $major=>$data) { $out .= "[$major]\n"; foreach ($data as $k=>$v) { if (isset($args)) unset($args); if (ereg("keywords([0-9]+)",$k,$args)) if ($args[1] > 4) continue; $v = str_replace("\n", "\\n", $v); $out .= "$k=$v\n"; } } $filename = $homedir . "/." . APPNAME . "/LanguageModes"; //echo "WRITING TO $filename\n"; $fh=fopen($filename,"w"); fwrite($fh,$out); fclose($fh); // write the keywords! foreach ($this->langs_ini as $major=>$data) { if (!@$data["keywords5"]) continue; $f =$filename . "." . strtolower(str_replace(" ", "_",$major)); $fh=fopen($f,"w"); fwrite($fh,str_replace(" ", "\n",$data["keywords5"])); fclose($fh); } } function get_language_from_URL($URL) { global $application; $default = @$application->transports->documents[$URL]->default_language; if (@$this->documents[$URL]) return $this->documents[$URL]; foreach ($this->langs_ini as $lang => $data) { for($j=0;$j<@$data["rules_count"];$j++) { if ($data["type_{$j}_type"] != 0) continue; if (!ereg(".".$data["type_{$j}_rule"]."$", $URL)) continue; $this->documents[$URL] = $lang; return $this->documents[$URL]; /* echo "checking rule" . $this->languages[$i]->type_rule[$j] . "\n type " . $this->languages[$i]->type_type[$j] . "\n"; */ } } return $default; } function load_document($bookmarkid, $URL) { $this->parse_all($bookmarkid, $URL); if (@$this->documents[$URL]) return; $this->documents[$URL] = $this->get_language_from_URL($URL); if (!$this->documents[$URL]) return; $this->parse_all($bookmarkid, $URL); } function parse_all( $bookmarkid,$URL) { global $application; if (!@$this->documents[$URL]) return; $parser = "phpide_parser_".$this->documents[$URL]; if (class_exists($parser)) { if (@$this->parsers[$URL]) unset($this->parsers[$URL]); $edit_bits = $application->transports->documents[$URL]->in_editor; foreach($edit_bits as $what) { $this->parsers[$URL][$what] = &new $parser(); $this->parse($bookmarkid,$URL,$what); } } } function parse($bookmarkid,$URL,$what="data") { global $application; if (!@$this->documents[$URL]) return; //echo "ATTEMPTING TO PARSE"; if (!$this->parsers[$URL]) return; if (@$this->parsers[$URL][$what]->data == $application->transports->documents[$URL]->$what) return; // nothing changed! $parser = get_class($this->parsers[$URL][$what]); unset($this->parsers[$URL][$what]); $this->parsers[$URL][$what] = &new $parser(); $this->parsers[$URL][$what]->data = $application->transports->documents[$URL]->$what; $this->parsers[$URL][$what]->parse(); //echo serialize($this->parsers[$URL]->classes); } function get_suggestions ($URL, $word) { if (!$this->documents[$URL]) return; $data = &$this->langs_ini[$this->documents[$URL]]; for($i=1;$i<6;$i++) { $kw = "keywords" . $i; if (!$data[$kw]) continue; if (isset($matches)) unset($matches); if (preg_match_all ("( ".$word ."[^ ]*)" , $data[$kw], $matches, PREG_PATTERN_ORDER)) return $matches[0]; } } function get_styles($URL, $style="0", $what="fore") { return $this->get_val($URL,"style_{$style}_{$what}"); } function get_val($URL, $what="") { if (!$this->documents[$URL]) return; // echo "FETCHING $what"; $data = $this->langs_ini[$this->documents[$URL]]; if (!$data) return; // echo " RETURNING {$data[$what]}\n"; if (@$data[$what] === "true") $data[$what]=1; return @$data[$what]; } function get_style_keys($URL) { global $phpmole_Styles; if (!$this->documents[$URL]) return; $data= $this->langs_ini[$this->documents[$URL]]; if (!$data) return; $keys = array(); $args=array(); foreach($data as $k=>$v) { if ($args) unset($args); if (!ereg("style_([0-9]+)_([a-z]+)",$k,$args)) continue; $keys[$args[1]] = "Y"; } if ($styledata = $phpmole_Styles[$data["lexer"]]) foreach ($styledata as $k=>$v) $keys[$v] = "Y"; return $keys; } function get_keywords($URL, $id) { if ($id < 5) return $this->get_val($URL,"keywords{$id}"); $ret=""; for ($i=5;$i<30;$i++) $ret .= $this->get_val($URL,"keywords{$i}"); return $ret; } function change_language($w,$data) { global $application; $doc = $application->module_manager->broadcast_get("get_active_document"); if (!$doc) return; if ($data == "Languages") return; list($bookmarkid,$URL) = $doc; //echo "SETTING $URL to $data\n"; $this->documents[$URL] = $data; $application->load_document($bookmarkid,$URL); $parser = "phpide_parser_".$this->documents[$URL]; if (class_exists($parser)) { if ($this->parsers[$URL]) unset($this->parsers[$URL]); $edit_bits = $application->transports->documents[$URL]->in_editor; foreach($edit_bits as $what) { $this->parsers[$URL][$what] = &new $parser(); $this->parse($bookmarkid,$URL,$what); } } $application->module_manager->broadcast( "set_language",array($bookmarkid,$URL)); } } ?>