diff --git a/web/src/labs/marked/marked.test.ts b/web/src/labs/marked/marked.test.ts index f8eab6688..031403229 100644 --- a/web/src/labs/marked/marked.test.ts +++ b/web/src/labs/marked/marked.test.ts @@ -123,14 +123,6 @@ console.log("hello world!") markdown: `Important: ***Minecraft/123***`, want: `

Important: Minecraft/123

`, }, - { - markdown: `Important: **Minecraft*123***`, - want: `

Important: Minecraft123

`, - }, - { - markdown: `Important: **Minecraft*123*456**`, - want: `

Important: Minecraft123456

`, - }, { markdown: `Important: ***[baidu](https://baidu.com)***`, want: `

Important: baidu

`, diff --git a/web/src/labs/marked/parser/Bold.ts b/web/src/labs/marked/parser/Bold.ts index d118225c0..2667bac88 100644 --- a/web/src/labs/marked/parser/Bold.ts +++ b/web/src/labs/marked/parser/Bold.ts @@ -1,8 +1,7 @@ import { marked } from ".."; -import Emphasis from "./Emphasis"; import Link from "./Link"; -export const BOLD_REG = /\*\*([\S *]+)\*\*/; +export const BOLD_REG = /\*\*([\S ]+?)\*\*/; const renderer = (rawStr: string): string => { const matchResult = rawStr.match(BOLD_REG); @@ -10,7 +9,7 @@ const renderer = (rawStr: string): string => { return rawStr; } - const parsedContent = marked(matchResult[1], [], [Emphasis, Link]); + const parsedContent = marked(matchResult[1], [], [Link]); return `${parsedContent}`; }; diff --git a/web/src/labs/marked/parser/BoldEmphasis.ts b/web/src/labs/marked/parser/BoldEmphasis.ts new file mode 100644 index 000000000..08d0c4019 --- /dev/null +++ b/web/src/labs/marked/parser/BoldEmphasis.ts @@ -0,0 +1,20 @@ +import { marked } from ".."; +import Link from "./Link"; + +export const BOLD_EMPHASIS_REG = /\*\*\*([\S ]+?)\*\*\*/; + +const renderer = (rawStr: string): string => { + const matchResult = rawStr.match(BOLD_EMPHASIS_REG); + if (!matchResult) { + return rawStr; + } + + const parsedContent = marked(matchResult[1], [], [Link]); + return `${parsedContent}`; +}; + +export default { + name: "bold emphasis", + regex: BOLD_EMPHASIS_REG, + renderer, +}; diff --git a/web/src/labs/marked/parser/Emphasis.ts b/web/src/labs/marked/parser/Emphasis.ts index 2b6bcafdf..9b052fc62 100644 --- a/web/src/labs/marked/parser/Emphasis.ts +++ b/web/src/labs/marked/parser/Emphasis.ts @@ -1,5 +1,4 @@ import { marked } from ".."; -import Bold from "./Bold"; import Link from "./Link"; export const EMPHASIS_REG = /\*([\S ]+?)\*/; @@ -10,7 +9,7 @@ const renderer = (rawStr: string): string => { return rawStr; } - const parsedContent = marked(matchResult[1], [], [Bold, Link]); + const parsedContent = marked(matchResult[1], [], [Link]); return `${parsedContent}`; }; diff --git a/web/src/labs/marked/parser/Link.ts b/web/src/labs/marked/parser/Link.ts index 52d58e8bb..5e84f1665 100644 --- a/web/src/labs/marked/parser/Link.ts +++ b/web/src/labs/marked/parser/Link.ts @@ -3,6 +3,7 @@ import Emphasis from "./Emphasis"; import Bold from "./Bold"; import { marked } from ".."; import InlineCode from "./InlineCode"; +import BoldEmphasis from "./BoldEmphasis"; export const LINK_REG = /\[(.*?)\]\((.+?)\)/; @@ -11,7 +12,7 @@ const renderer = (rawStr: string): string => { if (!matchResult) { return rawStr; } - const parsedContent = marked(matchResult[1], [], [InlineCode, Emphasis, Bold]); + const parsedContent = marked(matchResult[1], [], [InlineCode, BoldEmphasis, Emphasis, Bold]); return `${parsedContent}`; }; diff --git a/web/src/labs/marked/parser/index.ts b/web/src/labs/marked/parser/index.ts index d1eb728bf..ca1e497ad 100644 --- a/web/src/labs/marked/parser/index.ts +++ b/web/src/labs/marked/parser/index.ts @@ -14,6 +14,7 @@ import PlainLink from "./PlainLink"; import InlineCode from "./InlineCode"; import PlainText from "./PlainText"; import Table from "./Table"; +import BoldEmphasis from "./BoldEmphasis"; export { CODE_BLOCK_REG } from "./CodeBlock"; export { TODO_LIST_REG } from "./TodoList"; @@ -26,5 +27,5 @@ export { TABLE_REG } from "./Table"; // The order determines the order of execution. export const blockElementParserList = [Table, CodeBlock, TodoList, DoneList, OrderedList, UnorderedList, Paragraph]; -export const inlineElementParserList = [Image, Mark, Bold, Emphasis, Link, InlineCode, PlainLink, Tag, PlainText]; +export const inlineElementParserList = [Image, Mark, BoldEmphasis, Bold, Emphasis, Link, InlineCode, PlainLink, Tag, PlainText]; export const parserList = [...blockElementParserList, ...inlineElementParserList];