首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改进T的GeSHi语法突出显示

改进T的GeSHi语法突出显示
EN

Stack Overflow用户
提问于 2014-05-08 14:15:39
回答 2查看 1.6K关注 0票数 31

我在WordPress中使用了WordPress,在很大程度上我对它很满意。然而,在一些次要的场景中,当关键字为:

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

某些关键字区分大小写,而另一些则不敏感。下面的截图总结了这些错误的各种情况:

现在,GeSHi.php中的代码非常冗长,我绝不是一个PHP专家。我并不害怕在这里弄脏我的手,但我希望其他人已经修改了这段代码,并能提供一些提示。我已经实现了一个解决方案,以防止@@ROWCOUNT被不正确地突出显示,但是这很容易,因为@@ROWCOUNT是定义的--我只是对数组进行了调整,以便在ROWCOUNT之前找到它。

我希望GeSHi完全忽略不是全部单词的关键字(不管它们是以@为前缀,还是立即被其他字母/数字包围)。JOIN应该是灰色的,但@JOINJOINS不应该。我还希望它忽略方括号内的关键字(毕竟,这是我们告诉Management不要高亮显示它的方法,也是我们告诉SQL引擎忽略保留词、关键字和无效标识符的方法)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-21 03:16:44

可以通过将一个PARSER_CONTROL控件添加到数组的末尾来做到这一点:

代码语言:javascript
复制
'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。以下是链接:

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

票数 31
EN

Stack Overflow用户

发布于 2014-05-14 20:32:12

据我所知,你所做的事需要很长时间。因此,我建议您安装一个不同的插件

它有更好的特性和支持更多的语言和更好的方式。因此,它将消除所有这些问题。

编辑:

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

编辑:

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

首先在文本编辑器中打开\wp-content\plugins\wp-geshi-highlight\geshi\geshi\tsql.php。

然后,定位或搜索数组'KEYWORDS'

6添加到最后一个(在5之后),并在其中添加自定义关键字。例如:

代码语言:javascript
复制
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'数组的最后一个:

代码语言:javascript
复制
6 => true

'CASE_SENSITIVE'数组应该如下所示:

代码语言:javascript
复制
'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'元素来实现。启动 of 'STYLES'数组应该如下所示:

代码语言:javascript
复制
'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
            ),

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23544380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档