前端库推荐:markdown语法解析库-marked

这里写自定义目录标题

  • marked 介绍
    • 项目库
    • 应用展示
      • 微信md格式化工具
    • 核心工作流
    • setOptions 和 use()
    • Options 选项
    • renderer
      • 块级渲染方法 block-level
      • 行内渲染方法 inline-level
    • hooks
      • preprocess 处理之前
      • postprocess 处理之后
  • 官网扩展插件
  • 高亮
    • 自定义扩展

marked 介绍

  • Marked 是一个高性能的 Markdown 解析器和编译器,专为速度优化而设计
  • 它是一个底层的 Markdown 编译器,能够在不依赖缓存或长时间阻塞的情况下解析 Markdown 文档
  • Marked仍然保持轻量级,使其既适用于浏览器环境,也适用于服务器端或通过命令行界面(CLI)运行
  • 广泛兼容性:实现了来自支持的Markdown风格和规范的所有特性,包括原始Markdown、CommonMark和GitHub Flavored Markdown等。
  • 安全性注意事项:Marked生成的HTML输出不包含自动净化功能,因此在处理不可信的Markdown输入时,建议使用DOMPurifysanitize-html等库来防止XSS攻击。

项目库

项目源码库:https://github.com/markedjs/marked
项目的官网:https://marked.js.org/

应用展示

微信md格式化工具

核心工作流

  1. 用户向 Marked 提供要编译的字符串
  2. 内置的 lexer 将输入字符串的片段馈送到每个标 tokenizer 记器中,并根据它们的编译成抽象语法结构树(AST)中的一系列标记
  3. 每个tokenizer 标记器接收一段Markdown文本,如果它与特定模式匹配,则生成一个包含任何相关信息的标记对象
  4. walkTokens函数将遍历树中的每个令牌,并对令牌内容进行任何最终调整
  5. 解析器 parser 遍历令牌树,将每个令牌提供给适当的呈现器,并将它们的输出连接到最终的HTML结果中
  6. 每个renderer呈现器函数接收一个令牌,并操纵其内容以生成一段HTML。

setOptions 和 use()

  1. marked.setOptions(...)marked.use(option1, option2, ...)都是对 marked 的设置
  2. 这两个函数都返回 marked 自身,所以可以链式使用
    1. marked.setOptions(...)直接把参数和 defaultOptions 融合
    2. marked.use(option1, option2, ...)
      1. renderertokenizerhooks:按照顺序串联起来,当最后一个掉用失败了,再调用前面一个,一直到默认的
      2. walkTokens :把每一个walkTokens函数调用结果放到一起
      3. extensions
      4. 把基础类型参数(除renderer,tokenizer walkTokens,hooks,extensions这5个参数之外)的参数后面的覆盖前面的,

Marked提供了直接覆盖任何现有令牌类型的渲染器和标记器的方法,以及插入额外的自定义渲染器和符号化器函数以处理完全自定义的语法的方法。例如,使用marked.use({renderer})将修改渲染器,而marked.use({extensions:[{ render } ] })则会添加新的渲染器

Options 选项

async: 默认 false,是否异步,开启之后 walkTokens 的所有函数都 resolve之后,marked.parse 函数返回一个 Promise<string>
break : 默认 false,开启之后,在一个换行之后加一个<br>
gmf: 默认 true,使用 Github Flavored Markdown (GFM) specification.
pedantic: 默认false
renderer: {}, new Renderer(), 是一个对象,包含一些将 tokens render 成 html 的函数
silent: 默认 false,开启之后,不会抛出任何错误或者输出任何警告,错误会被返回成字符串
tokenizer: {}, new Tokenizer(),是一个对象,包含一些函数从 markdown 中创建 token
walkTokens: function, 是一个被所有的 token 调用的函数

renderer

  1. renderer是一个对象,每一个key就是一个块级key,或者 inlinekey
  2. 传入定制化的renderer函数,会覆盖默认的(使用use的:就是前一个对象中的render的),当这个renderer函数调用失败之后,会调用前一个
  3. 下面就是可以自己覆盖的渲染方法,分为块级和行内两类

