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> 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> 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> 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

-
  • ul1
  • ul2
-

ordered-list

-
  1. ol1
  2. ol2
-

image

- img -

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 {