From 09f8ddf123ce9a082b4b8362e343755bc0a9fcbf Mon Sep 17 00:00:00 2001 From: Julian Kropff Date: Sat, 25 Apr 2026 14:57:05 +0200 Subject: [PATCH] Add: Casono manual with integrated Markdown renderer --- .../casono-markdown-render-engine.js | 84 +++++ documents/docs/game-engine/manual.html | 316 ++++++++++++++++++ 2 files changed, 400 insertions(+) create mode 100644 documents/docs/game-engine/casono-markdown-render-engine.js create mode 100644 documents/docs/game-engine/manual.html diff --git a/documents/docs/game-engine/casono-markdown-render-engine.js b/documents/docs/game-engine/casono-markdown-render-engine.js new file mode 100644 index 0000000..966dbba --- /dev/null +++ b/documents/docs/game-engine/casono-markdown-render-engine.js @@ -0,0 +1,84 @@ +const marked = { + parse: function (md) { + if (!md) return ""; + + let toc = []; + + md = md.replace(/^(#{1,3})\s+(.*)$/gim, (m, hashes, title) => { + const level = hashes.length; + + const id = title + .toLowerCase() + .trim() + .replace(/[^\wäöüß]+/g, "-") + .replace(/-+/g, "-") + .replace(/^-|-$/g, ""); + + toc.push({ level, title, id }); + + return ` + + ${title} + + `; + }); + + md = md.replace(/```([\s\S]*?)```/g, (_, code) => { + return `
${escapeHtml(code)}
`; + }); + + md = md.replace(/!\[(.*?)\]\((.*?)\)/gim, + `$1` + ); + + md = md.replace(/\[(.*?)\]\((.*?)\)/gim, + `$1` + ); + + md = md.replace(/`(.*?)`/gim, + `$1` + ); + + md = md.replace(/\*\*(.*?)\*\*/gim, "$1"); + md = md.replace(/\*(.*?)\*/gim, "$1"); + + md = md.replace(/^\s*-\s(.+)$/gim, "
  • $1
  • "); + md = wrapLists(md); + + md = md + .replace(/\n{2,}/g, "

    ") + .replace(/^(?!$1

    "); + + return buildToc(toc) + md; + } +}; + +function buildToc(items) { + if (!items.length) return ""; + + let html = `
    `; + + items.forEach(i => { + html += ` + + `; + }); + + html += `
    `; + return html; +} + +function wrapLists(html) { + return html.replace(/(
  • .*?<\/li>)/gs, ""); +} + +function escapeHtml(text) { + return text + .replace(/&/g, "&") + .replace(//g, ">"); +} + +window.marked = marked; diff --git a/documents/docs/game-engine/manual.html b/documents/docs/game-engine/manual.html new file mode 100644 index 0000000..27ca621 --- /dev/null +++ b/documents/docs/game-engine/manual.html @@ -0,0 +1,316 @@ + + + + + Markdown Viewer + + + + + + + +
    + + + + + + +