从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的 ...
随机推荐
- Easysearch:语义搜索、知识图和向量数据库概述
什么是语义搜索? 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术.旨在更好地理解用户的意图和查询内容,而不仅仅是根据关键词匹配,还通过分析查询的语义和 ...
- SQL SERVER 同一台服务器,A库正常连接,B库提示“等待的操作过时”
SQL SERVER 同一台服务器,A库正常连接,B库提示"等待的操作过时" 解决方法: 在客户端(非SQL SERVER 服务器)用管理员身份运行CMD,输入netsh wins ...
- java并发编程——CompletableFuture
简介 Java的java.util.concurrent包中提供了并发相关的接口和类,本文将重点介绍CompletableFuture并发操作类 JDK1.8新增CompletableFuture该类 ...
- Java验证集合空或验证对象空的方法
import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.springframew ...
- python根据模板文件批量创建文件脚本
1.模板文件.txt 欢迎访问这座城市:德州行政区域编号:371400根据高德地图(https://lbs.amap.com/tools/picker)查询经纬度查询: jingdu,weiduBYE ...
- Linux 提权-Capabilities
本文通过 Google 翻译 Capabilities – Linux Privilege Escalation - Juggernaut-Sec 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字 ...
- JSON文件存储
JSON 文件存储 JSON,全称为 JavaScript Object Notation, 也就是 JavaScript 对象标记,通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一 ...
- 简约-Markdown教程
##注意 * 两个元素之间最好有空行 * 利用\来转义 我是一级标题 ==== 我是二级标题 ---- #我是一级标题 ##我是二级标题 ##<center>标题居中显示</cent ...
- VUE中watch的详细使用教程
1.watch是什么? watch:是vue中常用的侦听器(监听器),用来监听数据的变化 2.watch的使用方式如下 watch: { 这里写你在data中定义的变量名或别处方法名: { han ...
- Android ADB命令集锦
Android ADB命令集锦 原文(有删改):https://blog.csdn.net/dianziagen/article/details/57400723 本文包括: adb基本指令 Shel ...