ハッシュタグの変更 (#111)

* fix #110

* add tests for hashtag
This commit is contained in:
marihachi 2022-05-21 19:33:28 +09:00 committed by GitHub
parent 100fb0bfbf
commit e38a6e6576
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 12 deletions

View file

@ -449,8 +449,8 @@ _italic_
## 詳細
- 内容を空にすることはできない。
- 内容には半角スペース、全角スペース、改行、タブ文字を含めることができない。
- 内容には`.` `,` `!` `?` `'` `"` `#` `:` `/` `【` `】` `<` `>` を含めることができない。
- 括弧は対になっている時のみ内容に含めることができる。対象: `()` `[]` `「」`
- 内容には`.` `,` `!` `?` `'` `"` `#` `:` `/` `【` `】` `<` `>` `【` `】` `(` `)` `「` `」` `` `` を含めることができない。
- 括弧は対になっている時のみ内容に含めることができる。対象: `()` `[]` `「」` ``
- `#`の前の文字が(改行、スペース、無し、[a-zA-Z0-9]に一致しない)のいずれかの場合にハッシュタグとして認識する。
- 内容が数字のみの場合はハッシュタグとして認識しない。

View file

@ -473,7 +473,8 @@ hashtagContentPart
= "(" hashPairInner ")"
/ "[" hashPairInner "]"
/ "「" hashPairInner "」"
/ ![  \t.,!?'"#:\/\[\]【】()「」<>] CHAR
/ "" hashPairInner ""
/ ![  \t.,!?'"#:\/\[\]【】()「」()<>] CHAR
hashPairInner
= &{ return enterNest(); } @(@hashtagContentPart* &{ return leaveNest(); } / &{ return fallbackNest(); })

View file

@ -1265,17 +1265,59 @@ hoge`;
});
});
it('hashtag', () => {
const input = '<b><b>#abc(xyz)</b></b>';
const output = [
BOLD([
describe('hashtag', () => {
it('basic', () => {
const input = '<b><b>#abc(xyz)</b></b>';
const output = [
BOLD([
HASHTAG('abc'),
TEXT('(xyz)'),
BOLD([
HASHTAG('abc'),
TEXT('(xyz)'),
]),
]),
]),
];
assert.deepStrictEqual(mfm.parse(input, { nestLimit: 2 }), output);
];
assert.deepStrictEqual(mfm.parse(input, { nestLimit: 2 }), output);
});
it('outside "()"', () => {
const input = '(#abc)';
const output = [
TEXT('('),
HASHTAG('abc'),
TEXT(')'),
];
assert.deepStrictEqual(mfm.parse(input), output);
});
it('outside "[]"', () => {
const input = '[#abc]';
const output = [
TEXT('['),
HASHTAG('abc'),
TEXT(']'),
];
assert.deepStrictEqual(mfm.parse(input), output);
});
it('outside "「」"', () => {
const input = '「#abc」';
const output = [
TEXT('「'),
HASHTAG('abc'),
TEXT('」'),
];
assert.deepStrictEqual(mfm.parse(input), output);
});
it('outside ""', () => {
const input = '#abc';
const output = [
TEXT(''),
HASHTAG('abc'),
TEXT(''),
];
assert.deepStrictEqual(mfm.parse(input), output);
});
});
it('url', () => {