mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-01-30 11:34:43 +01:00
Refactor spoiler parsing into its own class
Reuse spoiler pattern otherwise we match markdown like: `>!` lots of new lines and text <! And some other minor changes.
This commit is contained in:
parent
04cc769ccf
commit
d5770599f5
@ -72,7 +72,7 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
|||||||
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
||||||
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
|
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
|||||||
|
|
||||||
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT).replaceAll(">",">");
|
mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT).replaceAll(">!",">!");
|
||||||
contentEditText.setText(mCommentContent);
|
contentEditText.setText(mCommentContent);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
@ -141,7 +141,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
titleTextView.setText(getIntent().getStringExtra(EXTRA_TITLE));
|
titleTextView.setText(getIntent().getStringExtra(EXTRA_TITLE));
|
||||||
mPostContent = getIntent().getStringExtra(EXTRA_CONTENT).replaceAll(">",">");;
|
mPostContent = getIntent().getStringExtra(EXTRA_CONTENT).replaceAll(">!",">!");;
|
||||||
contentEditText.setText(mPostContent);
|
contentEditText.setText(mPostContent);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
@ -61,8 +61,10 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
|||||||
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager;
|
import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager;
|
||||||
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
|
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerSpan;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
|
|
||||||
public class FullMarkdownActivity extends BaseActivity {
|
public class FullMarkdownActivity extends BaseActivity {
|
||||||
@ -150,51 +152,6 @@ public class FullMarkdownActivity extends BaseActivity {
|
|||||||
public String processMarkdown(@NonNull String markdown) {
|
public String processMarkdown(@NonNull String markdown) {
|
||||||
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterSetText(@NonNull TextView textView) {
|
|
||||||
textView.setHighlightColor(Color.TRANSPARENT);
|
|
||||||
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
|
||||||
Pattern spoilerPattern = Pattern.compile(">![\\S\\s]+?!<");
|
|
||||||
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
|
||||||
int start = 0;
|
|
||||||
boolean find = false;
|
|
||||||
while (matcher.find(start)) {
|
|
||||||
if (markdownStringBuilder.length() < 4
|
|
||||||
|| matcher.start() < 0
|
|
||||||
|| matcher.end() > markdownStringBuilder.length()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
find = true;
|
|
||||||
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
|
||||||
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
|
||||||
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
||||||
private boolean isShowing = false;
|
|
||||||
@Override
|
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
|
||||||
if (isShowing) {
|
|
||||||
super.updateDrawState(ds);
|
|
||||||
ds.setColor(markdownColor);
|
|
||||||
} else {
|
|
||||||
ds.bgColor = spoilerBackgroundColor;
|
|
||||||
ds.setColor(markdownColor);
|
|
||||||
}
|
|
||||||
ds.setUnderlineText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull View view) {
|
|
||||||
isShowing = !isShowing;
|
|
||||||
view.invalidate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
markdownStringBuilder.setSpan(clickableSpan, matcher.start(), matcher.end() - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
start = matcher.end() - 4;
|
|
||||||
}
|
|
||||||
if (find) {
|
|
||||||
textView.setText(markdownStringBuilder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
||||||
@ -217,6 +174,7 @@ public class FullMarkdownActivity extends BaseActivity {
|
|||||||
builder.linkColor(linkColor);
|
builder.linkColor(linkColor);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.usePlugin(SpoilerParserPlugin.create(markdownColor, spoilerBackgroundColor))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||||
.usePlugin(TableEntryPlugin.create(this))
|
.usePlugin(TableEntryPlugin.create(this))
|
||||||
|
@ -66,9 +66,11 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
|||||||
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager;
|
import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager;
|
||||||
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
|
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerSpan;
|
||||||
import ml.docilealligator.infinityforreddit.utils.JSONUtils;
|
import ml.docilealligator.infinityforreddit.utils.JSONUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@ -176,51 +178,6 @@ public class WikiActivity extends BaseActivity {
|
|||||||
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterSetText(@NonNull TextView textView) {
|
|
||||||
textView.setHighlightColor(Color.TRANSPARENT);
|
|
||||||
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
|
||||||
Pattern spoilerPattern = Pattern.compile(">![\\S\\s]+?!<");
|
|
||||||
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
|
||||||
int start = 0;
|
|
||||||
boolean find = false;
|
|
||||||
while (matcher.find(start)) {
|
|
||||||
if (markdownStringBuilder.length() < 4
|
|
||||||
|| matcher.start() < 0
|
|
||||||
|| matcher.end() > markdownStringBuilder.length()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
find = true;
|
|
||||||
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
|
||||||
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
|
||||||
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
||||||
private boolean isShowing = false;
|
|
||||||
@Override
|
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
|
||||||
if (isShowing) {
|
|
||||||
super.updateDrawState(ds);
|
|
||||||
ds.setColor(markdownColor);
|
|
||||||
} else {
|
|
||||||
ds.bgColor = spoilerBackgroundColor;
|
|
||||||
ds.setColor(markdownColor);
|
|
||||||
}
|
|
||||||
ds.setUnderlineText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull View view) {
|
|
||||||
isShowing = !isShowing;
|
|
||||||
view.invalidate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
markdownStringBuilder.setSpan(clickableSpan, matcher.start(), matcher.end() - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
start = matcher.end() - 4;
|
|
||||||
}
|
|
||||||
if (find) {
|
|
||||||
textView.setText(markdownStringBuilder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
||||||
textView.setTextColor(markdownColor);
|
textView.setTextColor(markdownColor);
|
||||||
@ -241,6 +198,7 @@ public class WikiActivity extends BaseActivity {
|
|||||||
builder.linkColor(linkColor);
|
builder.linkColor(linkColor);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.usePlugin(SpoilerParserPlugin.create(markdownColor, spoilerBackgroundColor))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||||
.usePlugin(TableEntryPlugin.create(this))
|
.usePlugin(TableEntryPlugin.create(this))
|
||||||
|
@ -63,9 +63,11 @@ import ml.docilealligator.infinityforreddit.comment.Comment;
|
|||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.CommentIndentationView;
|
import ml.docilealligator.infinityforreddit.customviews.CommentIndentationView;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView;
|
import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerSpan;
|
||||||
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@ -136,56 +138,6 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterSetText(@NonNull TextView textView) {
|
|
||||||
textView.setHighlightColor(Color.TRANSPARENT);
|
|
||||||
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
|
||||||
Pattern spoilerPattern = Pattern.compile(">![\\S\\s]+?!<");
|
|
||||||
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
|
||||||
int start = 0;
|
|
||||||
boolean find = false;
|
|
||||||
while (matcher.find(start)) {
|
|
||||||
if (markdownStringBuilder.length() < 4
|
|
||||||
|| matcher.start() < 0
|
|
||||||
|| matcher.end() > markdownStringBuilder.length()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
find = true;
|
|
||||||
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
|
||||||
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
|
||||||
int matcherStart = matcher.start();
|
|
||||||
int matcherEnd = matcher.end();
|
|
||||||
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
||||||
private boolean isShowing = false;
|
|
||||||
@Override
|
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
|
||||||
if (isShowing) {
|
|
||||||
super.updateDrawState(ds);
|
|
||||||
ds.setColor(mCommentColor);
|
|
||||||
} else {
|
|
||||||
ds.bgColor = commentSpoilerBackgroundColor;
|
|
||||||
ds.setColor(mCommentColor);
|
|
||||||
}
|
|
||||||
ds.setUnderlineText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull View view) {
|
|
||||||
if (textView instanceof SpoilerOnClickTextView) {
|
|
||||||
((SpoilerOnClickTextView) textView).setSpoilerOnClick(true);
|
|
||||||
}
|
|
||||||
isShowing = !isShowing;
|
|
||||||
view.invalidate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
markdownStringBuilder.setSpan(clickableSpan, matcherStart, matcherEnd - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
start = matcherEnd - 4;
|
|
||||||
}
|
|
||||||
if (find) {
|
|
||||||
textView.setText(markdownStringBuilder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
||||||
builder.linkColor(customThemeWrapper.getLinkColor());
|
builder.linkColor(customThemeWrapper.getLinkColor());
|
||||||
@ -202,6 +154,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.usePlugin(SpoilerParserPlugin.create(mCommentColor, commentSpoilerBackgroundColor))
|
||||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.build();
|
.build();
|
||||||
|
@ -11,8 +11,6 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextPaint;
|
|
||||||
import android.text.style.ClickableSpan;
|
|
||||||
import android.text.util.Linkify;
|
import android.text.util.Linkify;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -71,10 +69,12 @@ import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
|||||||
import ml.docilealligator.infinityforreddit.customviews.CommentIndentationView;
|
import ml.docilealligator.infinityforreddit.customviews.CommentIndentationView;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView;
|
import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView;
|
||||||
import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment;
|
import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerSpan;
|
||||||
import ml.docilealligator.infinityforreddit.post.Post;
|
import ml.docilealligator.infinityforreddit.post.Post;
|
||||||
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@ -181,52 +181,6 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
|||||||
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterSetText(@NonNull TextView textView) {
|
|
||||||
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
|
||||||
Pattern spoilerPattern = Pattern.compile(">![\\S\\s]+?!<");
|
|
||||||
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
|
||||||
int start = 0;
|
|
||||||
boolean find = false;
|
|
||||||
while (matcher.find(start)) {
|
|
||||||
if (markdownStringBuilder.length() < 4
|
|
||||||
|| matcher.start() < 0
|
|
||||||
|| matcher.end() > markdownStringBuilder.length()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
find = true;
|
|
||||||
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
|
||||||
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
|
||||||
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
||||||
private boolean isShowing = false;
|
|
||||||
@Override
|
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
|
||||||
if (isShowing) {
|
|
||||||
super.updateDrawState(ds);
|
|
||||||
} else {
|
|
||||||
ds.bgColor = commentSpoilerBackgroundColor;
|
|
||||||
}
|
|
||||||
ds.setColor(mCommentTextColor);
|
|
||||||
ds.setUnderlineText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull View view) {
|
|
||||||
if (textView instanceof SpoilerOnClickTextView) {
|
|
||||||
((SpoilerOnClickTextView) textView).setSpoilerOnClick(true);
|
|
||||||
}
|
|
||||||
isShowing = !isShowing;
|
|
||||||
view.invalidate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
markdownStringBuilder.setSpan(clickableSpan, matcher.start(), matcher.end() - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
start = matcher.end() - 4;
|
|
||||||
}
|
|
||||||
if (find) {
|
|
||||||
textView.setText(markdownStringBuilder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
||||||
builder.linkResolver((view, link) -> {
|
builder.linkResolver((view, link) -> {
|
||||||
@ -243,6 +197,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
|||||||
builder.linkColor(linkColor);
|
builder.linkColor(linkColor);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.usePlugin(SpoilerParserPlugin.create(mCommentTextColor, commentSpoilerBackgroundColor))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.usePlugin(MovementMethodPlugin.create(BetterLinkMovementMethod.newInstance().setOnLinkLongClickListener((textView, url) -> {
|
.usePlugin(MovementMethodPlugin.create(BetterLinkMovementMethod.newInstance().setOnLinkLongClickListener((textView, url) -> {
|
||||||
if (!activity.isDestroyed() && !activity.isFinishing()) {
|
if (!activity.isDestroyed() && !activity.isFinishing()) {
|
||||||
|
@ -46,10 +46,12 @@ import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity;
|
|||||||
import ml.docilealligator.infinityforreddit.activities.ViewPrivateMessagesActivity;
|
import ml.docilealligator.infinityforreddit.activities.ViewPrivateMessagesActivity;
|
||||||
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
|
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
|
||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerSpan;
|
||||||
import ml.docilealligator.infinityforreddit.message.FetchMessage;
|
import ml.docilealligator.infinityforreddit.message.FetchMessage;
|
||||||
import ml.docilealligator.infinityforreddit.message.Message;
|
import ml.docilealligator.infinityforreddit.message.Message;
|
||||||
import ml.docilealligator.infinityforreddit.message.ReadMessage;
|
import ml.docilealligator.infinityforreddit.message.ReadMessage;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@ -120,53 +122,6 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterSetText(@NonNull TextView textView) {
|
|
||||||
textView.setHighlightColor(Color.TRANSPARENT);
|
|
||||||
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
|
||||||
Pattern spoilerPattern = Pattern.compile(">![\\S\\s]+?!<");
|
|
||||||
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
|
||||||
int start = 0;
|
|
||||||
boolean find = false;
|
|
||||||
while (matcher.find(start)) {
|
|
||||||
if (markdownStringBuilder.length() < 4
|
|
||||||
|| matcher.start() < 0
|
|
||||||
|| matcher.end() > markdownStringBuilder.length()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
find = true;
|
|
||||||
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
|
||||||
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
|
||||||
int matcherStart = matcher.start();
|
|
||||||
int matcherEnd = matcher.end();
|
|
||||||
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
||||||
private boolean isShowing = false;
|
|
||||||
@Override
|
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
|
||||||
if (isShowing) {
|
|
||||||
super.updateDrawState(ds);
|
|
||||||
ds.setColor(mSecondaryTextColor);
|
|
||||||
} else {
|
|
||||||
ds.bgColor = spoilerBackgroundColor;
|
|
||||||
ds.setColor(mSecondaryTextColor);
|
|
||||||
}
|
|
||||||
ds.setUnderlineText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull View view) {
|
|
||||||
isShowing = !isShowing;
|
|
||||||
view.invalidate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
markdownStringBuilder.setSpan(clickableSpan, matcherStart, matcherEnd - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
start = matcherEnd - 4;
|
|
||||||
}
|
|
||||||
if (find) {
|
|
||||||
textView.setText(markdownStringBuilder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
||||||
builder.linkResolver((view, link) -> {
|
builder.linkResolver((view, link) -> {
|
||||||
@ -182,6 +137,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
builder.linkColor(customThemeWrapper.getLinkColor());
|
builder.linkColor(customThemeWrapper.getLinkColor());
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.usePlugin(SpoilerParserPlugin.create(mSecondaryTextColor, spoilerBackgroundColor))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||||
.build();
|
.build();
|
||||||
|
@ -110,11 +110,13 @@ import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView;
|
|||||||
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
|
||||||
import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager;
|
import ml.docilealligator.infinityforreddit.customviews.MarkwonLinearLayoutManager;
|
||||||
import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment;
|
import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.markdown.SpoilerSpan;
|
||||||
import ml.docilealligator.infinityforreddit.post.Post;
|
import ml.docilealligator.infinityforreddit.post.Post;
|
||||||
import ml.docilealligator.infinityforreddit.post.PostPagingSource;
|
import ml.docilealligator.infinityforreddit.post.PostPagingSource;
|
||||||
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -246,51 +248,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
return super.processMarkdown(Utils.fixSuperScript(markdown));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterSetText(@NonNull TextView textView) {
|
|
||||||
textView.setHighlightColor(Color.TRANSPARENT);
|
|
||||||
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
|
||||||
Pattern spoilerPattern = Pattern.compile(">![\\S\\s]+?!<");
|
|
||||||
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
|
||||||
int start = 0;
|
|
||||||
boolean find = false;
|
|
||||||
while (matcher.find(start)) {
|
|
||||||
if (markdownStringBuilder.length() < 4
|
|
||||||
|| matcher.start() < 0
|
|
||||||
|| matcher.end() > markdownStringBuilder.length()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
find = true;
|
|
||||||
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
|
||||||
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
|
||||||
ClickableSpan clickableSpan = new ClickableSpan() {
|
|
||||||
private boolean isShowing = false;
|
|
||||||
@Override
|
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
|
||||||
if (isShowing) {
|
|
||||||
super.updateDrawState(ds);
|
|
||||||
ds.setColor(markdownColor);
|
|
||||||
} else {
|
|
||||||
ds.bgColor = postSpoilerBackgroundColor;
|
|
||||||
ds.setColor(markdownColor);
|
|
||||||
}
|
|
||||||
ds.setUnderlineText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull View view) {
|
|
||||||
isShowing = !isShowing;
|
|
||||||
view.invalidate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
markdownStringBuilder.setSpan(clickableSpan, matcher.start(), matcher.end() - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
start = matcher.end() - 4;
|
|
||||||
}
|
|
||||||
if (find) {
|
|
||||||
textView.setText(markdownStringBuilder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
||||||
textView.setTextColor(markdownColor);
|
textView.setTextColor(markdownColor);
|
||||||
@ -323,6 +280,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
builder.linkColor(linkColor);
|
builder.linkColor(linkColor);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.usePlugin(SpoilerParserPlugin.create(markdownColor, postSpoilerBackgroundColor))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.usePlugin(MovementMethodPlugin.create(BetterLinkMovementMethod.linkify(Linkify.WEB_URLS, activity).setOnLinkLongClickListener((textView, url) -> {
|
.usePlugin(MovementMethodPlugin.create(BetterLinkMovementMethod.linkify(Linkify.WEB_URLS, activity).setOnLinkLongClickListener((textView, url) -> {
|
||||||
if (activity != null && !activity.isDestroyed() && !activity.isFinishing()) {
|
if (activity != null && !activity.isDestroyed() && !activity.isFinishing()) {
|
||||||
|
@ -41,7 +41,7 @@ import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
|
|||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
import ml.docilealligator.infinityforreddit.message.Message;
|
import ml.docilealligator.infinityforreddit.message.Message;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
|
|
||||||
public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
@ -35,7 +35,7 @@ import ml.docilealligator.infinityforreddit.Rule;
|
|||||||
import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity;
|
import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity;
|
||||||
import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
|
|
||||||
public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecyclerViewAdapter.RuleViewHolder> {
|
public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecyclerViewAdapter.RuleViewHolder> {
|
||||||
|
@ -74,7 +74,7 @@ public class CopyTextBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
|
|
||||||
if (markdownText != null) {
|
if (markdownText != null) {
|
||||||
//markdownText = markdownText.replaceAll("<sup>", "^").replaceAll("</sup>", "");
|
//markdownText = markdownText.replaceAll("<sup>", "^").replaceAll("</sup>", "");
|
||||||
markdownText = markdownText.replaceAll(">", ">");
|
markdownText = markdownText.replaceAll(">!", ">!");
|
||||||
copyMarkdownTextView.setOnClickListener(view -> {
|
copyMarkdownTextView.setOnClickListener(view -> {
|
||||||
showCopyDialog(markdownText);
|
showCopyDialog(markdownText);
|
||||||
dismiss();
|
dismiss();
|
||||||
|
@ -58,7 +58,7 @@ import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFi
|
|||||||
import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData;
|
import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData;
|
||||||
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
|
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
|
||||||
import ml.docilealligator.infinityforreddit.subreddit.SubredditViewModel;
|
import ml.docilealligator.infinityforreddit.subreddit.SubredditViewModel;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SuperscriptInlineProcessor;
|
import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor;
|
||||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
package ml.docilealligator.infinityforreddit.markdown;
|
||||||
|
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.text.Spanned;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||||
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
|
|
||||||
|
public class SpoilerParserPlugin extends AbstractMarkwonPlugin {
|
||||||
|
private final int textColor;
|
||||||
|
private final int backgroundColor;
|
||||||
|
|
||||||
|
SpoilerParserPlugin(int textColor, int backgroundColor) {
|
||||||
|
this.textColor = textColor;
|
||||||
|
this.backgroundColor = backgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SpoilerParserPlugin create(@NonNull int textColor, @NonNull int backgroundColor) {
|
||||||
|
return new SpoilerParserPlugin(textColor, backgroundColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterSetText(@NonNull TextView textView) {
|
||||||
|
textView.setHighlightColor(Color.TRANSPARENT);
|
||||||
|
SpannableStringBuilder markdownStringBuilder = new SpannableStringBuilder(textView.getText());
|
||||||
|
Pattern spoilerPattern = Pattern.compile(">!(\\n?(?:.+?(?:\\n?.+?)?)\\n?)!<");
|
||||||
|
Matcher matcher = spoilerPattern.matcher(markdownStringBuilder);
|
||||||
|
int start = 0;
|
||||||
|
boolean find = false;
|
||||||
|
while (matcher.find(start)) {
|
||||||
|
if (markdownStringBuilder.length() < 4
|
||||||
|
|| matcher.start() < 0
|
||||||
|
|| matcher.end() > markdownStringBuilder.length()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
find = true;
|
||||||
|
markdownStringBuilder.delete(matcher.end() - 2, matcher.end());
|
||||||
|
markdownStringBuilder.delete(matcher.start(), matcher.start() + 2);
|
||||||
|
SpoilerSpan spoilerSpan = new SpoilerSpan(textColor, backgroundColor);
|
||||||
|
markdownStringBuilder.setSpan(spoilerSpan, matcher.start(), matcher.end() - 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
|
start = matcher.end() - 4;
|
||||||
|
}
|
||||||
|
/*Pattern escapedSpoilerOpenerPattern = Pattern.compile(">!");
|
||||||
|
Matcher escapedSpoilerOpenerMatcher = escapedSpoilerOpenerPattern.matcher(markdownStringBuilder);
|
||||||
|
ArrayList<Integer> matched = new ArrayList<>();
|
||||||
|
while (escapedSpoilerOpenerMatcher.find()) {
|
||||||
|
matched.add(escapedSpoilerOpenerMatcher.start());
|
||||||
|
find = true;
|
||||||
|
}
|
||||||
|
for (int i = matched.size() - 1; i >= 0; i--) {
|
||||||
|
markdownStringBuilder.replace(matched.get(i), matched.get(i) + 4, ">");
|
||||||
|
}*/
|
||||||
|
if (find) {
|
||||||
|
textView.setText(markdownStringBuilder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package ml.docilealligator.infinityforreddit.markdown;
|
||||||
|
|
||||||
|
import android.text.Layout;
|
||||||
|
import android.text.Spannable;
|
||||||
|
import android.text.TextPaint;
|
||||||
|
import android.text.style.ClickableSpan;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.transition.AutoTransition;
|
||||||
|
import androidx.transition.TransitionManager;
|
||||||
|
|
||||||
|
import ml.docilealligator.infinityforreddit.customviews.SpoilerOnClickTextView;
|
||||||
|
|
||||||
|
public class SpoilerSpan extends ClickableSpan {
|
||||||
|
final int textColor;
|
||||||
|
final int backgroundColor;
|
||||||
|
private boolean isShowing = false;
|
||||||
|
|
||||||
|
public SpoilerSpan(@NonNull int textColor, @NonNull int backgroundColor) {
|
||||||
|
this.textColor = textColor;
|
||||||
|
this.backgroundColor = backgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(@NonNull View widget) {
|
||||||
|
if (!(widget instanceof TextView)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final TextView textView = (TextView) widget;
|
||||||
|
final Spannable spannable = (Spannable) textView.getText();
|
||||||
|
|
||||||
|
final int end = spannable.getSpanEnd(this);
|
||||||
|
|
||||||
|
if (end < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Layout layout = textView.getLayout();
|
||||||
|
if (layout == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (widget instanceof SpoilerOnClickTextView) {
|
||||||
|
((SpoilerOnClickTextView) textView).setSpoilerOnClick(true);
|
||||||
|
}
|
||||||
|
isShowing = !isShowing;
|
||||||
|
widget.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
|
if (isShowing) {
|
||||||
|
super.updateDrawState(ds);
|
||||||
|
} else {
|
||||||
|
ds.bgColor = backgroundColor;
|
||||||
|
}
|
||||||
|
ds.setColor(textColor);
|
||||||
|
ds.setUnderlineText(false);
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package ml.docilealligator.infinityforreddit.utils;
|
package ml.docilealligator.infinityforreddit.markdown;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
@ -65,7 +65,7 @@ public class Utils {
|
|||||||
.replaceAll("((?<=[\\s])|^)/[rRuU]/[\\w-]+/{0,1}", "[$0](https://www.reddit.com$0)")
|
.replaceAll("((?<=[\\s])|^)/[rRuU]/[\\w-]+/{0,1}", "[$0](https://www.reddit.com$0)")
|
||||||
.replaceAll("((?<=[\\s])|^)[rRuU]/[\\w-]+/{0,1}", "[$0](https://www.reddit.com/$0)")
|
.replaceAll("((?<=[\\s])|^)[rRuU]/[\\w-]+/{0,1}", "[$0](https://www.reddit.com/$0)")
|
||||||
.replaceAll("\\^{2,}", "^")
|
.replaceAll("\\^{2,}", "^")
|
||||||
.replaceAll(">!(\\n?(?:[\\S\\h]+?(?:\\n?[\\S\\h]+?)?)\\n?)!<", ">!$1!<") // html entity remains escaped inside an inline block
|
.replaceAll(">!(\\n?(?:.+?(?:\\n?.+?)?)\\n?)!<", ">!$1!<") // html entity remains escaped inside an inline block
|
||||||
.replaceAll("(^|^ *|\\n *)#(?!($|\\s|#))", "$0 ")
|
.replaceAll("(^|^ *|\\n *)#(?!($|\\s|#))", "$0 ")
|
||||||
.replaceAll("(^|^ *|\\n *)##(?!($|\\s|#))", "$0 ")
|
.replaceAll("(^|^ *|\\n *)##(?!($|\\s|#))", "$0 ")
|
||||||
.replaceAll("(^|^ *|\\n *)###(?!($|\\s|#))", "$0 ")
|
.replaceAll("(^|^ *|\\n *)###(?!($|\\s|#))", "$0 ")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user