Подсветка нескольких синтаксиса в редакторе Scintilla

Я использую редактор scintilla для подсветки синтаксиса для редактора MarkDown.

        scintilla.Styles[Style.Markdown.Default].ForeColor = Color.Blue;
        scintilla.Styles[Style.Html.Comment].ForeColor = Color.Gray;
        scintilla.Styles[Style.Markdown.Header1].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header2].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header3].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header4].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header6].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.HRule].ForeColor = Color.Purple;
        scintilla.Styles[Style.Markdown.Header5].ForeColor = Color.Green;

        scintilla.Lexer = Lexer.Markdown;

Судя по всему, он не поддерживает Markdown.Comment, который я хочу сделать серым. В комментарии я могу даже захотеть иметь код CSS или Xml. В любом случае, я хочу использовать два типа подсветки. Один для Markdown как есть, а другой для комментариев или внутри комментариев.

Я не нашел ни одного источника, указывающего на множественную подсветку синтаксиса. Однако есть документы для настраиваемой подсветки синтаксиса. Нужен ли мне пользовательский или я могу использовать комбинацию настроек для достижения своей цели?


person Ahmad    schedule 19.08.2019    source источник
comment
Попробуйте обновить или, если вы сдаетесь, попробуйте альтернативное решение: stackoverflow.com/q/16158780/495455   -  person Jeremy Thompson    schedule 23.08.2019
comment
Что именно вы имеете в виду под комментарием? Насколько мне известно, для Markdown нет официального синтаксиса комментариев, за исключением тех, которые упомянуты в stackoverflow.com/q/4823468/8528014   -  person janw    schedule 27.08.2019
comment
@JanWichelmann Я использую html-комментарий, который распознается некоторыми средствами визуализации Markdown.   -  person Ahmad    schedule 28.08.2019


Ответы (1)


К сожалению, вам придется либо реализовать собственный лексический анализатор, либо использовать целую другую библиотеку, поскольку встроенный лексический анализатор Markdown не поддерживает комментарии или подсветку нескольких синтаксиса (как указано в комментарии вверху исходного файла указывает, что он даже не поддерживает раскрашивание встроенного HTML). И поскольку в этом случае Scintilla.NET является простой оболочкой вокруг собственной библиотеки, он не будет предоставлять дополнительные функции для Markdown.

Если вы посмотрите на встроенный лексический модуль HTML , вы увидите, что он реализует поддержку множественной подсветки для различных встроенных языков, таких как PHP и JavaScript; такой же подход потребуется для реализации Markdown.


Некоторые варианты, которые у вас есть для решения этой проблемы:

  • Реализуйте собственный лексер, следуя подходу из лексера HTML, возможно, начиная с исходного кода встроенного лексера Markdown.
  • Используйте другую, более простую настраиваемую структуру для подсветки синтаксиса, например AvalonEdit (WPF-преемник ICSharpCode.TextEditor).
person janw    schedule 28.08.2019