ICSharpCode.TextEditor的Lisp语法高亮

7
是否有适用于ICSharpCode.TextEditor的Common Lisp语法突出显示.xshd文件?我在Google上没有找到一个,而编写语法突出显示规范文件的格式文档非常糟糕,以至于我自己无法做出很好的文件。我可以突出显示基本关键字,但不多。
它需要具备以下功能:
- 突出显示Common Lisp关键字,例如list、dolist、read-line、lambda等。 - 为defun、defmacro、defvar等后面的单词进行语法突出显示,使得在文本(defun a () ...)中,a被突出显示。它不必完整,因为我可以添加更多,只需要一个或两个就可以展示如何完成。 - 突出显示符号,例如:a - 在backquote和single quote形式的引用列表中突出显示引用列表,并"取消突出显示"引用列表中的转义形式(通过,、@,等进行转义) - 突出显示调用的函数名。例如,在文本(a b c)中,需要突出显示a。 - 可选:我可能错过了其他有用的内容(我是Lisp的新手,所以我不知道可以突出显示什么)
是否有人知道在哪里可以获取一个具有这些特点的Common Lisp语法突出显示文件,以供ICSharpCode.TextEditor使用?

1
如果你得到了答案,请“Ping”我,我也想在Scheme中实现这个 :) - leppie
@leppie 我怀疑我不会得到答案,但我很快就会设置赏金。 - Seth Carnegie
你使用的ICSharpCode.TextEditor版本是哪个?我可以帮你查一下。 - leppie
@leppie 我已经尝试了3.2版本和最新版本(4.x)。如果你找到了一个解决方法,我很乐意奖励你。 - Seth Carnegie
我之前在找,基本上要从 XML-Mode.xhsd 开始。 - leppie
显示剩余3条评论
1个回答

3
这是一个Scheme语言的高亮显示器的开端。虽然不是很花哨,但它展示了递归是如何在规则集中工作的。
<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>

这大概就是我拥有的东西,从 Ruby .xshd 开始。你知道如何使它突出显示括号中的第一个单词吗?比如在 (a b c) 中,a 将被突出显示。 - Seth Carnegie
在 Ruby 中,它有 <MarkPrevious bold="true" color="MidnightBlue">(</MarkPrevious>,这使得括号前面的单词变成蓝色。我尝试了 MarkNext,但它不起作用。你能想到什么吗? - Seth Carnegie
在规则中使用正向后行断言的正则表达式应该可以工作,但是它却没有 :( - leppie
你如何使用正则表达式?你需要告诉它这些是正则表达式而不是纯文本吗? - Seth Carnegie
那么,你能写一个规则来转义引用列表中的内容吗?例如,在 \(a b @,c d e @,(f g h))中,整个内容都应该被突出显示,除了c(f g h)`。 - Seth Carnegie
1
尽管这不完全是我所需要的,但还是谢谢你的尝试,送你50分声望 :) - Seth Carnegie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接