Почему моя карета прыгает?
Я использую RSyntaxTextArea вместе с пользовательским TokenMaker. TokerMaker, кажется, работает хорошо в том смысле, что выделение работает так, как ожидалось. Например, в строке "класс Фибоначчи" класс выделяется синим цветом, поскольку это зарезервированное ключевое слово, а Фибоначчи - простым черным, поскольку он является идентификатором.
Однако навигация каретки больше не работает правильно, как при использовании мыши и клавиатуры. Например: когда я использую стрелку вправо для перемещения каретки
от "clas|s Фибоначчи" к "классу | Фибоначчи" (где | указывает каретку)
тогда вместо этого он идет к "классу Фибона | Acci"
Почему каретка так прыгает?
PS: My TokenMaker генерирует следующие вызовы addToken для этой строки:
addToken(text, 0, 4, TokenTypes.RESERVED_WORD, 0);
addToken(text, 5, 5, TokenTypes.WHITESPACE, 0);
addToken(text, 6, 14, TokenTypes.IDENTIFIER, 0);
addNullToken();
1 ответ
Я обнаружил проблему, четвертый аргумент моего вызова addToken был неверным. Правильный способ вычисления четвертого аргумента заключается в следующем:
override def getTokenList(text: Segment, initialTokenType: Int, startOffset: Int): Token = {
//some code that defines start, end and tokenType
val documentOffset = start - text.offset + startOffset;
addToken(text, start, end, tokenType, documentOffset);
}