<?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_); } }