summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-01-25 16:41:51 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-01-25 16:41:51 +0900
commit42cd7c8a752b801a51e7e3718e4712251e66e2df (patch)
tree6b9b124a0f30151bf482d9b00284dc1873b905c0
parent[Test] Add sone streaming tests (diff)
downloadmisskey-42cd7c8a752b801a51e7e3718e4712251e66e2df.tar.gz
misskey-42cd7c8a752b801a51e7e3718e4712251e66e2df.tar.bz2
misskey-42cd7c8a752b801a51e7e3718e4712251e66e2df.zip
[MFM] Improve italic syntax detection
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/mfm/parser.ts11
-rw-r--r--test/mfm.ts7
3 files changed, 18 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 99caaf49cd..e7499f32af 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ unreleased
----------
* 返信するときにCWを維持するかどうか設定できるように
* 外部サービス認証情報の配信
+* イタリック構文の判定の改善
* テーマが反映されないことがある問題を修正
* ホームにフォロワー限定投稿が表示されない問題を修正
* 返信一覧を取得すると非公開投稿も取得されてしまう問題を修正
diff --git a/src/mfm/parser.ts b/src/mfm/parser.ts
index 10b16d619a..b86e1d5559 100644
--- a/src/mfm/parser.ts
+++ b/src/mfm/parser.ts
@@ -224,7 +224,16 @@ const mfm = P.createLanguage({
//#region Italic
italic: r =>
- P.alt(P.regexp(/<i>([\s\S]+?)<\/i>/, 1), P.regexp(/(\*|_)([a-zA-Z0-9]+?[\s\S]*?)\1/, 2))
+ P.alt(
+ P.regexp(/<i>([\s\S]+?)<\/i>/, 1),
+ P((input, i) => {
+ const text = input.substr(i);
+ const match = text.match(/^(\*|_)([a-zA-Z0-9]+?[\s\S]*?)\1/);
+ if (!match) return P.makeFailure(i, 'not a italic');
+ if (input[i - 1] != null && input[i - 1].match(/[a-z0-9]/i)) return P.makeFailure(i, 'not a italic');
+ return P.makeSuccess(i + match[0].length, match[2]);
+ })
+ )
.map(x => createTree('italic', P.alt(
r.bold,
r.strike,
diff --git a/test/mfm.ts b/test/mfm.ts
index 789fb898c8..a4b4a13973 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -966,6 +966,13 @@ describe('MFM', () => {
text('*foo_'),
]);
});
+
+ it('ignore snake_case string', () => {
+ const tokens = analyze('foo_bar_baz');
+ assert.deepStrictEqual(tokens, [
+ text('foo_bar_baz'),
+ ]);
+ });
});
});