通用 Colorizer

分享于 

7分钟阅读

Web开发

  繁體
Colorizer Banner

介绍

通用Colorizer对输入文件着色,以便更易于阅读。 下面是一个简单的示例示例。 它也被 ajax lwb 广泛使用。 整个项目将被放置在 SourceForge,所以请检查这个链接的最新版本。 GPC是在GNU库或者更普通的public 许可证( LGPL ) 库或者更一般的通用 public 许可证( LGPL ) 下发布的。

简短

这里有很多colorizers代码。 为了帮助你选择,这些是GPC最重要的特性:

  • 语法块的外观完全可以使用样式表进行定制
  • 解析完全可以使用存储在XML文件中的规则进行
  • 解析器将任何文件作为输入,并生成HTML作为输出。
  • 除语法着色之外,可以突出显示部分,以便在文档中引用它们
  • 在添加对它的他language-的支持时,不需要更改解析器本身

规则定义

为了让你更好地理解它的操作方式,下面是控制 CSS ( 样式表) 亮度的规则集:

<rulefrom="css"pattern="{"to="cssAttribList"/><rulefrom="cssAttribList"pattern=":"transient="cssAttribList"to="cssAttribValue"/><rulefrom="cssAttribList"pattern="[_A-Za-z0-9-]+"transient="cssAttribName"/><rulefrom="cssAttribValue"pattern="[^;}]+"transient="cssAttribValue"to="cssAttribList"/><rulefrom="cssAttribList"pattern="}"transient="cssAttribList"to="css"/>

colorizer本身是一个状态机。 这些规则控制了如何在各种状态之间进行转换,如图 below 所示。 如果"从状态"MATCHES的当前状态及其当前位置的Pattern ( 正则表达式 ) MATCHES 文本,则可以应用该规则。

当前状态的NAME 也用作colorizer的输出中的样式表类 NAME:

.css<span class="code-none">{ color<span class="code-none">:Maroon <span class="code-none">}
.cssAttribName<span class="code-none">{ color<span class="code-none">:Red <span class="code-none">}
.cssAttribList<span class="code-none">{ color<span class="code-none">:Black <span class="code-none">}
.cssAttribValue<span class="code-none">{ color<span class="code-none">:Blue <span class="code-none">}</span></span></span></span></span></span></span></span></span></span></span></span>

规则属性

在示例 上面 中,属性 frompatterntotransient 出现了。 完整的List 如下所示:

NameTypeDescriptionRequired?
pattern正则表达式必须找到这里规则才能执行的Pattern是的
from状态这里规则应用到的初始状态是的
to状态当这里规则完成它的转换时的final 状态不是
transient状态在规则转换过程中存在的状态不是
Push状态在堆栈上推送指定的状态不是
Pop标志从堆栈中弹出状态不是
Add状态将指定状态添加到当前状态集不是
Remove标志从当前状态集移除这里规则状态的初始状态不是
Debug标志在执行这里规则之前调用调试器不是

更高级的功能

如果你只想使用 colorizer,你可以跳过这个部分,但如果好奇心得到你的好处,阅读。"。

规则引擎能够管理多个并发状态。 附加状态用于处理标记为代码段的代码的突出显示。 两个规则 below 作为一对。 第一个在遇到 /*[hilite1]*/ 时将 hilite1 添加到当前状态集。 当遇到 /*[/hilite1]*/ 时,第二个删除这里状态。 noemit 是一种特殊的状态,不产生任何输出。对于3 种语言,有相似的规则集合,可以覆盖规则的4 种不同类型的高亮。 由于这些规则都非常相似,更聪明的定义可以在将来减少这些规则。

<rulefrom="js"pattern="/*[hilite1]*/"add="jsHilite1"transient="noemit"/><rulefrom="jsHilite1"pattern="/*[/hilite1]*/"transient="noemit"remove="true"/>

在HTML中嵌入另外两种语言是可能的,即: CSS ( 样式表) 和 JavaScript。这些是由标记触发的: <style><script> 分别存在当遇到这些标记时,HTML模式必须继续,以便正确地对任何属性进行色彩化。 仅当标记关闭时才应执行 switch 到CSS或者JavaScript的操作。 这种行为由下面的规则对管理。 第一条规则推送对应于即将出现的嵌入式语言的状态。 第二条规则会弹出这个状态,并在标记关闭时使它的成为当前状态。

<rulefrom="htmlOpenTagName"pattern=" |>"to="htmlTag"push="=style:css,script:js,html"/><rulefrom="htmlTag"pattern="/?>"transient="htmlEndTag"pop="true"/>

需要帮助

当前的规则文件支持 HTML。CSS和 JavaScript ( 尽管XML也可以用HTML规则着色)。 我将把它扩展到满足我自己的需要。 但是,如果你自己添加其他语言,请将这些规则发送给我,以便我可以维护主副本。 同样,请让我知道任何 Bug 或者建议的特点,跟踪部分位于这里。

规则执行引擎本身目前仅为 C#。 不过它是一个相当简洁的代码(。<300行排除注释),它被移植到其他环境( 如Java和 JavaScript ) 中。

当然,如果你只是想使用 colorizer,那也很好。

历史记录

  • 第七个 2007年10月: 初始帖子

COL  color  Colorize  
相关文章