使用Python来开发Markdown脚本扩展的实例分享
作者:像风一样的自由 时间:2023-06-02 06:48:06
关于Markdown
在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版、字体设置。它使我们专心于码字,用「标记」语法,来代替常见的排版格式。例如此文从内容到格式,甚至插图,键盘就可以通通搞定了。目前来看,支持 Markdown 语法的编辑器有很多,包括很多网站(例如简书)也支持了 Markdown 的文字录入。Markdown 从写作到完成,导出格式随心所欲,你可以导出 HTML 格式的文件用来网站发布,也可以十分方便的导出 PDF 格式,这种格式写出的简历更能得到 HR 的好感。甚至可以利用 CloudApp 这种云服务工具直接上传至网页用来分享你的文章,全球最大的轻博客平台 Tumblr,也支持使用 Mou 这类 Markdown 工具进行编辑并直接上传。
python的markdown扩展开发
近期使用python的markdown写了一个文档小程序,由于需要用到一些额外的功能,所以就对markdown进行了一些简单的扩展,进而记录下编写的模板。直接贴代码:
#encoding=utf-8
##预处理器
from markdown.preprocessors import Preprocessor
class CodePreprocessor(Preprocessor):
def run(self, lines):
new_lines = []
flag_in = False
block = []
for line in lines:
if line[:3]=='!!!':
flag_in = True
block.append('<pre class="brush: %s;">' % line[3:].strip())
elif flag_in:
if line.strip() and line[0]=='!':
block.append(line[1:])
else:
flag_in = False
block.append('</pre>')
block.append(line)
new_lines.extend(block)
block = []
else:
new_lines.append(line)
if not new_lines and block:
new_lines = block
return new_lines
##后置处理器
from markdown.postprocessors import Postprocessor
class CodePostprocessor(Postprocessor):
def run(self, text):
t_list = []
for line in text.split('\n'):
if line[:5]=='<p>!<':
line = line.lstrip('<p>').replace('</p>', '')[1:]
t_list.append(line)
return '\n'.join(t_list)
##扩展主体类
from markdown.extensions import Extension
from markdown.util import etree
class CodeExtension(Extension):
def __init__(self, configs={}):
self.config = configs
def extendMarkdown(self, md, md_globals):
##注册扩展,用于markdown.reset时扩展同时reset
md.registerExtension(self)
##设置Preprocessor
codepreprocessor = CodePreprocessor()
#print md.preprocessors.keys()
md.preprocessors.add('codepreprocessor', codepreprocessor, '<normalize_whitespace')
##设置Postprocessor
codepostprocessor = CodePostprocessor()
#print md.postprocessors.keys()
md.postprocessors.add('codepostprocessor', codepostprocessor, '>unescape')
##print md_globals ##markdown全局变量
关于markdown扩展的深入内容,可以查看官方文档,不过没有例子,只是手册而已。但大体能知道有哪些内容组成,在结合上面的文件结构都是可以写出来的。下面是调用的代码:
#encoding=utf-8
import markdown
import markdowncode
text = '''''
!!!python
!
!def foo():
###title
'''
configs = {}
myext = markdowncode.CodeExtension(configs=configs)
md = markdown.markdown(text, extensions=[myext])
print md
主要扩展了2个功能:
一个是把形如:
!!!python
!
!def foo():
! return 'foo'
转换成:
<pre class="brush: python;">
def foo():
return 'foo'
</pre>
标签:Markdown
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MySQL基于索引的压力测试的实现
2024-01-19 05:56:23
![](https://img.aspxhome.com/file/2023/2/128062_0s.png)
Python中datetime模块参考手册
2021-04-21 23:31:12
使用Keras预训练好的模型进行目标类别预测详解
2023-02-04 09:14:37
![](https://img.aspxhome.com/file/2023/8/94178_0s.jpg)
python操作xlsx格式文件并读取
2021-07-01 20:03:26
![](https://img.aspxhome.com/file/2023/7/110257_0s.png)
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2024-04-22 22:33:48
MySQL学习笔记小结
2024-01-26 22:20:33
![](https://img.aspxhome.com/file/2023/6/112346_0s.jpg)
python实现复制大量文件功能
2023-09-03 16:42:54
详解Python中使用base64模块来处理base64编码的方法
2022-01-12 01:27:19
python抓取网页中链接的静态图片
2023-04-17 04:27:27
InnoDb 体系架构和特性详解 (Innodb存储引擎读书笔记总结)
2024-01-21 14:21:03
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2022-05-09 18:58:43
![](https://img.aspxhome.com/file/2023/2/117852_0s.png)
Vue.js directive自定义指令详解
2024-05-28 15:46:18
![](https://img.aspxhome.com/file/2023/3/123193_0s.png)
一文教会你用python连接并简单操作SQLserver数据库
2024-01-17 14:11:34
![](https://img.aspxhome.com/file/2023/1/124981_0s.jpg)
python3 flask实现文件上传功能
2022-11-19 18:42:10
Python进阶之使用selenium爬取淘宝商品信息功能示例
2022-04-26 04:55:15
PHP levenshtein()函数用法讲解
2023-06-01 15:20:29
![](https://img.aspxhome.com/file/2023/0/55380_0s.png)
Flask框架实现的前端RSA加密与后端Python解密功能详解
2021-07-26 16:28:13
![](https://img.aspxhome.com/file/2023/7/89277_0s.jpg)
Html中JS脚本执行顺序简单举例说明
2024-04-29 13:38:46
解决IE6、IE7、Firefox兼容最简单的CSS Hack
2007-10-14 10:51:00
python基础教程项目四之新闻聚合
2021-10-03 01:31:33