当前位置: 首页 > news >正文

受够了 windows 下的 markdown 软件的话,自己写一个吧!

网页版的markdown 编辑器效果十分出众,比如cmd markdown、stackEdit markdown等,但问题是导出html之后就没有之前那么好的效果了,并且不能导出pdf。

客户端版的尝试较少,免费的大多是阉割版的。

比较烦人的一点是:

  1. Something

  + Something else

这样有序和无需列表经常会出现无法识别而均为有序或者均为无序的情况,于是想自己动手写一个。

 


 

分析一下的话发现,这就是一个简单的解释器而已,输入markdown 标记的语法格式,输出html文件。

 

  1. 首先,过一下w3school 的html教程,过一遍也就不到1小时吧,但确是必须的,你必须比较清楚的知道markdown文件的效果是用哪句html来表示的;

  2. 我选择了python作为实现语言,毕竟对于字符串的操作,C++显得很笨拙,而python则自如的多。

  3. 像六级标题、无需列表等只是按照行首的标记就可以唯一确定的十分简单;

  4. 而像block、有序列表则稍显麻烦,因为他们是上下文相关的,做的时候设立一个bool 变量来标记当前的状态;

  5.  而像上标、斜体、加粗、链接、删除线等和上面的是不同的,上面的都是以行为单位进行操作的,而这些是以token为 单位进行操作的,因此对他们的html代码生成也就放在了token的阶段,比如链接\[][]这样的语法比较复杂,直接匹配比较麻烦,需要模拟类似状态机的过程(其实就是不断循环来遍历),我直接用到了正则表达式去匹配,加上分组的功能会方便许多。

 

具体的实现参见 https://github.com/duangao/personal-ducument/tree/master/markdown_interpreter,里面有一个示例的markdown文件和生成的html效果文件。

 

发现bug欢迎告诉我,非常感谢。

转载于:https://www.cnblogs.com/gaoduan/p/4127875.html

相关文章:

  • C语言总结
  • IBM总架构师寇卫东:话说程序员的职业生涯-IT程序人生-职业生涯规划
  • css定位模拟投影,高度可随内容变化
  • 批量去掉 C++/C 中的注释
  • 为什么memset不能将数组元素初始化为1?
  • ia64和X86
  • linux python 更新版本
  • Sublime Python 插件配置合集
  • syslogd klogd
  • 设计模式——装饰者模式
  • c语言的作用域、变量与结构体
  • 关于终端和控制台的一些解释
  • 从源码编译新版OGRE 1.7.2 [Cthugha] for iphone/ipad
  • VS2010 添加服务引用以后点不出引用服务的命名空间
  • 查找触发器
  • [deviceone开发]-do_Webview的基本示例
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • eclipse的离线汉化
  • ESLint简单操作
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS题目及答案整理
  • Laravel Telescope:优雅的应用调试工具
  • Service Worker
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • windows下mongoDB的环境配置
  • 从0到1:PostCSS 插件开发最佳实践
  • 工作中总结前端开发流程--vue项目
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 记一次删除Git记录中的大文件的过程
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 写给高年级小学生看的《Bash 指南》
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 用简单代码看卷积组块发展
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #stm32驱动外设模块总结w5500模块
  • (1)(1.9) MSP (version 4.2)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (实战篇)如何缓存数据
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net下简单快捷的数值高低位切换
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [100天算法】-不同路径 III(day 73)
  • [Android]常见的数据传递方式