Extract duplicated code into a method

This commit is contained in:
Sigee 2024-07-11 11:32:00 +02:00
parent 0ed6d4854d
commit 63da95a9d9
1 changed files with 23 additions and 20 deletions

View File

@ -348,16 +348,7 @@ final class Lexer implements Closeable {
}
}
} else if (isEscape(c)) {
if (isEscapeDelimiter()) {
token.content.append(delimiter);
} else {
final int unescaped = readEscape();
if (unescaped == EOF) { // unexpected char after escape
token.content.append((char) c).append((char) reader.getLastChar());
} else {
token.content.append((char) unescaped);
}
}
appendNextEscapedCharacterToToken(token);
} else if (isEndOfFile(c)) {
if (lenientEof) {
token.type = Token.Type.EOF;
@ -412,16 +403,7 @@ final class Lexer implements Closeable {
}
// continue
if (isEscape(ch)) {
if (isEscapeDelimiter()) {
token.content.append(delimiter);
} else {
final int unescaped = readEscape();
if (unescaped == EOF) { // unexpected char after escape
token.content.append((char) ch).append((char) reader.getLastChar());
} else {
token.content.append((char) unescaped);
}
}
appendNextEscapedCharacterToToken(token);
} else {
token.content.append((char) ch);
}
@ -435,6 +417,27 @@ final class Lexer implements Closeable {
return token;
}
/**
* Appends the next escaped character to the token's content.
*
* @param token
* the current token
* @throws IOException
* on stream access error
*/
private void appendNextEscapedCharacterToToken(final Token token) throws IOException {
if (isEscapeDelimiter()) {
token.content.append(delimiter);
} else {
final int unescaped = readEscape();
if (unescaped == EOF) { // unexpected char after escape
token.content.append(escape).append((char) reader.getLastChar());
} else {
token.content.append((char) unescaped);
}
}
}
/**
* Greedily accepts \n, \r and \r\n This checker consumes silently the second control-character...
*