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