Я использую WP-GeSHi в WordPress, и в значительной степени я очень доволен этим. Однако есть несколько небольших сценариев, в которых подсветка цвета слишком агрессивна, когда ключевое слово:
@
)IN
в INSERTED
)JOIN
и IN
в @JOINBING
)[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])'
),
)
)
Edit
Я изменил свой смысл, чтобы переместить некоторые ключевые слова, добавленные вами в SYMBOLS
, назад на KEYWORDS
(хотя в их собственной группе и в вашем пользовательском стиле), и я обновил массив PARSER_CONTROL
, чтобы соответствовать новые индексы ключевых слов, а также включить по умолчанию regex
, который генерирует geshi. Вот ссылка:
По моему мнению, то, что вы делаете, займет много времени. Поэтому я предлагаю вам установить другой plugin:
Он имеет лучшие функции и поддерживает больше языков и лучше. Таким образом, это устранит все эти проблемы.
EDIT:
Эй, я опробовал тот же код с последней версией и получил следующий результат -
EDIT:
Итак, если вы не хотите использовать другой плагин, я расскажу вам о кодировании:
Сначала откройте \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
),
Вы можете решить свои проблемы по приведенным выше рекомендациям, но для той части, в которой плагин выделяет неполные слова, я нашел только одно решение, которое вы обновляете свой плагин до последней версии, потому что он решает эту проблему.
status
не выделен синим цветом в строке 2? Почему join
к части локальных переменных в AND mort IN
линии выделены серым цветом? Как я и подозревал, мне пришлось бы пережить много трудностей, перенеся 150+ постов, чтобы использовать немного другой синтаксис <pre>
, только чтобы обменять мои текущие неудобства форматирования на немного другие.
@
) были выделены определенным цветом. Это легко или сложно?