() {
@Override
diff --git a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapter.java b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapter.java
index c5334879..92f22605 100644
--- a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapter.java
+++ b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapter.java
@@ -15,7 +15,25 @@ import java.util.List;
import ru.noties.markwon.Markwon;
-// each node block will be rendered by a simple TextView, but we can provide own entries for each block
+/**
+ * Class to display markdown in a RecyclerView. It is done by extracting root blocks from a
+ * parsed markdown document and rendering each block in a standalone RecyclerView entry. Provides
+ * ability to customize rendering of blocks. For example display certain blocks in a horizontal
+ * scrolling container or display tables in a specific widget designed for it ({@link Builder#include(Class, Entry)}).
+ *
+ * By default each node will be rendered in a TextView provided by this artifact. It has no styling
+ * information and thus must be replaced with your own layout ({@link Builder#defaultEntry(int)} or
+ * {@link Builder#defaultEntry(Entry)}).
+ *
+ * @see #builder()
+ * @see #create()
+ * @see #create(int)
+ * @see #create(Entry)
+ * @see #setMarkdown(Markwon, String)
+ * @see #setParsedMarkdown(Markwon, Node)
+ * @see #setParsedMarkdown(Markwon, List)
+ * @since 3.0.0
+ */
public abstract class MarkwonAdapter extends RecyclerView.Adapter {
@NonNull
@@ -59,6 +77,9 @@ public abstract class MarkwonAdapter extends RecyclerView.Adapter {
@NonNull
diff --git a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapterImpl.java b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapterImpl.java
index f95cf129..5a8d2fa6 100644
--- a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapterImpl.java
+++ b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonAdapterImpl.java
@@ -1,7 +1,6 @@
package ru.noties.markwon.recycler;
import android.support.annotation.NonNull;
-import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@@ -25,6 +24,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
private Markwon markwon;
private List nodes;
+ @SuppressWarnings("WeakerAccess")
MarkwonAdapterImpl(
@NonNull SparseArray> entries,
@NonNull Entry defaultEntry,
@@ -67,9 +67,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
layoutInflater = LayoutInflater.from(parent.getContext());
}
- final Entry entry = viewType == 0
- ? defaultEntry
- : entries.get(viewType);
+ final Entry entry = getEntry(viewType);
return entry.createHolder(layoutInflater, parent);
}
@@ -80,9 +78,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
final Node node = nodes.get(position);
final int viewType = getNodeViewType(node.getClass());
- final Entry entry = viewType == 0
- ? defaultEntry
- : entries.get(viewType);
+ final Entry entry = getEntry(viewType);
entry.bindHolder(markwon, holder, node);
}
@@ -94,6 +90,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
: 0;
}
+ @SuppressWarnings("unused")
@NonNull
public List getItems() {
return nodes != null
@@ -110,12 +107,11 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
public long getItemId(int position) {
final Node node = nodes.get(position);
final int type = getNodeViewType(node.getClass());
- final Entry entry = type == 0
- ? defaultEntry
- : entries.get(type);
+ final Entry entry = getEntry(type);
return entry.id(node);
}
+ @SuppressWarnings("WeakerAccess")
public int getNodeViewType(@NonNull Class extends Node> node) {
// if has registered -> then return it, else 0
final int hash = node.hashCode();
@@ -125,6 +121,13 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
return 0;
}
+ @NonNull
+ private Entry getEntry(int viewType) {
+ return viewType == 0
+ ? defaultEntry
+ : entries.get(viewType);
+ }
+
static class BuilderImpl implements Builder {
private final SparseArray> entries = new SparseArray<>(3);
@@ -154,7 +157,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
@Override
public Builder defaultEntry(int layoutResId) {
//noinspection unchecked
- this.defaultEntry = (Entry) (Entry) new SimpleNodeEntry(layoutResId);
+ this.defaultEntry = (Entry) (Entry) new SimpleEntry(layoutResId);
return this;
}
@@ -171,7 +174,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
if (defaultEntry == null) {
//noinspection unchecked
- defaultEntry = (Entry) (Entry) new SimpleNodeEntry();
+ defaultEntry = (Entry) (Entry) new SimpleEntry();
}
if (reducer == null) {
@@ -190,7 +193,7 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
final List list = new ArrayList<>();
-// // we will extract all blocks that are direct children of Document
+ // we will extract all blocks that are direct children of Document
Node node = root.getFirstChild();
Node temp;
@@ -201,8 +204,6 @@ class MarkwonAdapterImpl extends MarkwonAdapter {
node = temp;
}
- Log.e("NODES", list.toString());
-
return list;
}
}
diff --git a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonRecycler.java b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonRecycler.java
deleted file mode 100644
index 2244f37b..00000000
--- a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/MarkwonRecycler.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package ru.noties.markwon.recycler;
-
-public class MarkwonRecycler {
-}
diff --git a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/SimpleNodeEntry.java b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/SimpleEntry.java
similarity index 90%
rename from markwon-recycler/src/main/java/ru/noties/markwon/recycler/SimpleNodeEntry.java
rename to markwon-recycler/src/main/java/ru/noties/markwon/recycler/SimpleEntry.java
index e5d64590..d04a7477 100644
--- a/markwon-recycler/src/main/java/ru/noties/markwon/recycler/SimpleNodeEntry.java
+++ b/markwon-recycler/src/main/java/ru/noties/markwon/recycler/SimpleEntry.java
@@ -17,7 +17,7 @@ import java.util.Map;
import ru.noties.markwon.Markwon;
-public class SimpleNodeEntry implements MarkwonAdapter.Entry {
+public class SimpleEntry implements MarkwonAdapter.Entry {
private static final NoCopySpannableFactory FACTORY = new NoCopySpannableFactory();
@@ -26,11 +26,11 @@ public class SimpleNodeEntry implements MarkwonAdapter.Entry
+
\ No newline at end of file
diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java
index d9b74a25..3cf105b5 100644
--- a/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java
+++ b/markwon/src/main/java/ru/noties/markwon/MarkwonImpl.java
@@ -65,7 +65,7 @@ class MarkwonImpl extends Markwon {
final Spanned spanned = visitor.builder().spannableStringBuilder();
- // clear render props and builder after rending
+ // clear render props and builder after rendering
visitor.clear();
return spanned;
diff --git a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/MarkwonRecyclerActivity.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/MarkwonRecyclerActivity.java
index 4ae85cc5..34d07ec8 100644
--- a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/MarkwonRecyclerActivity.java
+++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/MarkwonRecyclerActivity.java
@@ -29,7 +29,7 @@ import ru.noties.markwon.html.HtmlPlugin;
import ru.noties.markwon.image.ImagesPlugin;
import ru.noties.markwon.image.svg.SvgPlugin;
import ru.noties.markwon.recycler.MarkwonAdapter;
-import ru.noties.markwon.recycler.SimpleNodeEntry;
+import ru.noties.markwon.recycler.SimpleEntry;
import ru.noties.markwon.sample.extension.R;
import ru.noties.markwon.urlprocessor.UrlProcessor;
import ru.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
@@ -48,8 +48,9 @@ public class MarkwonRecyclerActivity extends Activity {
setContentView(R.layout.activity_recycler);
final MarkwonAdapter adapter = MarkwonAdapter.builder()
- .include(FencedCodeBlock.class, new SimpleNodeEntry(R.layout.adapter_fenced_code_block))
+ .include(FencedCodeBlock.class, new SimpleEntry(R.layout.adapter_fenced_code_block))
.include(TableBlock.class, new TableNodeEntry())
+ .defaultEntry(new SimpleEntry(R.layout.adapter_default_entry))
.build();
final RecyclerView recyclerView = findViewById(R.id.recycler_view);
diff --git a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/TableNodeEntry.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/TableNodeEntry.java
index 31c05783..c8c7b67b 100644
--- a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/TableNodeEntry.java
+++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/recycler/TableNodeEntry.java
@@ -1,48 +1,26 @@
package ru.noties.markwon.sample.extension.recycler;
import android.support.annotation.NonNull;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
-import android.widget.TableRow;
-import android.widget.TextView;
import org.commonmark.ext.gfm.tables.TableBlock;
-import org.commonmark.node.AbstractVisitor;
-import org.commonmark.node.BlockQuote;
-import org.commonmark.node.BulletList;
-import org.commonmark.node.Code;
-import org.commonmark.node.CustomBlock;
-import org.commonmark.node.CustomNode;
-import org.commonmark.node.Document;
-import org.commonmark.node.Emphasis;
-import org.commonmark.node.FencedCodeBlock;
-import org.commonmark.node.HardLineBreak;
-import org.commonmark.node.Heading;
-import org.commonmark.node.HtmlBlock;
-import org.commonmark.node.HtmlInline;
-import org.commonmark.node.Image;
-import org.commonmark.node.IndentedCodeBlock;
-import org.commonmark.node.Link;
-import org.commonmark.node.ListItem;
-import org.commonmark.node.Node;
-import org.commonmark.node.OrderedList;
-import org.commonmark.node.Paragraph;
-import org.commonmark.node.SoftLineBreak;
-import org.commonmark.node.StrongEmphasis;
-import org.commonmark.node.Text;
-import org.commonmark.node.ThematicBreak;
-import ru.noties.debug.Debug;
+import java.util.HashMap;
+import java.util.Map;
+
import ru.noties.markwon.Markwon;
+import ru.noties.markwon.ext.tables.Table;
import ru.noties.markwon.recycler.MarkwonAdapter;
import ru.noties.markwon.sample.extension.R;
// do not use in real applications, this is just a showcase
public class TableNodeEntry implements MarkwonAdapter.Entry {
+ private final Map cache = new HashMap<>(2);
+
@NonNull
@Override
public TableNodeHolder createHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
@@ -52,77 +30,23 @@ public class TableNodeEntry implements MarkwonAdapter.Entry
\ No newline at end of file
+ android:textColor="#000"
+ android:textSize="16sp" />
\ No newline at end of file