0

我将 RSyntaxTextArea 与自定义 TokenMaker 一起使用。从突出显示按预期工作的意义上说,TokerMaker 似乎运行良好。例如,在“class Fibonacci”行中,class 以蓝色突出显示,因为它是一个保留关键字,而 Fibonacci 是简单的黑色,因为它是一个标识符。

但是,在使用鼠标和键盘时,插入符号导航不再正常工作。例如:当我使用右箭头将插入符号
从“class|s Fibonacci”移动到“class|Fibonacci”(其中|表示插入符号)
然后改为“class Fibon|acci”

为什么插入符号会这样跳来跳去?

PS:我的 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();
4

1 回答 1

0

我发现了问题,我调用 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);
}
于 2015-11-19T18:49:12.283 回答