summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-30 16:39:18 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-30 16:39:18 +0100
commit5a6b58e7b1f36c2858ae60710d289c4760c7d566 (patch)
tree705754bd31f7ef81e18e204f931ddbc1dbefcd60
parent06195a2e0a98d670e732411ab9826dcb0d56cbbf (diff)
Include original line in parse exception
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java19
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java5
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/MammothTests.java5
3 files changed, 24 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java
index 832a673..40fb16b 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java
@@ -1,7 +1,22 @@
package org.zwobble.mammoth.internal.styles.parsing;
public class ParseException extends RuntimeException {
- public ParseException(int lineNumber, Token token, String message) {
- super("error reading style map at line " + lineNumber + ", character " + (token.getCharacterIndex() + 1) + ": " + message);
+ public ParseException(String line, int lineNumber, Token token, String message) {
+ super(generateMessage(line, lineNumber, token, message));
+ }
+
+ private static String generateMessage(String line, int lineNumber, Token token, String message) {
+ return "error reading style map at line " + lineNumber + ", character " + (token.getCharacterIndex() + 1) +
+ ": " + message + "\n\n" +
+ line + "\n" +
+ repeatString(" ", token.getCharacterIndex()) + "^";
+ }
+
+ private static String repeatString(String value, int times) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < times; i++) {
+ builder.append(value);
+ }
+ return builder.toString();
}
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java
index c22e1e6..d1ceb72 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java
@@ -18,10 +18,11 @@ public class StyleMapParser {
public static StyleMap parseStyleMappings(List<String> lines) {
StyleMapBuilder styleMap = StyleMap.builder();
for (int lineIndex = 0; lineIndex < lines.size(); lineIndex += 1) {
+ String line = lines.get(lineIndex);
try {
- handleLine(styleMap, lines.get(lineIndex));
+ handleLine(styleMap, line);
} catch (LineParseException exception) {
- throw new ParseException(lineIndex + 1, exception.getToken(), exception.getMessage());
+ throw new ParseException(line, lineIndex + 1, exception.getToken(), exception.getMessage());
}
}
return styleMap.build();
diff --git a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
index f0210bf..455fa0c 100644
--- a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
@@ -198,7 +198,10 @@ public class MammothTests {
() -> new DocumentConverter().addStyleMap("p =>\np[style-name=] =>"));
assertThat(
exception.getMessage(),
- equalTo("error reading style map at line 2, character 14: expected token of type STRING but was of type CLOSE_SQUARE_BRACKET"));
+ equalTo(
+ "error reading style map at line 2, character 14: expected token of type STRING but was of type CLOSE_SQUARE_BRACKET\n\n" +
+ "p[style-name=] =>\n" +
+ " ^"));
}
@Test