我在 WordPress 中使用 WP-GeSHi,很大程度上我对此非常满意。然而,在一些小场景中,当关键字为:
时,颜色突出显示过于激进:@
表示)IN
中的 INSERTED
)JOIN
中的 IN
和 @JOINBING
)[status]
)某些关键字区分大小写,而其他关键字则不区分大小写。下面的屏幕截图总结了出现问题的各种情况:
现在,
GeSHi.php
中的代码相当冗长,而且我绝不是PHP专家。我不怕在这里弄脏我的手,但我希望其他人对此代码进行了更正并可以提供一些指示。我已经实现了一种解决方法来防止 @@ROWCOUNT
被错误地突出显示,但这很容易,因为 @@ROWCOUNT
已定义 - 我只是将数组打乱,以便在 ROWCOUNT
之前找到它。
我希望 GeSHi 完全忽略不是整个单词的关键字(无论它们是以
@
为前缀还是立即被其他字母/数字包围)。 JOIN
应为灰色,但 @JOIN
和 JOINS
不应为灰色。我还希望它忽略方括号内的关键字(毕竟,这就是我们告诉 Management Studio 不要用颜色突出显示它的方式,也是我们告诉 SQL 引擎忽略保留字、关键字和无效标识符的方式).
您可以通过在数组末尾添加
PARSER_CONTROL
控件来实现此目的:
'PARSER_CONTROL' => array(
'KEYWORDS' => array(
1 => array( // "1" maps to the main keywords near the start of the array
'DISALLOWED_BEFORE' => '(?![\(\w])',
'DISALLOWED_AFTER' => '(?![\(\w])'
),
5 => array( // "5" maps to the shorter keywords like "IN" that are further down
'DISALLOWED_BEFORE' => '(?![\(\w])',
'DISALLOWED_AFTER' => '(?![\(\w])'
),
)
)
编辑
我修改了您的 gist,将您添加到
SYMBOLS
的一些关键字移回到 KEYWORDS
(尽管在他们自己的组中并使用您的自定义样式),并且我更新了 PARSER_CONTROL
数组以匹配新的关键字数组索引,还包括 geshi 生成的默认 regex
。这是链接:
据我所知,你正在做的事情会花费很多时间。因此,我建议您安装不同的插件:
它具有更好的功能,并以更好的方式支持更多语言。因此,它将消除所有这些问题。
编辑:
嘿,我用最新版本尝试了相同的代码并得到了以下结果-
编辑:
所以,如果您不想使用其他插件,那么我会告诉您有关编码的信息:
首先在文本编辑器中打开 \wp-content\plugins\wp-geshi-highlight\geshi\geshi sql.php。
然后,找到数组
'KEYWORDS'
或搜索它。
将
6
添加到最后(在 5
之后)并在其中添加自定义关键字。例如:
5 => array(
'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS', 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL',
'OR', 'OUTER', 'SOME',
),
6 => array( //This line has been added by me
'status' //This line has been added by me
) //This line has been added by me
注意:我刚刚显示了数组元素 5(已经存在)和数组元素 6(我已经制作)。
然后,为了使其区分大小写,请将以下代码添加到
'CASE_SENSITIVE'
数组的最后一个:
6 => true
'CASE_SENSITIVE'
数组应如下所示:
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
1 => false,
2 => false,
3 => false,
4 => false,
5 => false,
6 => true //This line has been added by me
),
现在,您必须为自定义关键字添加样式。这可以通过将以下行添加到
'KEYWORDS'
数组的 'STYLES'
元素来实现。 'STYLES'
数组的starting应如下所示:
'STYLES' => array(
'KEYWORDS' => array(
1 => 'color: #0000FF;',
2 => 'color: #FF00FF;',
3 => 'color: #AF0000;',
4 => 'color: #AF0000;',
5 => 'color: #808080;',
6 => 'color: #0000FF;' //This line has been added by me
),
您可以按照上述指南解决您的问题,但是对于插件突出显示不完整单词的部分,我只有一个解决方案,您将插件更新到最新版本,因为它解决了这个问题。
从员工能力来测试事物。