問題描述

我在 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。