diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java | 34 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java | 2 |
2 files changed, 34 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java index 2633232..1415227 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java @@ -1,7 +1,39 @@ package org.zwobble.mammoth.internal.styles.parsing; +import java.nio.CharBuffer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class EscapeSequences { + private static final Pattern PATTERN = Pattern.compile("\\\\(.)"); + public static String decode(String value) { - return value.replaceAll("\\\\(.)", "$1"); + return decode(CharBuffer.wrap(value)); + } + + private static String decode(CharBuffer value) { + Matcher matcher = PATTERN.matcher(value); + StringBuilder decoded = new StringBuilder(); + int lastIndex = 0; + while (matcher.find()) { + decoded.append(value.subSequence(lastIndex, matcher.start())); + decoded.append(escapeSequence(matcher.group(1))); + lastIndex = matcher.end(); + } + decoded.append(value.subSequence(lastIndex, value.length())); + return decoded.toString(); + } + + private static char escapeSequence(String code) { + switch (code) { + case "n": + return '\n'; + case "r": + return '\r'; + case "t": + return '\t'; + default: + return code.charAt(0); + } } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java index 54fce78..3760d64 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java @@ -7,6 +7,6 @@ public class TokenParser { public static String parseString(TokenIterator<TokenType> tokens) { String value = tokens.nextValue(TokenType.STRING); - return value.substring(1, value.length() - 1); + return EscapeSequences.decode(value.substring(1, value.length() - 1)); } } |
