summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-06-17 20:15:19 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-06-17 20:15:19 +0900
commit285d0d13f9c3af4f709e0fca6ce39fcef90d90e0 (patch)
tree236a35fce06f20a771b2a730701d742db16bf901
parentFix MFM strike parsing (diff)
downloadsharkey-285d0d13f9c3af4f709e0fca6ce39fcef90d90e0.tar.gz
sharkey-285d0d13f9c3af4f709e0fca6ce39fcef90d90e0.tar.bz2
sharkey-285d0d13f9c3af4f709e0fca6ce39fcef90d90e0.zip
Fix MFM URL parsing
-rw-r--r--src/mfm/language.ts6
-rw-r--r--test/mfm.ts8
2 files changed, 12 insertions, 2 deletions
diff --git a/src/mfm/language.ts b/src/mfm/language.ts
index bfa22e8c3b..4750ea3380 100644
--- a/src/mfm/language.ts
+++ b/src/mfm/language.ts
@@ -164,8 +164,10 @@ export const mfmLanguage = P.createLanguage({
} else
url = match[0];
url = removeOrphanedBrackets(url);
- if (url.endsWith('.')) url = url.substr(0, url.lastIndexOf('.'));
- if (url.endsWith(',')) url = url.substr(0, url.lastIndexOf(','));
+ while (url.endsWith('.') || url.endsWith(',')) {
+ if (url.endsWith('.')) url = url.substr(0, url.lastIndexOf('.'));
+ if (url.endsWith(',')) url = url.substr(0, url.lastIndexOf(','));
+ }
return P.makeSuccess(i + url.length, url);
}).map(x => createLeaf('url', { url: x }));
},
diff --git a/test/mfm.ts b/test/mfm.ts
index c772a62dcb..be8b65264a 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -804,6 +804,14 @@ describe('MFM', () => {
]);
});
+ it('ignore trailing periods', () => {
+ const tokens = parse('https://example.com...');
+ assert.deepStrictEqual(tokens, [
+ leaf('url', { url: 'https://example.com' }),
+ text('...')
+ ]);
+ });
+
it('with comma', () => {
const tokens = parse('https://example.com/foo?bar=a,b');
assert.deepStrictEqual(tokens, [