From 6a002346d016b4b507144bcaa77855b7191de97d Mon Sep 17 00:00:00 2001 From: tateisu Date: Thu, 6 Dec 2018 08:33:49 +0900 Subject: [PATCH] =?UTF-8?q?(Misskey)MFM=E3=81=AEsmall=E3=81=A8italic?= =?UTF-8?q?=E3=81=AB=E9=9B=91=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/MisskeyMarkdownDecoder.kt | 74 +++++++++++++++---- 1 file changed, 61 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/MisskeyMarkdownDecoder.kt b/app/src/main/java/jp/juggler/subwaytooter/util/MisskeyMarkdownDecoder.kt index b0270ff6..bae4b89e 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/MisskeyMarkdownDecoder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/MisskeyMarkdownDecoder.kt @@ -5,10 +5,7 @@ import android.graphics.Color import android.graphics.Typeface import android.text.SpannableStringBuilder import android.text.Spanned -import android.text.style.BackgroundColorSpan -import android.text.style.ForegroundColorSpan -import android.text.style.RelativeSizeSpan -import android.text.style.StrikethroughSpan +import android.text.style.* import android.util.SparseArray import android.util.SparseBooleanArray import jp.juggler.subwaytooter.ActMain @@ -850,6 +847,19 @@ object MisskeyMarkdownDecoder { fireRenderChildNodes(it) spanList.addLast(start, sb.length, StrikethroughSpan()) }), + + SMALL({ + val start = this.start + fireRenderChildNodes(it) + spanList.addLast(start, sb.length, RelativeSizeSpan(0.7f)) + }), + + ITALIC({ + val start = this.start + fireRenderChildNodes(it) + spanList.addLast(start, sb.length, StyleSpan(Typeface.ITALIC)) + }), + MOTION({ val start = this.start fireRenderChildNodes(it) @@ -987,40 +997,70 @@ object MisskeyMarkdownDecoder { fun hashSetOf(vararg values : T) = HashSet().apply { addAll(values) } infix fun NodeType.wraps(inner : HashSet) = put(this, inner) - + // EMOJI, HASHTAG, MENTION, CODE_BLOCK, QUOTE_INLINE, SEARCH 等はマークダウン要素のネストを許可しない BIG wraps - hashSetOf(EMOJI, HASHTAG, MENTION, STRIKE) + hashSetOf( + EMOJI, HASHTAG, MENTION, + STRIKE, SMALL, ITALIC + ) BOLD wraps - hashSetOf(EMOJI, HASHTAG, MENTION, URL, LINK, STRIKE) + hashSetOf( + EMOJI, HASHTAG, MENTION, URL, LINK, + STRIKE, SMALL, ITALIC + ) STRIKE wraps - hashSetOf(EMOJI, HASHTAG, MENTION, URL, LINK, BOLD) + hashSetOf( + EMOJI, HASHTAG, MENTION, URL, LINK, + BIG, BOLD, SMALL, ITALIC + ) + + SMALL wraps + hashSetOf( + EMOJI, HASHTAG, MENTION, URL, LINK, + BOLD, STRIKE, ITALIC + ) + + ITALIC wraps + hashSetOf( + EMOJI, HASHTAG, MENTION, URL, LINK, + BIG, BOLD, STRIKE, SMALL + ) MOTION wraps - hashSetOf(EMOJI, HASHTAG, MENTION, URL, LINK, BOLD, STRIKE) + hashSetOf( + EMOJI, HASHTAG, MENTION, URL, LINK, + BOLD, STRIKE, SMALL, ITALIC + ) LINK wraps - hashSetOf(EMOJI, MOTION, BIG, BOLD, STRIKE) + hashSetOf( + EMOJI, MOTION, + BIG, BOLD, STRIKE, SMALL, ITALIC + ) TITLE wraps hashSetOf( - EMOJI, HASHTAG, MENTION, URL, LINK, BIG, BOLD, STRIKE, + EMOJI, HASHTAG, MENTION, URL, LINK, + BIG, BOLD, STRIKE, SMALL, ITALIC, MOTION, CODE_INLINE ) CENTER wraps hashSetOf( - EMOJI, HASHTAG, MENTION, URL, LINK, BIG, BOLD, STRIKE, + EMOJI, HASHTAG, MENTION, URL, LINK, + BIG, BOLD, STRIKE, SMALL, ITALIC, MOTION, CODE_INLINE ) // all except ROOT,TEXT val allSet = hashSetOf( CODE_BLOCK, QUOTE_INLINE, SEARCH, - EMOJI, HASHTAG, MENTION, URL, LINK, BIG, BOLD, STRIKE, + EMOJI, HASHTAG, MENTION, URL, LINK, + BIG, BOLD, STRIKE, SMALL, ITALIC, MOTION, CODE_INLINE, TITLE, CENTER, QUOTE_BLOCK ) @@ -1299,6 +1339,14 @@ object MisskeyMarkdownDecoder { Pattern.compile("""\A
(.+?)
""", Pattern.DOTALL) , NodeType.CENTER ) + , simpleParser( + Pattern.compile("""\A(.+?)""", Pattern.DOTALL) + , NodeType.SMALL + ) + , simpleParser( + Pattern.compile("""\A(.+?)""", Pattern.DOTALL) + , NodeType.ITALIC + ) ) // ***big*** **bold**