有个问题哈,
getHTML 的结果被 html2md 转换的结果不正确,比如:
- 部分代码块的的标识转换没了
这应该是 lute 通用的转换函数所至,
时间有限, 还未阅读全部文档,
有哪位大佬有这两个 api 无损转换的例子吗
有个问题哈,
getHTML 的结果被 html2md 转换的结果不正确,比如:
这应该是 lute 通用的转换函数所至,
时间有限, 还未阅读全部文档,
有哪位大佬有这两个 api 无损转换的例子吗
我目前有三个方案,
html2md
前处理 html 字符串,<div class="language-mindmap">- 教程</div>
转换成 <pre><code class="language-mindmap">- 教程</code></pre>
export const getHTML = (vditor: IVditor) => {
if (vditor.currentMode === "sv") {
return vditor.lute.Md2HTML(getMarkdown(vditor));
} else if (vditor.currentMode === "wysiwyg") {
return vditor.lute.VditorDOM2HTML(vditor.wysiwyg.element.innerHTML);
} else if (vditor.currentMode === "ir") {
return vditor.lute.VditorIRDOM2HTML(vditor.ir.element.innerHTML);
}
};
HTML2Md
方法,对 md 的转换规则做特殊支持我用的是 第一个方案
function transformHtml(html) {
const box = document.createElement('div');
box.innerHTML = html;
const supMap = {};
// 注意: 有先后顺序,脚注也可以包含自定义区块
const selector = [
// sup: class="footnotes-ref"
{
css: 'sup.footnotes-ref',
convert: (node) => {
const a = node.querySelector('a');
const href = a && a.getAttribute('href');
const [_, id] = /#(.+)/g.exec(href) || [];
const mark = a.innerText;
supMap[id] = mark;
node.outerHTML = `[^${mark}]`;
}
},
// supDefs:,
{
css: 'div.footnotes-defs-div',
convert: (node) => {
let defIndex = 1;
const defs = node.querySelectorAll('.footnotes-defs-ol>li');
const refs = node.querySelectorAll('.footnotes-defs-ol .vditor-footnotes__goto-ref');
// 去掉内容的跳转
refs.forEach(node => node.outerHTML = '');
const result = Array.from(defs).map(li => {
const id = node.getAttribute('id');
// 注意这里的div,不加这层容器解释的内容不正确
return `<div>[^${supMap[id] || defIndex++}]: ${li.innerHTML}</div>`;
}).join('');
node.outerHTML = result;
}
},
// customCode
{
// language-math
css: 'div[class^="language-"]',
convert: (node) => {
const clsName = node.getAttribute('class');
const [_, language] = /\blanguage-([^\s]+)/g.exec(clsName);
let str = '';
switch (language) {
case 'math':
str = `$$
${node.innerText}
$$`
break;
default:
str = `<pre><code class="${clsName}" >${node.innerHTML}</code></pre>`
}
node.outerHTML = str;
}
}
]
selector.forEach(({ css, convert }) => {
box.querySelectorAll(css).forEach(convert)
});
return box.innerHTML;
}
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。
房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。
Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。
Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。
我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。
找到自己的位置,萌新烦恼少。
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。
NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。
PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。
SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。
本标签主要用于分享网络空间安全专业的学习笔记
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
你若安好,便是晴天。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。
应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。
记录并分享人生的经历。
Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于