从markdown引擎实现的角度看markerdown到底是什么?
引用百度百科的解释:
链接:https://baike.baidu.com/item/markdown/3245829
Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。
由于 Markdown 的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。 如 GitHub、Reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge、简书等,甚至还能被使用来撰写电子书。
上面的解释比较官方,不是很好理解,本文从markdown引擎实现的角度说说个人的观点,谈谈markerdown到底是什么?
markdown和html语言一样是标记语言,而且要知道的是markdown语言的最终呈现方式就是转换为html语言的。作为标记语言,markdown和html一样,功能就是设置页面的显示形式,具体大致为:
- 控制哪段话是标题,哪段话是正文,哪部分是引用,哪部分是链接,哪部分是公式,哪部分是代码块;
- 控制字体的大小,几号字体,是否加粗,是否为斜体,是否有下划线或划线;
- 控制文字位置,是否居中,是否居左,是否居右;
说直白些,markdown和html这种标记语言就是用来控制页面显示模式的。
而markdown可以看做是对html语言的一种简化版,或者说是一种语言语法上的一种别名,因为markdown中的所有内容都是需要被转换为html语言进行实现的,也正是如此markdown可以直接使用html语言进行内容编写,这样在markdown文本做就不需要对这部分html语言再做转换了,因为这部分内容已经是html语言了。
由于markdown语言的简单性,所以把markdown语言转为html语言是十分容易的,甚至稍微有些前端经验的人都可以快速的手撸一个markdown引擎,可以说markdown语言的引擎对于前端工程师来说基本是没有任何门槛的,因为markdown的本质其实就是html。画句号来说markdown就是一种简单版本的html语言的翻译版,这就和汇编语言和C语言一样,是存在着这样一种对应的关系的,只不过markdown语言由于其简略性会在翻译为html语言后只具备部分html语言的特性,因此很多追求更丰富页面显示能力的人会在markdown文本中直接加入html语言,比如字体控制:

也比如说,换行控制:

这里可以更多提的还有这个换行控制的翻译,有的markdown引擎会把markdown中的多个回车直接翻译成html中的一个换行,但是有的markdown引擎则会把所有的回车全部翻译成换行,因此就存在同一个markdown文本放在GitHub上和Gitee上会出现两种不同显示效果的现象——Github上能够显示出段落间的多个换行而Gitee上段落与段落之间则是紧紧相邻的。而造成这些区别的原因就是不同网站使用的markdown引擎在文本翻译为html语言时的差异性,因此为了自己的markdown文本可以在所有markdown引擎的翻译下均能有相差不大的显示效果,我个人是一直直接使用html语言中的换行符进行直接表示的,即:

知道了markdown与html之间的关系后也就清楚了markdown引擎的实现原理了。
PS. HTML语言确实蛮复杂的,也不好记,但是日常人们的书写需要往往又用不到那些复杂的功能,因此使用markdown作为平时工作中的文本书写工具往往是恰恰好的,但是呢有些时候也会遇到一些问题,比如博客园的markdown引擎对转换后的html文本字体的效果就不是很好,太小,于是我就手动的加入html语言中的字体大小控制语句,实现了毕竟适中的字体大小:

