問題描述
我在 WordPress 中使用 WP-GeSHi,很大程度上我很高興。然而,有一些小的情景,當一個關鍵字是:顏色突出顯得過於激進
-
變量名稱 (由
@表示) -
另一個詞的一部分 (例如
INSERTED中的IN) -
組合 (變量名稱的一部分,例如
JOIN和@JOINBING中的IN) -
內方括號 (例如
[status])
某些關鍵字區分大小寫,其他關鍵字不區分大小寫。以下截圖總結了出現這種情況的各種情況:
現在,GeSHi.php 中的代碼是相當冗長的,我絕對不是 PHP 專家。我不怕讓我的手在這裏有點髒,但我希望有人對這段代碼做了修正,並且可以提供一些指針。我已經實施了一個解決方法,以防止 @@ROWCOUNT 被高亮顯示,但這很容易,因為 @@ROWCOUNT 被定義 – 我只是洗牌,以便在 ROWCOUNT 之前找到。
我想要的是,GeSHi 完全忽略不是全部單詞的關鍵字 (不管是以 @為前綴,還是立即被其他字母/數字包圍) 。 JOIN 應為灰色,但 @JOIN 和 JOINS 不應該。我也希望忽略方括號內的關鍵字 (畢竟,這是我們如何告訴 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。

