diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 96db5266..2446cea2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -38,21 +38,6 @@
android:host="*"
android:scheme="https" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java b/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java
index 007b754f..df1c0b5d 100644
--- a/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java
+++ b/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java
@@ -26,6 +26,8 @@ import ru.noties.markwon.syntax.Prism4jTheme;
import ru.noties.markwon.syntax.Prism4jThemeDarkula;
import ru.noties.markwon.syntax.Prism4jThemeDefault;
import ru.noties.markwon.syntax.SyntaxHighlightPlugin;
+import ru.noties.markwon.urlprocessor.UrlProcessor;
+import ru.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
import ru.noties.prism4j.Prism4j;
@ActivityScope
diff --git a/app/src/main/java/ru/noties/markwon/UrlProcessorInitialReadme.java b/app/src/main/java/ru/noties/markwon/UrlProcessorInitialReadme.java
index 8f18a55e..d9690574 100644
--- a/app/src/main/java/ru/noties/markwon/UrlProcessorInitialReadme.java
+++ b/app/src/main/java/ru/noties/markwon/UrlProcessorInitialReadme.java
@@ -4,6 +4,9 @@ import android.net.Uri;
import android.support.annotation.NonNull;
import android.text.TextUtils;
+import ru.noties.markwon.urlprocessor.UrlProcessor;
+import ru.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
+
class UrlProcessorInitialReadme implements UrlProcessor {
private static final String GITHUB_BASE = "https://github.com/noties/Markwon/raw/master/";
diff --git a/app/src/main/java/ru/noties/markwon/gif/GifAwareSpannableFactory.java b/app/src/main/java/ru/noties/markwon/gif/GifAwareSpannableFactory.java
index bf108477..3cd805b3 100644
--- a/app/src/main/java/ru/noties/markwon/gif/GifAwareSpannableFactory.java
+++ b/app/src/main/java/ru/noties/markwon/gif/GifAwareSpannableFactory.java
@@ -7,8 +7,8 @@ import ru.noties.markwon.SpannableFactoryDef;
import ru.noties.markwon.image.AsyncDrawableLoader;
import ru.noties.markwon.image.ImageSize;
import ru.noties.markwon.image.ImageSizeResolver;
-import ru.noties.markwon.spans.AsyncDrawableSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.spans.AsyncDrawableSpan;
+import ru.noties.markwon.core.MarkwonTheme;
public class GifAwareSpannableFactory extends SpannableFactoryDef {
diff --git a/app/src/main/java/ru/noties/markwon/gif/GifProcessor.java b/app/src/main/java/ru/noties/markwon/gif/GifProcessor.java
index f50b1094..6a297f8b 100644
--- a/app/src/main/java/ru/noties/markwon/gif/GifProcessor.java
+++ b/app/src/main/java/ru/noties/markwon/gif/GifProcessor.java
@@ -9,7 +9,7 @@ import android.view.View;
import android.widget.TextView;
import pl.droidsonroids.gif.GifDrawable;
-import ru.noties.markwon.spans.AsyncDrawableSpan;
+import ru.noties.markwon.core.spans.AsyncDrawableSpan;
public abstract class GifProcessor {
diff --git a/markwon-ext-tasklist/src/main/java/ru/noties/markwon/ext/tasklist/TaskListSpan.java b/markwon-ext-tasklist/src/main/java/ru/noties/markwon/ext/tasklist/TaskListSpan.java
index efddfe25..b339360f 100644
--- a/markwon-ext-tasklist/src/main/java/ru/noties/markwon/ext/tasklist/TaskListSpan.java
+++ b/markwon-ext-tasklist/src/main/java/ru/noties/markwon/ext/tasklist/TaskListSpan.java
@@ -7,7 +7,7 @@ import android.support.annotation.NonNull;
import android.text.Layout;
import android.text.style.LeadingMarginSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.markwon.utils.LeadingMarginUtils;
/**
diff --git a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jSyntaxHighlight.java b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jSyntaxHighlight.java
index 4f3c1c04..bb016796 100644
--- a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jSyntaxHighlight.java
+++ b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jSyntaxHighlight.java
@@ -5,7 +5,6 @@ import android.support.annotation.Nullable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
-import ru.noties.markwon.SyntaxHighlight;
import ru.noties.prism4j.Prism4j;
public class Prism4jSyntaxHighlight implements SyntaxHighlight {
diff --git a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDarkula.java b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDarkula.java
index 13bfe48b..4d4016bf 100644
--- a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDarkula.java
+++ b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDarkula.java
@@ -6,8 +6,8 @@ import android.support.annotation.Nullable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
-import ru.noties.markwon.spans.EmphasisSpan;
-import ru.noties.markwon.spans.StrongEmphasisSpan;
+import ru.noties.markwon.core.spans.EmphasisSpan;
+import ru.noties.markwon.core.spans.StrongEmphasisSpan;
public class Prism4jThemeDarkula extends Prism4jThemeBase {
diff --git a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDefault.java b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDefault.java
index 4356e13c..b729ed76 100644
--- a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDefault.java
+++ b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/Prism4jThemeDefault.java
@@ -7,8 +7,8 @@ import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.BackgroundColorSpan;
-import ru.noties.markwon.spans.EmphasisSpan;
-import ru.noties.markwon.spans.StrongEmphasisSpan;
+import ru.noties.markwon.core.spans.EmphasisSpan;
+import ru.noties.markwon.core.spans.StrongEmphasisSpan;
public class Prism4jThemeDefault extends Prism4jThemeBase {
diff --git a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightPlugin.java b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightPlugin.java
index 08bf2a73..b07f5c6e 100644
--- a/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightPlugin.java
+++ b/markwon-syntax-highlight/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightPlugin.java
@@ -5,7 +5,7 @@ import android.support.annotation.Nullable;
import ru.noties.markwon.AbstractMarkwonPlugin;
import ru.noties.markwon.MarkwonConfiguration;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.prism4j.Prism4j;
public class SyntaxHighlightPlugin extends AbstractMarkwonPlugin {
diff --git a/markwon-view/src/debug/java/ru/noties/markwon/view/debug/DebugConfigurationProvider.java b/markwon-view/src/debug/java/ru/noties/markwon/view/debug/DebugConfigurationProvider.java
index 50ad7fec..f88ba5ae 100644
--- a/markwon-view/src/debug/java/ru/noties/markwon/view/debug/DebugConfigurationProvider.java
+++ b/markwon-view/src/debug/java/ru/noties/markwon/view/debug/DebugConfigurationProvider.java
@@ -4,7 +4,7 @@ import android.content.Context;
import android.support.annotation.NonNull;
import ru.noties.markwon.MarkwonConfiguration;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.markwon.view.IMarkwonView;
public class DebugConfigurationProvider implements IMarkwonView.ConfigurationProvider {
diff --git a/markwon-view/src/main/java/ru/noties/markwon/view/MarkwonViewHelper.java b/markwon-view/src/main/java/ru/noties/markwon/view/MarkwonViewHelper.java
index 95518023..f3669b77 100644
--- a/markwon-view/src/main/java/ru/noties/markwon/view/MarkwonViewHelper.java
+++ b/markwon-view/src/main/java/ru/noties/markwon/view/MarkwonViewHelper.java
@@ -60,7 +60,7 @@ public class MarkwonViewHelper implements IMarkwonView {
this.provider = provider;
this.configuration = provider.provide(textView.getContext());
if (!TextUtils.isEmpty(markdown)) {
- // invalidate rendered toMarkdown
+ // invalidate rendered markdown
setMarkdown(markdown);
}
}
diff --git a/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java b/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java
index 5cf614be..a873add3 100644
--- a/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java
+++ b/markwon/src/main/java/ru/noties/markwon/AbstractMarkwonPlugin.java
@@ -7,7 +7,7 @@ import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import ru.noties.markwon.image.AsyncDrawableLoader;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
public abstract class AbstractMarkwonPlugin implements MarkwonPlugin {
@Override
diff --git a/markwon/src/main/java/ru/noties/markwon/LinkResolverDef.java b/markwon/src/main/java/ru/noties/markwon/LinkResolverDef.java
index 109af717..4f893761 100644
--- a/markwon/src/main/java/ru/noties/markwon/LinkResolverDef.java
+++ b/markwon/src/main/java/ru/noties/markwon/LinkResolverDef.java
@@ -9,7 +9,7 @@ import android.support.annotation.NonNull;
import android.util.Log;
import android.view.View;
-import ru.noties.markwon.spans.LinkSpan;
+import ru.noties.markwon.core.spans.LinkSpan;
public class LinkResolverDef implements LinkSpan.Resolver {
@Override
diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java
index 5c65c6a9..0e830e00 100644
--- a/markwon/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java
+++ b/markwon/src/main/java/ru/noties/markwon/MarkwonBuilderImpl.java
@@ -11,7 +11,7 @@ import java.util.Collections;
import java.util.List;
import ru.noties.markwon.image.AsyncDrawableLoader;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
class MarkwonBuilderImpl implements Markwon.Builder {
diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonConfiguration.java b/markwon/src/main/java/ru/noties/markwon/MarkwonConfiguration.java
index 347e2e95..97f77a69 100644
--- a/markwon/src/main/java/ru/noties/markwon/MarkwonConfiguration.java
+++ b/markwon/src/main/java/ru/noties/markwon/MarkwonConfiguration.java
@@ -3,11 +3,15 @@ package ru.noties.markwon;
import android.content.Context;
import android.support.annotation.NonNull;
+import ru.noties.markwon.core.MarkwonTheme;
+import ru.noties.markwon.core.spans.LinkSpan;
import ru.noties.markwon.image.AsyncDrawableLoader;
import ru.noties.markwon.image.ImageSizeResolver;
import ru.noties.markwon.image.ImageSizeResolverDef;
-import ru.noties.markwon.spans.LinkSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.syntax.SyntaxHighlight;
+import ru.noties.markwon.syntax.SyntaxHighlightNoOp;
+import ru.noties.markwon.urlprocessor.UrlProcessor;
+import ru.noties.markwon.urlprocessor.UrlProcessorNoOp;
/**
* since 3.0.0 renamed `SpannableConfiguration` -> `MarkwonConfiguration`
@@ -27,7 +31,6 @@ public class MarkwonConfiguration {
return new Builder(context);
}
-
private final MarkwonTheme theme;
private final AsyncDrawableLoader asyncDrawableLoader;
private final SyntaxHighlight syntaxHighlight;
@@ -46,14 +49,6 @@ public class MarkwonConfiguration {
this.factory = builder.factory;
}
- /**
- * Returns a new builder based on this configuration
- */
- @NonNull
- public Builder newBuilder(@NonNull Context context) {
- return new Builder(context, this);
- }
-
@NonNull
public MarkwonTheme theme() {
return theme;
@@ -106,17 +101,6 @@ public class MarkwonConfiguration {
this.context = context;
}
- Builder(@NonNull Context context, @NonNull MarkwonConfiguration configuration) {
- this(context);
- this.theme = configuration.theme;
- this.asyncDrawableLoader = configuration.asyncDrawableLoader;
- this.syntaxHighlight = configuration.syntaxHighlight;
- this.linkResolver = configuration.linkResolver;
- this.urlProcessor = configuration.urlProcessor;
- this.imageSizeResolver = configuration.imageSizeResolver;
- this.factory = configuration.factory;
- }
-
@NonNull
public Builder syntaxHighlight(@NonNull SyntaxHighlight syntaxHighlight) {
this.syntaxHighlight = syntaxHighlight;
diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java b/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java
index 4a1c33b9..0cd959f0 100644
--- a/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java
+++ b/markwon/src/main/java/ru/noties/markwon/MarkwonPlugin.java
@@ -7,7 +7,7 @@ import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import ru.noties.markwon.image.AsyncDrawableLoader;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
public interface MarkwonPlugin {
diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java
index a124bcb3..becbbbb4 100644
--- a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java
+++ b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitor.java
@@ -6,7 +6,7 @@ import android.support.annotation.Nullable;
import org.commonmark.node.Node;
import org.commonmark.node.Visitor;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
public interface MarkwonVisitor extends Visitor {
diff --git a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java
index 1262d643..60e8af80 100644
--- a/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java
+++ b/markwon/src/main/java/ru/noties/markwon/MarkwonVisitorImpl.java
@@ -31,7 +31,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
class MarkwonVisitorImpl implements MarkwonVisitor {
@@ -43,7 +43,7 @@ class MarkwonVisitorImpl implements MarkwonVisitor {
private final SpannableBuilder builder = new SpannableBuilder();
- private MarkwonVisitorImpl(
+ MarkwonVisitorImpl(
@NonNull MarkwonConfiguration configuration,
@NonNull Map, NodeVisitor extends Node>> nodes) {
this.configuration = configuration;
diff --git a/markwon/src/main/java/ru/noties/markwon/SpannableFactory.java b/markwon/src/main/java/ru/noties/markwon/SpannableFactory.java
index abca9c86..c1b06a57 100644
--- a/markwon/src/main/java/ru/noties/markwon/SpannableFactory.java
+++ b/markwon/src/main/java/ru/noties/markwon/SpannableFactory.java
@@ -6,8 +6,8 @@ import android.support.annotation.Nullable;
import ru.noties.markwon.image.AsyncDrawableLoader;
import ru.noties.markwon.image.ImageSize;
import ru.noties.markwon.image.ImageSizeResolver;
-import ru.noties.markwon.spans.LinkSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.spans.LinkSpan;
+import ru.noties.markwon.core.MarkwonTheme;
/**
* Each method can return null or a Span object or an array of spans
diff --git a/markwon/src/main/java/ru/noties/markwon/SpannableFactoryDef.java b/markwon/src/main/java/ru/noties/markwon/SpannableFactoryDef.java
index 999a42da..ca3b02cf 100644
--- a/markwon/src/main/java/ru/noties/markwon/SpannableFactoryDef.java
+++ b/markwon/src/main/java/ru/noties/markwon/SpannableFactoryDef.java
@@ -7,17 +7,17 @@ import ru.noties.markwon.image.AsyncDrawable;
import ru.noties.markwon.image.AsyncDrawableLoader;
import ru.noties.markwon.image.ImageSize;
import ru.noties.markwon.image.ImageSizeResolver;
-import ru.noties.markwon.spans.AsyncDrawableSpan;
-import ru.noties.markwon.spans.BlockQuoteSpan;
-import ru.noties.markwon.spans.BulletListItemSpan;
-import ru.noties.markwon.spans.CodeSpan;
-import ru.noties.markwon.spans.EmphasisSpan;
-import ru.noties.markwon.spans.HeadingSpan;
-import ru.noties.markwon.spans.LinkSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
-import ru.noties.markwon.spans.OrderedListItemSpan;
-import ru.noties.markwon.spans.StrongEmphasisSpan;
-import ru.noties.markwon.spans.ThematicBreakSpan;
+import ru.noties.markwon.core.spans.AsyncDrawableSpan;
+import ru.noties.markwon.core.spans.BlockQuoteSpan;
+import ru.noties.markwon.core.spans.BulletListItemSpan;
+import ru.noties.markwon.core.spans.CodeSpan;
+import ru.noties.markwon.core.spans.EmphasisSpan;
+import ru.noties.markwon.core.spans.HeadingSpan;
+import ru.noties.markwon.core.spans.LinkSpan;
+import ru.noties.markwon.core.MarkwonTheme;
+import ru.noties.markwon.core.spans.OrderedListItemSpan;
+import ru.noties.markwon.core.spans.StrongEmphasisSpan;
+import ru.noties.markwon.core.spans.ThematicBreakSpan;
/**
* @since 1.1.0
diff --git a/markwon/src/main/java/ru/noties/markwon/core/CorePlugin.java b/markwon/src/main/java/ru/noties/markwon/core/CorePlugin.java
index 37a92f7c..c6e6c1bb 100644
--- a/markwon/src/main/java/ru/noties/markwon/core/CorePlugin.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/CorePlugin.java
@@ -36,7 +36,7 @@ import ru.noties.markwon.core.visitor.SoftLineBreakNodeVisitor;
import ru.noties.markwon.core.visitor.StrongEmphasisNodeVisitor;
import ru.noties.markwon.core.visitor.TextNodeVisitor;
import ru.noties.markwon.core.visitor.ThematicBreakNodeVisitor;
-import ru.noties.markwon.spans.OrderedListItemSpan;
+import ru.noties.markwon.core.spans.OrderedListItemSpan;
public class CorePlugin extends AbstractMarkwonPlugin {
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/MarkwonTheme.java b/markwon/src/main/java/ru/noties/markwon/core/MarkwonTheme.java
similarity index 99%
rename from markwon/src/main/java/ru/noties/markwon/spans/MarkwonTheme.java
rename to markwon/src/main/java/ru/noties/markwon/core/MarkwonTheme.java
index 8f803841..681c6048 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/MarkwonTheme.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/MarkwonTheme.java
@@ -1,9 +1,8 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core;
import android.content.Context;
import android.graphics.Paint;
import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.FloatRange;
import android.support.annotation.IntRange;
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/AsyncDrawableSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/AsyncDrawableSpan.java
similarity index 98%
rename from markwon/src/main/java/ru/noties/markwon/spans/AsyncDrawableSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/AsyncDrawableSpan.java
index 20b5fe9d..b06b2348 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/AsyncDrawableSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/AsyncDrawableSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -12,6 +12,7 @@ import android.text.style.ReplacementSpan;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.markwon.image.AsyncDrawable;
@SuppressWarnings("WeakerAccess")
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/BlockQuoteSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/BlockQuoteSpan.java
similarity index 94%
rename from markwon/src/main/java/ru/noties/markwon/spans/BlockQuoteSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/BlockQuoteSpan.java
index 0101199f..ea4e353c 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/BlockQuoteSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/BlockQuoteSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -7,6 +7,8 @@ import android.support.annotation.NonNull;
import android.text.Layout;
import android.text.style.LeadingMarginSpan;
+import ru.noties.markwon.core.MarkwonTheme;
+
public class BlockQuoteSpan implements LeadingMarginSpan {
private final MarkwonTheme theme;
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/BulletListItemSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/BulletListItemSpan.java
similarity index 97%
rename from markwon/src/main/java/ru/noties/markwon/spans/BulletListItemSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/BulletListItemSpan.java
index ee9aefc7..97f3bb32 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/BulletListItemSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/BulletListItemSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -9,6 +9,7 @@ import android.support.annotation.NonNull;
import android.text.Layout;
import android.text.style.LeadingMarginSpan;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.markwon.utils.LeadingMarginUtils;
public class BulletListItemSpan implements LeadingMarginSpan {
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/CodeSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/CodeSpan.java
similarity index 95%
rename from markwon/src/main/java/ru/noties/markwon/spans/CodeSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/CodeSpan.java
index 7488885d..dc233538 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/CodeSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/CodeSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -9,6 +9,8 @@ import android.text.TextPaint;
import android.text.style.LeadingMarginSpan;
import android.text.style.MetricAffectingSpan;
+import ru.noties.markwon.core.MarkwonTheme;
+
public class CodeSpan extends MetricAffectingSpan implements LeadingMarginSpan {
private final MarkwonTheme theme;
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/EmphasisSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/EmphasisSpan.java
similarity index 90%
rename from markwon/src/main/java/ru/noties/markwon/spans/EmphasisSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/EmphasisSpan.java
index cec49af0..cb7f9ac6 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/EmphasisSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/EmphasisSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/HeadingSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/HeadingSpan.java
similarity index 96%
rename from markwon/src/main/java/ru/noties/markwon/spans/HeadingSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/HeadingSpan.java
index c7d8d595..a942cc64 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/HeadingSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/HeadingSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -10,6 +10,7 @@ import android.text.TextPaint;
import android.text.style.LeadingMarginSpan;
import android.text.style.MetricAffectingSpan;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.markwon.utils.LeadingMarginUtils;
public class HeadingSpan extends MetricAffectingSpan implements LeadingMarginSpan {
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/LinkSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/LinkSpan.java
similarity index 90%
rename from markwon/src/main/java/ru/noties/markwon/spans/LinkSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/LinkSpan.java
index f879c5ec..e8f7d8f7 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/LinkSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/LinkSpan.java
@@ -1,10 +1,12 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.support.annotation.NonNull;
import android.text.TextPaint;
import android.text.style.URLSpan;
import android.view.View;
+import ru.noties.markwon.core.MarkwonTheme;
+
public class LinkSpan extends URLSpan {
public interface Resolver {
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/ObjectsPool.java b/markwon/src/main/java/ru/noties/markwon/core/spans/ObjectsPool.java
similarity index 95%
rename from markwon/src/main/java/ru/noties/markwon/spans/ObjectsPool.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/ObjectsPool.java
index bc56a9d4..de6f0671 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/ObjectsPool.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/ObjectsPool.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Paint;
import android.graphics.Rect;
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/OrderedListItemSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/OrderedListItemSpan.java
similarity index 94%
rename from markwon/src/main/java/ru/noties/markwon/spans/OrderedListItemSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/OrderedListItemSpan.java
index f7bacfeb..6be46fd5 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/OrderedListItemSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/OrderedListItemSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -9,6 +9,7 @@ import android.text.TextPaint;
import android.text.style.LeadingMarginSpan;
import android.widget.TextView;
+import ru.noties.markwon.core.MarkwonTheme;
import ru.noties.markwon.utils.LeadingMarginUtils;
public class OrderedListItemSpan implements LeadingMarginSpan {
@@ -20,8 +21,8 @@ public class OrderedListItemSpan implements LeadingMarginSpan {
* NB, this method must be called before setting text to a TextView (`TextView#setText`
* internally can trigger new Layout creation which will ask for leading margins right away)
*
- * @param textView to which toMarkdown will be applied
- * @param text parsed toMarkdown to process
+ * @param textView to which markdown will be applied
+ * @param text parsed markdown to process
* @since 2.0.1
*/
public static void measure(@NonNull TextView textView, @NonNull CharSequence text) {
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/StrongEmphasisSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/StrongEmphasisSpan.java
similarity index 90%
rename from markwon/src/main/java/ru/noties/markwon/spans/StrongEmphasisSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/StrongEmphasisSpan.java
index 32b5e51b..d74ee63e 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/StrongEmphasisSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/StrongEmphasisSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;
diff --git a/markwon/src/main/java/ru/noties/markwon/spans/ThematicBreakSpan.java b/markwon/src/main/java/ru/noties/markwon/core/spans/ThematicBreakSpan.java
similarity index 94%
rename from markwon/src/main/java/ru/noties/markwon/spans/ThematicBreakSpan.java
rename to markwon/src/main/java/ru/noties/markwon/core/spans/ThematicBreakSpan.java
index a19f7528..0e06537b 100644
--- a/markwon/src/main/java/ru/noties/markwon/spans/ThematicBreakSpan.java
+++ b/markwon/src/main/java/ru/noties/markwon/core/spans/ThematicBreakSpan.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.core.spans;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -7,6 +7,8 @@ import android.support.annotation.NonNull;
import android.text.Layout;
import android.text.style.LeadingMarginSpan;
+import ru.noties.markwon.core.MarkwonTheme;
+
public class ThematicBreakSpan implements LeadingMarginSpan {
private final MarkwonTheme theme;
diff --git a/markwon/src/main/java/ru/noties/markwon/image/AsyncDrawableScheduler.java b/markwon/src/main/java/ru/noties/markwon/image/AsyncDrawableScheduler.java
index 0de99c61..27348a76 100644
--- a/markwon/src/main/java/ru/noties/markwon/image/AsyncDrawableScheduler.java
+++ b/markwon/src/main/java/ru/noties/markwon/image/AsyncDrawableScheduler.java
@@ -15,7 +15,7 @@ import java.util.Collections;
import java.util.List;
import ru.noties.markwon.renderer.R;
-import ru.noties.markwon.spans.AsyncDrawableSpan;
+import ru.noties.markwon.core.spans.AsyncDrawableSpan;
public abstract class AsyncDrawableScheduler {
diff --git a/markwon/src/main/java/ru/noties/markwon/SyntaxHighlight.java b/markwon/src/main/java/ru/noties/markwon/syntax/SyntaxHighlight.java
similarity index 87%
rename from markwon/src/main/java/ru/noties/markwon/SyntaxHighlight.java
rename to markwon/src/main/java/ru/noties/markwon/syntax/SyntaxHighlight.java
index 2f3b630f..cf6921ee 100644
--- a/markwon/src/main/java/ru/noties/markwon/SyntaxHighlight.java
+++ b/markwon/src/main/java/ru/noties/markwon/syntax/SyntaxHighlight.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon;
+package ru.noties.markwon.syntax;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
diff --git a/markwon/src/main/java/ru/noties/markwon/SyntaxHighlightNoOp.java b/markwon/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightNoOp.java
similarity index 70%
rename from markwon/src/main/java/ru/noties/markwon/SyntaxHighlightNoOp.java
rename to markwon/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightNoOp.java
index 84724513..48a80ee2 100644
--- a/markwon/src/main/java/ru/noties/markwon/SyntaxHighlightNoOp.java
+++ b/markwon/src/main/java/ru/noties/markwon/syntax/SyntaxHighlightNoOp.java
@@ -1,9 +1,9 @@
-package ru.noties.markwon;
+package ru.noties.markwon.syntax;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-class SyntaxHighlightNoOp implements SyntaxHighlight {
+public class SyntaxHighlightNoOp implements SyntaxHighlight {
@NonNull
@Override
public CharSequence highlight(@Nullable String info, @NonNull String code) {
diff --git a/markwon/src/main/java/ru/noties/markwon/UrlProcessor.java b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessor.java
similarity index 77%
rename from markwon/src/main/java/ru/noties/markwon/UrlProcessor.java
rename to markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessor.java
index b190d110..9ea7919e 100644
--- a/markwon/src/main/java/ru/noties/markwon/UrlProcessor.java
+++ b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessor.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon;
+package ru.noties.markwon.urlprocessor;
import android.support.annotation.NonNull;
diff --git a/markwon/src/main/java/ru/noties/markwon/UrlProcessorAndroidAssets.java b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorAndroidAssets.java
similarity index 96%
rename from markwon/src/main/java/ru/noties/markwon/UrlProcessorAndroidAssets.java
rename to markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorAndroidAssets.java
index 2a1544a9..aa7730de 100644
--- a/markwon/src/main/java/ru/noties/markwon/UrlProcessorAndroidAssets.java
+++ b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorAndroidAssets.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon;
+package ru.noties.markwon.urlprocessor;
import android.net.Uri;
import android.support.annotation.NonNull;
diff --git a/markwon/src/main/java/ru/noties/markwon/UrlProcessorNoOp.java b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorNoOp.java
similarity index 84%
rename from markwon/src/main/java/ru/noties/markwon/UrlProcessorNoOp.java
rename to markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorNoOp.java
index d23af279..9d8560d6 100644
--- a/markwon/src/main/java/ru/noties/markwon/UrlProcessorNoOp.java
+++ b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorNoOp.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon;
+package ru.noties.markwon.urlprocessor;
import android.support.annotation.NonNull;
diff --git a/markwon/src/main/java/ru/noties/markwon/UrlProcessorRelativeToAbsolute.java b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorRelativeToAbsolute.java
similarity index 96%
rename from markwon/src/main/java/ru/noties/markwon/UrlProcessorRelativeToAbsolute.java
rename to markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorRelativeToAbsolute.java
index fcfd4cab..d99aaf4f 100644
--- a/markwon/src/main/java/ru/noties/markwon/UrlProcessorRelativeToAbsolute.java
+++ b/markwon/src/main/java/ru/noties/markwon/urlprocessor/UrlProcessorRelativeToAbsolute.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon;
+package ru.noties.markwon.urlprocessor;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
diff --git a/markwon/src/main/java/ru/noties/markwon/utils/Dip.java b/markwon/src/main/java/ru/noties/markwon/utils/Dip.java
index 6899df8f..51d098e0 100644
--- a/markwon/src/main/java/ru/noties/markwon/utils/Dip.java
+++ b/markwon/src/main/java/ru/noties/markwon/utils/Dip.java
@@ -3,8 +3,6 @@ package ru.noties.markwon.utils;
import android.content.Context;
import android.support.annotation.NonNull;
-import ru.noties.markwon.spans.MarkwonTheme;
-
public class Dip {
@NonNull
diff --git a/markwon/src/test/java/ru/noties/markwon/AbstractMarkwonVisitorImpl.java b/markwon/src/test/java/ru/noties/markwon/AbstractMarkwonVisitorImpl.java
new file mode 100644
index 00000000..99d183ce
--- /dev/null
+++ b/markwon/src/test/java/ru/noties/markwon/AbstractMarkwonVisitorImpl.java
@@ -0,0 +1,16 @@
+package ru.noties.markwon;
+
+import android.support.annotation.NonNull;
+
+import org.commonmark.node.Node;
+
+import java.util.Map;
+
+public class AbstractMarkwonVisitorImpl extends MarkwonVisitorImpl {
+
+ public AbstractMarkwonVisitorImpl(
+ @NonNull MarkwonConfiguration configuration,
+ @NonNull Map, NodeVisitor extends Node>> nodes) {
+ super(configuration, nodes);
+ }
+}
diff --git a/markwon/src/test/java/ru/noties/markwon/spans/AsyncDrawableTest.java b/markwon/src/test/java/ru/noties/markwon/image/AsyncDrawableTest.java
similarity index 90%
rename from markwon/src/test/java/ru/noties/markwon/spans/AsyncDrawableTest.java
rename to markwon/src/test/java/ru/noties/markwon/image/AsyncDrawableTest.java
index 873cc404..7dad4514 100644
--- a/markwon/src/test/java/ru/noties/markwon/spans/AsyncDrawableTest.java
+++ b/markwon/src/test/java/ru/noties/markwon/image/AsyncDrawableTest.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.spans;
+package ru.noties.markwon.image;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
@@ -13,10 +13,6 @@ import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
-import ru.noties.markwon.renderer.ImageSize;
-import ru.noties.markwon.renderer.ImageSizeResolver;
-import ru.noties.markwon.renderer.ImageSizeResolverDef;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -40,7 +36,7 @@ public class AsyncDrawableTest {
// when drawable have no known dimensions yet, it will await for them
final AsyncDrawable drawable = new AsyncDrawable("",
- mock(AsyncDrawable.Loader.class),
+ mock(AsyncDrawableLoader.class),
imageSizeResolver,
new ImageSize(new ImageSize.Dimension(100.F, "%"), null));
@@ -65,7 +61,7 @@ public class AsyncDrawableTest {
// when result is present it will be detached (setCallback(null))
final AsyncDrawable drawable = new AsyncDrawable("",
- mock(AsyncDrawable.Loader.class),
+ mock(AsyncDrawableLoader.class),
imageSizeResolver,
null);
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/ImageSizeResolverDefTest.java b/markwon/src/test/java/ru/noties/markwon/image/ImageSizeResolverDefTest.java
similarity index 99%
rename from markwon/src/test/java/ru/noties/markwon/renderer/ImageSizeResolverDefTest.java
rename to markwon/src/test/java/ru/noties/markwon/image/ImageSizeResolverDefTest.java
index b5121d39..f8649603 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/ImageSizeResolverDefTest.java
+++ b/markwon/src/test/java/ru/noties/markwon/image/ImageSizeResolverDefTest.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.renderer;
+package ru.noties.markwon.image;
import android.graphics.Rect;
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/MarkwonConfigurationTest.java b/markwon/src/test/java/ru/noties/markwon/renderer/MarkwonConfigurationTest.java
deleted file mode 100644
index 71cd0145..00000000
--- a/markwon/src/test/java/ru/noties/markwon/renderer/MarkwonConfigurationTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package ru.noties.markwon.renderer;
-
-import org.junit.Test;
-
-import ru.noties.markwon.MarkwonConfiguration;
-import ru.noties.markwon.SpannableFactory;
-import ru.noties.markwon.SyntaxHighlight;
-import ru.noties.markwon.UrlProcessor;
-import ru.noties.markwon.html.api.MarkwonHtmlParser;
-import ru.noties.markwon.html.MarkwonHtmlRenderer;
-import ru.noties.markwon.image.AsyncDrawable;
-import ru.noties.markwon.image.ImageSizeResolver;
-import ru.noties.markwon.spans.LinkSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-public class MarkwonConfigurationTest {
-
- @Test
- public void testNewBuilder() {
- final MarkwonConfiguration configuration = MarkwonConfiguration
- .builder(null)
- .theme(mock(MarkwonTheme.class))
- .asyncDrawableLoader(mock(AsyncDrawable.Loader.class))
- .syntaxHighlight(mock(SyntaxHighlight.class))
- .linkResolver(mock(LinkSpan.Resolver.class))
- .urlProcessor(mock(UrlProcessor.class))
- .imageSizeResolver(mock(ImageSizeResolver.class))
- .factory(mock(SpannableFactory.class))
- .softBreakAddsNewLine(true)
- .htmlParser(mock(MarkwonHtmlParser.class))
- .htmlRenderer(mock(MarkwonHtmlRenderer.class))
- .htmlAllowNonClosedTags(true)
- .build();
-
- final MarkwonConfiguration newConfiguration = configuration
- .newBuilder(null)
- .build();
-
- assertEquals(configuration.theme(), newConfiguration.theme());
- assertEquals(configuration.asyncDrawableLoader(), newConfiguration.asyncDrawableLoader());
- assertEquals(configuration.syntaxHighlight(), newConfiguration.syntaxHighlight());
- assertEquals(configuration.linkResolver(), newConfiguration.linkResolver());
- assertEquals(configuration.urlProcessor(), newConfiguration.urlProcessor());
- assertEquals(configuration.imageSizeResolver(), newConfiguration.imageSizeResolver());
- assertEquals(configuration.factory(), newConfiguration.factory());
- assertEquals(configuration.softBreakAddsNewLine(), newConfiguration.softBreakAddsNewLine());
- assertEquals(configuration.htmlParser(), newConfiguration.htmlParser());
- assertEquals(configuration.htmlRenderer(), newConfiguration.htmlRenderer());
- assertEquals(configuration.htmlAllowNonClosedTags(), newConfiguration.htmlAllowNonClosedTags());
- }
-}
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/html2/CssInlineStyleParserTest.java b/markwon/src/test/java/ru/noties/markwon/renderer/html2/CssInlineStyleParserTest.java
deleted file mode 100644
index 4ba3fffb..00000000
--- a/markwon/src/test/java/ru/noties/markwon/renderer/html2/CssInlineStyleParserTest.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package ru.noties.markwon.renderer.html2;
-
-import android.support.annotation.NonNull;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import ix.Ix;
-import ix.IxFunction;
-import ru.noties.markwon.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static ru.noties.markwon.test.TestUtils.with;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
-public class CssInlineStyleParserTest {
-
- private CssInlineStyleParser.Impl impl;
-
- @Before
- public void before() {
- impl = new CssInlineStyleParser.Impl();
- }
-
- @Test
- public void simple_single_pair() {
-
- final String input = "key: value;";
-
- final List list = listProperties(input);
-
- assertEquals(1, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key", cssProperty.key());
- assertEquals("value", cssProperty.value());
- }
- });
- }
-
- @Test
- public void simple_two_pairs() {
-
- final String input = "key1: value1; key2: value2;";
-
- final List list = listProperties(input);
-
- assertEquals(2, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key1", cssProperty.key());
- assertEquals("value1", cssProperty.value());
- }
- });
-
- with(list.get(1), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key2", cssProperty.key());
- assertEquals("value2", cssProperty.value());
- }
- });
- }
-
- @Test
- public void one_pair_eof() {
-
- final String input = "key: value";
- final List list = listProperties(input);
- assertEquals(1, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key", cssProperty.key());
- assertEquals("value", cssProperty.value());
- }
- });
- }
-
- @Test
- public void one_pair_eof_whitespaces() {
-
- final String input = "key: value \n\n\t";
- final List list = listProperties(input);
- assertEquals(1, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key", cssProperty.key());
- assertEquals("value", cssProperty.value());
- }
- });
- }
-
- @Test
- public void white_spaces() {
-
- final String input = "\n\n\n\t \t key1 \n\n\n\t : \n\n\n\n \t value1 \n\n\n\n ; \n key2\n : \n value2 \n ; ";
- final List list = listProperties(input);
- assertEquals(2, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key1", cssProperty.key());
- assertEquals("value1", cssProperty.value());
- }
- });
-
- with(list.get(1), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key2", cssProperty.key());
- assertEquals("value2", cssProperty.value());
- }
- });
- }
-
- @Test
- public void list_of_keys() {
-
- final String input = "key1 key2 key3 key4";
- final List list = listProperties(input);
-
- assertEquals(0, list.size());
- }
-
- @Test
- public void list_of_keys_and_value() {
-
- final String input = "key1 key2 key3 key4: value4";
- final List list = listProperties(input);
- assertEquals(1, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key4", cssProperty.key());
- assertEquals("value4", cssProperty.value());
- }
- });
- }
-
- @Test
- public void list_of_keys_separated_by_semi_colon() {
-
- final String input = "key1;key2;key3;key4;";
- final List list = listProperties(input);
- assertEquals(0, list.size());
- }
-
- @Test
- public void key_value_with_invalid_between() {
-
- final String input = "key1: value1; key2 key3: value3;";
- final List list = listProperties(input);
-
- assertEquals(2, list.size());
-
- with(list.get(0), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key1", cssProperty.key());
- assertEquals("value1", cssProperty.value());
- }
- });
-
- with(list.get(1), new TestUtils.Action() {
- @Override
- public void apply(@NonNull CssProperty cssProperty) {
- assertEquals("key3", cssProperty.key());
- assertEquals("value3", cssProperty.value());
- }
- });
- }
-
- @Test
- public void css_functions() {
-
- final Map map = new HashMap() {{
- put("attr", "\" (\" attr(href) \")\"");
- put("calc", "calc(100% - 100px)");
- put("cubic-bezier", "cubic-bezier(0.1, 0.7, 1.0, 0.1)");
- put("hsl", "hsl(120,100%,50%)");
- put("hsla", "hsla(120,100%,50%,0.3)");
- put("linear-gradient", "linear-gradient(red, yellow, blue)");
- put("radial-gradient", "radial-gradient(red, green, blue)");
- put("repeating-linear-gradient", "repeating-linear-gradient(red, yellow 10%, green 20%)");
- put("repeating-radial-gradient", "repeating-radial-gradient(red, yellow 10%, green 15%)");
- put("rgb", "rgb(255,0,0)");
- put("rgba", "rgba(255,0,0,0.3)");
- put("var", "var(--some-variable)");
- put("url", "url(\"url.gif\")");
- }};
-
- final StringBuilder builder = new StringBuilder();
- for (Map.Entry entry: map.entrySet()) {
- builder.append(entry.getKey())
- .append(':')
- .append(entry.getValue())
- .append(';');
- }
-
- for (CssProperty cssProperty: impl.parse(builder.toString())) {
- final String value = map.remove(cssProperty.key());
- assertNotNull(cssProperty.key(), value);
- assertEquals(cssProperty.key(), value, cssProperty.value());
- }
-
- assertEquals(0, map.size());
- }
-
- @NonNull
- private List listProperties(@NonNull String input) {
- return Ix.from(impl.parse(input))
- .map(new IxFunction() {
- @Override
- public CssProperty apply(CssProperty cssProperty) {
- return cssProperty.mutate();
- }
- })
- .toList();
- }
-}
\ No newline at end of file
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/html2/tag/ImageSizeParserImplTest.java b/markwon/src/test/java/ru/noties/markwon/renderer/html2/tag/ImageSizeParserImplTest.java
deleted file mode 100644
index f7ccca03..00000000
--- a/markwon/src/test/java/ru/noties/markwon/renderer/html2/tag/ImageSizeParserImplTest.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package ru.noties.markwon.renderer.html2.tag;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import ru.noties.markwon.image.ImageSize;
-import ru.noties.markwon.renderer.html2.CssInlineStyleParser;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
-public class ImageSizeParserImplTest {
-
- private static final float DELTA = 1e-7F;
-
- private ImageSizeParserImpl impl;
-
- @Before
- public void before() {
- impl = new ImageSizeParserImpl(CssInlineStyleParser.create());
- }
-
- @Test
- public void nothing() {
- assertNull(impl.parse(Collections.emptyMap()));
- }
-
- @Test
- public void width_height_from_style() {
-
- final String style = "width: 123; height: 321";
-
- assertImageSize(
- new ImageSize(dimension(123, null), dimension(321, null)),
- impl.parse(Collections.singletonMap("style", style))
- );
- }
-
- @Test
- public void style_has_higher_priority_width() {
-
- // if property is found in styles, do not lookup raw attribute
- final Map attributes = new HashMap() {{
- put("style", "width: 43");
- put("width", "991");
- }};
-
- assertImageSize(
- new ImageSize(dimension(43, null), null),
- impl.parse(attributes)
- );
- }
-
- @Test
- public void style_has_higher_priority_height() {
-
- // if property is found in styles, do not lookup raw attribute
- final Map attributes = new HashMap() {{
- put("style", "height: 177");
- put("height", "8");
- }};
-
- assertImageSize(
- new ImageSize(null, dimension(177, null)),
- impl.parse(attributes)
- );
- }
-
- @Test
- public void width_style_height_attributes() {
-
- final Map attributes = new HashMap() {{
- put("style", "width: 99");
- put("height", "7");
- }};
-
- assertImageSize(
- new ImageSize(dimension(99, null), dimension(7, null)),
- impl.parse(attributes)
- );
- }
-
- @Test
- public void height_style_width_attributes() {
-
- final Map attributes = new HashMap() {{
- put("style", "height: 15");
- put("width", "88");
- }};
-
- assertImageSize(
- new ImageSize(dimension(88, null), dimension(15, null)),
- impl.parse(attributes)
- );
- }
-
- @Test
- public void non_empty_styles_width_height_attributes() {
-
- final Map attributes = new HashMap() {{
- put("style", "key1: value1; width0: 123; height0: 99");
- put("width", "40");
- put("height", "77");
- }};
-
- assertImageSize(
- new ImageSize(dimension(40, null), dimension(77, null)),
- impl.parse(attributes)
- );
- }
-
- @Test
- public void dimension_units() {
-
- final Map map = new HashMap() {{
- put("100", dimension(100, null));
- put("100%", dimension(100, "%"));
- put("1%", dimension(1, "%"));
- put("0.2em", dimension(0.2F, "em"));
- put("155px", dimension(155, "px"));
- put("67blah", dimension(67, "blah"));
- put("-1", dimension(-1, null));
- put("-0.01pt", dimension(-0.01F, "pt"));
- }};
-
- for (Map.Entry entry : map.entrySet()) {
- assertDimension(entry.getKey(), entry.getValue(), impl.dimension(entry.getKey()));
- }
- }
-
- @Test
- public void bad_dimension() {
-
- final String[] dimensions = {
- "calc(5px + 10rem)",
- "whataver6",
- "165 165",
- "!@#$%^&*(%"
- };
-
- for (String dimension: dimensions) {
- assertNull(dimension, impl.dimension(dimension));
- }
- }
-
- private static void assertImageSize(@Nullable ImageSize expected, @Nullable ImageSize actual) {
- if (expected == null) {
- assertNull(actual);
- } else {
- assertNotNull(actual);
- assertDimension("width", expected.width, actual.width);
- assertDimension("height", expected.height, actual.height);
- }
- }
-
- private static void assertDimension(
- @NonNull String name,
- @Nullable ImageSize.Dimension expected,
- @Nullable ImageSize.Dimension actual) {
- if (expected == null) {
- assertNull(name, actual);
- } else {
- assertNotNull(name, actual);
- assertEquals(name, expected.value, actual.value, DELTA);
- assertEquals(name, expected.unit, actual.unit);
- }
- }
-
- @NonNull
- private static ImageSize.Dimension dimension(float value, @Nullable String unit) {
- return new ImageSize.Dimension(value, unit);
- }
-}
\ No newline at end of file
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/SpannableMarkdownVisitorTest.java b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/SpannableMarkdownVisitorTest.java
index 6d77b130..07890959 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/SpannableMarkdownVisitorTest.java
+++ b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/SpannableMarkdownVisitorTest.java
@@ -1,25 +1,23 @@
package ru.noties.markwon.renderer.visitor;
+import android.content.Context;
import android.support.annotation.NonNull;
import android.text.SpannableStringBuilder;
-import org.commonmark.node.Node;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.ParameterizedRobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.util.Arrays;
import java.util.Collection;
-import ru.noties.markwon.LinkResolverDef;
+import ru.noties.markwon.AbstractMarkwonPlugin;
import ru.noties.markwon.Markwon;
import ru.noties.markwon.MarkwonConfiguration;
-import ru.noties.markwon.SpannableBuilder;
-import ru.noties.markwon.SpannableFactory;
-import ru.noties.markwon.html.api.MarkwonHtmlParser;
-import ru.noties.markwon.renderer.SpannableMarkdownVisitor;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.CorePlugin;
+import ru.noties.markwon.image.ImagesPlugin;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
@@ -43,14 +41,11 @@ public class SpannableMarkdownVisitorTest {
public void test() {
final TestData data = TestDataReader.readTest(file);
+
+ final Markwon markwon = markwon(data.config());
- final MarkwonConfiguration configuration = configuration(data.config());
- final SpannableBuilder builder = new SpannableBuilder();
- final SpannableMarkdownVisitor visitor = new SpannableMarkdownVisitor(configuration, builder);
- final Node node = Markwon.createParser().parse(data.input());
- node.accept(visitor);
-
- final SpannableStringBuilder stringBuilder = builder.spannableStringBuilder();
+ // okay we must thing about it... casting?
+ final SpannableStringBuilder stringBuilder = (SpannableStringBuilder) markwon.toMarkdown(data.input());
final TestValidator validator = TestValidator.create(file);
@@ -71,25 +66,18 @@ public class SpannableMarkdownVisitorTest {
assertEquals(Arrays.toString(spans), validator.processedSpanNodesCount(), length);
}
- @SuppressWarnings("ConstantConditions")
+
@NonNull
- private MarkwonConfiguration configuration(@NonNull TestConfig config) {
-
- final SpannableFactory factory = new TestFactory(config.hasOption(TestConfig.USE_PARAGRAPHS));
- final MarkwonHtmlParser htmlParser = config.hasOption(TestConfig.USE_HTML)
- ? null
- : MarkwonHtmlParser.noOp();
-
- final boolean softBreakAddsNewLine = config.hasOption(TestConfig.SOFT_BREAK_ADDS_NEW_LINE);
- final boolean htmlAllowNonClosedTags = config.hasOption(TestConfig.HTML_ALLOW_NON_CLOSED_TAGS);
-
- return MarkwonConfiguration.builder(null)
- .theme(mock(MarkwonTheme.class))
- .linkResolver(mock(LinkResolverDef.class))
- .htmlParser(htmlParser)
- .factory(factory)
- .softBreakAddsNewLine(softBreakAddsNewLine)
- .htmlAllowNonClosedTags(htmlAllowNonClosedTags)
+ private Markwon markwon(@NonNull final TestConfig config) {
+ return Markwon.builder(RuntimeEnvironment.application)
+ .use(CorePlugin.create(config.hasOption(TestConfig.SOFT_BREAK_ADDS_NEW_LINE)))
+ .use(ImagesPlugin.create(mock(Context.class)))
+ .use(new AbstractMarkwonPlugin() {
+ @Override
+ public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
+ builder.factory(new TestFactory(config.hasOption(TestConfig.USE_PARAGRAPHS)));
+ }
+ })
.build();
}
}
\ No newline at end of file
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestConfig.java b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestConfig.java
index 61fc29a5..367f8a43 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestConfig.java
+++ b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestConfig.java
@@ -7,9 +7,9 @@ import java.util.Map;
class TestConfig {
static final String USE_PARAGRAPHS = "use-paragraphs";
- static final String USE_HTML = "use-html";
+// static final String USE_HTML = "use-html";
static final String SOFT_BREAK_ADDS_NEW_LINE = "soft-break-adds-new-line";
- static final String HTML_ALLOW_NON_CLOSED_TAGS = "html-allow-non-closed-tags";
+// static final String HTML_ALLOW_NON_CLOSED_TAGS = "html-allow-non-closed-tags";
private final Map map;
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestDataReader.java b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestDataReader.java
index 7f04566b..0aa5e998 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestDataReader.java
+++ b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestDataReader.java
@@ -30,7 +30,6 @@ import java.util.Set;
import ix.Ix;
import ix.IxFunction;
import ix.IxPredicate;
-import ru.noties.markwon.table.TableRowSpan;
import static ru.noties.markwon.renderer.visitor.TestSpan.BLOCK_QUOTE;
import static ru.noties.markwon.renderer.visitor.TestSpan.BULLET_LIST;
@@ -42,14 +41,8 @@ import static ru.noties.markwon.renderer.visitor.TestSpan.IMAGE;
import static ru.noties.markwon.renderer.visitor.TestSpan.LINK;
import static ru.noties.markwon.renderer.visitor.TestSpan.ORDERED_LIST;
import static ru.noties.markwon.renderer.visitor.TestSpan.PARAGRAPH;
-import static ru.noties.markwon.renderer.visitor.TestSpan.STRIKE_THROUGH;
import static ru.noties.markwon.renderer.visitor.TestSpan.STRONG_EMPHASIS;
-import static ru.noties.markwon.renderer.visitor.TestSpan.SUB_SCRIPT;
-import static ru.noties.markwon.renderer.visitor.TestSpan.SUPER_SCRIPT;
-import static ru.noties.markwon.renderer.visitor.TestSpan.TABLE_ROW;
-import static ru.noties.markwon.renderer.visitor.TestSpan.TASK_LIST;
import static ru.noties.markwon.renderer.visitor.TestSpan.THEMATIC_BREAK;
-import static ru.noties.markwon.renderer.visitor.TestSpan.UNDERLINE;
abstract class TestDataReader {
@@ -103,7 +96,7 @@ abstract class TestDataReader {
static class Reader {
private static final String TEXT = "text";
- private static final String CELLS = "cells";
+// private static final String CELLS = "cells";
private static final Set TAGS;
@@ -118,15 +111,9 @@ abstract class TestDataReader {
BULLET_LIST,
THEMATIC_BREAK,
HEADING,
- STRIKE_THROUGH,
- TASK_LIST,
- TABLE_ROW,
PARAGRAPH,
IMAGE,
LINK,
- SUPER_SCRIPT,
- SUB_SCRIPT,
- UNDERLINE,
HEADING + "1",
HEADING + "2",
HEADING + "3",
@@ -251,24 +238,27 @@ abstract class TestDataReader {
if (valueElement.isJsonNull()) {
value = null;
} else {
- // another special case: table cell
- // this is not so good
- if (CELLS.equals(key)) {
- final JsonArray cells = valueElement.getAsJsonArray();
- final int length = cells.size();
- final List list = new ArrayList<>(length);
- for (int k = 0; k < length; k++) {
- final JsonObject cell = cells.get(k).getAsJsonObject();
- list.add(new TableRowSpan.Cell(
- cell.get("alignment").getAsInt(),
- cell.get("text").getAsString()
- ));
- }
- value = list.toString();
- } else {
- value = valueElement.getAsString();
- }
+ value = valueElement.getAsString();
}
+// else {
+// // another special case: table cell
+// // this is not so good
+// if (CELLS.equals(key)) {
+// final JsonArray cells = valueElement.getAsJsonArray();
+// final int length = cells.size();
+// final List list = new ArrayList<>(length);
+// for (int k = 0; k < length; k++) {
+// final JsonObject cell = cells.get(k).getAsJsonObject();
+// list.add(new TableRowSpan.Cell(
+// cell.get("alignment").getAsInt(),
+// cell.get("text").getAsString()
+// ));
+// }
+// value = list.toString();
+// } else {
+// value = valueElement.getAsString();
+// }
+// }
attributes.put(key, value);
}
}
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestFactory.java b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestFactory.java
index b8cd7c8d..d2bf8d4e 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestFactory.java
+++ b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestFactory.java
@@ -5,16 +5,14 @@ import android.support.annotation.Nullable;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import ru.noties.markwon.SpannableFactory;
+import ru.noties.markwon.core.MarkwonTheme;
+import ru.noties.markwon.core.spans.LinkSpan;
+import ru.noties.markwon.image.AsyncDrawableLoader;
import ru.noties.markwon.image.ImageSize;
import ru.noties.markwon.image.ImageSizeResolver;
-import ru.noties.markwon.image.AsyncDrawable;
-import ru.noties.markwon.spans.LinkSpan;
-import ru.noties.markwon.spans.MarkwonTheme;
-import ru.noties.markwon.table.TableRowSpan;
import static ru.noties.markwon.renderer.visitor.TestSpan.BLOCK_QUOTE;
import static ru.noties.markwon.renderer.visitor.TestSpan.BULLET_LIST;
@@ -26,14 +24,8 @@ import static ru.noties.markwon.renderer.visitor.TestSpan.IMAGE;
import static ru.noties.markwon.renderer.visitor.TestSpan.LINK;
import static ru.noties.markwon.renderer.visitor.TestSpan.ORDERED_LIST;
import static ru.noties.markwon.renderer.visitor.TestSpan.PARAGRAPH;
-import static ru.noties.markwon.renderer.visitor.TestSpan.STRIKE_THROUGH;
import static ru.noties.markwon.renderer.visitor.TestSpan.STRONG_EMPHASIS;
-import static ru.noties.markwon.renderer.visitor.TestSpan.SUB_SCRIPT;
-import static ru.noties.markwon.renderer.visitor.TestSpan.SUPER_SCRIPT;
-import static ru.noties.markwon.renderer.visitor.TestSpan.TABLE_ROW;
-import static ru.noties.markwon.renderer.visitor.TestSpan.TASK_LIST;
import static ru.noties.markwon.renderer.visitor.TestSpan.THEMATIC_BREAK;
-import static ru.noties.markwon.renderer.visitor.TestSpan.UNDERLINE;
class TestFactory implements SpannableFactory {
@@ -94,31 +86,6 @@ class TestFactory implements SpannableFactory {
return new TestSpan(HEADING + level);
}
- @Nullable
- @Override
- public Object strikethrough() {
- return new TestSpan(STRIKE_THROUGH);
- }
-
- @Nullable
- @Override
- public Object taskListItem(@NonNull MarkwonTheme theme, int blockIndent, boolean isDone) {
- return new TestSpan(TASK_LIST, map(
- Pair.of("blockIdent", blockIndent),
- Pair.of("done", isDone)
- ));
- }
-
- @Nullable
- @Override
- public Object tableRow(@NonNull MarkwonTheme theme, @NonNull List cells, boolean isHeader, boolean isOdd) {
- return new TestSpan(TABLE_ROW, map(
- Pair.of("cells", cells),
- Pair.of("header", isHeader),
- Pair.of("odd", isOdd)
- ));
- }
-
@Nullable
@Override
public Object paragraph(boolean inTightList) {
@@ -129,7 +96,7 @@ class TestFactory implements SpannableFactory {
@Nullable
@Override
- public Object image(@NonNull MarkwonTheme theme, @NonNull String destination, @NonNull AsyncDrawable.Loader loader, @NonNull ImageSizeResolver imageSizeResolver, @Nullable ImageSize imageSize, boolean replacementTextIsLink) {
+ public Object image(@NonNull MarkwonTheme theme, @NonNull String destination, @NonNull AsyncDrawableLoader loader, @NonNull ImageSizeResolver imageSizeResolver, @Nullable ImageSize imageSize, boolean replacementTextIsLink) {
return new TestSpan(IMAGE, map(
Pair.of("src", destination),
Pair.of("imageSize", imageSize),
@@ -143,24 +110,6 @@ class TestFactory implements SpannableFactory {
return new TestSpan(LINK, map("href", destination));
}
- @Nullable
- @Override
- public Object superScript(@NonNull MarkwonTheme theme) {
- return new TestSpan(SUPER_SCRIPT);
- }
-
- @Nullable
- @Override
- public Object subScript(@NonNull MarkwonTheme theme) {
- return new TestSpan(SUB_SCRIPT);
- }
-
- @Nullable
- @Override
- public Object underline() {
- return new TestSpan(UNDERLINE);
- }
-
@NonNull
private static Map map(@NonNull String key, @Nullable Object value) {
return Collections.singletonMap(key, String.valueOf(value));
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestSpan.java b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestSpan.java
index f4c8d6ba..1740ba3d 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestSpan.java
+++ b/markwon/src/test/java/ru/noties/markwon/renderer/visitor/TestSpan.java
@@ -16,15 +16,15 @@ class TestSpan {
static final String BULLET_LIST = "ul";
static final String THEMATIC_BREAK = "hr";
static final String HEADING = "h";
- static final String STRIKE_THROUGH = "s";
- static final String TASK_LIST = "task-list";
- static final String TABLE_ROW = "tr";
+// static final String STRIKE_THROUGH = "s";
+// static final String TASK_LIST = "task-list";
+// static final String TABLE_ROW = "tr";
static final String PARAGRAPH = "p";
static final String IMAGE = "img";
static final String LINK = "a";
- static final String SUPER_SCRIPT = "sup";
- static final String SUB_SCRIPT = "sub";
- static final String UNDERLINE = "u";
+// static final String SUPER_SCRIPT = "sup";
+// static final String SUB_SCRIPT = "sub";
+// static final String UNDERLINE = "u";
private final String name;
diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java b/markwon/src/test/java/ru/noties/markwon/syntax/SyntaxHighlightTest.java
similarity index 76%
rename from markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java
rename to markwon/src/test/java/ru/noties/markwon/syntax/SyntaxHighlightTest.java
index ecca6e91..ea43bf36 100644
--- a/markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java
+++ b/markwon/src/test/java/ru/noties/markwon/syntax/SyntaxHighlightTest.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon.renderer;
+package ru.noties.markwon.syntax;
import android.content.Context;
import android.os.Build;
@@ -8,16 +8,23 @@ import android.text.SpannableStringBuilder;
import android.text.Spanned;
import org.commonmark.node.FencedCodeBlock;
+import org.commonmark.node.Node;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
+import java.util.HashMap;
+import java.util.Map;
+
+import ru.noties.markwon.AbstractMarkwonVisitorImpl;
import ru.noties.markwon.MarkwonConfiguration;
+import ru.noties.markwon.MarkwonVisitor;
import ru.noties.markwon.SpannableBuilder;
import ru.noties.markwon.SpannableFactory;
-import ru.noties.markwon.SyntaxHighlight;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
+import ru.noties.markwon.core.visitor.CodeBlockNodeVisitor;
+import ru.noties.markwon.image.AsyncDrawableLoader;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -32,6 +39,8 @@ import static org.mockito.Mockito.when;
Build.VERSION_CODES.M,
Build.VERSION_CODES.O
})
+// although it is called SyntaxHighlightTest all it does is check that spans are in the correct order
+// and syntax highlight is the primary user of this functionality
public class SyntaxHighlightTest {
// codeSpan must be before actual highlight spans (true reverse of builder)
@@ -68,10 +77,16 @@ public class SyntaxHighlightTest {
final MarkwonConfiguration configuration = MarkwonConfiguration.builder(mock(Context.class))
.syntaxHighlight(highlight)
.factory(factory)
- .theme(mock(MarkwonTheme.class))
- .build();
+ .build(mock(MarkwonTheme.class), mock(AsyncDrawableLoader.class));
- final SpannableBuilder builder = new SpannableBuilder();
+ final Map, MarkwonVisitor.NodeVisitor extends Node>> visitorMap = new HashMap<>(1);
+ visitorMap.put(FencedCodeBlock.class, new CodeBlockNodeVisitor.Fenced());
+
+ final MarkwonVisitor visitor = new AbstractMarkwonVisitorImpl(
+ configuration,
+ visitorMap);
+
+ final SpannableBuilder builder = visitor.builder();
append(builder, "# Header 1\n", new Object());
append(builder, "## Header 2\n", new Object());
@@ -79,11 +94,15 @@ public class SyntaxHighlightTest {
final int start = builder.length();
- final SpannableMarkdownVisitor visitor = new SpannableMarkdownVisitor(configuration, builder);
final FencedCodeBlock fencedCodeBlock = new FencedCodeBlock();
fencedCodeBlock.setLiteral("{code}");
- visitor.visit(fencedCodeBlock);
+ CodeBlockNodeVisitor.visitCodeBlock(
+ visitor,
+ null,
+ "{code}",
+ fencedCodeBlock
+ );
final int end = builder.length();
diff --git a/markwon/src/test/java/ru/noties/markwon/UrlProcessorAndroidAssetsTest.java b/markwon/src/test/java/ru/noties/markwon/urlprocessor/UrlProcessorAndroidAssetsTest.java
similarity index 86%
rename from markwon/src/test/java/ru/noties/markwon/UrlProcessorAndroidAssetsTest.java
rename to markwon/src/test/java/ru/noties/markwon/urlprocessor/UrlProcessorAndroidAssetsTest.java
index ecf31fd2..7a5cbf1a 100644
--- a/markwon/src/test/java/ru/noties/markwon/UrlProcessorAndroidAssetsTest.java
+++ b/markwon/src/test/java/ru/noties/markwon/urlprocessor/UrlProcessorAndroidAssetsTest.java
@@ -1,4 +1,4 @@
-package ru.noties.markwon;
+package ru.noties.markwon.urlprocessor;
import org.junit.Before;
import org.junit.Test;
@@ -6,8 +6,10 @@ import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
+import ru.noties.markwon.urlprocessor.UrlProcessorAndroidAssets;
+
import static org.junit.Assert.assertEquals;
-import static ru.noties.markwon.UrlProcessorAndroidAssets.BASE;
+import static ru.noties.markwon.urlprocessor.UrlProcessorAndroidAssets.BASE;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE)
diff --git a/markwon/src/test/java/ru/noties/markwon/UrlProcessorRelativeToAbsoluteTest.java b/markwon/src/test/java/ru/noties/markwon/urlprocessor/UrlProcessorRelativeToAbsoluteTest.java
similarity index 95%
rename from markwon/src/test/java/ru/noties/markwon/UrlProcessorRelativeToAbsoluteTest.java
rename to markwon/src/test/java/ru/noties/markwon/urlprocessor/UrlProcessorRelativeToAbsoluteTest.java
index 05956f3b..a8bf2d01 100644
--- a/markwon/src/test/java/ru/noties/markwon/UrlProcessorRelativeToAbsoluteTest.java
+++ b/markwon/src/test/java/ru/noties/markwon/urlprocessor/UrlProcessorRelativeToAbsoluteTest.java
@@ -1,10 +1,12 @@
-package ru.noties.markwon;
+package ru.noties.markwon.urlprocessor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
+import ru.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
+
import static org.junit.Assert.*;
@RunWith(RobolectricTestRunner.class)
diff --git a/markwon/src/test/resources/tests/deeply-nested.yaml b/markwon/src/test/resources/tests/deeply-nested.yaml
index 2f40ddf3..4ed4da52 100644
--- a/markwon/src/test/resources/tests/deeply-nested.yaml
+++ b/markwon/src/test/resources/tests/deeply-nested.yaml
@@ -1,15 +1,12 @@
input: |-
- **bold *bold italic ~~bold italic strike `bold italic strike code` bold italic strike~~ bold italic* bold** normal
+ **bold *bold italic `bold italic code` bold italic* bold** normal
output:
- b:
- "bold "
- i:
- "bold italic "
- - s:
- - "bold italic strike "
- - code: "bold italic strike code"
- - " bold italic strike"
+ - code: "bold italic code"
- " bold italic"
- " bold"
- " normal"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/html-allow-non-closed-tags.yaml b/markwon/src/test/resources/tests/html-allow-non-closed-tags.yaml
deleted file mode 100644
index f0f219b0..00000000
--- a/markwon/src/test/resources/tests/html-allow-non-closed-tags.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-input: |-
- italic
- bold italic
- underline bold italic
- strike underline bold italic
-
-config:
- use-html: true
- html-allow-non-closed-tags: true
-
-output:
- - i:
- - "italic "
- - b:
- - "bold italic "
- - u:
- - "underline bold italic "
- - s: "strike underline bold italic"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/html-non-closed-ignore.yaml b/markwon/src/test/resources/tests/html-non-closed-ignore.yaml
deleted file mode 100644
index 0c97e34e..00000000
--- a/markwon/src/test/resources/tests/html-non-closed-ignore.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-input: |-
- no italic here
- bold yeah
- no underline
-
-config:
- use-html: true
-
-output:
- - "no italic here "
- - b: "bold yeah"
- - " no underline"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/html.yaml b/markwon/src/test/resources/tests/html.yaml
deleted file mode 100644
index d952ce96..00000000
--- a/markwon/src/test/resources/tests/html.yaml
+++ /dev/null
@@ -1,105 +0,0 @@
-input: |-
- html
- emphasis
- iemcitedfn
- strong-emphasis
- bstrong
- super-script
- sup
- sub-script
- sub
- underline
- uins
- strike
- sdel
- link
- a
- unordered-list
-
- ordered-list
- - ol1
- ol2
- image
-
- blockquote
- blockquote
- 3
- 4
- 5
- 6
-
-config:
- use-html: true
-
-output:
- - h1: "html"
- - "\n"
- - h2: "emphasis"
- - "\n"
- - i: "i"
- - i: "em"
- - i: "cite"
- - i: "dfn"
- - "\n"
- - h2: "strong-emphasis"
- - "\n"
- - b: "b"
- - b: "strong"
- - "\n"
- - h2: "super-script"
- - "\n"
- - sup: "sup"
- - "\n"
- - h2: "sub-script"
- - "\n"
- - sub: "sub"
- - "\n"
- - h2: "underline"
- - "\n"
- - u: "u"
- - u: "ins"
- - "\n"
- - h2: "strike"
- - "\n"
- - s: "s"
- - s: "del"
- - "\n"
- - h2: "link"
- - "\n"
- - a: "a"
- href: "a://href"
- - "\n"
- - h2: "unordered-list"
- - "\n"
- - ul: "ul1"
- level: 0
- - "\n"
- - ul: "ul2"
- level: 0
- - "\n"
- - h2: "ordered-list"
- - "\n"
- - ol: "ol1"
- start: 1
- - "\n"
- - ol: "ol2"
- start: 2
- - "\n"
- - h2: "image"
- - "\n"
- - img: "img"
- src: "img://src"
- imageSize: null
- replacementTextIsLink: false
- - "\n"
- - h2: "blockquote"
- - "\n"
- - blockquote: "blockquote"
- - "\n"
- - h3: "3"
- - "\n"
- - h4: "4"
- - "\n"
- - h5: "5"
- - "\n"
- - h6: "6"
-
diff --git a/markwon/src/test/resources/tests/second.yaml b/markwon/src/test/resources/tests/second.yaml
index bd088dc2..e34e0270 100644
--- a/markwon/src/test/resources/tests/second.yaml
+++ b/markwon/src/test/resources/tests/second.yaml
@@ -1,6 +1,5 @@
input: |-
First **line** is *always*
- ~~strike~~ down
> Some quote here!
@@ -18,9 +17,7 @@ output:
- b: "line"
- text: " is "
- i: "always"
- - text: " "
- - s: "strike"
- - text: " down\n\n"
+ - text: "\n\n"
- blockquote: "Some quote here!"
- text: "\n\n"
- h1: "Header 1"
diff --git a/markwon/src/test/resources/tests/single-s.yaml b/markwon/src/test/resources/tests/single-s.yaml
deleted file mode 100644
index 3a1c12cc..00000000
--- a/markwon/src/test/resources/tests/single-s.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-input: "~~strike~~"
-
-output:
- - s: "strike"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/single-sub.yaml b/markwon/src/test/resources/tests/single-sub.yaml
deleted file mode 100644
index bfeb5367..00000000
--- a/markwon/src/test/resources/tests/single-sub.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-input: "sub"
-
-config:
- use-html: true
-
-output:
- - sub: "sub"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/single-sup.yaml b/markwon/src/test/resources/tests/single-sup.yaml
deleted file mode 100644
index 8b21ad61..00000000
--- a/markwon/src/test/resources/tests/single-sup.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-input: "sup"
-
-config:
- use-html: true
-
-output:
- - sup: "sup"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/single-task-list.yaml b/markwon/src/test/resources/tests/single-task-list.yaml
deleted file mode 100644
index cbb15186..00000000
--- a/markwon/src/test/resources/tests/single-task-list.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-input: "- [ ] task-list"
-
-output:
- - task-list: "task-list"
- blockIdent: 1
- done: false
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/single-tr.yaml b/markwon/src/test/resources/tests/single-tr.yaml
deleted file mode 100644
index 6ca92909..00000000
--- a/markwon/src/test/resources/tests/single-tr.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-input: "col1|col2|col3\n---|---|---|"
-
-output:
- - tr: "\u00a0"
- header: true
- odd: false
- cells:
- - alignment: 0
- text: "col1"
- - alignment: 0
- text: "col2"
- - alignment: 0
- text: "col3"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/single-u.yaml b/markwon/src/test/resources/tests/single-u.yaml
deleted file mode 100644
index 1bd135d1..00000000
--- a/markwon/src/test/resources/tests/single-u.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-input: "underline"
-
-config:
- use-html: true
-
-output:
- - u: "underline"
\ No newline at end of file
diff --git a/markwon/src/test/resources/tests/table.yaml b/markwon/src/test/resources/tests/table.yaml
deleted file mode 100644
index 96d8236f..00000000
--- a/markwon/src/test/resources/tests/table.yaml
+++ /dev/null
@@ -1,51 +0,0 @@
-input: |-
- head1|head2|head3
- ---|:---:|---:
- row1-col1|row1-col2|row1-col3
- row2-col1|row2-col2|row2-col3
- row3-col1|row3-col2|row3-col3
-
-output:
- - tr: "\u00a0"
- header: true
- odd: false
- cells:
- - alignment: 0
- text: "head1"
- - alignment: 1
- text: "head2"
- - alignment: 2
- text: "head3"
- - text: "\n"
- - tr: "\u00a0"
- header: false
- odd: false
- cells:
- - alignment: 0
- text: "row1-col1"
- - alignment: 1
- text: "row1-col2"
- - alignment: 2
- text: "row1-col3"
- - text: "\n"
- - tr: "\u00a0"
- header: false
- odd: true
- cells:
- - alignment: 0
- text: "row2-col1"
- - alignment: 1
- text: "row2-col2"
- - alignment: 2
- text: "row2-col3"
- - text: "\n"
- - tr: "\u00a0"
- header: false
- odd: false
- cells:
- - alignment: 0
- text: "row3-col1"
- - alignment: 1
- text: "row3-col2"
- - alignment: 2
- text: "row3-col3"
\ No newline at end of file
diff --git a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java
index 6477f5d0..29ad6c51 100644
--- a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java
+++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java
@@ -8,7 +8,7 @@ import android.widget.TextView;
import ru.noties.markwon.AbstractMarkwonPlugin;
import ru.noties.markwon.Markwon;
-import ru.noties.markwon.spans.MarkwonTheme;
+import ru.noties.markwon.core.MarkwonTheme;
public class MainActivity extends Activity {