From 010660550795e3ca1b26ef6e6902149321ba68ed Mon Sep 17 00:00:00 2001 From: hickert Date: Wed, 21 Mar 2007 08:14:55 +0000 Subject: [PATCH] Updated comment handling git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@5844 594d385d-05f5-0310-b6e9-bd551577e9d8 --- include/sieve/class_My_Tree.inc | 57 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/include/sieve/class_My_Tree.inc b/include/sieve/class_My_Tree.inc index c94d34cef..229f668a2 100644 --- a/include/sieve/class_My_Tree.inc +++ b/include/sieve/class_My_Tree.inc @@ -87,12 +87,17 @@ class My_Tree extends Tree /* Get node */ $node = $this->nodes_[$node_id]; - /* Get last element class */ + /* Get last element class and type */ $last_class = ""; + $last_type = ""; if(count($this->mode_stack)){ $key = key($this->mode_stack); $tmp = array_reverse($this->mode_stack[$key]['ELEMENTS']); $last_class = $tmp[key($tmp)]['class']; + + if(isset($this->mode_stack[$key]['TYPE'])){ + $last_type = $this->mode_stack[$key]['TYPE']; + } } /* This closes the last mode */ @@ -115,38 +120,42 @@ class My_Tree extends Tree $this->handle_elements($tmp,$node_id); } + /* We can't handle comments within if tag right now */ + if($last_type != "if"){ - /* Comments require special attention. - * We do not want to create a single comment element - * foreach each "#comment" string found in the script. - * Sometimes comments are used like this - * # This is a comment - * # and it still is a comment - * # ... - * So we combine them to one single comment. - */ - if($last_class != "comment" && $node['class'] == "comment"){ - $tmp =array_pop($this->mode_stack); - $this->handle_elements($tmp,$node_id); - $this->mode_stack[] = array("TYPE" => $node['class']); - } + /* Comments require special attention. + * We do not want to create a single comment element + * foreach each "#comment" string found in the script. + * Sometimes comments are used like this + * # This is a comment + * # and it still is a comment + * # ... + * So we combine them to one single comment. + */ + if($last_class != "comment" && $node['class'] == "comment"){ + $tmp =array_pop($this->mode_stack); + $this->handle_elements($tmp,$node_id); + $this->mode_stack[] = array("TYPE" => $node['class']); + } - if($last_class == "comment" && $node['class'] != "comment"){ - $tmp =array_pop($this->mode_stack); - $this->handle_elements($tmp,$node_id); + if($last_class == "comment" && $node['class'] != "comment"){ + $tmp =array_pop($this->mode_stack); + $this->handle_elements($tmp,$node_id); + } } - /* Handle identifiers */ $identifiers = array("else","if","elsif","end","reject","redirect","vacation","keep","discard","fileinto","require","stop"); if($node['class'] == "identifier" && in_array($node['text'],$identifiers)){ $this->mode_stack[] = array("TYPE" => $node['text']); } - /* Add current node to current command stack */ - end($this->mode_stack); - $key = key($this->mode_stack); - $this->mode_stack[$key]['ELEMENTS'][] = $node; + if(!($last_type == "if" && $node['class'] == "comment")){ + /* Add current node to current command stack */ + end($this->mode_stack); + $key = key($this->mode_stack); + $this->mode_stack[$key]['ELEMENTS'][] = $node; + } /* Remove last mode from mode stack, cause it was only valid for a single line */ if($rewoke_last){ @@ -560,7 +569,7 @@ class My_Tree extends Tree $tmp3 = split("\n",$tmp2); foreach($tmp3 as $str){ $str2 = trim($str); - if(empty($str2)) continue; + #if(empty($str2)) continue; $tmp.= $buffer.$str."\n"; } } -- 2.30.2