diff --git a/app/build.gradle b/app/build.gradle index 0425a484e5..5e50f375a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,14 +13,12 @@ if (enable_plugin_kotlin) { apply plugin: 'kotlin-kapt' } -rootProject.ext.version_minSdk = 18 +rootProject.ext.version_minSdk = 21 // https://github.com/vsch/flexmark-java/releases -ext.version_library_flexmark = "0.42.14" +ext.version_library_flexmark = "0.64.8" android { - buildToolsVersion rootProject.ext.version_buildTools - compileSdkVersion rootProject.ext.version_compileSdk defaultConfig { resValue "string", "manifest_package_id", "net.gsantner.markor" @@ -31,6 +29,7 @@ android { multiDexEnabled true minSdkVersion rootProject.ext.version_minSdk targetSdkVersion rootProject.ext.version_compileSdk + compileSdk rootProject.ext.version_compileSdk buildConfigField "boolean", "IS_TEST_BUILD", "false" buildConfigField "boolean", "IS_GPLAY_BUILD", "false" buildConfigField "String[]", "DETECTED_ANDROID_LOCALES", "${findUsedAndroidLocales()}" @@ -40,7 +39,7 @@ android { setProperty("archivesBaseName", applicationId + "-v" + versionCode + "-" + versionName) } - flavorDimensions "default" + flavorDimensions = ["default"] productFlavors { flavorAtest { applicationId "net.gsantner.markor_test" @@ -98,13 +97,13 @@ dependencies { // Android standard libs implementation "androidx.multidex:multidex:2.0.1" - implementation 'androidx.appcompat:appcompat:1.4.2' - implementation 'com.google.android.material:material:1.6.1' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'com.google.android.material:material:1.12.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.preference:preference:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.3.2' + implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.legacy:legacy-preference-v14:1.0.0' - implementation 'androidx.browser:browser:1.4.0' + implementation 'androidx.browser:browser:1.8.0' // Markdown convertor (Flexmark) implementation "com.vladsch.flexmark:flexmark:${version_library_flexmark}" @@ -143,7 +142,7 @@ dependencies { // Tool libraries //noinspection AnnotationProcessorOnCompilePath - implementation 'commons-io:commons-io:2.7' + implementation 'commons-io:commons-io:2.13.0' if (enable_plugin_kotlin) { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${version_plugin_kotlin}" } diff --git a/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java b/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java index a23bb4fa28..6c9c976196 100644 --- a/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java +++ b/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java @@ -22,6 +22,7 @@ import com.vladsch.flexmark.ext.ins.InsExtension; import com.vladsch.flexmark.ext.jekyll.front.matter.JekyllFrontMatterExtension; import com.vladsch.flexmark.ext.jekyll.tag.JekyllTagExtension; +import com.vladsch.flexmark.ext.superscript.SuperscriptExtension; import com.vladsch.flexmark.ext.tables.TablesExtension; import com.vladsch.flexmark.ext.toc.SimTocExtension; import com.vladsch.flexmark.ext.toc.TocExtension; @@ -36,19 +37,21 @@ import com.vladsch.flexmark.html.renderer.AttributablePart; import com.vladsch.flexmark.html.renderer.LinkResolverContext; import com.vladsch.flexmark.parser.Parser; -import com.vladsch.flexmark.superscript.SuperscriptExtension; import com.vladsch.flexmark.util.ast.Document; import com.vladsch.flexmark.util.ast.Node; -import com.vladsch.flexmark.util.builder.Extension; -import com.vladsch.flexmark.util.html.Attributes; -import com.vladsch.flexmark.util.options.MutableDataHolder; -import com.vladsch.flexmark.util.options.MutableDataSet; +import com.vladsch.flexmark.util.data.MutableDataHolder; +import com.vladsch.flexmark.util.data.MutableDataSet; +import com.vladsch.flexmark.util.html.MutableAttributes; +import com.vladsch.flexmark.util.misc.Extension; import net.gsantner.markor.R; import net.gsantner.markor.format.TextConverterBase; import net.gsantner.markor.model.AppSettings; import net.gsantner.opoc.util.GsContextUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.io.File; import java.util.ArrayList; import java.util.Arrays; @@ -319,7 +322,7 @@ public String convertMarkup(String markup, Context context, boolean lightMode, b //////////// // Markup parsing - afterwards = HTML Document document = flexmarkParser.parse(markup); - converted = fmaText + flexmarkRenderer.withOptions(options).render(document); + converted = fmaText + flexmarkRenderer.builder(options).build().render(document); // After render changes: Fixes for Footnotes (converter creates footnote +
+ ref#(click) --> remove line break) if (converted.contains("footnote-")) { @@ -446,7 +449,7 @@ private String replaceTokens(final String markup, final Map private static class LineNumberIdProvider implements AttributeProvider { @Override - public void setAttributes(Node node, AttributablePart part, Attributes attributes) { + public void setAttributes(@NotNull Node node, @NotNull AttributablePart part, @NotNull MutableAttributes attributes) { final Document document = node.getDocument(); final int lineNumber = document.getLineNumber(node.getStartOffset()); attributes.addValue("line", "" + lineNumber); @@ -456,12 +459,12 @@ public void setAttributes(Node node, AttributablePart part, Attributes attribute private static class LineNumberIdProviderFactory implements AttributeProviderFactory { @Override - public Set> getAfterDependents() { + public @Nullable Set> getAfterDependents() { return null; } @Override - public Set> getBeforeDependents() { + public @Nullable Set> getBeforeDependents() { return null; } @@ -471,7 +474,7 @@ public boolean affectsGlobalScope() { } @Override - public AttributeProvider create(LinkResolverContext context) { + public @NotNull AttributeProvider apply(@NotNull LinkResolverContext context) { return new LineNumberIdProvider(); } } diff --git a/app/thirdparty/java/other/com/vladsch/flexmark/ext/katex/FlexmarkKatexExtension.java b/app/thirdparty/java/other/com/vladsch/flexmark/ext/katex/FlexmarkKatexExtension.java index 9fbf5be84d..6865e9e679 100644 --- a/app/thirdparty/java/other/com/vladsch/flexmark/ext/katex/FlexmarkKatexExtension.java +++ b/app/thirdparty/java/other/com/vladsch/flexmark/ext/katex/FlexmarkKatexExtension.java @@ -31,9 +31,7 @@ package other.com.vladsch.flexmark.ext.katex; -import com.vladsch.flexmark.ast.DelimitedNode; import com.vladsch.flexmark.ast.util.ReferenceRepository; -import com.vladsch.flexmark.html.CustomNodeRenderer; import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.html.HtmlWriter; import com.vladsch.flexmark.html.renderer.NodeRenderer; @@ -43,18 +41,23 @@ import com.vladsch.flexmark.parser.InlineParser; import com.vladsch.flexmark.parser.InlineParserExtension; import com.vladsch.flexmark.parser.InlineParserExtensionFactory; +import com.vladsch.flexmark.parser.LightInlineParser; import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.ast.DelimitedNode; import com.vladsch.flexmark.util.ast.Node; import com.vladsch.flexmark.util.ast.VisitHandler; import com.vladsch.flexmark.util.ast.Visitor; -import com.vladsch.flexmark.util.builder.Extension; +import com.vladsch.flexmark.util.data.DataHolder; +import com.vladsch.flexmark.util.data.DataKey; +import com.vladsch.flexmark.util.data.MutableDataHolder; +import com.vladsch.flexmark.util.data.MutableDataSetter; import com.vladsch.flexmark.util.html.Attribute; -import com.vladsch.flexmark.util.options.DataHolder; -import com.vladsch.flexmark.util.options.DataKey; -import com.vladsch.flexmark.util.options.MutableDataHolder; -import com.vladsch.flexmark.util.options.MutableDataSetter; +import com.vladsch.flexmark.util.misc.Extension; import com.vladsch.flexmark.util.sequence.BasedSequence; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.util.HashSet; import java.util.Set; import java.util.regex.Matcher; @@ -260,7 +263,7 @@ public static class KatexDisplayMathParser implements InlineParserExtension { private final KatexOptions options; Pattern MATH_PATTERN = Pattern.compile("\\$\\$((?:.|\n)+?)\\$\\$"); - public KatexDisplayMathParser(final InlineParser inlineParser) { + public KatexDisplayMathParser(final LightInlineParser inlineParser) { options = new KatexOptions(inlineParser.getDocument()); } @@ -273,7 +276,7 @@ public void finalizeBlock(final InlineParser inlineParser) { } @Override - public boolean parse(final InlineParser inlineParser) { + public boolean parse(@NotNull LightInlineParser inlineParser) { if (inlineParser.peek(1) == '$') { BasedSequence input = inlineParser.getInput(); Matcher matcher = inlineParser.matcher(MATH_PATTERN); @@ -292,7 +295,7 @@ public boolean parse(final InlineParser inlineParser) { public static class Factory implements InlineParserExtensionFactory { @Override - public Set> getAfterDependents() { + public @Nullable Set> getAfterDependents() { return null; } @@ -302,12 +305,12 @@ public CharSequence getCharacters() { } @Override - public Set> getBeforeDependents() { + public @Nullable Set> getBeforeDependents() { return null; } @Override - public InlineParserExtension create(final InlineParser inlineParser) { + public @NotNull InlineParserExtension apply(@NotNull LightInlineParser inlineParser) { return new KatexDisplayMathParser(inlineParser); } @@ -322,7 +325,7 @@ public static class KatexInlineMathParser implements InlineParserExtension { private final KatexOptions options; Pattern MATH_PATTERN = Pattern.compile("(?> getAfterDependents() { + public @Nullable Set> getAfterDependents() { return null; } @@ -364,12 +367,12 @@ public CharSequence getCharacters() { } @Override - public Set> getBeforeDependents() { + public @Nullable Set> getBeforeDependents() { return null; } @Override - public InlineParserExtension create(final InlineParser inlineParser) { + public @NotNull InlineParserExtension apply(@NotNull LightInlineParser inlineParser) { return new KatexInlineMathParser(inlineParser); } @@ -395,13 +398,13 @@ public KatexNodeRenderer(DataHolder options) { public Set> getNodeRenderingHandlers() { Set> set = new HashSet>(); // @formatter:off - set.add(new NodeRenderingHandler(KatexInlineMath.class, new CustomNodeRenderer() { + set.add(new NodeRenderingHandler(KatexInlineMath.class, new NodeRenderingHandler.CustomNodeRenderer() { @Override public void render(KatexInlineMath node, NodeRendererContext context, HtmlWriter html) { KatexNodeRenderer.this.render(node, context, html); } })); - set.add(new NodeRenderingHandler(KatexDisplayMath.class, new CustomNodeRenderer() { + set.add(new NodeRenderingHandler(KatexDisplayMath.class, new NodeRenderingHandler.CustomNodeRenderer() { @Override public void render(KatexDisplayMath node, NodeRendererContext context, HtmlWriter html) { KatexNodeRenderer.this.render(node, context, html); @@ -425,7 +428,7 @@ private void render(final KatexDisplayMath node, final NodeRendererContext conte public static class Factory implements NodeRendererFactory { @Override - public NodeRenderer create(final DataHolder options) { + public @NotNull NodeRenderer apply(@NotNull DataHolder options) { return new KatexNodeRenderer(options); } }