自己的语法荧光笔

时间:2011-02-17 07:41:02

标签: php syntax-highlighting

我是在PHP中编写自己的简单语法高亮显示器。我已经完成了基于正则表达式和字符串替换的基本算法,但我真正不知道的是如何禁用替换被注释的关键字。

例如:

/**
 * Some class
 *
 * @property-read $foo
 */
 class Test
 {
     private $foo;

     public function __construct()
     {
     }
 }

现在我的解决方案只是突出显示已定义的关键字(如类或变量),以及已注释的关键字。

针对此问题的任何解决方案?

3 个答案:

答案 0 :(得分:5)

为什么不使用PHP的tokenizer为您完成这项工作?这样,你的语法高亮显示器将以与Zend引擎完全相同的方式解析PHP代码,这可能会比正则表达式提供更好的结果。

答案 1 :(得分:1)

为什么不借鉴vi或vim如何做到这一点?很久以前我记得我们开发的一些基于自定义标签的语言,我们想要在VI和VIM中使用语法高亮,也就是当我们更改了几个.vi类型的配置文件时我们提到过,所有的元数据就像哪种颜色到哪种颜色的标签什么是可能的标签等。

详细了解vi或vim或任何文本编辑器如何做到这一点可能会更有帮助!

答案 2 :(得分:0)

您可以通过以下逻辑排除注释行:

如果行以/**开头,则禁用高亮显示 如果下一行以*开头,则不执行任何操作并检查下一行
如果行以*/重新启用突出显示

开头

只是一个快速的猜测,可以更精确地定义,但应该作为逻辑。