diff options
Diffstat (limited to 'src/main/java/org')
4 files changed, 22 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java b/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java index 82f2a78..914d7de 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/ParagraphMatcher.java @@ -13,7 +13,11 @@ public class ParagraphMatcher implements DocumentElementMatcher<Paragraph> { } public static ParagraphMatcher styleName(String styleName) { - return new ParagraphMatcher(Optional.empty(), Optional.of(new EqualToStringMatcher(styleName)), Optional.empty()); + return styleName(new EqualToStringMatcher(styleName)); + } + + public static ParagraphMatcher styleName(StringMatcher styleName) { + return new ParagraphMatcher(Optional.empty(), Optional.of(styleName), Optional.empty()); } public static ParagraphMatcher orderedList(String level) { 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 ff96a55..7615e65 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 @@ -52,15 +52,24 @@ public class DocumentMatcherParser { private static Optional<StringMatcher> parseStyleName(TokenIterator<TokenType> tokens) { if (tokens.trySkip(TokenType.SYMBOL, "[")) { tokens.skip(TokenType.IDENTIFIER, "style-name"); - tokens.skip(TokenType.SYMBOL, "="); - String value = TokenParser.parseString(tokens); + StringMatcher stringMatcher = parseStringMatcher(tokens); tokens.skip(TokenType.SYMBOL, "]"); - return Optional.of(new EqualToStringMatcher(value)); + return Optional.of(stringMatcher); } else { return Optional.empty(); } } + private static StringMatcher parseStringMatcher(TokenIterator<TokenType> tokens) { + if (tokens.trySkip(TokenType.SYMBOL, "=")) { + return new EqualToStringMatcher(TokenParser.parseString(tokens)); + } 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()); + } + } + private static Optional<NumberingLevel> parseNumbering(TokenIterator<TokenType> tokens) { if (tokens.trySkip(TokenType.SYMBOL, ":")) { boolean isOrdered = parseListType(tokens); diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java index 50fcffe..9dc2d4d 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java @@ -13,7 +13,7 @@ public class StyleMappingTokeniser { TokenType.UNKNOWN, list( RegexTokeniser.rule(TokenType.IDENTIFIER, identifierCharacter + "(?:" + identifierCharacter + "|[0-9])*"), - RegexTokeniser.rule(TokenType.SYMBOL, ":|>|=>|=|\\(|\\)|\\[|\\]|\\||!|\\."), + RegexTokeniser.rule(TokenType.SYMBOL, ":|>|=>|\\^=|=|\\(|\\)|\\[|\\]|\\||!|\\."), RegexTokeniser.rule(TokenType.WHITESPACE, "\\s+"), RegexTokeniser.rule(TokenType.STRING, stringPrefix + "'"), RegexTokeniser.rule(TokenType.UNTERMINATED_STRING, stringPrefix), 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 7ac7643..e1226ee 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 @@ -38,6 +38,10 @@ public class TokenIterator<T> { return tokens.get(index).getTokenType(); } + public Token<T> next() { + return tokens.get(index++); + } + public Token<T> next(T type) { Token<T> token = tokens.get(index); if (token.getTokenType() == type) { |
