yannickl88 / css-tokenizer
此包已被弃用且不再维护。未建议替代包。
CSS 分词器
1.2.0
2017-12-01 08:18 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^4.6.0
README
PHP 实现的 CSS 分词器。此实现深受由 https://github.com/postcss/postcss 开发的 JavaScript 变种的启发。然而,结果略有不同。
用法
分词器的用法非常直接
<?php use Yannickl88\Component\CSS\Tokenizer; $tokens = (new Tokenizer())->tokenize('span { padding: 2px; margin: 2px; }');
这相当于
$tokens = [ new Token(Token::T_WORD, 'span', 1, 1, 1, 4), new Token(Token::T_WHITESPACE, ' ', 1, 5), new Token(Token::T_OPENCURLY, '{', 1, 6), new Token(Token::T_WHITESPACE, ' ', 1, 7), new Token(Token::T_WORD, 'padding', 1, 8, 1, 14), new Token(Token::T_COLON, ':', 1, 15), new Token(Token::T_WHITESPACE, ' ', 1, 16), new Token(Token::T_WORD, '2px', 1, 17, 1, 19), new Token(Token::T_SEMICOLON, ';', 1, 20), new Token(Token::T_WHITESPACE, ' ', 1, 21), new Token(Token::T_WORD, 'margin', 1, 22, 1, 27), new Token(Token::T_COLON, ':', 1, 28), new Token(Token::T_WHITESPACE, ' ', 1, 29), new Token(Token::T_WORD, '2px', 1, 30, 1, 32), new Token(Token::T_SEMICOLON, ';', 1, 33), new Token(Token::T_WHITESPACE, ' ', 1, 34), new Token(Token::T_CLOSECURLY, '}', 1, 35), ];
接下来你要做什么完全取决于你!
标记类型
如果你有一个标记,你可以访问一些公共属性
$token->type; // for the type $token->chars; // for the characters $token->lines; // array containing start and (sometimes) end line $token->offsets; // array containing start and (sometimes) end offset
注意:只有可以跨越多行的标记在
lines和offsets字段中才有第二个值。这些是T_WORD、T_WHITESPACE、T_STRING、T_ADWORD和T_COMMENT。
以下类型已定义
T_WHITESPACE,空白字符,如、\t、\n、\r和\f。T_WORD,所有单词,如color、padding-top或12px。T_COLON,冒号:。T_SEMICOLON,分号;。T_COMMA,逗号,。T_TILDE,波浪号~。T_STRING,引号'或"之间的所有内容,如"/path/to/my/image.jpg"。T_OPENBRACKET,开括号(。T_CLOSEBRACKET,闭括号)。T_OPENCURLY,开大括号{。T_CLOSECURLY,闭大括号}T_OPENSQUARE,开方括号[。T_CLOSESQUARE,闭方括号]T_ATWORD,所有以@开头的单词,如@media或@font-face。T_COMMENT,注释,如/* comment */或// comment。
注意:还有
T_BRACKETS,但这仅在解析错误的情况下才会看到此标记。
安装
安装非常简单,此包可在 packagist 上找到。
$ composer require yannickl88/css-tokenizer
或者你可以手动将其添加到 composer.json 中
"require" : { "yannickl88/css-tokenizer" : "*@dev-master" }
注意:如果你想使用最新的更改,可以使用 dev-master,但强烈不建议在生产代码中使用!