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