wxStyledTextCtrl как стилизовать ключевые слова - PullRequest
0 голосов
/ 10 мая 2019

Возникли проблемы с получением wxStyledTextCtrl для раскраски моих списков слов.

x->m_ctlEdit->SetKeyWords(0,"true false");
x->SetWordChars(wxT("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ._") );
x->StyleSetForeground(wxSTC_HPHP_WORD, wxColour(0x67,0xa6,0xff));

истина и ложь не получают окраски таким образом, я использовал StyleSetForeground во многих других определениях, и все работает нормально, просто возникают проблемы со списками слов.

В качестве второго вопроса, как разделить цвета для разных списков слов? Я знаю, что могу установить другой список ключевых слов с помощью числового идентификатора, но как применить стили для списка ключевых слов, поскольку функция не принимает идентификатор?

Примечание: Использование лексера HTML / PHP, который поставляется как опция по умолчанию с wxStyledTextCtrl

1 Ответ

3 голосов
/ 10 мая 2019

Для лексера wxSTC_LEX_HTML html или лексера wxSTC_LEX_PHPSCRIPT php необходимо указать ключевое слово set 4. Так, например:

x->m_ctlEdit->SetKeyWords(4,"true false");

Если вы используете лексер html, выэто можно узнать, вызвав x->m_ctlEdit->DescribeKeyWordSets();, который вернет следующий список:

  • HTML-элементы и атрибуты
  • ключевые слова JavaScript
  • ключевые слова VBScript
  • Ключевые слова Python
  • ключевые слова PHP
  • ключевые слова SGML и DTD

В этом случае индекс ключевых слов PHP на основе 0 равен 4, так что это будетномер для передачи в метод SetKeyWords.

Однако этот способ проверки не работает при использовании лексера PHP, так как вызов DescribeKeyWordSets вернет только «ключевые слова PHP».Таким образом, вы могли бы подумать, что вы должны вызывать SetKeyWords с 0, но на самом деле вам все равно нужно использовать 4, потому что лексер php-скрипта такой же, как лексер html.Это просто странная вещь для Сцинтиллы.

На несвязанной ноте я думаю, что звонить на SetWordChars не нужно.Согласно документации, это для поиска по словам, а не по ключевым словам.

В качестве второго вопроса, Как разделить цвета для разных списков слов?

Этозависит от лексера.Например, лексер C предлагает следующие наборы ключевых слов

  • Первичные ключевые слова и идентификаторы
  • Вторичные ключевые слова и идентификаторы
  • Ключевые слова комментариев документации
  • Globalклассы и определения типов
  • Определения препроцессора

, которые соответствуют состояниям лексера wxSTC_C_WORD, wxSTC_C_WORD2, wxSTC_C_COMMENTDOCKEYWORD и т. д.

К сожалению, как описановыше HTML-лексер предлагает только 1 набор ключевых слов для PHP.

...