From 1cf5ceaffc33e973120daaebeb68c621dab4a31a Mon Sep 17 00:00:00 2001 From: yydcdut <378040621@qq.com> Date: Tue, 26 Jun 2018 23:23:10 +0800 Subject: [PATCH] fix #49 --- .../com/yydcdut/markdown/syntax/text/BoldSyntax.java | 11 ++++++++--- .../yydcdut/markdown/syntax/text/ItalicSyntax.java | 11 +++++++++-- .../markdown/syntax/text/StrikeThroughSyntax.java | 9 ++++++++- .../java/com/yydcdut/markdown/utils/SyntaxUtils.java | 9 ++++++--- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/BoldSyntax.java b/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/BoldSyntax.java index 7a29d5f..c03c3a9 100644 --- a/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/BoldSyntax.java +++ b/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/BoldSyntax.java @@ -75,10 +75,10 @@ boolean encode(@NonNull SpannableStringBuilder ssb) { @Override SpannableStringBuilder format(@NonNull SpannableStringBuilder ssb, int lineNumber) { if (isContainsAsterisk) { - ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_BOLD_ASTERISK, ssb, new StyleSpan(Typeface.BOLD)); + ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_BOLD_ASTERISK, ssb, mCallback); } if (isContainsUnderline) { - ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_BOLD_UNDERLINE, ssb, new StyleSpan(Typeface.BOLD)); + ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_BOLD_UNDERLINE, ssb, mCallback); } return ssb; } @@ -94,5 +94,10 @@ void decode(@NonNull SpannableStringBuilder ssb) { } } - + private SyntaxUtils.OnWhatSpanCallback mCallback = new SyntaxUtils.OnWhatSpanCallback() { + @Override + public Object whatSpan() { + return new StyleSpan(Typeface.BOLD); + } + }; } diff --git a/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/ItalicSyntax.java b/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/ItalicSyntax.java index b7dea16..d2943f9 100644 --- a/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/ItalicSyntax.java +++ b/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/ItalicSyntax.java @@ -72,10 +72,10 @@ boolean encode(@NonNull SpannableStringBuilder ssb) { @Override SpannableStringBuilder format(@NonNull SpannableStringBuilder ssb, int lineNumber) { if (isContainsAsterisk) { - ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_ITALIC_ASTERISK, ssb, new StyleSpan(Typeface.ITALIC)); + ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_ITALIC_ASTERISK, ssb, mCallback); } if (isContainsUnderline) { - ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_ITALIC_UNDERLINE, ssb, new StyleSpan(Typeface.ITALIC)); + ssb = SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_ITALIC_UNDERLINE, ssb, mCallback); } return ssb; } @@ -90,4 +90,11 @@ void decode(@NonNull SpannableStringBuilder ssb) { replace(ssb, CharacterProtector.getKeyEncode1(), SyntaxKey.KEY_ITALIC_BACKSLASH_UNDERLINE); } } + + private SyntaxUtils.OnWhatSpanCallback mCallback = new SyntaxUtils.OnWhatSpanCallback() { + @Override + public Object whatSpan() { + return new StyleSpan(Typeface.ITALIC); + } + }; } diff --git a/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/StrikeThroughSyntax.java b/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/StrikeThroughSyntax.java index a24d41c..94e2220 100644 --- a/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/StrikeThroughSyntax.java +++ b/markdown-processor/src/main/java/com/yydcdut/markdown/syntax/text/StrikeThroughSyntax.java @@ -53,7 +53,7 @@ boolean encode(@NonNull SpannableStringBuilder ssb) { @Override SpannableStringBuilder format(@NonNull SpannableStringBuilder ssb, int lineNumber) { - return SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_STRIKE_THROUGH, ssb, new StrikethroughSpan()); + return SyntaxUtils.parseBoldAndItalic(SyntaxKey.KEY_STRIKE_THROUGH, ssb, mCallback); } @NonNull @@ -61,4 +61,11 @@ SpannableStringBuilder format(@NonNull SpannableStringBuilder ssb, int lineNumbe void decode(@NonNull SpannableStringBuilder ssb) { replace(ssb, CharacterProtector.getKeyEncode(), SyntaxKey.KEY_STRIKE_BACKSLASH); } + + private SyntaxUtils.OnWhatSpanCallback mCallback = new SyntaxUtils.OnWhatSpanCallback() { + @Override + public Object whatSpan() { + return new StrikethroughSpan(); + } + }; } diff --git a/markdown-processor/src/main/java/com/yydcdut/markdown/utils/SyntaxUtils.java b/markdown-processor/src/main/java/com/yydcdut/markdown/utils/SyntaxUtils.java index 0005d15..6ae69b1 100644 --- a/markdown-processor/src/main/java/com/yydcdut/markdown/utils/SyntaxUtils.java +++ b/markdown-processor/src/main/java/com/yydcdut/markdown/utils/SyntaxUtils.java @@ -35,10 +35,13 @@ public class SyntaxUtils { * @param key {@link SyntaxKey#KEY_BOLD_ASTERISK} or {@link SyntaxKey#KEY_BOLD_UNDERLINE} or * {@link SyntaxKey#KEY_ITALIC_ASTERISK} or {@link SyntaxKey#KEY_ITALIC_UNDERLINE} * @param ssb the original content - * @param whatSpan span + * @param callback span callback * @return the content after parsing */ - public static SpannableStringBuilder parseBoldAndItalic(@NonNull String key, @NonNull SpannableStringBuilder ssb, @NonNull Object whatSpan) { + public static SpannableStringBuilder parseBoldAndItalic(@NonNull String key, @NonNull SpannableStringBuilder ssb, @NonNull OnWhatSpanCallback callback) { + if (callback == null) { + return ssb; + } String text = ssb.toString(); int keyLength = key.length(); SpannableStringBuilder tmp = new SpannableStringBuilder(); @@ -56,7 +59,7 @@ public static SpannableStringBuilder parseBoldAndItalic(@NonNull String key, @No if (positionFooter != -1) { ssb.delete(tmp.length(), tmp.length() + keyLength); tmp.append(tmpTotal.substring(0, positionFooter)); - ssb.setSpan(whatSpan, index, tmp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(callback.whatSpan(), index, tmp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.delete(tmp.length(), tmp.length() + keyLength); } else { tmp.append(key);