Add links to non markdown formatted https urls in MarkdownActivity.

pull/55/head
Fox2Code 2 years ago
parent 556b427309
commit 73201e467b

@ -59,10 +59,12 @@ public class MarkdownActivity extends CompatActivity {
TextView textView = findViewById(R.id.markdownView);
new Thread(() -> {
try {
Log.d(TAG, "Downloading");
String markdown = new String(Http.doHttpGet(url, true), StandardCharsets.UTF_8);
Log.i(TAG, "Download successful");
Log.d(TAG, "Done!");
runOnUiThread(() -> {
MainApplication.getINSTANCE().getMarkwon().setMarkdown(textView, markdown);
MainApplication.getINSTANCE().getMarkwon().setMarkdown(
textView, MarkdownUrlLinker.urlLinkify(markdown));
if (markdownBackground != null) {
markdownBackground.setClickable(true);
markdownBackground.setOnClickListener(v -> this.onBackPressed());

@ -0,0 +1,60 @@
package com.fox2code.mmm.markdown;
import android.util.Log;
import com.fox2code.mmm.BuildConfig;
import java.util.ArrayList;
public class MarkdownUrlLinker {
private static final String TAG = "MarkdownUrlLinker";
public static String urlLinkify(String url) {
int index = url.indexOf("https://");
if (index == -1) return url;
ArrayList<LinkifyTask> linkifyTasks = new ArrayList<>();
int extra = 0;
while (index != -1) {
int end = Math.min(url.indexOf('\n', index),
url.indexOf(' ', index));
if (end == -1) end = url.length();
if (index == 0 ||
'\n' == url.charAt(index - 1) ||
' ' == url.charAt(index - 1)) {
int endDomain = url.indexOf('/', index + 9);
if (endDomain != -1 && endDomain < end) {
linkifyTasks.add(new LinkifyTask(index, end));
extra += (end - index) + 4;
if (BuildConfig.DEBUG) {
Log.d(TAG, "Linkify url: " + url.substring(index, end));
}
}
}
index = url.indexOf("https://", end);
}
if (linkifyTasks.isEmpty()) return url;
LinkifyTask prev = LinkifyTask.NULL;
StringBuilder stringBuilder = new StringBuilder(url.length() + extra);
for (LinkifyTask linkifyTask : linkifyTasks) {
stringBuilder.append(url, prev.end, linkifyTask.start)
.append('[').append(url, linkifyTask.start, linkifyTask.end)
.append("](").append(url, linkifyTask.start, linkifyTask.end).append(')');
prev = linkifyTask;
}
if (prev.end != url.length()) stringBuilder.append(url, prev.end, url.length());
Log.d(TAG, "Added Markdown link to " + linkifyTasks.size() + " urls");
return stringBuilder.toString();
}
private static class LinkifyTask {
static final LinkifyTask NULL = new LinkifyTask(0, 0);
private final int start;
private final int end;
private LinkifyTask(int start, int end) {
this.start = start;
this.end = end;
}
}
}
Loading…
Cancel
Save