From f27cb3587bf362aedec65c955b0a609eba9edc27 Mon Sep 17 00:00:00 2001 From: Sami Saves Date: Tue, 14 May 2019 11:04:52 +0300 Subject: [PATCH 1/2] Added markdown-escapes package --- packages/draft-js-export-markdown/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/draft-js-export-markdown/package.json b/packages/draft-js-export-markdown/package.json index cb919eb7..55ba024c 100644 --- a/packages/draft-js-export-markdown/package.json +++ b/packages/draft-js-export-markdown/package.json @@ -9,7 +9,8 @@ "watch": "babel src --watch --out-dir lib --ignore \"_*\"" }, "dependencies": { - "draft-js-utils": "^1.3.3" + "draft-js-utils": "^1.3.3", + "markdown-escapes": "1.0.3" }, "peerDependencies": { "draft-js": ">=0.10.0", From 3018663cfe0d7fe1b0fc29d8fab0aeb8b6849087 Mon Sep 17 00:00:00 2001 From: Sami Saves Date: Tue, 14 May 2019 11:06:16 +0300 Subject: [PATCH 2/2] Add encoding to all markdown related characters --- .../src/stateToMarkdown.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/draft-js-export-markdown/src/stateToMarkdown.js b/packages/draft-js-export-markdown/src/stateToMarkdown.js index 933723d0..62a3e1c7 100644 --- a/packages/draft-js-export-markdown/src/stateToMarkdown.js +++ b/packages/draft-js-export-markdown/src/stateToMarkdown.js @@ -6,6 +6,7 @@ import { ENTITY_TYPE, INLINE_STYLE, } from 'draft-js-utils'; +import markdownEscapes from 'markdown-escapes'; import type {ContentState, ContentBlock} from 'draft-js'; @@ -194,6 +195,13 @@ class MarkupGenerator { } } + encodeContent(text) { + const markdownCharacters = markdownEscapes({gfm: this.options.gfm}); + + const regex = new RegExp(`[${'\\' + markdownCharacters.join('\\')}]`, 'g'); + return text.replace(regex, '\\$&'); + } + renderBlockContent(block: ContentBlock): string { let {contentState} = this; let blockType = block.getType(); @@ -224,19 +232,19 @@ class MarkupGenerator { if (style.has(CODE)) { return '`' + encodeCode(content) + '`'; } - content = encodeContent(text); + + content = this.encodeContent(text); + if (style.has(BOLD)) { content = `**${content}**`; } if (style.has(UNDERLINE)) { - // TODO: encode `+`? content = `++${content}++`; } if (style.has(ITALIC)) { content = `_${content}_`; } if (style.has(STRIKETHROUGH)) { - // TODO: encode `~`? content = `~~${content}~~`; } return content; @@ -273,10 +281,6 @@ function canHaveDepth(blockType: any): boolean { } } -function encodeContent(text) { - return text.replace(/[*_`]/g, '\\$&'); -} - function encodeCode(text) { return text.replace(/`/g, '\\`'); }