块级渲染方法 block-level

  • code(string code, string infostring, boolean escaped)
  • blockquote(string quote)
  • html(string html, boolean block)
  • heading(string text, number level, string raw)
  • hr()
  • list(string body, boolean ordered, number start)
  • listitem(string text, boolean task, boolean checked)
  • checkbox(boolean checked)
  • paragraph(string text)
  • table(string header, string body)
  • tablerow(string content)
  • tablecell(string content, object flags)

行内渲染方法 inline-level

  • strong(string text)
  • em(string text)
  • codespan(string code)
  • br()
  • del(string text)
  • link(string href, string title, string text)
  • image(string href, string title, string text)
  • text(string text)

hooks

preprocess 处理之前

preprocess(markdown: string): string
传入全部的 markdown 字符串,返回一个新的(其中可以做一些处理)

postprocess 处理之后

postprocess(html: string): string
传入已经生成的html,返回处理之后的html,可以做一些处理,例如:清洁、安全处理 isomorphic-dompurify

官网扩展插件

官网文档中公布了一些扩展 。

高亮

可以使用 marked-highlight 加量代码块。

  1. 初始化 marked 对象的时候传入 markedHighlight 对象
  2. 在前端工程中引入 highlight.js 库的 theme 样式文件

自定义扩展

marked库是可以扩展的,使用 custom extension 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3019184.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券今日投资参考:北方稀土上调挂牌价 磷化工产业链迎催化

昨日&#xff0c;沪指早盘窄幅震动&#xff0c;午后小幅拉升&#xff0c;科创50指数弱势下探。截至收盘&#xff0c;沪指涨0.22%报3147.74点&#xff0c;深证成指微跌0.08%报9770.94点&#xff0c;创业板指跌0.14%报1892.54点&#xff0c;上证50指数涨0.16%&#xff0c;科创50指…

iframe通信postMessage

iframe嵌入页面是实现微前端的方式之一。由于浏览器的跨域限制&#xff0c;iframe与父页面之间的通信变得不是那么容易。postMessage解决了这个问题。从广义上讲&#xff0c;一个窗口可以获得对另一个窗口的引用&#xff08;比如 targetWindow window.parent&#xff09;&…

JavaEE概述 + Maven

文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE&#xff1a; Java SE&#xff1a;指Java标准版&#xff0c;适用于各行各业&#xff0c;主要是Java…

UE灯光:点光和聚光灯的强度单位(cd、lm)

在虚幻引擎&#xff08;UE&#xff09;中&#xff0c;点光和聚光灯的光强使用两种不同的单位进行度量&#xff1a; 坎德拉&#xff08;cd&#xff09;&#xff1a;坎德拉是光强度的国际单位&#xff08;SI单位&#xff09;。它代表光源在特定方向上每单位立体角发出的光通量。…

2024年数维杯数学建模A题思路

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

求Fibonacci数列前40个数

这个数列有如下特点&#xff1a;第1,2两个数为1&#xff0c;1。从第3个数开始&#xff0c;该数是其前面两个数之和。 解题思路&#xff1a; 这是一个有趣的古典数学问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生…

编写burp插件实现数据包自定义修改

背景 安全测试工作中经常遇到各种加密加签或者添加了其它安全措施的数据包。以加密为例&#xff0c;为了测试正常进行&#xff0c;我们需要解密后修改数据包再进行加密还原&#xff0c;手工的话很是繁琐且没必要&#xff0c;所以我们需要一个工具帮我们自动化的实现。由于我们…

为什么跑腿越来越受到年轻人的青睐

跑腿服务越来越受到年轻人的青睐&#xff0c;主要源于以下几个方面的原因&#xff1a; 1. 便捷快速&#xff1a;在快节奏的现代生活中&#xff0c;年轻人追求的是效率和速度。跑腿服务提供了一种即时、便捷的解决方案&#xff0c;使他们能够在繁忙的生活和工作中节省时间和精力…

两个手机在一起ip地址一样吗?两个手机是不是两个ip地址

