Подсветка синтаксиса Lisp для ICSharpCode.TextEditor - PullRequest
7 голосов
/ 02 сентября 2011

Существует ли синтаксис Common Lisp с подсветкой .xshd-файла для использования с ICSharpCode.TextEditor? Я не смог найти его в Google, и формат написания файлов спецификаций подсветки синтаксиса настолько ужасно задокументирован, что я сам не смогу сделать очень хороший. Я могу выделить основные ключевые слова, но не намного.

Это должно иметь следующее:

  • Выделите общие ключевые слова для lisp, такие как list, dolist, read-line. lambda и т. Д.
  • Подсветка синтаксиса для слов после defun, defmacro, defvar и т. Д., Так что в тексте (defun a () ...), a выделяется. Это не должно быть полным, потому что я могу добавить больше, просто один или два хорошо, чтобы показать, как это делается.
  • Выделите такие символы, как :a
  • Выделение списков в кавычках и в форме обратных кавычек, и в форме одинарных кавычек, а также "невыделенные" экранированные формы в списках в кавычках (экранируются ,, @, и т. Д.)
  • Выделите имя вызываемой функции. Например, в тексте (a b c) необходимо выделить a
  • Необязательно: все, что я пропустил, было бы полезно (я новичок в lisp, поэтому не знаю всего, что можно выделить)

Кто-нибудь знает, где взять файл подсветки синтаксиса Common Lisp для ICSharpCode.TextEditor, который имеет эти функции?

1 Ответ

3 голосов
/ 02 сентября 2011

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

<SyntaxDefinition name="Scheme" extensions=".sls;.sps;.ss;.scm" 
     xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
  <Color foreground="Green" name="Comment" />
  <Color foreground="Blue" name="Syntax" />
  <Color foreground="Blue" name="Library Syntax" />
  <Color foreground="Blue" name="Auxilliary Syntax" />
  <Color foreground="DarkMagenta" name="Procedure" />

  <RuleSet>
    <Import ruleSet="Expression"/>
  </RuleSet>

    <RuleSet name="Expression">
        <Span color="Comment" multiline="false">
            <Begin>;</Begin>
        </Span>
    <Span color="Comment" multiline="true" >
      <Begin>\#\|</Begin>
      <End>\|\#</End>
    </Span>
    <Span ruleSet="Expression" multiline="true" >
      <Begin fontWeight="bold">\(</Begin>
      <End fontWeight="bold">\)</End>
    </Span>
    <Span  ruleSet="Expression" multiline="true">
      <Begin fontWeight="bold">\#\(</Begin>
      <End fontWeight="bold">\)</End>
    </Span>

    <Keywords color="Library Syntax">
      <Word>import</Word>
      <Word>export</Word>
      <Word>library</Word>
    </Keywords>

    <Keywords color="Syntax">
      <Word>define</Word>
      <Word>set!</Word>
      <Word>lambda</Word>
      <Word>begin</Word>
      <Word>if</Word>
      <Word>cond</Word>
      <Word>let</Word>
      <Word>letrec</Word>
    </Keywords>

    <Keywords color="Auxilliary Syntax">
      <Word>else</Word>
    </Keywords>

    <Keywords color="Procedure">
      <Word>map</Word>
      <Word>cons</Word>
      <Word>car</Word>
    </Keywords>

  </RuleSet>

</SyntaxDefinition>
...