diff --git a/lib/mds.js b/lib/mds.js index e675110..43a722d 100644 --- a/lib/mds.js +++ b/lib/mds.js @@ -168,12 +168,12 @@ export function write(s, chunk) { continue } - if (s.txt === "```" || + if (char === '`' && + s.txt === "``" || (s.txt.length >= 4 && '\n'=== s.txt[s.txt.length-3] && '`' === last_last_txt_char && - '`' === last_txt_char && - '`' === char) + '`' === last_txt_char) ) { s.code_block_lang = null s.txt = s.txt.slice(0, -3) diff --git a/test.js b/test.js index 79472b1..c2939bf 100644 --- a/test.js +++ b/test.js @@ -50,8 +50,13 @@ function test_update_node(data, node, text) { } /** @type {Test_Render_Temp_Text} */ function test_render_temp_text(data, node, text) { - data.temp_text = text - data.temp_text_node = node + if (node === null || text === "") { + data.temp_text = "" + data.temp_text_node = null + } else { + data.temp_text = text + data.temp_text_node = node + } } const content_1 = "Hello, World!" @@ -97,7 +102,7 @@ for (let level = 1; level <= 6; level += 1) { }] }) assert.equal(renderer.data.temp_text, "") - assert.equal(renderer.data.temp_text_node, renderer.data.root.children[0]) + assert.equal(renderer.data.temp_text_node, null) }) t.test(`Heading_${level} with Emphasis`, () => { @@ -144,6 +149,109 @@ for (let level = 1; level <= 6; level += 1) { }] }) assert.equal(renderer.data.temp_text, "") - assert.equal(renderer.data.temp_text_node, renderer.data.root.children[0]) + assert.equal(renderer.data.temp_text_node, null) }) } + +t.test("Empty Code_Block", () => { + const renderer = test_renderer() + const parser = mds.parser(renderer) + + mds.write(parser, "```\n") + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) + + mds.write(parser, "```") + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [""] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) + + mds.end(parser) + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [""] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) +}) + +t.test("Code_Block", () => { + const renderer = test_renderer() + const parser = mds.parser(renderer) + + mds.write(parser, "```\n") + mds.write(parser, content_1 + "\n") + mds.write(parser, "```") + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [content_1] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) + + mds.end(parser) + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [content_1] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) +}) + +t.test("Code_Block with language", () => { + const renderer = test_renderer() + const parser = mds.parser(renderer) + + mds.write(parser, "```js\n") + mds.write(parser, content_1 + "\n") + mds.write(parser, "```") + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [content_1] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) + + mds.end(parser) + + assert.deepEqual(renderer.data.root, { + type : mds.Token_Type.Root, + children: [{ + type : mds.Token_Type.Code_Block, + children: [content_1] + }] + }) + assert.equal(renderer.data.temp_text, "") + assert.equal(renderer.data.temp_text_node, null) +}) \ No newline at end of file