在数字时代的浩瀚海洋中&#xff0c;手机已经成为我们生活中不可或缺的一部分。随着移动互联网的飞速发展&#xff0c;IP地址成为了连接手机与互联网的桥梁。那么&#xff0c;两个手机在一起IP地址一样吗&#xff1f;两个手机是不是两个IP地址&#xff1f;本文将带您一探究竟&a…

一些js的基础

五大主流浏览器 内核 IE trident chrome webkit blink safari webkit firefox gecko opera presto ECMA European Computer Manufactures Association 欧洲计算机制造联合会 评估、开发 认可电信、计算机标准 ECMA-262 脚本语言的规范 ECMAScript 编程语言 1、编译型 翻译…

分享一个php常驻内存多进程任务的扩展

前言 最近在摸鱼的时候发现一个PHP常驻内存多进程任务扩展包&#xff1a;EasyTask: PHP常驻内存多进程任务管理器&#xff0c;支持定时任务(PHP resident memory multi-process task manager, supports timing tasks) (gitee.com)&#xff0c;支持php使用多线程处理任务。之前…

使用 Docker 部署 TaleBook 私人书籍管理系统

1&#xff09;项目介绍 GitHub&#xff1a;https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建&#xff0c;具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…

Android内核之Binder读写通信:binder_ioctl_write_read用法实例(七十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

亚马逊自养号测评系统搭建技术要点解析

亚马逊自养号测评系统搭建技术要求主要涵盖了网络环境、IP管理、设备配置、浏览器防关联、支付卡选择与管理以及账号管理等多个方面。测评是否稳定长久这些条件都是缺一不可的&#xff0c;以下是一些具体的技术要求&#xff1a; 1. 网络环境&#xff1a;使用国外服务器在云端搭…

数字人捕捉、建模与合成

在感知系统中&#xff0c;我们与外部合作者一起创建逼真的 3D 人类&#xff0c;其行为可以像虚拟世界中的真实人类一样。这项工作在今天有许多实际应用&#xff0c;并且对于元宇宙的未来至关重要。但是&#xff0c;在感知系统中&#xff0c;我们的目标是科学的——通过重现人类…

AI助力制造行业探索创新路径

近期&#xff0c;著名科技作家凯文凯利&#xff08;K.K.&#xff09;来到中国&#xff0c;发表了一场演讲,给广大听众带来了深刻的启示。他在演讲中强调了人工智能&#xff08;AI&#xff09;对全球经济的重大影响&#xff0c;并提出了AI发展的多个观点&#xff1a; AI的多样性…

【Linux进程间通信(五)】System V 信号量

&#xff08;一&#xff09;什么是信号量 互斥相关概念 1、并发&#xff1a; 2、互斥 3、临界资源&临界区 4、原子性 &#xff08;二&#xff09;信号量的理解 &#xff08;三&#xff09;信号量的两种基本操作 P / V &#xff08;四&#xff09;信号量的内核数据结…

工厂车间冷风机降温通风措施

冷风机的工作原理主要基于蒸发冷却原理&#xff0c;以下是其具体的工作流程&#xff1a; 空气吸入&#xff1a;当冷风机开始工作时&#xff0c;首先通过风扇将车间内的热空气吸入冷风机的机体内。蒸发冷却&#xff1a;冷风机内部有一个或多个湿帘或水帘&#xff0c;当热空气通…

浅谈程序员的实用神器

作为一个程序员&#xff0c;有很多实用的工具和资源可以帮助我们提高工作效率和解决问题。以下是一些常用的程序员实用神器&#xff1a; 集成开发环境&#xff08;IDE&#xff09;&#xff1a;如Visual Studio Code、PyCharm、Eclipse等&#xff0c;提供代码编辑、调试、版本控…

FFmpeg 音视频处理工具三剑客(ffmpeg、ffprobe、ffplay)

【导读】FFmpeg 是一个完整的跨平台音视频解决方案&#xff0c;它可以用于音频和视频的转码、转封装、转推流、录制、流化处理等应用场景。FFmpeg 在音视频领域享有盛誉&#xff0c;号称音视频界的瑞士军刀。同时&#xff0c;FFmpeg 有三大利器是我们应该清楚的&#xff0c;它们…