Я хочу написать простой «препроцессор» CSS, который закомментирует конструкции в файлах CSS на основе файла конфигурации пользовательского ввода.Цель состоит в том, чтобы автоматизировать такие действия, как «закомментировать все свойства ABC, которые применяются к элементам XYZ».
Помимо добавленных комментариев, обработанные CSS-файлы должны , иначе они будут идентичны входным файлам - включая отступы, переводы строк и оригинальные комментарии.
Существует несколько парсеров CSS на Perl:
https://metacpan.org/pod/CSS (тяжелый и облегченный)
https://metacpan.org/pod/CSS::Simple
но они не сохраняют структуру и / или комментарии.
Я думал о написании своего собственного анализатора Parse :: RecDescent (и в CSS :: Parse :: есть много кодаТяжело ссылаться!) Но часть, которую я не могу понять, это как сохранить существующий текст во время разбора.Я надеялся вернуть строки реального содержимого через шаблоны, но Parse :: RecDescent, похоже, отбрасывает такие вещи, как пробелы и переводы строк, и вместо этого возвращает ссылки на биты и фрагменты содержимого.
Есть ли способполучить Parse :: RecDescent для сохранения фактического строкового содержимого, включая пробелы и переводы строк (и комментарии ??), в процессе производства?
У меня нет кода для обменапотому что у меня пока нет ни одной идеи оторваться от земли.:( Но вот несколько примеров CSS, которые мне нужно проанализировать:
/* ====================================
* <prelreqs>
*/
*[class~="taskreq-d/prelreqs"] > * {
margin-left: 2em; // TO-DO - check
}
*[scale="90"] { font-size: 90%; }
*[scale="100"] { font-size: 100%; }
*[scale="110"] { font-size: 110%; }
@media print{
/* page style stuff */
:root{
/* White page */
border: 1px solid #c6c6c6;
background-color:white;
}}
@page table-of-contents {
@top-left { content: none; }
@top-center { content: none; }
}
@page table-of-contents:left {
@top-left {
content: string(toc-header) " | " counter(page, lower-roman);
}
}