diff --git a/CHANGELOG.md b/CHANGELOG.md index 96c678db..79a9fe82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ #### Changed * `image-glide`: update to `4.11.0` version +* `inline-parser`: revert parsing index when `InlineProcessor` returns `null` as result # 4.5.1 diff --git a/app-sample/src/main/java/io/noties/markwon/app/samples/inlineparsing/InlineParsingTooltipSample.java b/app-sample/src/main/java/io/noties/markwon/app/samples/inlineparsing/InlineParsingTooltipSample.java index 24d9f159..aa0616e1 100644 --- a/app-sample/src/main/java/io/noties/markwon/app/samples/inlineparsing/InlineParsingTooltipSample.java +++ b/app-sample/src/main/java/io/noties/markwon/app/samples/inlineparsing/InlineParsingTooltipSample.java @@ -26,6 +26,7 @@ import io.noties.markwon.Markwon; import io.noties.markwon.MarkwonVisitor; import io.noties.markwon.app.sample.Tags; import io.noties.markwon.app.sample.ui.MarkwonTextViewSample; +import io.noties.markwon.image.ImagesPlugin; import io.noties.markwon.inlineparser.InlineProcessor; import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin; import io.noties.markwon.sample.annotations.MarkwonArtifact; @@ -56,7 +57,7 @@ public class InlineParsingTooltipSample extends MarkwonTextViewSample { "# Hello tooltip!\n\n" + "This is the !{tooltip label}(and actual content comes here)\n\n" + "what if it is !{here}(The contents can be blocks, limited though) instead?\n\n" + - "![image](#) anyway"; + "![image](https://github.com/dcurtis/markdown-mark/raw/master/png/208x128-solid.png) anyway"; final Markwon markwon = Markwon.builder(context) .usePlugin(MarkwonInlineParserPlugin.create(factoryBuilder -> @@ -71,6 +72,7 @@ public class InlineParsingTooltipSample extends MarkwonTextViewSample { }); } }) + .usePlugin(ImagesPlugin.create()) .build(); markwon.setMarkdown(textView, md); diff --git a/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/BangInlineProcessor.java b/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/BangInlineProcessor.java index 752d29d5..eb96c1e9 100644 --- a/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/BangInlineProcessor.java +++ b/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/BangInlineProcessor.java @@ -29,10 +29,6 @@ public class BangInlineProcessor extends InlineProcessor { return node; } else { - // @since 4.5.0 return null in case no match (multiple inline - // processors can define `!` as _special_ character, so let them handle it) - // NB! do not forget to reset index - index = startIndex; return null; } } diff --git a/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/MarkwonInlineParser.java b/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/MarkwonInlineParser.java index 2b2f26b3..d241a1fb 100644 --- a/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/MarkwonInlineParser.java +++ b/markwon-inline-parser/src/main/java/io/noties/markwon/inlineparser/MarkwonInlineParser.java @@ -266,11 +266,18 @@ public class MarkwonInlineParser implements InlineParser, MarkwonInlineParserCon final List inlines = this.inlineProcessors.get(c); if (inlines != null) { + // @since $SNAPSHOT; index must not be advanced if inline-processor returned null + // so, further processors can be called at the _same_ position (and thus char) + final int startIndex = index; + for (InlineProcessor inline : inlines) { node = inline.parse(this); if (node != null) { break; } + + // reset after each iteration (happens only when node is null) + index = startIndex; } } else { final DelimiterProcessor delimiterProcessor = delimiterProcessors.get(c);