【发布时间】:2013-09-10 19:10:54
【问题描述】:
在 Emacs 中,我正在编写一个混合 PHP 和非 PHP 代码的 PHP 文件,该文件将处于 C++ 模式。我希望 PHP 代码以链接粉红色背景突出显示,以使其在视觉上脱颖而出。
为此,我使用了字体锁定设置:
(make-face 'font-lock-special-macro-face)
(set-face-background 'font-lock-special-macro-face "pink")
(defun add-custom-keyw()
"adds a few special keywords for c and c++ modes"
;
(font-lock-add-keywords nil
'(
("<\\?[^\\?]*\\?>" . 'font-lock-special-macro-face )
; more of those would go here
)
)
)
(setq font-lock-multiline t)
(add-hook 'c++-mode-hook 'add-custom-keyw)
正则表达式匹配典型的 PHP 标记及其包含的文本。但是,如果 PHP 块的主体中有任何字符串文字,则突出显示将失败。我认为这是因为上面定义的面与字符串文字的颜色冲突,默认情况下是彩色文本。
我应该怎么做才能解决这个问题?如果可能,我想保留两种着色方案(突出显示和彩色字符串文字)。
这是一个例子:
代码<?= $className ?> 以粉红色背景突出显示。
代码<?= inputs_to_vector($factors, 'factors') ?> 没有突出显示的背景,字符串文字'factors' 以红色文本显示。
无论使用前导 PHP 标记 <? 还是 <?=,都会发生这种情况。
【问题讨论】:
-
请发布一个示例文字字符串并说明它是否正在接收高亮显示,如果是,它默认是什么脸。
-
好的,我已经编辑了问题以包含一个示例。
-
您是否考虑过修改您的
regexp以将'视为add-custom-keyw中列出的正则表达式的潜在结尾和潜在开始,并排除单引号内的任何内容——例如,排除类似这样的内容:"\\('\\)\\(\\(.\\|\n\\)+?\\)\\('\\)"用于字符串文字的面是:font-lock-string-face
标签: php regex emacs font-lock text-coloring