Update syntax highlight to use SpannableStringBuilder

This commit is contained in:
Dimitry Ivanov 2018-07-16 18:24:40 +03:00
parent 6e2a064304
commit 2ac6090a3d
5 changed files with 19 additions and 17 deletions

View File

@ -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

View File

@ -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;

View File

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

View File

@ -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 {

View File

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