<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
require_once('ParserDriver/Tokenizer/Regex.php');
require_once('CSS/Parser.php');
class CSS_Lexer extends ParserDriver_Tokenizer_Regex
{
/* __construct {{{ */
/**
* Constructor
*
* @param string CSS Code
*/
public function __construct($input = null)
{
parent::__construct();
if (!is_null($input)) $this->setInput($input);
//$this->addRegex('@\\{@',
$this->addRegex('@[ \\t\\r\\n\\f]*\\{@',
CSS_Parser::LBRACE);
$this->addRegex('@;@',
CSS_Parser::SEMICOLON);
$this->addRegex('@\.@',
CSS_Parser::DOT);
$this->addRegex('@:@',
CSS_Parser::COLON);
$this->addRegex('@=@',
CSS_Parser::EQUAL);
$this->addRegex('@\\*@',
CSS_Parser::STAR);
$this->addRegex('@/@',
CSS_Parser::SLASH);
$this->addRegex('@\\[@',
CSS_Parser::LBRACKET);
$this->addRegex('@\\]@',
CSS_Parser::RBRACKET);
$this->addRegex('@-@',
CSS_Parser::MINUS);
$this->addRegex('@;?[ \\t\\r\\n\\f]*\\}@',
CSS_Parser::RBRACE);
$this->addRegex('@\\)@',
CSS_Parser::RPAREN);
$this->addRegex('@>@',
CSS_Parser::GREATER);
$this->addRegex('@,@',
CSS_Parser::COMMA);
$this->addRegex('@\\+@',
CSS_Parser::PLUS);
$this->addRegex('@([ \\t\\r\\n\\f])+@',
CSS_Parser::SS);
$this->addRegex('@/\\*[^*]*\\*+([^/*][^*]*\\*+)*/@',
CSS_Parser::COMMENT);
$this->addRegex('@<!--@',
CSS_Parser::CDO);
$this->addRegex('@-->@',
CSS_Parser::CDC);
$this->addRegex('@~=@',
CSS_Parser::INCLUDES);
$this->addRegex('@\\|=@',
CSS_Parser::DASHMATCH);
$this->addRegex('@(\\"([^\\n\\r\\f\\\\"]|\\\\(\\n|\\r\\n|\\r|\\f)|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))*\\")|(\\\'([^\\n\\r\\f\\\\\']|\\\\(\\n|\\r\\n|\\r|\\f)|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))*\\\')@',
CSS_Parser::STRING);
$this->addRegex('@(-?([_a-z]|([\\200-\\377])|((\\\\([0-9a-f]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))([_a-z0-9-]|([\\200-\\377])|((\\\\([0-9a-f]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))*)\\(@',
CSS_Parser::CSSFUNCTION); // Out of order, relative to the spec, in order for the global regexp to match. Does not affect lexing, as far as tests show
$this->addRegex('@url\\(([ \\t\\r\\n\\f]+)?((\\"([^\\n\\r\\f\\\\"]|\\\\(\\n|\\r\\n|\\r|\\f)|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))*\\")|(\\\'([^\\n\\r\\f\\\\\']|\\\\(\\n|\\r\\n|\\r|\\f)|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))*\\\'))([ \\t\\r\\n\\f]+)?\\)|url\\(([ \\t\\r\\n\\f]+)?(([!#$%&*-~]|([\\200-\\377])|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))*)([ \\t\\r\\n\\f]+)?\\)@',
CSS_Parser::URI); // Out of order, relative to the spec, in order for the global regexp to match. Does not affect lexing, as far as tests show
$this->addRegex('@-?([_a-zA-Z]|([\\200-\\377])|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))([_a-zA-Z0-9-]|([\\200-\\377])|((\\\\([0-9a-fA-F]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-fA-F]))*@',
CSS_Parser::IDENT);
$this->addRegex('@#[a-fA-F0-9]{6}@', CSS_Parser::HASH);
$this->addRegex('@#([_a-zA-Z0-9-]|[\\200-\\377]|\\\\[0-9a-fA-F]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-fA-F])+@',
CSS_Parser::HASH);
$this->addRegex('@\@import@',
CSS_Parser::IMPORT_SYM);
$this->addRegex('@\@page@',
CSS_Parser::PAGE_SYM);
$this->addRegex('@\@media@',
CSS_Parser::MEDIA_SYM);
$this->addRegex('@\@charset@',
CSS_Parser::CHARSET_SYM);
$this->addRegex('@!(([ \\t\\r\\n\\f])|(/\\*[^*]*\\*+([^/*][^*]*\\*+)*/))*important@',
CSS_Parser::IMPORTANT_SYM);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)em@',
CSS_Parser::EMS);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)ex@',
CSS_Parser::EXS);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)(px|cm|mm|in|pt|pc)@',
CSS_Parser::LENGTH);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)(deg|rad|grad)@',
CSS_Parser::ANGLE);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)(ms|s)@',
CSS_Parser::TIME);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)(hz|khz)@',
CSS_Parser::FREQ);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)-?([_a-z]|([\\200-\\377])|((\\\\([0-9a-f]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))([_a-z0-9-]|([\\200-\\377])|((\\\\([0-9a-f]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))*@',
CSS_Parser::DIMENSION);
$this->addRegex('@([0-9]+|[0-9]*\\.[0-9]+)%@',
CSS_Parser::PERCENTAGE);
$this->addRegex('@([0-9]*\\.[0-9]+)@',
CSS_Parser::NUMBER);
$this->addRegex('@([0-9]+)@',
CSS_Parser::NUMBER);
// $this->addRegex('@(\\"([^\\n\\r\\f\\\\"]|\\\\(\\n|\\r\\n|\\r|\\f)|((\\\\([0-9a-f]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))*)|(\\\'([^\\n\\r\\f\\\\\']|\\\\(\\n|\\r\\n|\\r|\\f)|((\\\\([0-9a-f]){1,6}(\\r\\n|[ \\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))*)@',
// CSS_Parser::INVALID);
}
/* }}} */
}
?>