| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?php namespace Sieve;include_once('SieveDumpable.php');class SieveToken implements SieveDumpable{    const Unknown          = 0x0000;    const ScriptEnd        = 0x0001;    const LeftBracket      = 0x0002;    const RightBracket     = 0x0004;    const BlockStart       = 0x0008;    const BlockEnd         = 0x0010;    const LeftParenthesis  = 0x0020;    const RightParenthesis = 0x0040;    const Comma            = 0x0080;    const Semicolon        = 0x0100;    const Whitespace       = 0x0200;    const Tag              = 0x0400;    const QuotedString     = 0x0800;    const Number           = 0x1000;    const Comment          = 0x2000;    const MultilineString  = 0x4000;    const Identifier       = 0x8000;    const String        = 0x4800; // Quoted | Multiline    const StringList    = 0x4802; // Quoted | Multiline | LeftBracket    const StringListSep = 0x0084; // Comma | RightBracket    const Unparsed      = 0x2200; // Comment | Whitespace    const TestList      = 0x8020; // Identifier | LeftParenthesis    public $type;    public $text;    public $line;    public function __construct($type, $text, $line)    {        $this->text = $text;        $this->type = $type;        $this->line = intval($line);    }    public function dump()    {        return '<'. SieveToken::escape($this->text) .'> type:'. SieveToken::typeString($this->type) .' line:'. $this->line;    }    public function text()    {        return $this->text;    }    public function is($type)    {        return (bool)($this->type & $type);    }    public static function typeString($type)    {        switch ($type)        {        case SieveToken::Identifier: return 'identifier';        case SieveToken::Whitespace: return 'whitespace';        case SieveToken::QuotedString: return 'quoted string';        case SieveToken::Tag: return 'tag';        case SieveToken::Semicolon: return 'semicolon';        case SieveToken::LeftBracket: return 'left bracket';        case SieveToken::RightBracket: return 'right bracket';        case SieveToken::BlockStart: return 'block start';        case SieveToken::BlockEnd: return 'block end';        case SieveToken::LeftParenthesis: return 'left parenthesis';        case SieveToken::RightParenthesis: return 'right parenthesis';        case SieveToken::Comma: return 'comma';        case SieveToken::Number: return 'number';        case SieveToken::Comment: return 'comment';        case SieveToken::MultilineString: return 'multiline string';        case SieveToken::ScriptEnd: return 'script end';        case SieveToken::String: return 'string';        case SieveToken::StringList: return 'string list';        default: return 'unknown token';        }    }    protected static $tr_ = array("\r" => '\r', "\n" => '\n', "\t" => '\t');    public static function escape($val)    {        return strtr($val, self::$tr_);    }}
 |