改进T-SQL的GeSHi语法高亮

时间:2014-05-08 14:15:39

标签: wordpress syntax-highlighting geshi

我在WordPress中使用WP-GeSHi,在很大程度上我对此非常满意。但是,有一些小的场景,当关键字为:

时,颜色突出显示过于激进
  1. 变量名称(由前导@表示)
  2. 另一个字的一部分(例如IN中的INSERTED
  3. 组合(变体名称的一部分,例如JOIN中的IN@JOINBING
  4. 在方括号内(例如[status]
  5. 某些关键字区分大小写,而其他关键字则不区分大小写。下面的屏幕截图总结了出现这种情况的各种情况:

    enter image description here

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

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

2 个答案:

答案 0 :(得分: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])'
        ),
    )
)

修改

我已修改您的要点,将您添加到SYMBOLS的部分关键字移回KEYWORDS(虽然在他们自己的群组中并使用您的自定义样式),我更新了PARSER_CONTROL数组以匹配新的关键字数组索引,还包括geshi生成的默认regex。这是链接:

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

答案 1 :(得分:3)

据我所知,你在做什么会花费很多时间。因此,我建议您安装其他plugin

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

编辑:

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

enter image description here

编辑:

所以,如果您不想使用其他插件,那么我会告诉您编码:

首先在文本编辑器中打开\ 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
            ),

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