Update syntax highlight to use SpannableStringBuilder
This commit is contained in:
parent
6e2a064304
commit
2ac6090a3d
@ -2,9 +2,9 @@ package ru.noties.markwon.syntax;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import ru.noties.markwon.SpannableBuilder;
|
||||
import ru.noties.markwon.SyntaxHighlight;
|
||||
import ru.noties.prism4j.Prism4j;
|
||||
|
||||
@ -82,10 +82,10 @@ public class Prism4jSyntaxHighlight implements SyntaxHighlight {
|
||||
|
||||
@NonNull
|
||||
protected CharSequence highlight(@NonNull String language, @NonNull Prism4j.Grammar grammar, @NonNull String code) {
|
||||
final SpannableBuilder builder = new SpannableBuilder();
|
||||
final SpannableStringBuilder builder = new SpannableStringBuilder();
|
||||
final Prism4jSyntaxVisitor visitor = new Prism4jSyntaxVisitor(language, theme, builder);
|
||||
visitor.visit(prism4j.tokenize(code, grammar));
|
||||
return builder.text();
|
||||
return builder;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
@ -1,8 +1,8 @@
|
||||
package ru.noties.markwon.syntax;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.SpannableStringBuilder;
|
||||
|
||||
import ru.noties.markwon.SpannableBuilder;
|
||||
import ru.noties.prism4j.AbsVisitor;
|
||||
import ru.noties.prism4j.Prism4j;
|
||||
|
||||
@ -10,12 +10,12 @@ class Prism4jSyntaxVisitor extends AbsVisitor {
|
||||
|
||||
private final String language;
|
||||
private final Prism4jTheme theme;
|
||||
private final SpannableBuilder builder;
|
||||
private final SpannableStringBuilder builder;
|
||||
|
||||
Prism4jSyntaxVisitor(
|
||||
@NonNull String language,
|
||||
@NonNull Prism4jTheme theme,
|
||||
@NonNull SpannableBuilder builder) {
|
||||
@NonNull SpannableStringBuilder builder) {
|
||||
this.language = language;
|
||||
this.theme = theme;
|
||||
this.builder = builder;
|
||||
|
@ -2,8 +2,8 @@ package ru.noties.markwon.syntax;
|
||||
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.SpannableStringBuilder;
|
||||
|
||||
import ru.noties.markwon.SpannableBuilder;
|
||||
import ru.noties.prism4j.Prism4j;
|
||||
|
||||
public interface Prism4jTheme {
|
||||
@ -14,7 +14,7 @@ public interface Prism4jTheme {
|
||||
void apply(
|
||||
@NonNull String language,
|
||||
@NonNull Prism4j.Syntax syntax,
|
||||
@NonNull SpannableBuilder builder,
|
||||
@NonNull SpannableStringBuilder builder,
|
||||
int start,
|
||||
int end
|
||||
);
|
||||
|
@ -5,11 +5,12 @@ import android.support.annotation.FloatRange;
|
||||
import android.support.annotation.IntRange;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import ru.noties.markwon.SpannableBuilder;
|
||||
import ru.noties.prism4j.Prism4j;
|
||||
|
||||
public abstract class Prism4jThemeBase implements Prism4jTheme {
|
||||
@ -55,7 +56,7 @@ public abstract class Prism4jThemeBase implements Prism4jTheme {
|
||||
public void apply(
|
||||
@NonNull String language,
|
||||
@NonNull Prism4j.Syntax syntax,
|
||||
@NonNull SpannableBuilder builder,
|
||||
@NonNull SpannableStringBuilder builder,
|
||||
int start,
|
||||
int end) {
|
||||
|
||||
@ -74,10 +75,10 @@ public abstract class Prism4jThemeBase implements Prism4jTheme {
|
||||
@NonNull String type,
|
||||
@Nullable String alias,
|
||||
@ColorInt int color,
|
||||
@NonNull SpannableBuilder builder,
|
||||
@NonNull SpannableStringBuilder builder,
|
||||
int start,
|
||||
int end) {
|
||||
builder.setSpan(new ForegroundColorSpan(color), start, end);
|
||||
builder.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
||||
protected static class Color {
|
||||
|
@ -3,9 +3,10 @@ package ru.noties.markwon.syntax;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.BackgroundColorSpan;
|
||||
|
||||
import ru.noties.markwon.SpannableBuilder;
|
||||
import ru.noties.markwon.spans.EmphasisSpan;
|
||||
import ru.noties.markwon.spans.StrongEmphasisSpan;
|
||||
|
||||
@ -36,13 +37,13 @@ public class Prism4jThemeDefault extends Prism4jThemeBase {
|
||||
@NonNull String type,
|
||||
@Nullable String alias,
|
||||
@ColorInt int color,
|
||||
@NonNull SpannableBuilder builder,
|
||||
@NonNull SpannableStringBuilder builder,
|
||||
int start,
|
||||
int end) {
|
||||
|
||||
if ("css".equals(language) && isOfType("string", type, alias)) {
|
||||
super.applyColor(language, type, alias, 0xFF9a6e3a, builder, start, end);
|
||||
builder.setSpan(new BackgroundColorSpan(0x80ffffff), start, end);
|
||||
builder.setSpan(new BackgroundColorSpan(0x80ffffff), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -54,11 +55,11 @@ public class Prism4jThemeDefault extends Prism4jThemeBase {
|
||||
|
||||
if (isOfType("important", type, alias)
|
||||
|| isOfType("bold", type, alias)) {
|
||||
builder.setSpan(new StrongEmphasisSpan(), start, end);
|
||||
builder.setSpan(new StrongEmphasisSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
||||
if (isOfType("italic", type, alias)) {
|
||||
builder.setSpan(new EmphasisSpan(), start, end);
|
||||
builder.setSpan(new EmphasisSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user