diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2019-01-25 16:41:51 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2019-01-25 16:41:51 +0900 |
| commit | 42cd7c8a752b801a51e7e3718e4712251e66e2df (patch) | |
| tree | 6b9b124a0f30151bf482d9b00284dc1873b905c0 | |
| parent | [Test] Add sone streaming tests (diff) | |
| download | misskey-42cd7c8a752b801a51e7e3718e4712251e66e2df.tar.gz misskey-42cd7c8a752b801a51e7e3718e4712251e66e2df.tar.bz2 misskey-42cd7c8a752b801a51e7e3718e4712251e66e2df.zip | |
[MFM] Improve italic syntax detection
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | src/mfm/parser.ts | 11 | ||||
| -rw-r--r-- | test/mfm.ts | 7 |
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'), + ]); + }); }); }); |