index a45d24e83aa2455afb316ad7878c72eea7e82ff9..ac99301a6f0406dac55cad68e4cf97fb160530c5 100644 (file)
<?php
+/* String used to indent the different code blocks */
define("SIEVE_INDENT_TAB"," ");
+
/* This class is inherited from the original 'Parser'
* class written by Heiko Hund
*/
class My_Parser extends Parser
{
+ var $parent = NULL;
+ var $registeredExtensions_ =array();
- function execute()
+ function My_Parser($parent)
{
+ $this->registeredExtensions_ = array();
+ $this->parent = $parent;
+ }
-
- /* Add Element requested */
- if(isset($_POST['Add_Element'])){
- $this->tree_->Add_Element();
- echo "Move this into Management";
- }
-
- /* Create dump of current sieve script */
- if(isset($_POST['Save_Copy'])){
- echo "Move this into Management";
-
- /* force download dialog */
- header("Content-type: application/tiff\n");
- if (preg_match('/MSIE 5.5/', $HTTP_USER_AGENT) ||
- preg_match('/MSIE 6.0/', $HTTP_USER_AGENT)) {
- header('Content-Disposition: filename="dump.txt"');
- } else {
- header('Content-Disposition: attachment; filename="dump.txt"');
- }
- header("Content-transfer-encoding: binary\n");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
- header("Cache-Control: no-cache");
- header("Pragma: no-cache");
- header("Cache-Control: post-check=0, pre-check=0");
- echo $this->get_sieve_script();
- exit();
- }
-
+ function execute()
+ {
$ret = $this->dumpParseTree();
return($ret);
}
+ /* Check if there are errors, collect them and return them */
+ function check()
+ {
+ return($this->tree_->check());
+ }
+
+
/* Initiate parser, but use some other
* classes, that are rewritten.
*/
function parse($script)
{
+ $script = preg_replace("/^###GOSA/","",$script);
+
+ $this->registeredExtensions_ = array();
$this->status_text = "incomplete";
$this->script_ = $script;
- $this->tree_ = new My_Tree(@Scanner::scriptStart());
+ $this->tree_ = new My_Tree(@Scanner::scriptStart(),$this);
$this->tree_->setDumpFunc(array(&$this, 'dumpToken_'));
- $this->scanner_ = new Scanner($this->script_);
+ $this->scanner_ = new My_Scanner($this->script_);
$this->scanner_->setCommentFunc(array($this, 'comment_'));
if ($this->commands_($this->tree_->getRoot()) &&
$this->scanner_->nextTokenIs('script-end'))
{
+ $this->scanner_->nextToken();
return $this->success_('success');
}
function get_sieve_script()
{
- return($this->tree_->get_sieve_script());
+ return("###GOSA\n".$this->tree_->get_sieve_script());
}
}
- /* Should be obsolete in the end. */
- function dumpToken_(&$token)
+ function dumpParseTree()
{
- if (is_array($token))
- {
- $str = "<" . $token['text'] . "> ";
- foreach ($token as $k => $v)
- {
- $str .= " $k:$v";
- }
- return $str;
- }
- return strval($token);
+ return $this->tree_->execute();
}
}
?>