We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent cc5c5fa commit f80346cCopy full SHA for f80346c
packages/linkify-plugin-hashtag/src/hashtag.js
@@ -6,9 +6,9 @@ const HashtagToken = createTokenClass('hashtag', { isLink: true });
6
/**
7
* @type {import('linkifyjs').Plugin}
8
*/
9
- export default function hashtag({ scanner, parser }) {
+export default function hashtag({ scanner, parser }) {
10
// Various tokens that may compose a hashtag
11
- const { POUND, UNDERSCORE } = scanner.tokens;
+ const { POUND, UNDERSCORE, FULLWIDTHMIDDLEDOT } = scanner.tokens;
12
const { alpha, numeric, alphanumeric, emoji } = scanner.tokens.groups;
13
14
// Take or create a transition from start to the '#' sign (non-accepting)
@@ -21,11 +21,14 @@ const HashtagToken = createTokenClass('hashtag', { isLink: true });
21
Hash.ta(numeric, HashPrefix);
22
Hash.ta(alpha, Hashtag);
23
Hash.ta(emoji, Hashtag);
24
+ Hash.ta(FULLWIDTHMIDDLEDOT, Hashtag);
25
HashPrefix.ta(alpha, Hashtag);
26
HashPrefix.ta(emoji, Hashtag);
27
+ HashPrefix.ta(FULLWIDTHMIDDLEDOT, Hashtag);
28
HashPrefix.ta(numeric, HashPrefix);
29
HashPrefix.tt(UNDERSCORE, HashPrefix);
30
Hashtag.ta(alphanumeric, Hashtag);
31
Hashtag.ta(emoji, Hashtag);
32
+ Hashtag.tt(FULLWIDTHMIDDLEDOT, Hashtag);
33
Hashtag.tt(UNDERSCORE, Hashtag); // Trailing underscore is okay
34
}
packages/linkifyjs/src/scanner.js
@@ -94,6 +94,7 @@ export function init(customSchemes = []) {
94
tt(Start, '~', tk.TILDE);
95
tt(Start, '_', tk.UNDERSCORE);
96
tt(Start, '\\', tk.BACKSLASH);
97
+ tt(Start, '・', tk.FULLWIDTHMIDDLEDOT);
98
99
const Num = tr(Start, re.DIGIT, tk.NUM, { [fsm.numeric]: true });
100
tr(Num, re.DIGIT, Num);
packages/linkifyjs/src/text.js
@@ -76,6 +76,7 @@ export const PLUS = 'PLUS'; // +
76
export const POUND = 'POUND'; // #
77
export const QUERY = 'QUERY'; // ?
78
export const QUOTE = 'QUOTE'; // "
79
+export const FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・
80
81
export const SEMI = 'SEMI'; // ;
82
export const SLASH = 'SLASH'; // /
test/spec/linkify-plugin-hashtag.test.js
@@ -80,6 +80,14 @@ describe('linkify-plugin-hashtag', () => {
expect(linkify.test('#سلام', 'hashtag')).to.be.ok;
});
83
+ it('Works with Japanese characters', () => {
84
+ expect(linkify.test('#おはよう', 'hashtag')).to.be.ok;
85
+ });
86
+
87
+ it('Works with Japanese characters and full width middle dot', () => {
88
+ expect(linkify.test('#おは・よう', 'hashtag')).to.be.ok;
89
90
91
it('Works with emojis', () => {
92
expect(linkify.test('#🍭', 'hashtag')).to.be.ok;
93
test/spec/linkifyjs/scanner.test.js
@@ -27,6 +27,7 @@ const tests = [
['$', [t.DOLLAR], ['$']],
['=', [t.EQUALS], ['=']],
['-', [t.HYPHEN], ['-']],
+ ['・', [t.FULLWIDTHMIDDLEDOT], ['・']],
['&?<>(', [t.AMPERSAND, t.QUERY, t.OPENANGLEBRACKET, t.CLOSEANGLEBRACKET, t.OPENPAREN], ['&', '?', '<', '>', '(']],
['([{}])', [t.OPENPAREN, t.OPENBRACKET, t.OPENBRACE, t.CLOSEBRACE, t.CLOSEBRACKET, t.CLOSEPAREN], ['(', '[', '{', '}', ']', ')']],
['!,;\'', [t.EXCLAMATION, t.COMMA, t.SEMI, t.APOSTROPHE], ['!', ',', ';', '\'']],
@@ -83,6 +84,11 @@ const tests = [
[t.POUND, t.UWORD, t.UNDERSCORE, t.UWORD, t.WS, t.POUND, t.UWORD, t.WS, t.POUND, t.UWORD],
['#', 'АБВ', '_', 'бв', ' ', '#', '한글', ' ', '#', 'سلام']
],
+ [
+ '#おは・よう',
+ [t.POUND, t.UWORD, t.FULLWIDTHMIDDLEDOT, t.UWORD],
+ ['#', 'おは', '・', 'よう']
+ ],
[
'テストexample.comテスト',
[t.UWORD, t.WORD, t.DOT, t.TLD, t.UWORD],
0 commit comments