89 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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_);
 | 
						|
    }
 | 
						|
}
 |