从markdown引擎实现的角度看markerdown到底是什么?的更多相关文章
- 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
作者:阿里云用户mr_wid ,z)NKt# @I6A9do 如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV RsfTUb)< 投票标题: 28.[阿里云 ...
- 从JDK源码角度看Object
Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类.它包含了对象常用的一些方法,比如getClass.hashCode.equals.clone. ...
- 对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别
1. 从赛马说起 0x1:赛马问题场景介绍 假设在一场赛马中有m匹马参赛,令第i匹参赛马获胜的概率为pi,如果第i匹马获胜,那么机会收益为oi比1,即在第i匹马上每投资一美元,如果赢了,会得到oi美元 ...
- 用上CommonMark.NET,.NET平台终于有了好用的markdown引擎
缺少好用的markdown引擎之前一直是.NET平台上的一个痛点.因为这个痛点,我们被迫痛苦地使用了pandoc--不是pandoc做的不好,而是pandoc是由Haskell开发的,只能在Windo ...
- Android IOS WebRTC 音视频开发总结(四八)-- 从商业和技术的角度看视频行业的机会
本文主要从不同角度介绍视频行业的机会,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,欢迎关注个人微信公众号blacker ----------------------------- ...
- [置顶] 从引爆点的角度看360随身wifi的发展
从引爆点的角度看360随身wifi的发展 不到一个月的时间,随身wifi预定量就数百万.它的引爆点在哪里,为什么相同的产品这么多它却能火起来,通过对随身wifi的了解和我知识层面分析,主要是因为随身w ...
- 站在Java的角度看LinkedList
站在Java的角度看,玩队列不就是玩对象引用对象嘛! public class LinkedList<E> implements List<E>, Deque<E> ...
- 从源码的角度看 React JS 中批量更新 State 的策略(下)
这篇文章我们继续从源码的角度学习 React JS 中的批量更新 State 的策略,供我们继续深入学习研究 React 之用. 前置文章列表 深入理解 React JS 中的 setState 从源 ...
- 从线程模型的角度看Netty的高性能
转载:Netty(二) 从线程模型的角度看 Netty 为什么是高性能的? 传统 IO 在 Netty 以及 NIO 出现之前,我们写 IO 应用其实用的都是用 java.io.* 下所提供的包. 比 ...
- INDEX--从数据存放的角度看索引2
在上次<INDEX--从数据存放的角度看索引>中,我们说到"唯一非聚集索引"和“非唯一非聚集索引”在存储上有一个明显的差别:唯一非聚集索引的非叶子节点上不会包含RID的 ...
随机推荐
- 配置系统未能初始化。“System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。
配置系统未能初始化."System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 1.是检查当前程序的 App.c ...
- go随笔
1)声明在函数内部,是函数的本地值,类似private 2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似protect 3)声明在函数外部且首字母大写是所有包可见的全局值, ...
- JVM性能分析与故障排查
引言 JVM调优 程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高.请求延迟.tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高 ...
- 增补博客 第五篇 python 电子算盘
[题目描述]设计一个电子算盘.要求绘制电子算盘界面,设计并实现打珠算过程(界面参考如下图示).界面右侧要求以图形绘制的方式绘制自画像,注意不能是图像文件显示的形式. 图 电子算盘参考界面示意 [练习要 ...
- oracle数据库文件
oracle数据库重要的文件包括参数文件,控制文件,数据文件,临时文件,重做日志文件. 1 参数文件 oracle的参数文件可以设置数据库的名称,SGA和PGA的大小,控制文件的路径等系统参数.这些参 ...
- 随机二次元图片API第三弹
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 随机二次元图片API第三弹 日期:2020-3-10 阿珏 ...
- Xilinux PS与PL交互::Linux-App读写REG
Xilinux PS与PL交互::Linux-App读写REG 背景 PL配置好有关的硬件,PS端做验证. 设计方案:针对REG地址,不使用设备树配置. 遇到的问题:暂无. 验证目的 验证PL-PS的 ...
- 【论文阅读】RAL2020: UFOMap An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown
Last edited time: March 31, 2023 1:30 PM Reference and prenotes Paper link:https://ieeexplore.ieee.o ...
- 使用VS Code 学习算法(第四版)
最近在学习算法(第四版),书中一直在使用命令行来执行Java程序,而使用Eclipse时,很难使用命令行,或者说我根本就不会用,于是就想研究一下使用VS Code来编写代码,使用命令行来执行程序.看了 ...
- 韦东山freeRTOS系列教程之【第七章】互斥量(mutex)
目录 系列教程总目录 概述 7.1 互斥量的使用场合 7.2 互斥量函数 7.2.1 创建 7.2.2 其他函数 7.3 示例15: 互斥量基本使用 7.4 示例16: 谁上锁就由谁解锁? 7.5 示 ...