包详细信息

cssp

css2.8k1.0.6

CSSP — Ometa-JS based CSS parser

自述文件

Предварительные требования:

Установка, удаление и обновление:

Установка: npm install cssp

Обновление: npm update cssp

Удаление: npm uninstall cssp

Описание

По умолчанию CSSP разбирает входной CSS-текст в дерево (parser -- P), затем отправляет дерево на трансформацию (transformer -- TF), после чего транслирует в CSS-текст (translator -- TL).

Таким образом полный цикл выглядит как CSS -> P -> TF -> TL -> CSS, и без указания ключей CSSP отдаст тот же текст, что был на входе.

Использование

Использование command line интерфейса:

cssp
    показывает этот текст
cssp <имя_файла>
    считывает CSS из <имя_файла> и записывает результат полного цикла (тот же CSS) в stdout
cssp <имя_файла> -dp
cssp <имя_файла> --parser
    считывает CSS из <имя_файла> и записывает результат CSS -> P -> stdout
cssp <имя_файла> -df
cssp <имя_файла> --transformer
    считывает CSS из <имя_файла> и записывает результат CSS -> P -> TF -> stdout
cssp <имя_файла> -dl
cssp <имя_файла> --translator
    считывает CSS из <имя_файла> и записывает результат CSS -> P -> TF -> TL -> stdout
cssp <имя_файла> -r <имя_правила>
cssp <имя_файла> --rule <имя_правила>
    считывает CSS из <имя_файла> и передаёт в цикл (P TF TL) <имя_правила>, которое надо обработать
cssp <имя_файла> -t
cssp <имя_файла> --trim
    считывает CSS из <имя_файла> и удаляет начальные и концевые пробельные символы

Примеры:

1) test.css = 'color: red'
> cssp test.css -r declaration -dp
> ['declaration',
    ['property',
      ['ident', 'color']],
    ['value',
      ['s', ' '],
      ['ident', 'red']]]
2) test.css = '10px'
> cssp test.css -r dimension -dp -dl
> ['dimension',
    ['number', '10'], 'px']
  10px

Пример программного использования (Node.js):

var cssp = require('cssp'),
    src = 'a { color: red }',
    tree, trans,
    dst;

tree = cssp.parse(src);
trans = cssp.transform(tree);
dst = cssp.translate(trans);

console.log('Source CSS:');
console.log(src);
console.log('Parser out:');
console.log(tree);
console.log('Transformer out:');
console.log(trans);
console.log('Translator out:');
console.log(dst);

更新日志

1.0.1:

* Добавлена обработка селектора атрибута вида [att].

1.0.0:

* Добавлены CSSParser, CSSTransformer и CSSTranslator в API.
* Внутренняя переорганизация parser.ometajs.
* Добавлен '=' в operator.

0.0.11:

* Токен dimension теперь содержит юниты не строкой, но токеном ident.
* Более строгий символьный класс для dimension и vhash.
* Из токена delim убрано хранение ','.
* Правило braces упрощено в части начальных пробельных символов.
* Токен filterp удалён, вместо него в filter теперь используется property.
* Правило atrulepart удалено, вместо него используется правило tset.
* Правила function, braces, atrule* упрощены с помощью tset.
* Токен function разделён на function и functionBody.
* Убран трансформер CMP: API.compress(tree).
* Токен class переименован в clazz, чтобы избежать потенциального конфликта с зарезервированным словом.
* Токен function переименован в funktion, чтобы избежать потенциального конфликта с зарезервированным словом.

0.0.10:

* Из правила selector удалено лишнее упоминание правила sc.
* Токен nthselector теперь содержит имя функции не строкой, но токеном ident.
* Фикс правила transformer.function: ['function':t :x ...] -> ['function':t any:x ...].
* Фикс неправильной обработки sc в правиле parser.braces.
* Правило hash разделено на shash (hash в selector) и vhash (hash в value) из-за разной семантики.
* Фикс неправильной обработки operator внутри braces (операторы отсутствовали).
* Фикс неправильной обработки отрицательных чисел.
* Добавлен трансформер CMP: API.compress(tree).
* Добавлено описание API.
* Дополнен справочник по токенам, но пользоваться им пока рано.

0.0.9:

* Токен percentage теперь содержит число не строкой, но токеном number.
* Токен atkeyword теперь содержит имя не строкой, но токеном ident.
* Удалено дублирование \n\r в макросе m_nl.
* Переход на ometajs 2.0.8.
* Начат справочник по токенам, но пользоваться им пока рано.

0.0.8:

* Добавлена поддержка хаков IE вида -filter, *filter, _filter и вендорного -ms-filter.
* API.array2string разделён на API.printTree(tree) и API.treeToString(tree, level).
* Фикс неправильной обработки ident с escape символами.

0.0.7:

* Добавлено правило progid для корректной обработки filter с множественным progid.

0.0.6:

* Макрос m_comment удалён за ненужностью.
* Добавлено правило filter для обработки filter.
* Функция array2string вынесена в API.

0.0.5:

* Правило atrulem удалено.
* Добавлено правило atruler для обработки at-rule структуры "@atrule .. { .. {} .. }".
* Добавлено правило namespace для корректного включения символа '|' в селекторах.
* Добавлен API и пример использования.
* Тесты и клиент теперь используют API.
* Файл cssptt.post.js удалён, его содержимое вынесено в parser.ometajs.
* Переход на ometajs 2.0.7.
* Больше тестов.

0.0.4:

* Добавлено правило functionExpression для корректной обработки expression.
* В клиента добавлена опция -t / --trim.
* Фикс неправильной обработки block, у которого только whitespace внутри.
* Фикс неправильной обработки operator внутри function.
* Исходник парсеров разнесён на три файла: parser, transformer, translator.
* Больше тестов.

0.0.1, 0.0.2, 0.0.3:

* Прототип, тесты, первая beta.