From f97c852c8a55a1a0835456b64ff851f3a778c033 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Sun, 2 Dec 2018 15:22:11 +0300 Subject: [PATCH] Remove listlevel internal state --- .../ru/noties/markwon/MarkwonVisitor.java | 9 +++---- .../ru/noties/markwon/MarkwonVisitorImpl.java | 24 ++++++------------- .../core/visitor/ListItemNodeVisitor.java | 18 ++++++++++---- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java index 3a8587f1..a124bcb3 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java @@ -39,12 +39,6 @@ public interface MarkwonVisitor extends Visitor { boolean hasNext(@NonNull Node node); - void incrementListLevel(); - - void decrementListLevel(); - - int listLevel(); - void ensureNewLine(); void forceNewLine(); @@ -52,4 +46,7 @@ public interface MarkwonVisitor extends Visitor { int length(); void setSpans(int start, @Nullable Object spans); + + @Nullable + NodeVisitor nodeVisitor(@NonNull Class node); } diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java index d7ed0e8a..1262d643 100644 --- a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java +++ b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java @@ -43,8 +43,6 @@ class MarkwonVisitorImpl implements MarkwonVisitor { private final SpannableBuilder builder = new SpannableBuilder(); - private int listLevel; - private MarkwonVisitorImpl( @NonNull MarkwonConfiguration configuration, @NonNull Map, NodeVisitor> nodes) { @@ -215,21 +213,6 @@ class MarkwonVisitorImpl implements MarkwonVisitor { return node.getNext() != null; } - @Override - public void incrementListLevel() { - listLevel += 1; - } - - @Override - public void decrementListLevel() { - listLevel -= 1; - } - - @Override - public int listLevel() { - return listLevel; - } - @Override public void ensureNewLine() { if (builder.length() > 0 @@ -253,6 +236,13 @@ class MarkwonVisitorImpl implements MarkwonVisitor { SpannableBuilder.setSpans(builder, spans, start, builder.length()); } + @Nullable + @Override + public NodeVisitor nodeVisitor(@NonNull Class node) { + //noinspection unchecked + return (NodeVisitor) nodes.get(node); + } + static class BuilderImpl implements Builder { private final Map, NodeVisitor> nodes = diff --git a/markwon/src/main/java/ru/noties/markwon/core/visitor/ListItemNodeVisitor.java b/markwon/src/main/java/ru/noties/markwon/core/visitor/ListItemNodeVisitor.java index d21bd766..f362c3ba 100644 --- a/markwon/src/main/java/ru/noties/markwon/core/visitor/ListItemNodeVisitor.java +++ b/markwon/src/main/java/ru/noties/markwon/core/visitor/ListItemNodeVisitor.java @@ -15,8 +15,6 @@ public class ListItemNodeVisitor implements MarkwonVisitor.NodeVisitor final int length = visitor.length(); - visitor.incrementListLevel(); - final Node parent = listItem.getParent(); if (parent instanceof OrderedList) { @@ -33,14 +31,24 @@ public class ListItemNodeVisitor implements MarkwonVisitor.NodeVisitor } else { visitor.visitChildren(listItem); - visitor.setSpans(length, visitor.factory().bulletListItem(visitor.theme(), visitor.listLevel() - 1)); + visitor.setSpans(length, visitor.factory().bulletListItem(visitor.theme(), listLevel(listItem))); } - visitor.decrementListLevel(); - if (visitor.hasNext(listItem)) { visitor.ensureNewLine(); } } + + private static int listLevel(@NonNull Node node) { + int level = 0; + Node parent = node.getParent(); + while (parent != null) { + if (parent instanceof ListItem) { + level += 1; + } + parent = parent.getParent(); + } + return level; + } }