yannickl88/css-tokenizer

此包已被弃用且不再维护。未建议替代包。

CSS 分词器

1.2.0 2017-12-01 08:18 UTC

This package is auto-updated.

Last update: 2020-08-15 12:30:18 UTC


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

注意:只有可以跨越多行的标记在 linesoffsets 字段中才有第二个值。这些是 T_WORDT_WHITESPACET_STRINGT_ADWORDT_COMMENT

以下类型已定义

  • T_WHITESPACE,空白字符,如 \t\n\r\f
  • T_WORD,所有单词,如 colorpadding-top12px
  • 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,但强烈不建议在生产代码中使用!