diff --git a/src/m2d/converters/event-to-message.js b/src/m2d/converters/event-to-message.js index 7044859..4f834b7 100644 --- a/src/m2d/converters/event-to-message.js +++ b/src/m2d/converters/event-to-message.js @@ -154,6 +154,27 @@ turndownService.addRule("listItem", { } }) +turndownService.addRule("table", { + filter: "table", + replacement: function (content, node, options) { + const trs = node.querySelectorAll("tr").cache + /** @type {{text: string, tag: string}[][]} */ + const tableText = trs.map(tr => [...tr.querySelectorAll("th, td")].map(cell => ({text: cell.textContent, tag: cell.tagName}))) + const tableTextByColumn = tableText[0].map((col, i) => tableText.map(row => row[i])) + const columnWidths = tableTextByColumn.map(col => Math.max(...col.map(cell => cell.text.length))) + const resultRows = tableText.map((row, rowIndex) => + row.map((cell, colIndex) => + cell.text.padEnd(columnWidths[colIndex]) + ).join(" ") + ) + const tableHasHeader = tableText[0].slice(1).some(cell => cell.tag === "TH") + if (tableHasHeader) { + resultRows.splice(1, 0, "-".repeat(columnWidths.reduce((a, c) => a + c + 2))) + } + return "```\n" + resultRows.join("\n") + "```" + } +}) + /** @type {string[]} SPRITE SHEET EMOJIS FEATURE: mxc urls for the currently processing message */ let endOfMessageEmojis = [] turndownService.addRule("emoji", { diff --git a/src/m2d/converters/event-to-message.test.js b/src/m2d/converters/event-to-message.test.js index 4c1ff6c..70853aa 100644 --- a/src/m2d/converters/event-to-message.test.js +++ b/src/m2d/converters/event-to-message.test.js @@ -4537,6 +4537,42 @@ test("event2message: @room in the middle of a link is not converted", async t => ) }) +test("event2message: table", async t => { + t.deepEqual( + await eventToMessage({ + type: "m.room.message", + sender: "@cadence:cadence.moe", + content: { + msgtype: "m.text", + body: "wrong body", + format: "org.matrix.custom.html", + formatted_body: "content
Col 1 | Col 2 | Col 3 |
---|---|---|
Apple | Banana | Cherry |
Aardvark | Bee | Crocodile |
Argon | Boron | Carbon |