Skip to content

Commit

Permalink
Merge branch 'develop' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
marihachi committed May 8, 2021
2 parents 15c2ad5 + 70d49f9 commit 2163d38
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 16 deletions.
6 changes: 3 additions & 3 deletions docs/syntax.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ _italic_
構文2,3のみ:
※1つ目の`*``_`を開始記号と呼ぶ。
- 内容には`[a-z0-9 \t]i`にマッチする文字が使用できる。
- 開始記号の前の文字が(無い、改行、半角スペース)のいずれかの時にイタリック文字として判定される。
- 開始記号の前の文字が(無い、改行、半角スペース[a-zA-Z0-9]に一致しない)のいずれかの時にイタリック文字として判定される。



Expand Down Expand Up @@ -410,7 +410,7 @@ _italic_

## 詳細
- インライン構文。
- 最初の`@`の前の文字が(改行、スペース、無し)のいずれかの場合にメンションとして認識する。
- 最初の`@`の前の文字が(改行、スペース、無し[a-zA-Z0-9]に一致しない)のいずれかの場合にメンションとして認識する。

### ユーザ名
- 1文字以上。
Expand Down Expand Up @@ -446,7 +446,7 @@ _italic_
- 内容には半角スペース、全角スペース、改行、タブ文字を含めることができない。
- 内容には`.` `,` `!` `?` `'` `"` `#` `:` `/` `` `` を含めることができない。
- 括弧は対になっている時のみ内容に含めることができる。対象: `()` `[]` `「」`
- `#`の前の文字が(改行、スペース、無し)のいずれかの場合にハッシュタグとして認識する。
- `#`の前の文字が(改行、スペース、無し[a-zA-Z0-9]に一致しない)のいずれかの場合にハッシュタグとして認識する。



Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mfm-js",
"version": "0.16.3",
"version": "0.16.4",
"description": "An MFM parser implementation with PEG.js",
"main": "./built/index.js",
"types": "./built/index.d.ts",
Expand Down
6 changes: 3 additions & 3 deletions src/parser.pegjs
Original file line number Diff line number Diff line change
Expand Up @@ -285,12 +285,12 @@ italicTag
}

italicAlt
= "*" content:$(!"*" ([a-z0-9]i / _))+ "*" &(EOF / LF / _)
= "*" content:$(!"*" ([a-z0-9]i / _))+ "*" &(EOF / LF / _ / ![a-z0-9]i)
{
const parsedContent = applyParser(content, 'inlineParser');
return ITALIC(parsedContent);
}
/ "_" content:$(!"_" ([a-z0-9]i / _))+ "_" &(EOF / LF / _)
/ "_" content:$(!"_" ([a-z0-9]i / _))+ "_" &(EOF / LF / _ / ![a-z0-9]i)
{
const parsedContent = applyParser(content, 'inlineParser');
return ITALIC(parsedContent);
Expand Down Expand Up @@ -476,7 +476,7 @@ fnContentPart
// inline: text

inlineText
= !(LF / _) . &(hashtag / mention / italicAlt) . { return text(); } // hashtag, mention, italic ignore
= !(LF / _) [a-z0-9]i &(hashtag / mention / italicAlt) . { return text(); } // hashtag, mention, italic ignore
/ . /* text node */

// inline: text (for plainParser)
Expand Down
48 changes: 39 additions & 9 deletions test/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -447,9 +447,19 @@ describe('FullParser', () => {
assert.deepStrictEqual(mfm.parse(input), output);
});

it('ignore a italic syntax if the before char is neither a space nor an LF', () => {
const input = 'before*abc*after';
const output = [TEXT('before*abc*after')];
it('ignore a italic syntax if the before char is neither a space nor an LF nor [^a-z0-9]i', () => {
let input = 'before*abc*after';
let output: mfm.MfmNode[] = [TEXT('before*abc*after')];
assert.deepStrictEqual(mfm.parse(input), output);

input = 'あいう*abc*えお';
output = [
TEXT('あいう'),
ITALIC([
TEXT('abc')
]),
TEXT('えお')
];
assert.deepStrictEqual(mfm.parse(input), output);
});
});
Expand Down Expand Up @@ -477,9 +487,19 @@ describe('FullParser', () => {
assert.deepStrictEqual(mfm.parse(input), output);
});

it('ignore a italic syntax if the before char is neither a space nor an LF', () => {
const input = 'before_abc_after';
const output = [TEXT('before_abc_after')];
it('ignore a italic syntax if the before char is neither a space nor an LF nor [^a-z0-9]i', () => {
let input = 'before_abc_after';
let output: mfm.MfmNode[] = [TEXT('before_abc_after')];
assert.deepStrictEqual(mfm.parse(input), output);

input = 'あいう_abc_えお';
output = [
TEXT('あいう'),
ITALIC([
TEXT('abc')
]),
TEXT('えお')
];
assert.deepStrictEqual(mfm.parse(input), output);
});
});
Expand Down Expand Up @@ -526,6 +546,12 @@ describe('FullParser', () => {
const output = [TEXT('[email protected]')];
assert.deepStrictEqual(mfm.parse(input), output);
});

it('detect as a mention if the before char is [^a-z0-9]i', () => {
const input = 'あいう@abc';
const output = [TEXT('あいう'), MENTION('abc', null, '@abc')];
assert.deepStrictEqual(mfm.parse(input), output);
});
});

describe('hashtag', () => {
Expand Down Expand Up @@ -554,9 +580,13 @@ describe('FullParser', () => {
assert.deepStrictEqual(mfm.parse(input), output);
});

it('ignore a hashtag if the before char is neither a space nor an LF', () => {
const input = 'abc#abc';
const output = [TEXT('abc#abc')];
it('ignore a hashtag if the before char is neither a space nor an LF nor [^a-z0-9]i', () => {
let input = 'abc#abc';
let output: mfm.MfmNode[] = [TEXT('abc#abc')];
assert.deepStrictEqual(mfm.parse(input), output);

input = 'あいう#abc';
output = [TEXT('あいう'), HASHTAG('abc')];
assert.deepStrictEqual(mfm.parse(input), output);
});
});
Expand Down

0 comments on commit 2163d38

Please sign in to comment.