问题描述

我在 WordPress 中使用 WP-GeSHi,很大程度上我很高兴。然而,有一些小的情景,当一个关键字是:颜色突出显得过于激进

  1. 变量名称 (由 @表示)

  2. 另一个词的一部分 (例如 INSERTED 中的 IN)

  3. 组合 (变量名称的一部分,例如 JOIN@JOINBING 中的 IN)

  4. 内方括号 (例如 [status])

某些关键字区分大小写,其他关键字不区分大小写。以下截图总结了出现这种情况的各种情况:

现在,GeSHi.php 中的代码是相当冗长的,我绝对不是 PHP 专家。我不怕让我的手在这里有点脏,但我希望有人对这段代码做了修正,并且可以提供一些指针。我已经实施了一个解决方法,以防止 @@ROWCOUNT 被高亮显示,但这很容易,因为 @@ROWCOUNT 被定义 – 我只是洗牌,以便在 ROWCOUNT 之前找到。

我想要的是,GeSHi 完全忽略不是全部单词的关键字 (不管是以 @为前缀,还是立即被其他字母/数字包围) 。 JOIN 应为灰色,但 @JOINJOINS 不应该。我也希望忽略方括号内的关键字 (毕竟,这是我们如何告诉 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])'
        ),
    )
)

编辑

我修改了您的要点,将您添加到 SYMBOLS 的一些关键字转移回 KEYWORDS(尽管在自己的组和您的自定义样式),我更新了 PARSER_CONTROL 数组以匹配新的关键字数组索引,并且还包括默认生成的 regex 。链接在这里:

https://gist.github.com/jamend/07e60bf0b9acdfdeee7a

次佳解决思路

据我说,你在做什么需要很多时间。所以,我建议你安装一个不同的 plugin

它具有更好的功能,并支持更多的语言和更好的方式。所以,它会消除所有这些问题。

编辑:

嘿,我尝试了最新版本的相同的代码,并得到以下结果 –

编辑:

所以,如果你不想使用另一个插件,那么我会告诉你有关编码:

首先在文本编辑器中打开 wp-content plugins wp-geshi-highlight geshi geshi tsql.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 将以下代码添加到'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
        ),

现在,您必须为自定义关键字添加样式。这可以通过向'STYLES'阵列的'KEYWORDS'元素添加以下行来实现。 'STYLES'数组的启动应该如下所示:

'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
            ),

您可以通过上述指导原则解决您的问题,但是对于插件突出显示不完整单词的部分,我发现只有一个解决方案,您将插件更新为最新版本,因为它可以解决此问题。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。