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

