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);
}
}