From cb6a4037f2f6c084ccccd2acb1826d2b2e7113b4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 17 Jan 2019 09:33:08 +0900
Subject: [PATCH] [MFM] Better hashtag parsing: Ignore single quotation

---
 src/mfm/parser.ts | 2 +-
 test/mfm.ts       | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/mfm/parser.ts b/src/mfm/parser.ts
index 2f1608832e..7dc97aa9f4 100644
--- a/src/mfm/parser.ts
+++ b/src/mfm/parser.ts
@@ -205,7 +205,7 @@ const mfm = P.createLanguage({
 	hashtag: r =>
 		P((input, i) => {
 			const text = input.substr(i);
-			const match = text.match(/^#([^\s\.,!\?"#:]+)/i);
+			const match = text.match(/^#([^\s\.,!\?'"#:]+)/i);
 			if (!match) return P.makeFailure(i, 'not a hashtag');
 			let hashtag = match[1];
 			hashtag = removeOrphanedBrackets(hashtag);
diff --git a/test/mfm.ts b/test/mfm.ts
index 60fd4d62f8..4e922cab29 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -365,6 +365,14 @@ describe('MFM', () => {
 				]);
 			});
 
+			it('ignore single quote', () => {
+				const tokens = analyze('#foo\'');
+				assert.deepStrictEqual(tokens, [
+					leaf('hashtag', { hashtag: 'foo' }),
+					text('\''),
+				]);
+			});
+
 			it('ignore double quote', () => {
 				const tokens = analyze('#foo"');
 				assert.deepStrictEqual(tokens, [