从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的 ...
随机推荐
- 通俗理解GAN -- 基础认知
Smiling & Weeping ---- 你已春风摇曳,我仍一身旧雪 1.GAN的基本思想 GAN全称对抗生成网络,顾名思义是生成模型的一种,而他的训练则是一种对抗博弈状态中的.下面我们举 ...
- getRefs is undefined html vue2项目 报错
vue2项目提示 getRefs is undefined 在div上面写了,ref,还写了v-if 然后再watch中操作了 ref 导致报错. 分析: 组件因为v-if 为 false 没有注册和 ...
- Unity下简易字符串指令调试
Unity下简易字符串指令调试 输入相应的字符串命令即可调用特定的方法,比如让角色等级提升,生成特定数量的Boss等 using System; using UnityEngine; using Sy ...
- 端口占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?
最近遇到一个奇葩的问题,项目跑的好好的,没有安装其它特殊软件,突然服务器启动报错,日志如下,显然是服务器的8080端口占用了. Caused by: java.net.BindException: A ...
- 配置pod拉取harbor容器镜像仓库私有镜像:secret保存账号密码
目录 一.系统环境 二.前言 三.Docker-Registry类型的Secret简介 四.镜像仓库简介 五.搭建Harbor容器镜像仓库 5.1 安装Harbor 5.2 创建项目 5.3 推送镜像 ...
- RSA非对称加密算法中的密钥对生成与传输
PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全.密码学.联邦学习.同态加密等隐私计算领域的技术和内容. RSA(Rivest–Shamir–Adleman)加密算法是一 ...
- HunggingFace的镜像加速站
方法一:使用huggingface 官方提供的 **huggingface-cli** 命令行工具.(1) 安装依赖pip install -U huggingface_hub (2) 基本命令示例: ...
- 关于kubesphere集群calico网络组件报错的修复
最近公司的项目用到了Kubesphere,于是自己先在虚拟机上测试了一番,遇到了很多的问题,现将遇到的有关calico的问题记录一下 上一篇介绍了如何离线安装kubesphere v3.0,安装之后我 ...
- Linux Centos7搭建RabbitMQ
下载依赖 yum -y install epel-release yum -y update 安装Erlang yum -y install erlang socat 测试安装成功 erl -vers ...
- 面试官:Java对象引用都有哪些类型?
哈喽,大家好,我是世杰. 本文我为大家介绍面试官经常考察的「Java对象引用相关内容」 照例在开头留一些面试考察内容~~ 面试连环call Java对象引用都有哪些类型? Java参数传递是值传递还是 ...