aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-03-28 20:00:08 +0100
committerMichael Williamson <mike@zwobble.org>2017-03-28 20:00:08 +0100
commit65df0c14fab30a168de488ec23647cd4b69fb3c4 (patch)
tree687c3a13685c678d8ed2f92986267da2c39217d3 /src/main/java/org/zwobble
parent179e2be404cb80bd6d1b9c331d469b80359dfb8d (diff)
Store character index in exception
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java10
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java14
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java6
4 files changed, 23 insertions, 15 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 56a10da..db0b1bb 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
@@ -7,6 +7,8 @@ import java.math.BigInteger;
import java.util.Optional;
import java.util.function.BiConsumer;
+import static org.zwobble.mammoth.internal.styles.parsing.LineParseException.lineParseException;
+
public class DocumentMatcherParser {
public static BiConsumer<StyleMapBuilder, HtmlPath> parse(TokenIterator<TokenType> tokens) {
Token<TokenType> identifier = tokens.next(TokenType.IDENTIFIER);
@@ -31,7 +33,7 @@ public class DocumentMatcherParser {
BreakMatcher breakMatcher = parseBreakMatcher(tokens);
return (builder, path) -> builder.mapBreak(breakMatcher, path);
default:
- throw new LineParseException(identifier, "Unrecognised document element: " + identifier);
+ throw lineParseException(identifier, "Unrecognised document element: " + identifier);
}
}
@@ -69,7 +71,7 @@ public class DocumentMatcherParser {
} else if (tokens.trySkip(TokenType.SYMBOL, "^=")) {
return new StartsWithStringMatcher(TokenParser.parseString(tokens));
} else {
- throw new LineParseException(tokens.next(), "Expected string matcher but got token " + tokens.next().getValue());
+ throw lineParseException(tokens.next(), "Expected string matcher but got token " + tokens.next().getValue());
}
}
@@ -93,7 +95,7 @@ public class DocumentMatcherParser {
case "unordered-list":
return false;
default:
- throw new LineParseException(listType, "Unrecognised list type: " + listType);
+ throw lineParseException(listType, "Unrecognised list type: " + listType);
}
}
@@ -112,7 +114,7 @@ public class DocumentMatcherParser {
case "column":
return BreakMatcher.COLUMN_BREAK;
default:
- throw new LineParseException(stringToken, "Unrecognised break type: " + typeName);
+ throw lineParseException(stringToken, "Unrecognised break type: " + typeName);
}
}
}
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
index 944e7f1..29d3668 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java
@@ -1,14 +1,18 @@
package org.zwobble.mammoth.internal.styles.parsing;
class LineParseException extends RuntimeException {
- private final Token token;
+ static <T> LineParseException lineParseException(Token<T> token, String message) {
+ return new LineParseException(token.getCharacterIndex(), message);
+ }
+
+ private final int characterIndex;
- LineParseException(Token token, String message) {
+ private LineParseException(int characterIndex, String message) {
super(message);
- this.token = token;
+ this.characterIndex = characterIndex;
}
- public Token getToken() {
- return token;
+ int getCharacterIndex() {
+ return characterIndex;
}
}
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 002a5aa..bb8c0cc 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
@@ -22,7 +22,7 @@ public class StyleMapParser {
try {
handleLine(styleMap, line);
} catch (LineParseException exception) {
- throw new ParseException(generateErrorMessage(line, lineIndex + 1, exception.getToken(), exception.getMessage()));
+ throw new ParseException(generateErrorMessage(line, lineIndex + 1, exception.getCharacterIndex(), exception.getMessage()));
}
}
return styleMap.build();
@@ -64,11 +64,11 @@ public class StyleMapParser {
}
}
- private static String generateErrorMessage(String line, int lineNumber, Token token, String message) {
- return "error reading style map at line " + lineNumber + ", character " + (token.getCharacterIndex() + 1) +
+ private static String generateErrorMessage(String line, int lineNumber, int characterIndex, String message) {
+ return "error reading style map at line " + lineNumber + ", character " + (characterIndex + 1) +
": " + message + "\n\n" +
line + "\n" +
- repeatString(" ", token.getCharacterIndex()) + "^";
+ repeatString(" ", characterIndex) + "^";
}
private static String repeatString(String value, int times) {
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 3507455..5d81c7e 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
@@ -2,6 +2,8 @@ package org.zwobble.mammoth.internal.styles.parsing;
import java.util.List;
+import static org.zwobble.mammoth.internal.styles.parsing.LineParseException.lineParseException;
+
public class TokenIterator<T> {
private final List<Token<T>> tokens;
private int index;
@@ -77,13 +79,13 @@ public class TokenIterator<T> {
}
String actualValue = token.getValue();
if (!actualValue.equals(tokenValue)) {
- throw new LineParseException(token, "expected " + tokenType + " token with value " + tokenValue + " but value was " + actualValue);
+ throw lineParseException(token, "expected " + tokenType + " token with value " + tokenValue + " but value was " + actualValue);
}
index += 1;
}
private LineParseException unexpectedTokenType(T expected, Token<T> actual) {
- return new LineParseException(actual, "expected token of type " + expected + " but was of type " + actual.getTokenType());
+ return lineParseException(actual, "expected token of type " + expected + " but was of type " + actual.getTokenType());
}
public boolean tryParse(Action action) {