aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-14 22:59:32 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-14 22:59:32 +0000
commit3707fb14902ec697e25d49636c5e13c4c17f3ed7 (patch)
treeefb9c59a408bf8a7fe0cd7b901cec0b7168af211 /src/main
parent7feed8041f5980d94d9a959428385d1c87a65a97 (diff)
Decode escape sequences in strings
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java34
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java2
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));
}
}