Как реализовать автозаполнение и лексирование в ScintillaNET

Я пытаюсь реализовать автозаполнение Java в одном из моих проектов ScintillaNET, и у меня возникла проблема. Я выполнял все необходимые шаги

  • Убедитесь, что 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>

И всякий раз, когда я развертываю (и имею .xml в моей папке C:\ (или развертываю рядом с моим исполняемым файлом), он не применяет никаких стилей (и автозаполнение пусто). Помимо загрузки и перекомпиляции моего собственного, я понятия не имею, что неправильный.


person Shawn Christopher    schedule 31.10.2013    source источник


Ответы (1)


Такая же проблема случилась со мной сегодня, и меня забанили за такой вопрос. Позор разработчикам ScintillaNET. Попытка определить себе собственный язык, но в итоге вы не можете этого сделать. Итак, что я сделал, так это использовал предварительно созданный язык в качестве ИМЯ, а затем расширил этот ЯЗЫК вместо определения своего собственного, который ScintillaNET не может найти. Надеюсь, вы понимаете, мне потребовалось четыре дня, чтобы понять это, такая глупая хрень. Спасибо Чарльзу :) - dreamincode.net за подсказку, а то у меня голова лопнет от атм.

person OmegaExtern    schedule 16.08.2014