momo Tue Aug 12 09:29:53 2003 EDT Modified files: /phpdoc/scripts/rtlpatch HtmlExtParser.class.php Log: cleanup more align improvements.
Index: phpdoc/scripts/rtlpatch/HtmlExtParser.class.php diff -u phpdoc/scripts/rtlpatch/HtmlExtParser.class.php:1.15 phpdoc/scripts/rtlpatch/HtmlExtParser.class.php:1.16 --- phpdoc/scripts/rtlpatch/HtmlExtParser.class.php:1.15 Thu Jul 31 08:53:53 2003 +++ phpdoc/scripts/rtlpatch/HtmlExtParser.class.php Tue Aug 12 09:29:53 2003 @@ -16,7 +16,7 @@ | Authors: Moshe Doron <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: HtmlExtParser.class.php,v 1.15 2003/07/31 12:53:53 momo Exp $ + $Id: HtmlExtParser.class.php,v 1.16 2003/08/12 13:29:53 momo Exp $ */ class CHtmlExtParse extends CHtmlParse{ @@ -42,84 +42,43 @@ //TODO: find exceptions (on the stream part there are some) } } - $b = $HEType["b"]; - if(isset($this->EBT[$b])){ - $ar = array("class","function"); - for($a=0;$a<count($this->EBT[$b]);$a++){ - $elem = &$this->ATE[$this->EBT[$b][$a]]; - if($this->comp_properties($elem,$ar)){ - $elem["dir"] = "ltr"; - if(isset($this->ATE[$this->EBT[$b][$a]+1]["data"])){ - $this->ATE[$this->EBT[$b][$a]+1]["data"] = " ".$this->ATE[$this->EBT[$b][$a]+1]["data"]; - } - } - } - } - - //fix consts: - $tmp=0; - do{ - if($tmp = $this->get_element_id_by_rule(array("tag"=>"tt","properties"=>array("class","constant"),"offset"=>($tmp+1)))){ - $this->ATE[$tmp-1]["dir"] = "ltr"; - } - } while($tmp); + $tmp=0; + while ($tmp = $this->get_element_id_by_rule(array("tag"=>"b","properties"=>array("class","function"),"offset"=>($tmp+1)))){ + $this->ATE[$tmp]["dir"] = "ltr"; + $this->add_nbsp($tmp,$tmp+3); + } //fix systemitem: - do{ - if($tmp = $this->get_element_id_by_rule(array("tag"=>"span","properties"=>array("class","systemitem"),"offset"=>($tmp+1)))){ - $this->ATE[$tmp-1]["dir"] = "ltr"; - } + $tmp=0; + while($tmp = $this->get_element_id_by_rule(array("tag"=>"span","properties"=>array("class","systemitem"),"offset"=>($tmp+1)))){ + $this->ATE[$tmp-1]["dir"] = "ltr"; } while($tmp); - //ltr literals: - $tmp=0; - do{ - if($tmp = $this->get_element_id_by_rule(array("tag"=>"tt","properties"=>array("class","literal"),"offset"=>($tmp+1)))){ - $this->ATE[$tmp]["dir"] = "ltr"; - if(isset($this->ATE[$tmp+1]["data"])){ - $this->ATE[$tmp+1]["data"] = " ".$this->ATE[$tmp+1]["data"]; - } - } - } while($tmp); - - //fix configure options: - $tmp=0; - do{ - if($tmp = $this->get_element_id_by_rule(array("tag"=>"tt","properties"=>array("class","option"),"offset"=>($tmp+1)))){ - $this->ATE[$tmp]["dir"] = "ltr"; - } - } while($tmp); - - //fix filenames: - $tmp=0; - do{ - if($tmp = $this->get_element_id_by_rule(array("tag"=>"tt","properties"=>array("class","filename"),"offset"=>($tmp+1)))){ - $this->ATE[$tmp]["dir"] = "ltr"; - //if filename not before punctuation marks, add to eliminate the align issue came with dir=rtl: - if(isset($this->ATE[$tmp+3]["data"]{0})){ - $ord = ord($this->ATE[$tmp+3]["data"]{0}); - if($ord>65||$ord==32||$ord==40||$ord==41){//without (all the punctuation marks whitout space, and brackets). - $this->ATE[$tmp]["chaintoclose"] = " "; - } - } - } - } while($tmp); - - //fix varnames: + //fix filenames,varnames,userinput,configure options: $tmp=0; - do{ - if($tmp = $this->get_element_id_by_rule(array("tag"=>"tt","properties"=>array("class","varname"),"offset"=>($tmp+1)))){ - $this->ATE[$tmp]["dir"] = "ltr"; - //if varname not before punctuation marks, add to eliminate the align issue came with dir=rtl: - if(isset($this->ATE[$tmp+3]["data"]{0})){ - $ord = ord($this->ATE[$tmp+3]["data"]{0}); - if($ord>65||$ord==32||$ord==40||$ord==41){//without (all the punctuation marks whitout space, and brackets). - $this->ATE[$tmp]["chaintoclose"] = " "; - } - } - } - } while($tmp); - + while($tmp = $this->get_element_id_by_rule(array("method"=>"prop_or_comp", + "tag"=>"tt", + "properties"=>array("class","filename", + "class","varname", + "class","userinput", + "class","literal", + "class","option"), + "offset"=>($tmp+1)))){ + $this->ATE[$tmp]["dir"] = "ltr"; + $this->add_nbsp($tmp,$tmp+3); + } + + //fix consts, parameter: + $tmp=0; + while($tmp = $this->get_element_id_by_rule(array("method"=>"prop_or_comp", + "tag"=>"tt", + "properties"=>array("class","constant", + "class","parameter"), + "offset"=>($tmp+1)))){ + $this->ATE[$tmp]["dir"] = "ltr"; + $this->add_nbsp($tmp,$tmp+5); + } + //fix warnning boxes: $tmp=0; while($tmp = $this->get_element_id_by_rule(array("tag"=>"div","properties"=>array("class","warning"),"offset"=>($tmp+1)))){ @@ -128,7 +87,13 @@ $this->ATE[$td]["align"] = "right"; } } - + + //fix th: + $tmp=0; + while($tmp = $this->get_element_id_by_rule(array("tag"=>"th","offset"=>($tmp+1)))){ + $this->ATE[$tmp]["align"] = "right"; + } + //fix caution boxes: $tmp=0; while($tmp = $this->get_element_id_by_rule(array("tag"=>"div","properties"=>array("class","caution"),"offset"=>($tmp+1)))){ @@ -137,7 +102,7 @@ $this->ATE[$td]["align"] = "right"; } } - + //fix for TOC if($tmp = $this->get_element_id_by_rule(array("tag"=>"div","properties"=>array("class","TOC"),"offset"=>(0)))){ $tocend = $this->ECE[$tmp]; @@ -145,7 +110,7 @@ $this->ATE[$tmp]["dir"] = "rtl"; } } - + //rtl all the divs $div = $HEType["div"]; if(isset($this->EBT[$div])){ @@ -153,7 +118,7 @@ $this->ATE[$this->EBT[$div][$a]]["dir"] = "rtl"; } } - + // fix the embeded php code: $pre = $HEType["pre"]; if(isset($this->EBT[$pre])){ @@ -161,7 +126,7 @@ $this->ATE[$this->EBT[$pre][$a]]["dir"] = "ltr"; } } - + //fix the meta: $meta = $HEType["meta"]; if(isset($this->EBT[$meta])){ @@ -172,16 +137,26 @@ } } } - + + //parent is the element that open before current location and close after: + function get_parent($id){ + for($a=$id-1;$a>0;$a--){ + if($this->ECE[$a]>$id) { + return $a; + } + } + return false; + } + function get(){ global $EHType,$HEType; - + $cnt = count($this->ATE); - + for($a=0;$a<$cnt;$a++){ - $ret[$a] = ""; + $ret[$a] = ""; } - + for($a=1;$a<$cnt;$a++){ $tg = array_shift($this->ATE[$a]); if($tg<0) continue; @@ -195,69 +170,92 @@ else $ret[$a].=" $key=\"$value\""; } $ret[$a].=">$chaintoend"; - + if($this->ECE[$a]!=$a) $ret[$this->ECE[$a]] .= " </$tag>$chaintoclose"; } else if($tg == __HTML_PROCESS__){ $ret[$a].="<".$this->ATE[$a]["data"]. "\n?>"; } else if($tg < __HTML_UNKNOWN__){ - $ret[$a].=" ".$this->ATE[$a]["data"]." "; + $ret[$a].=" ".$this->ATE[$a]["data"]." "; } //mysyslog($ret[$a]); } return implode($ret,"\r\n"); - + } - - + + // return element ATE id by: // tag, property, offset on ATE and index (mean, offset on EBT[tag]) function get_element_id_by_rule($param){ global $EHType,$HEType; - + extract($param); - + $tag = $HEType[$tag]; if(!isset($properties)) $properties = false; if(!isset($offset)) $offset = 0; if(!isset($index)) $index = 0; - + if(!isset($method)) $method = "prop_and_comp"; + if(!isset($this->EBT[$tag])) return false; - + $cnt = count($this->EBT[$tag]); - + for($a=0;$a<$cnt;$a++){ $elem = $this->EBT[$tag][$a]; if($elem < $offset) continue; - if($properties && !$this->comp_properties($this->ATE[$elem],$properties)) continue; + if($properties && !$this->$method($this->ATE[$elem],$properties)) continue; if($index--) continue; return $elem; } - + return false; } - - function comp_properties(&$elem,&$properties){ - for($a=0;$a<count($properties);$a+=2){ - if(!isset($elem[$properties[$a]]) - || ($elem[$properties[$a]]!=$properties[$a+1])){ - return false; - } - } - return true; - } - + + //compare properties with and rule + function prop_and_comp(&$elem,&$properties){ + for($a=0;$a<count($properties);$a+=2){ + if(!isset($elem[$properties[$a]]) + || ($elem[$properties[$a]]!=$properties[$a+1])){ + return false; + } + } + return true; + } + + //compare properties with or rule + function prop_or_comp(&$elem,&$properties){ + for($a=0;$a<count($properties);$a+=2){ + if(isset($elem[$properties[$a]]) && ($elem[$properties[$a]]==$properties[$a+1])){ + return true; + } + } + return false; + } + function change_tag_type($id,$newtag){ $this->ATE[$id]["w4htype"] = $newtag; $this->ATE[$this->ECE[$id]]["w4htype"] = $newtag; - + if($newtag < __HTML_UNKNOWN__){ if(!isset($this->ATE[$id]["data"])) $this->ATE[$id]["data"] = ""; } - + //TODO: update the EBT } - + + //this function used to add before texts to avoid joining of ltr const funcname etc, to the follow text: + function add_nbsp($id, $ordid){ + if(isset($this->ATE[$ordid]["data"]{0})){ + $ord = ord($this->ATE[$ordid]["data"]{0}); + //if text not before punctuation marks (without space, and brackets), add to eliminate the align issue came with dir=rtl: + if($ord>65||$ord==32||$ord==40){ + $this->ATE[$id]["chaintoclose"] = " "; + } + } + } + //\/\/\/\/\/\/\/\/\/\ function unsetme(){ unset($this->data); @@ -265,4 +263,4 @@ unset($this->EC); unset($this->EBT); } -} +} \ No newline at end of file
-- PHP Documentation Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php