diff options
6 files changed, 28 insertions, 10 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java index 418b4be..90b9ba0 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java @@ -29,7 +29,7 @@ public class DocumentMatcherParser { case "strike": return StyleMapBuilder::strikethrough; default: - throw new ParseException(identifier, "Unrecognised document element: " + identifier); + throw new LineParseException(identifier, "Unrecognised document element: " + identifier); } } @@ -89,7 +89,7 @@ public class DocumentMatcherParser { case "unordered-list": return false; default: - throw new ParseException(listType, "Unrecognised list type: " + listType); + throw new LineParseException(listType, "Unrecognised list type: " + listType); } } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java new file mode 100644 index 0000000..944e7f1 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java @@ -0,0 +1,14 @@ +package org.zwobble.mammoth.internal.styles.parsing; + +class LineParseException extends RuntimeException { + private final Token token; + + LineParseException(Token token, String message) { + super(message); + this.token = token; + } + + public Token getToken() { + return token; + } +} 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 61a7c22..832a673 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,7 @@ package org.zwobble.mammoth.internal.styles.parsing; public class ParseException extends RuntimeException { - public ParseException(Token token, String message) { - super("error reading style map at character " + (token.getCharacterIndex() + 1) + ": " + message); + public ParseException(int lineNumber, Token token, String message) { + super("error reading style map at line " + lineNumber + ", character " + (token.getCharacterIndex() + 1) + ": " + message); } } 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 9e8e8c9..c22e1e6 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 @@ -17,8 +17,12 @@ public class StyleMapParser { public static StyleMap parseStyleMappings(List<String> lines) { StyleMapBuilder styleMap = StyleMap.builder(); - for (String line : lines) { - handleLine(styleMap, line); + for (int lineIndex = 0; lineIndex < lines.size(); lineIndex += 1) { + try { + handleLine(styleMap, lines.get(lineIndex)); + } catch (LineParseException exception) { + throw new ParseException(lineIndex + 1, exception.getToken(), exception.getMessage()); + } } return styleMap.build(); } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java index 7ee27e9..805e5f0 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java @@ -52,12 +52,12 @@ public class TokenIterator { } String actualValue = token.getValue(); if (!actualValue.equals(tokenValue)) { - throw new ParseException(token, "expected " + tokenType + " token with value " + tokenValue + " but value was " + actualValue); + throw new LineParseException(token, "expected " + tokenType + " token with value " + tokenValue + " but value was " + actualValue); } index += 1; } - private ParseException unexpectedTokenType(TokenType expected, Token actual) { - return new ParseException(actual, "expected token of type " + expected + " but was of type " + actual.getTokenType()); + private LineParseException unexpectedTokenType(TokenType expected, Token actual) { + return new LineParseException(actual, "expected token of type " + expected + " but was of type " + actual.getTokenType()); } } diff --git a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java index 1f50fc5..f0210bf 100644 --- a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java @@ -198,7 +198,7 @@ public class MammothTests { () -> new DocumentConverter().addStyleMap("p =>\np[style-name=] =>")); assertThat( exception.getMessage(), - equalTo("error reading style map at 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")); } @Test |
