我可以使用perl的Parse :: RecDescent来就地解析文件吗?

时间:2019-07-06 21:46:27

标签: css parsing grammar in-place

我想编写一个简单的CSS“预处理器”,根据用户输入的配置文件注释掉CSS文件中的构造。目标是使诸如“注释适用于XYZ元素的所有ABC属性”之类的动作自动化。

除了添加的注释之外,处理后的CSS文件还必须保持与输入文件相同-包括缩进,换行和原始注释。

有一些perl CSS解析器:

https://metacpan.org/pod/CSS(轻巧)

https://metacpan.org/pod/CSS::Simple

但它们不保留结构和/或注释。

我考虑过编写自己的Parse :: RecDescent解析器(CSS :: Parse :: Heavy to reference!中有很多代码!),但是我不知道的部分是如何在执行过程中保留现有文本。解析。我希望通过模式返回实际内容的字符串,但是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);
      }
}

0 个答案:

没有答案