🐭喂汁,用Python写个专属Markdown转换工具(下)

简介: 一直使用 Markdown 语法编写文章,然后用Markdown转换工具转换下

④ 四鞭 → 图片、链接


这里有个坑要注意下,笔者再这里卡了好一段时间,手滑按了tab缩进:


网络异常,图片无法展示
|


渲染后的代码:


网络异常,图片无法展示
|


这里是被当成代码块处理了,改为没缩进,或一两个空格缩进就可以了。 同样,抠出样式模板:


网络异常,图片无法展示
|


重写函数渲染模板:


网络异常,图片无法展示
|


这里也有个坑,mistune中会把每一行都当做段落,然后把在这个上面又套一层样式,所以还需要修改下段落渲染函数:


网络异常,图片无法展示
|


传参校验:


网络异常,图片无法展示
|


效果如下:


网络异常,图片无法展示
|


⑤ 五鞭 → 代码高亮、引用、行内代码


代码块的渲染亦称代码高亮,看了网上大部分转换工具,使用的都是使用 highlight.js,样式多多:highlightjs.org/


这里是Python,直接调js渲染有些麻烦,这里使用 pygments代码高亮库 来替换,样式及预览可到下述链接挑选:pygments.org/demo/


pip命令安装一波库:


pip install Pygaments


使用方式也很简单:


网络异常,图片无法展示
|


参数简述:


  • noclasses=True:设置不生成css文件,即使用HTML内联样式;
  • style='perldoc':设置主题;
  • wrapcode=True:使用<code>包裹渲染后的代码;


复制到编辑器看下效果:


网络异常,图片无法展示
|


这里坑可多着呢,罗列下:


  • ① 代码超过屏幕,没有显示横向滚动条,需添加 overflow-x: auto;
  • ② 字体大了,设置12px为佳,要为每个span标签的style属性添加 font-size: 12px;
  • ③ 如下图,代码中的部分字符串没有用span包裹,大小不一,需外层套一个span包裹;


网络异常,图片无法展示
|


此处使用lxml操作节点元素增删及属性修改,具体代码如下:


网络异常,图片无法展示
|


传参校验:


网络异常,图片无法展示
|


字体大小和滚动条都出来了,看似没啥问题了,但如果你点击手机上预览:


网络异常,图片无法展示
|


卧槽,全乱了,有些代码挤在一行上了,归根到底还是换行符\n被微信吃了呗,看了下其他工具的做法:


添加 → white-space:nowrap,指定文本不换行,直到遇到<br>为止。


所以我们需要在合适的地方插入<br>标签,就在lxml解析前加吧:


网络异常,图片无法展示
|


看下手机上的效果:


网络异常,图片无法展示
|


换行倒是换行了,就是前面的缩进没了,看了下别的工具的做法:


前面加上缩进对应数量的&nbsp;


所以,还需要统计每行前面的空格,补上对应数量的&nbsp;


网络异常,图片无法展示
|


看下手机上的效果:


网络异常,图片无法展示
|


好家伙,可以了,也算是把代码块的坑都踩完了!


然后把引用的样式也补上吧:


网络异常,图片无法展示
|


传参校验:


网络异常,图片无法展示
|


最后,把行内代码的样式也补上


网络异常,图片无法展示
|


传参校验:


网络异常,图片无法展示
|


常用结点的解析渲染就讲解到这里,然后就是全文渲染的微调了,换行,各种解析冲突处理啊,限于篇幅,就不一一讲解了,可以参考仓库中的最新代码。


0x5、传统功夫以点到为止


正文的渲染就这样,另外一般公号喜欢每一篇都加上一个特定的头部和尾部,这个简单,直接偷两个样式保存成html模板,正文渲染完后,拼接即可,写下简单示例吧:


网络异常,图片无法展示
|


点击预览,手机看下效果:


网络异常,图片无法展示
|


效果还是很赞的,踩N多坑+写文,总耗时三天,终于把这个工具的雏形做出来了;

尽管它还不完整,不是很人性化,目前只有一个主题,还有各种未知的BUG,鸡动,久违的成就感;


仓库地址github.com/coder-pig/h…


相关文章
|
2月前
|
存储 缓存 测试技术
理解Python装饰器:简化代码的强大工具
理解Python装饰器:简化代码的强大工具
|
3月前
|
程序员 测试技术 开发者
Python装饰器:简化代码的强大工具
Python装饰器:简化代码的强大工具
210 92
|
4月前
|
数据安全/隐私保护 Python
微信群成员导出工具, 微信群成员导出软件, 微信群管理工具软件【python】
这个工具提供了完整的微信群成员导出功能,包括登录微信、获取群列表、导出成员信息到Excel等功能
|
2月前
|
机器学习/深度学习 编解码 Python
Python图片上采样工具 - RealESRGANer
Real-ESRGAN基于深度学习实现图像超分辨率放大,有效改善传统PIL缩放的模糊问题。支持多种模型版本,推荐使用魔搭社区提供的预训练模型,适用于将小图高质量放大至大图,放大倍率越低效果越佳。
244 3
|
3月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
755 1
|
2月前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
581 0
|
3月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制
|
3月前
|
安全 API 数据安全/隐私保护
|
3月前
|
Java API 数据安全/隐私保护
淘宝一键上货发布软件,淘宝批量发布上架工具, 淘宝批量上架脚本【python】
这个Python脚本实现了以下功能: 完整的淘宝API调用封装
|
3月前
|
机器人 数据安全/隐私保护 Python
淘宝批量发货发布工具, 淘宝批量上传商品软件, 淘宝批量上架软件【python】
使用Selenium实现自动化操作淘宝卖家后台 支持三种核心功能

推荐镜像

更多
下一篇
oss云网关配置