From 20c9a32e6783f27c0d6201d8194c2ab12a059e3f Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 9 Sep 2017 20:24:26 +0300 Subject: [PATCH] Fix wrong text token length if it contains escaped characters --- .../main/java/com/annimon/hotarufx/lexer/HotaruLexer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/annimon/hotarufx/lexer/HotaruLexer.java b/app/src/main/java/com/annimon/hotarufx/lexer/HotaruLexer.java index a51d988..87defbd 100644 --- a/app/src/main/java/com/annimon/hotarufx/lexer/HotaruLexer.java +++ b/app/src/main/java/com/annimon/hotarufx/lexer/HotaruLexer.java @@ -106,6 +106,7 @@ public class HotaruLexer extends Lexer { private Token tokenizeText(char openChar) { next();// " clearBuffer(); + int startPos = getPos() - 1; char current = peek(0); while (true) { if (current == '\\') { @@ -125,7 +126,9 @@ public class HotaruLexer extends Lexer { case 't': current = next(); buffer.append('\t'); continue; case 'u': // http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.3 int rollbackPosition = getPos(); - while (current == 'u') current = next(); + while (current == 'u') { + current = next(); + } int escapedValue = 0; for (int i = 12; i >= 0 && escapedValue != -1; i -= 4) { if (isHexNumber(current)) { @@ -155,7 +158,8 @@ public class HotaruLexer extends Lexer { current = next(); } next(); // " - return addToken(HotaruTokenId.TEXT, getBuffer().toString(), getBuffer().length() + 2); + int actualLength = getPos() - startPos; + return addToken(HotaruTokenId.TEXT, getBuffer().toString(), actualLength); } private Token tokenizeOperator() {