From 79a530f3f320ba17ac2ba256868d0a8093a92020 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 21 Sep 2021 15:03:12 +0200 Subject: [PATCH 1/7] Fix a bug where parse could return null FIX: Fix a bug where `MarkdownParser.parse` could return null when the parsed content doesn't fit the schema. --- src/from_markdown.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/from_markdown.js b/src/from_markdown.js index 5037dfd..38f067b 100644 --- a/src/from_markdown.js +++ b/src/from_markdown.js @@ -135,8 +135,8 @@ function tokenHandlers(schema, tokens) { if (noCloseToken(spec, type)) { handlers[type] = noOp } else { - handlers[type + '_open'] = noOp - handlers[type + '_close'] = noOp + handlers[type + "_open"] = noOp + handlers[type + "_close"] = noOp } } else { throw new RangeError("Unrecognized parsing spec " + JSON.stringify(spec)) @@ -219,7 +219,7 @@ export class MarkdownParser { let state = new MarkdownParseState(this.schema, this.tokenHandlers), doc state.parseTokens(this.tokenizer.parse(text, {})) do { doc = state.closeNode() } while (state.stack.length) - return doc + return doc || this.schema.topNodeType.createAndFill() } } From f0c2e68edfe4460766db53387f61d7dc5666747a Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 15 Oct 2021 09:25:55 +0200 Subject: [PATCH 2/7] Add an .npmrc that turns off lock files --- .npmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false From 249861c19c46813df5e0d77d5ce129d7e9277aaf Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 15 Oct 2021 09:27:38 +0200 Subject: [PATCH 3/7] Upgrade Mocha --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f121b88..3d77e1a 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "ist": "1.0.0", - "mocha": "^3.0.2", + "mocha": "^9.1.2", "prosemirror-test-builder": "^1.0.0", "punycode": "^1.4.0", "rollup": "^2.26.3", From 99155977dbfd010d4db5d0d50fe90b08942f01ba Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 16 Dec 2021 17:04:06 +0100 Subject: [PATCH 4/7] Escape underscores when converting to Markdown FIX: Make sure underscores are escaped when serializing to Markdown. Closes https://github.com/ProseMirror/prosemirror-markdown/issues/59 --- src/to_markdown.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/to_markdown.js b/src/to_markdown.js index a5a3edd..447e47b 100644 --- a/src/to_markdown.js +++ b/src/to_markdown.js @@ -364,7 +364,7 @@ export class MarkdownSerializerState { // content. If `startOfLine` is true, also escape characters that // have special meaning only at the start of the line. esc(str, startOfLine) { - str = str.replace(/[`*\\~\[\]]/g, "\\$&") + str = str.replace(/[`*\\~\[\]_]/g, "\\$&") if (startOfLine) str = str.replace(/^[:#\-*+>]/, "\\$&").replace(/^(\s*\d+)\./, "$1\\.") return str } From a57cb7afdb5179ba3d92492e8bc928e55aebf824 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 16 Dec 2021 17:04:16 +0100 Subject: [PATCH 5/7] Mark version 1.6.1 --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e17867..de19a4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.6.1 (2021-12-16) + +### Bug fixes + +Fix a bug where `MarkdownParser.parse` could return null when the parsed content doesn't fit the schema. + +Make sure underscores are escaped when serializing to Markdown. + ## 1.6.0 (2021-09-21) ### New features diff --git a/package.json b/package.json index 3d77e1a..d50c609 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prosemirror-markdown", - "version": "1.6.0", + "version": "1.6.1", "description": "ProseMirror Markdown integration", "main": "dist/index.js", "module": "dist/index.es.js", From 8e456de723a64a05de6d6dbe110b24d395eff316 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 4 Jan 2022 19:36:22 +0100 Subject: [PATCH 6/7] Don't escape link URL text FIX: Fix a bug where URL text in links and images was overzealously escaped. Closes https://github.com/ProseMirror/prosemirror-markdown/issues/61 --- src/to_markdown.js | 6 +++--- test/test-parse.js | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/to_markdown.js b/src/to_markdown.js index 447e47b..ae8c458 100644 --- a/src/to_markdown.js +++ b/src/to_markdown.js @@ -95,8 +95,8 @@ export const defaultMarkdownSerializer = new MarkdownSerializer({ }, image(state, node) { - state.write("![" + state.esc(node.attrs.alt || "") + "](" + state.esc(node.attrs.src) + - (node.attrs.title ? " " + state.quote(node.attrs.title) : "") + ")") + state.write("![" + state.esc(node.attrs.alt || "") + "](" + node.attrs.src + + (node.attrs.title ? ' "' + node.attrs.title.replace(/"/g, '\\"') + '"' : "") + ")") }, hard_break(state, node, parent, index) { for (let i = index + 1; i < parent.childCount; i++) @@ -117,7 +117,7 @@ export const defaultMarkdownSerializer = new MarkdownSerializer({ }, close(state, mark, parent, index) { return isPlainURL(mark, parent, index, -1) ? ">" - : "](" + state.esc(mark.attrs.href) + (mark.attrs.title ? " " + state.quote(mark.attrs.title) : "") + ")" + : "](" + mark.attrs.href + (mark.attrs.title ? ' "' + mark.attrs.title.replace(/"/g, '\\"') + '"' : "") + ")" } }, code: {open(_state, _mark, parent, index) { return backticksFor(parent.child(index), -1) }, diff --git a/test/test-parse.js b/test/test-parse.js index c762d3c..14c2ffd 100644 --- a/test/test-parse.js +++ b/test/test-parse.js @@ -95,6 +95,16 @@ describe("markdown", () => { doc(p(link({href: "foo.html"}, "foo.html")))) }) + it("can handle link titles", () => { + same('[a](x.html "title \\"quoted\\"")', + doc(p(link({href: "x.html", title: 'title "quoted"'}, "a")))) + }) + + it("doesn't escape underscores in link", () => { + same('[link](http://foo.com/a_b_c)', + doc(p(link({href: "http://foo.com/a_b_c"}, "link")))) + }) + it("parses emphasized urls", () => same("Link to **", doc(p("Link to ", em(link({href: "https://prosemirror.net"}, "https://prosemirror.net")))))) From 81d10296facc977804e38819f121299bf5081331 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 4 Jan 2022 19:37:15 +0100 Subject: [PATCH 7/7] Mark version 1.6.2 --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de19a4f..0e296b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.6.2 (2022-01-04) + +### Bug fixes + +Fix a bug where URL text in links and images was overzealously escaped. + ## 1.6.1 (2021-12-16) ### Bug fixes diff --git a/package.json b/package.json index d50c609..63d3227 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prosemirror-markdown", - "version": "1.6.1", + "version": "1.6.2", "description": "ProseMirror Markdown integration", "main": "dist/index.js", "module": "dist/index.es.js",