markdownIt大致流程分析

2023-05-16

文章目录

        • 一,markdownIt模块大致流程
        • 二,分析其执行流程
        • 三,关于MarkdownIt实例属性
          • options配置属性
          • validateLink函数
          • normalizeLink函数
          • normalizeLinkText函数
          • configure函数
          • set函数
          • enable函数
          • disable函数
          • use函数
          • parse函数
          • render函数
          • parseInline函数
          • renderInline函数
          • helpers解析链接函数集
          • utils工具函数集

因为最近再弄markdown在react与vue的渲染,发现其都引用了markdownIt模块。
于是就产生了这篇文章

一,markdownIt模块大致流程

流程

二,分析其执行流程

1,入口函数MarkdownIt.render

  • 数据源从此函数开始颠沛流离的一生

2,实例化Core解析器

3,流经相应解析规则

  • 默认流经,normalize(用于文档标准化)block:把文档解析成对应块级inline:处理解析后块级中的内联文档linkify(用链接节点替换类似链接的文本)replacements(替换相关字符)smartquotes(替换相关字符),六条内置解析规则
  • 其中,linkifyreplacementssmartquotes解析规则,受MarkdownIt.options配置属性所影响,默认不流经这几种解析规则

3.1,流经block解析规则

  • 实例化block解析器
  • 解析器,对其数据源,按照每行(以换行符为基准),对数据源进行拆分并对其关键信息进行记录
  • 此后依次流向解析器下的十一条子规则,并形成token
  • 关于token流,官方解释是:
    Tokens 是一个简单的数组。(AST 是一个对象)
    打开的标签和关闭的标签可以隔离。
    将“内联容器(inline container)”作为一种特殊的 block token 对象。它有嵌套的 tokens,如粗体,斜体,文本等等。

3.2,流经inline解析规则

  • 实例化inline解析器
  • 从上述的tokens中对token.type为inline的token使用解析器下的十五条子规则进行处理

4,流经渲染器

  • 经过长途跋涉后,终于完善token流,此时需要对token流进行包装,使我们能清晰看出来他的内容
  • 渲染器,内置九条渲染规则(围栏、行内代码、代码块、html 块、行内 html、图片、硬换行、软换行、文本)token流依次流经后,最终渲染成html结构

三,关于MarkdownIt实例属性

options配置属性

默认配置

配置路径(基于/lib下的相对路径)
./presets/default(在没有给出预设名称时会启用,(包括)所有可用的规则)
./presets/zero(所有的规则都被禁用)
./presets/commonmark(将解析器配置为严格的 CommonMark模式)
validateLink函数

验证链接parame:url:string,return:boolean

验证规则
/^(vbscript|javascript|file|data): /
/^data:image/(gif|png|jpeg|webp);/
normalizeLink函数

​ 1,markdown-it解析器的URL实用程序。(使用mdurl模块进行url解析)

​ 2,国际化域名编码。(使用punycode模块进行域名编码)

标准化链接parame:url:string,return:string


normalizeLinkText函数

​ 1,markdown-it解析器的URL实用程序。(使用mdurl模块进行url解析)

​ 2,国际化域名编码。(使用punycode模块进行域名编码)

标准化链接parame:url:string,return:string


configure函数

