mirror of
https://github.com/aNNiMON/HotaruFX.git
synced 2024-09-19 14:14:21 +03:00
Fix wrong text token length if it contains escaped characters
This commit is contained in:
parent
2edd05638e
commit
20c9a32e67
@ -106,6 +106,7 @@ public class HotaruLexer extends Lexer {
|
|||||||
private Token tokenizeText(char openChar) {
|
private Token tokenizeText(char openChar) {
|
||||||
next();// "
|
next();// "
|
||||||
clearBuffer();
|
clearBuffer();
|
||||||
|
int startPos = getPos() - 1;
|
||||||
char current = peek(0);
|
char current = peek(0);
|
||||||
while (true) {
|
while (true) {
|
||||||
if (current == '\\') {
|
if (current == '\\') {
|
||||||
@ -125,7 +126,9 @@ public class HotaruLexer extends Lexer {
|
|||||||
case 't': current = next(); buffer.append('\t'); continue;
|
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
|
case 'u': // http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.3
|
||||||
int rollbackPosition = getPos();
|
int rollbackPosition = getPos();
|
||||||
while (current == 'u') current = next();
|
while (current == 'u') {
|
||||||
|
current = next();
|
||||||
|
}
|
||||||
int escapedValue = 0;
|
int escapedValue = 0;
|
||||||
for (int i = 12; i >= 0 && escapedValue != -1; i -= 4) {
|
for (int i = 12; i >= 0 && escapedValue != -1; i -= 4) {
|
||||||
if (isHexNumber(current)) {
|
if (isHexNumber(current)) {
|
||||||
@ -155,7 +158,8 @@ public class HotaruLexer extends Lexer {
|
|||||||
current = next();
|
current = next();
|
||||||
}
|
}
|
||||||
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() {
|
private Token tokenizeOperator() {
|
||||||
|
Loading…
Reference in New Issue
Block a user