如何在ScintillaNET中实现自动完成和lexing

时间:2013-10-31 13:39:10

标签: c# scintilla

我正在尝试在我的一个ScintillaNET项目中实现java自动完成,但我遇到了问题。我一直在遵循所需的所有步骤

  • 确保ScintillaNET(和必需的.dll)位于我的PATH变量中。
  • 将CustomLocation和Language参数值添加到我的编辑器

以下是我的审核代码,我确保我已正确设置了参数...我只是迷路了。

Scintilla sciEditor = (Scintilla)selectedTab.Controls["sciEditor"];
            using (StreamReader sr = new StreamReader(fileName))
            {
                String line = sr.ReadToEnd();
                sciEditor.Text = line;
            }
            if (ext == "java")
            {
                sciEditor.ConfigurationManager.Language = "java";
                sciEditor.ConfigurationManager.CustomLocation = @"C:\java.xml";
                sciEditor.CharAdded += new EventHandler<CharAddedEventArgs>(sciEditor_CharAdded);
            }

所以你可以看到我将文本读入Scintilla编辑器,如果文件ext是java(我在这个块之上解析,并获得有效答案),那么我将编辑语言设置为java,并设置我的自定义位置到java.xml文件

<?xml version="1.0" encoding="utf-8"?>
<ScintillaNET>
  <Language Name="java">
    <AutoComplete FillUpCharacters=".([" SingleLineAccept="True" IsCaseSensitive="False">
      <List>
        abstract assert boolean break byte case catch char class continue default do double else enum extends
        final finally float for if import int interface long native new package private protected public return
        short static strictfp super switch synchronized this throw throws transient try void volatile while
      </List>
    </AutoComplete>

    <Indentation TabWidth="4" SmartIndentType="cpp" />

    <Lexer LexerName="java" LineCommentPrefix="//" StreamCommentPrefix="/* " StreamCommentSuffix=" */" >
      <Keywords List="0" Inherit="False">
        abstract assert break case catch continue default do else extends final finally for if import interface
        native new package private protected public return strictfp super switch synchronized this throw throws
        transient try volatile while
      </Keywords>
      <Keywords List="1" Inherit="False">
        boolean byte char class double enum float int long short static
      </Keywords>
    </Lexer>
  </Language>
</ScintillaNET>

每当我部署(并在我的C:\文件夹中放置.xml(或部署在我的可执行文件旁边)时,它都不会应用任何样式(并且自动完成是空的)。除了下载和重新编译我自己的,我有不知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

同样的问题今天发生在我身上,我被禁止提出这样的问题。 对ScintillaNET开发人员感到羞耻。 试图定义自己的自定义语言,但最终你不能这样做。 所以,我所做的是我使用预先构建的语言作为NAME,然后扩展该LANGUAGE而不是定义我自己的语言,而ScintillaNET无法找到。希望你明白,我花了四天时间才想到它,这是一个愚蠢的蠢事。感谢查尔斯:) - dreamincode.net的提示,因为我的头被吹得喘不过气来。