​ 1,MarkdownIt.set函数进行配置属性的合并。(默认配置参考config

​ 2,启用规则

对MarkdownIt进行配置parame:presets: object,return:MarkdownIt


set函数

合并解析器属性parame:options:object,return:MarkdownIt


enable函数
  • list (String|Array) – 要启用的规则名称或规则名称列表。
  • ignoreInvalid (Boolean) – 设为 true 来忽略规则未发现时的错误。

启用规则parame:list:array, ignoreInvalid:boolean,return:MarkdownIt


disable函数
  • list (String|Array) – 要禁用的规则名称或规则名称列表。
  • ignoreInvalid (Boolean) – 设为 true 来忽略规则未发现时的错误。

禁用规则parame:list:array,ignoreInvalid:boolean,return MarkdownIt


use函数

注入插件parame:plugin:function,(arguments?),return:MarkdownIt


parse函数

​ 1,实例化Core类 => StateCore类

​ 2,通过Core.process函数对StateCore实例进行处理

解析文档parame:src:string,env:object,return:array(tokens流)


render函数

​ 1,通过MarkdownIt.parse函数解析文档

​ 2,通过renderer.render函数对解析后的文档进行渲染

渲染文档parame:src:string,env:object,return:string


parseInline函数

​ 1,实例化Core类 => StateCore类

​ 2,修改StateCore.inlineMode为True

​ 3,通过Core.process函数对StateCore实例进行处理

解析内联元素parame:src:string,env:object,return:array(tokens流)


renderInline函数

​ 1,通过MarkdownIt.parse函数解析文档

​ 2,通过renderer.render函数对解析后的文档进行渲染

渲染内联文档parame:src:string,env:object,return:string


helpers解析链接函数集
utils工具函数集
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

markdownIt大致流程分析 的相关文章

  • Kotlin进阶-6-重入锁+synchronized+volatile

    目录 1 介绍 2 线程的状态 3 创建线程 4 线程同步 4 1 可重入锁 4 2 不可重入锁的实现 4 3 可重入锁的实现 4 4 Java中的可重入锁 ReentrantLock 4 5 同步方法 synchronized 5 vol
  • Kotlin进阶-7-阻塞队列+线程池

    目录 1 阻塞队列 1 1 常见阻塞场景 2 Java中的阻塞队列 2 1 ArrayBlockingQueue 2 2 LinkedBlockingQueue 2 3 PriorityBlockingQueue 2 4 DelayQueu
  • Kotlin进阶-11-Activity启动后的视图加载分析

    1 介绍 Kotlin进阶 9 setContentView源析 43 Window Activity DecorView关系 Kotlin进阶 10 Activity的启动流程 前面两节分别介绍了Activity的启动流程 xff0c 还
  • Java多线程编程技术总结

    目录 1 退出线程的3种方式 xff1a 1 1 判断线程是否中断 xff1f 1 2 interrupt 1 3 stop 1 4 StackTraceElement getStackTrace 方法 2 suspend 和resume
  • 【Mysql】视图

    Mysql 视图 1 什么是视图 xff08 MySQL 5以及以上版本 xff09 2 视图的优点3 视图的规则与限制4 使用视图附录 1 什么是视图 xff08 MySQL 5以及以上版本 xff09 视图是虚拟的表 与包含数据的表不一
  • AIDL的原理实现

    前言 Binder 驱动是基于 CS 模型设计的跨进程通信驱动 想要使用 Binder 驱动进行通信 需要三个步骤 定义交互规范服务端实现客户端实现 一 定义交互规范 span class token keyword public span
  • 微信小程序9---Button按钮和icon图标

    Button 按钮 首先提醒一下大家 xff0c 如果你现在button标签不能用 xff0c 不用担心 xff0c 那是因为微信小程序存在一个bug xff0c 你仔细看一下你的button标签的代码是不是这样的 span class h
  • 微信小程序10---条件语句if和循环语句for(三目运算+hidden)

    在微信小程序的官方文档中 xff0c 将这两个语句归化在框架的视图层 xff0c 分表叫条件渲染和类表渲染 xff0c 其实他就是封装了这两条语句而已 上图 xff08 循环语句if xff09 1 它是通过在index js中设置数据 x
  • 微信小程序13--通过api接口将json数据展现到小程序上

    实现知乎客户端的一个重要知识前提就是 xff0c 要知道怎么通过知乎新闻的接口 xff0c 来把数据展示到微信小程序端上 那么我们这一就先学习一下 xff0c 如何将接口获取到的数据展示到微信小程序上 1 用到的知识点 lt 1 gt wx
  • 微信小程序15---将组件设置为圆形

    1 上图 2 index wxss 宽高和弧度的设置 span class hljs class circle span span class hljs rules span class hljs rule span class hljs
  • Android---给Linearlayout设置边框+弧度角

    1 第一步需要在drawable下创建一个xml文件 xff0c 代码如下 span class hljs pi lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt span spa
  • HttpServletRequest获取body && 使用 @RequestBody 获取body

    直接从HttpServletRequest的Reader流中获取请求body参数 span class token annotation punctuation 64 RequestMapping span span class token
  • P1002 [NOIP2002 普及组] 过河卒

    题目描述 棋盘上 A 点有一个过河卒 xff0c 需要走到目标 B 点 卒行走的规则 xff1a 可以向下 或者向右 同时在棋盘上 C 点有一个对方的马 xff0c 该马所在的点和所有跳跃一步可达的点称为对方马的控制点 因此称之为 马拦过河
  • 3D Slicer源代码编译与调试

    2019 11 12 参考以下链接 xff1a https www slicer org wiki Documentation Nightly Developers Build Instructions Windows 需要注意的有 xff
  • DSP Group, Inc. <DSPG>

    公司官网 xff1a DSP Group Leading global provider of wireless chipset solutions About DSP Group DSP Group Inc NASDAQ DSPG is
  • 数组或对象指定下标赋值及下拉数据转化

    一 数组指定下标赋值 span class token variable let span span class token variable myarr span span class token punctuation 61 span
  • XMOS 开发探索3-麦克风拾音

    date 2021 03 29 XMOS 评估板型号 xff1a XUF216 512 TQ128 C20 实现麦克风拾音 xff0c 并从耳机输出声音 xff0c 官方网站上的一个demo xff1a Application Notes
  • 安装ubuntu系统中磁盘分区

    硬件 xff1a vostro 1450 xff0c 本身有一块机械硬盘HDD xff08 500G xff09 加了一块固态硬盘SSD xff08 120G xff09 xff0c 组成HDD 43 SSD双硬盘 目的 xff1a SDD
  • win7+ubuntu双系统 -- ubuntu无法启动

    硬件 xff1a vostro 1450 xff0c 本身有一块机械硬盘HDD xff08 500G xff09 加了一块固态硬盘SSD xff08 120G xff09 xff0c 组成HDD 43 SSD双硬盘 目的 xff1a SDD
  • Xshell 和 Xftp 学校免费版

    Xshell 和 Xftp 家庭 学校免费版下载地址 xff1a 家庭 学校免费 NetSarang Website 填写姓名和邮箱 xff0c 下载免费版 xff0c 会发送邮件到邮箱 45M 安装完成并打开 xff1a 39M 用来传输

随机推荐

  • putty pscp psftp 三件套

    官网地址 xff1a https www chiark greenend org uk sgtatham putty https www chiark greenend org uk sgtatham putty latest html p
  • win10远程连接win7电脑 -- 局域网实现

    本次 xff1a 使用 windows自带 的 远程桌面连接 xff08 ok xff09 另外 xff1a 向日葵 远程软件更方便 xff0c 可以直接在公网使用 xff08 get xff09 TeamViewer 远程软件越来越不好用
  • scp 报错: Permission denied, please try again(publickey,password)

    修改密码后导致报错 Permission denied please try again publickey password 修改 etc ssh sshd config 中 PermitRootLogin yes 修改为yes 重启服务
  • 关闭树莓派的电源指示灯和状态指示灯

    在命令行输入一下指令 xff1a echo 0 sudo tee sys class leds led0 brightness 状态指示灯 范围 0 255 echo none sudo tee sys class leds led0 tr
  • 虚拟机安装Vmware Tools复制文件,共享文件

    目标1 xff1a 虚拟机安装Vmware Tools工具 先看下VMware版本 xff1a 首先 xff0c 将CD DVD切换到物理驱动器 xff1a 点击菜单 虚拟机 M 34 安装VMware Tools xff0c 虚拟DVD中
  • xavier上如何挂载SD卡

    參考博客 Jetson AGX Xavier避坑指南 六 挂载 SD 卡 zxxRobot的博客 CSDN博客 xavier挂载sd卡 AGX Xavier挂载SD卡 Bungehurst CSDN博客 Nvidia Jetson AGX
  • NXP-LPC1768起步之开发环境搭建与GPIO

    1 环境搭建 本工程使用ARM公司MDK414 低版本的可能会导致在MDK中无法下载调试程序 仿真器使用SEGGER公司JlinkV7 首先新建工程GPIO xff0c 选择路径保存 xff0c 然后会出现选择芯片界面 然后确定 xff0c
  • docker 修改默认存储路径的方法

    在xavier上使用docker时 由于空间不足 无法继续工程 几种修改 Docker 镜像默认存储位置的方法 墨天轮 使用方法一 使用软链接的方式 容器的存放位置在 var lib docker 默认存放位置 sudo docker in
  • linux下usb无线网卡对比

    2021年12月23日 冬月二十 xff0c 天晴 xff0c 微风 一 使用场景 1 xff0c 由于软件开发需要用到linux系统 xff0c 嵌入式设备nvidia xavier没有无线网卡 xff0c 需要自购 2 xff0c 另外
  • ubuntu 18.04.6官方下载地址

    Enterprise Open Source and Linux Ubuntu 进入界面 xff1a Download Ubuntu Desktop Download Ubuntu 点击 xff1a see our alternative
  • ubuntu误删 /var/lib/dpkg

    折腾了一个小时 Deepin Debian Ubuntu恢复误删除的 var lib dpkg 学亮编程手记的博客 CSDN博客 https jingyan baidu com article fc07f98946cd3e12fee5196
  • E: Could not get lock /var/lib/dpkg/lock

    dpkg error dpkg frontend is locked by another process dpkg error dpkg frontend is locked by another process 白蛇仙人的博客 CSDN
  • 树莓派安装花生壳软件 phddns ,没有显示SN码

    树莓派型号 xff1a Pi4B 2G 树莓派系统版本 xff1a uname a Linux raspberrypi 5 10 103 v7l 43 1529 SMP Tue Mar 8 12 24 00 GMT 2022 armv7l
  • E: Could not get lock /var/lib/dpkg/lock

    ubuntu安装软件时 xff0c 经常出现下面错误 xff1a sudo apt get install E Could not get lock var lib dpkg lock open 11 Resource temporaril
  • shell 脚本常用命令,音频提取、格式转换、切割

    实现一下功能 xff1a 1 xff0c mp4 视频文件提取 wav xff0c pcm xff1b 2 xff0c wav 切割为每段30s 的音频 xff1b 3 xff0c wav 切割后的音频转换为 pcm xff0c ffmpe
  • Apache Options Indexes FollowSymLinks详解

    如果该虚拟目录下没有 index html xff0c 浏览器也会显示该虚拟目录的目录结构 xff0c 列出该虚拟目录下的文件和子目录 如何禁止 Apache 显示目录列表呢 xff1f 要禁止 Apache 显示目录结构列表 xff0c
  • 大恒工业相机+opencv开发经历

    遇到的问题 xff1a 1 打开Daheng Galaxy Viewer x64 没有图像 由于对工业相机不熟悉 xff0c 原因是没有安装镜头 xff0c 安装镜头后可以正常使用 xff0c 否则只有白色或黑色 xff0c 用手指靠近镜头
  • Backtrace in Android

    Backtrace in Android 96 Tsing2015 0 7 2016 02 28 23 03 字数 33 阅读 2491评论 8喜欢 4 libscorkscrew so在android 5 0之后已经没有了 xff0c 之
  • CF1165B Polycarp Training

    原题链接 题目描述 Polycarp wants to train before another programming competition During the first day of his training he should
  • markdownIt大致流程分析

    文章目录 一 xff0c markdownIt模块大致流程二 xff0c 分析其执行流程三 xff0c 关于MarkdownIt实例属性options配置属性validateLink函数normalizeLink函数normalizeLin