1、项目简介
hzwz-markdown
是一款基于 Python
实现的,用于 将Markdown文件转换成带样式的公号文章HTML
的工具。
简单点说就是:配个 样式模板
,运行直接生成带样式的HTML,贴到公众号编辑器就可以直接发了。
2、项目背景
笔者习惯使用Markdown杜撰技术文稿,尔后发布到公号上,当然不能直接发,还需要进行 排版
。
排版可谓是体力活,特别遇到表格,一个个手动复制粘贴,常常一篇就要排上半个多小时。
而排版都是按照一个 统一样式
来排的,所以是重复劳动,急需一个工具提高我的排版效率。
网上有很多优秀的Markdown工具,如:Markdown转换工具、Md2All、MPEditor、Mdnice 等。
一开始用还凑合,后面发现样式太单一了,一堆公号也在用,区分度不高,有些支持定制的,但要自己改CSS,有一定的门槛,没前端经验的用户可能难以下手。大部分的用户诉求可能跟我一致:
我不懂配色,不懂CSS,只是觉得别人文章样式好看,我也想在自己的文章里用上,仅此而已。
遂,萌生了一个自己写一个工具的想法,我希望它:
- ① 样式灵活:样式我不会写,偷我会啊,看到喜欢的公号样式直接偷,还有谁?
- ② 简单易用:用户通过尽可能简单的配置,一键完成转换,一劳永逸。
- ③ 纯粹&可定制:代码开源,没有私货,纯透明,会Python还能自行定制。
3、实践过程
① 技术选型及基本原理
基于 Python
进行开发,主要原因是Python笔者玩得溜一些,其他语言实现起来可能更简单(如JavaScript)。
工具的核心其实很简单:
解析Markdown文件 → 对特定类型元素进行渲染 → 生成HTML文件
接着是这三步的逐步细化:
① 解析Markdown文件
即解析Markdown且能对不同类型的元素做区分,此处使用轮子 → mistune :
- 一个目前最快的纯Python markdown快速解析器,灵感来源于marked。
- 官方仓库:github.com/lepture/mis…
- 官方文档:mistune.readthedocs.io/en/latest/
② 对特定类型元素进行渲染
即将不同类型的元素,转换成带 内联样式的HTML
,直接使用字符串拼接,繁冗且复用性差,此处引入模板的概念,将每种元素的样式保存成单独html模板,用到时传参渲染,此处使用轮子 → jinja2
模板库。
③ 生成HTML文件
将所有元素渲染后的html代码拼接,也可进行一些DIY,如文章顶部和底部添加导流样式,最后输出到HTML文件中。
② 具体实现细节
就是 不同元素类型具体处理,以前写过一篇记录开发过程的文章,就不搬运了,感兴趣可移步至:《喂汁,用Python写个专属Markdown转换工具》 自行查阅:
给下笔者自定义且在用的两个样式,给各位看下效果:
① Python系列
② Kotlin系列:吹爆,头部封面图片+文/CoderPig,借鉴谷歌开发者公号样式,标题颜色按照红篮黄依次切换,超链接精美样式,底部引流end+图片~
4、总结思考
实际开发中其实踩坑不少,比如换行符\n被微信吃掉了,代码高亮怎么解决等,不过所幸也肝出来了。
自用过程中还是有些小bug,如段落换行的逻辑,引用出现莫名其妙的空格等,功能也不全,不支持Latex公式。