31

我在 WordPress 中使用WP-GeSHi,基本上我对它非常满意。但是,当关键字是以下几种情况时,颜色突出显示过于激进:

  1. 变量名(由前导表示@
  2. 另一个词的一部分(例如INin INSERTED
  3. 组合(变量名的一部分,例如JOININin @JOINBING
  4. 方括号内(例如[status]

某些关键字区分大小写,而其他关键字则不区分大小写。下面的屏幕截图总结了出现问题的各种情况:

在此处输入图像描述

现在,其中的代码GeSHi.php非常冗长,我绝不是 PHP 专家。我不怕在这里弄脏我的手,但我希望其他人已经对此代码进行了更正并可以提供一些指示。我已经实现了一种解决方法来防止@@ROWCOUNT错误地突出显示,但这很容易,因为@@ROWCOUNT定义了 - 我只是将数组打乱,以便在之前找到它ROWCOUNT

我希望 GeSHi 完全忽略不是整个单词的关键字(无论它们是由其他字母/数字作为前缀@还是立即被其他字母/数字包围)。JOIN应该是灰色的,但@JOIN不应该是灰色的JOINS。我还希望它忽略方括号内的关键字(毕竟,这是我们告诉 Management Studio 不使用颜色突出显示它的方式,也是我们告诉 SQL 引擎忽略保留字、关键字和无效标识符的方式)。

4

2 回答 2

31

您可以通过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])'
        ),
    )
)

编辑

我已经修改了您的要点,将您添加的一些关键字移SYMBOLSKEYWORDS(尽管在他们自己的组中并使用您的自定义样式),并且我更新了PARSER_CONTROL数组以匹配新的关键字数组索引,并包括默认regex的 geshi生成。链接在这里:

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

于 2014-05-21T03:16:44.567 回答
3

据我说,你正在做的事情会花费很多时间。所以,我建议你安装一个不同的插件

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

编辑:

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

在此处输入图像描述

编辑:

因此,如果您不想使用其他插件,那么我将告诉您有关编码的信息:

首先在文本编辑器中打开 \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'数组的最后:

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'如下所示:

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

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

于 2014-05-14T20:32:12.490 回答