From 5a36dbab71f641d2a6a23201faaa9c392862b0cf Mon Sep 17 00:00:00 2001 From: hackrobot Date: Wed, 15 May 2024 23:34:32 +0800 Subject: [PATCH] update --- src/pages/index/index.jsx | 164 ++++++++++---------------------------- 1 file changed, 43 insertions(+), 121 deletions(-) diff --git a/src/pages/index/index.jsx b/src/pages/index/index.jsx index fddbf40..6f0b3b4 100644 --- a/src/pages/index/index.jsx +++ b/src/pages/index/index.jsx @@ -154,7 +154,8 @@ renderer.hr = function () { // 内联样式,使用直角引号「」 renderer.codespan = function (text) { - return `「${text}」`; + // return `「${text}」`; + return `『${text}』`; }; // 引用符号 @@ -168,130 +169,57 @@ renderer.blockquote = function (quote) { // console.log(content); } //

-  return `\t👉${content}
`; + //   + return `\t 👉${content}
`; }; -function formatTable(arr) { - // 计算每列的最大宽度 - const maxWidths = Array.from({ length: arr[0].length }, () => 0); - arr.forEach((row) => { - row.forEach((cell, index) => { - const width = cell.replace(/[\u4e00-\u9fa5]/g, " ").length; // 中文字符算两个宽度 - maxWidths[index] = Math.max(maxWidths[index], width); - }); - }); - - // 使用   填充每个元素 - const formattedArr = arr.map((row) => - row - .map((cell, index) => { - const width = maxWidths[index]; - const padding = " ".repeat( - width - cell.replace(/[\u4e00-\u9fa5]/g, " ").length - ); - return `${cell}${padding}`; - }) - .join(" | ") - ); - - // 构建 Markdown 表格 - const markdownTable = formattedArr.map((row) => `|${row} |
`).join("\n"); - - return markdownTable; -} - renderer.table = function (header, body) { - console.log("tableRowArr", tableRowArr); - // 分析第一个元素中有多少个 | 字符 - const firstElementPipesCount = tableRowArr[0].split("|").length - 1; - console.log("第一个元素中 | 的数量:", firstElementPipesCount); + if (body) body = `${body}`; - console.log("tablecellArr", tablecellArr); - maxLengthCell = tablecellArr.reduce( - (max, str) => Math.max(max, str.length), - 0 + return ( + "📊 表格 📊
\n" + + "\n" + + header + + "\n" + + body + + "
\n" ); - - // 构建表达式 - const expression = Array.from({ length: firstElementPipesCount }, () => - "-".repeat(maxLengthCell) - ).join(" | "); - console.log("expression", expression); - - bodydata = tableRowArr.map((item) => - item - .split("|") - .map((str) => str.trim()) - .filter(Boolean) - ); - console.log("bodydata", bodydata); - // 测试数据 - // const data = [ - // ['列表1', '列表2'], - // ['这是网址', '你好啊'], - // ['abcd', '你好啊'] - // ]; - - // 格式化表格并输出 - const formattedTable = formatTable(bodydata); - const headerdata = formatTable([[header]]); - console.log("headerdata,", headerdata); - - // const maxWidths = 5; // 替换为实际的最大字符宽度 - - function calculateWidth(str) { - let width = 0; - for (let i = 0; i < str.length; i++) { - // 判断字符是否是中文,是的话宽度加2,否则加1 - width += /[\u4e00-\u9fa5]/.test(str[i]) ? 2 : 1; - } - return width; - } - - const str = '这是网址'; - const maxWidths = calculateWidth(str); - console.log(maxWidths); // 输出字符宽度 - - - console.log("maxWidths", maxWidths); - // // 构建表达式 - // const expression = Array.from({ length: firstElementPipesCount }, () => - // "-".repeat(maxWidths) - // ).join(" | "); - // console.log("expression", expression); - - console.log("formattedTable", formattedTable); - console.log("{header}", `${header}`); - console.log("{body}", `${body}`); - - console.log("{header}${body}", `${header}${body}`); - // return `${header}${body}`; - console.log(`📊 表格 📊
${header}${body}`); - - // return `📊 表格 📊
${header} |${expression}|
${body} `; - return `📊 表格 📊
${header} |${expression}|
${formattedTable} `; }; -// 重写表格头部渲染函数 renderer.tablerow = function (content) { - // console.log("maxLengthCell", maxLengthCell); - - console.log(`|${content}
\n`); - tableRowArr.push(content); - return `|${content}
\n`; + return `\n${content}\n`; }; -// 重写表格单元格渲染函数 -renderer.tablecell = function (content, flags) { - console.log("flags", flags); - // 清除其他 HTML 标签,保留 - 和 | 字符 - content = content.replace(/<(?!br\/)[^>]*>?/gm, ""); - // console.log(`${content} | `); - // 添加到数组,并计算最大的字符长度 - tablecellArr.push(content); - // console.log("tablecellArr", tablecellArr); - return `${content} | `; +renderer.tablecell = function (content, flags) { + const type = flags.header ? "th" : "td"; + const tag = flags.align ? `<${type} align="${flags.align}">` : `<${type}>`; + return tag + `|${content}` + `\n`; +}; + +function cleanUrl(href) { + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } + return href; +} + +renderer.link = function (href, title, text) { + const cleanHref = cleanUrl(href); + if (cleanHref === null) { + return text; + } + href = cleanHref; + let out = '"; + // out += ">" +`🌐`+ text + ""+`(${href})`; + + return out; }; // 使用拓展 @@ -299,13 +227,7 @@ marked.use({ renderer }); // export default class Index extends Component { const Index = () => { - const [markText, setmarkText] = useState(` - | 列表1 | 列表2 | - | --- | --- | - | 这是网址我爱你你好啊| 你好啊| - | abcd | 你好啊 | - - `); + const [markText, setmarkText] = useState(``); const [oldmarkText, setoldmarkText] = useState(null); const [currentRender, setcurrentRender] = useState(null); const [markdownTable, setmarkdownTable] = useState();