Почему моя карета прыгает?

Я использую 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);
}
Другие вопросы по тегам