From 42cd7c8a752b801a51e7e3718e4712251e66e2df Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 25 Jan 2019 16:41:51 +0900 Subject: [PATCH] [MFM] Improve italic syntax detection --- CHANGELOG.md | 1 + src/mfm/parser.ts | 11 ++++++++++- test/mfm.ts | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) 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(/([\s\S]+?)<\/i>/, 1), P.regexp(/(\*|_)([a-zA-Z0-9]+?[\s\S]*?)\1/, 2)) + P.alt( + P.regexp(/([\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'), + ]); + }); }); });