使用Python来开发Markdown脚本扩展的实例分享


Posted in Python onMarch 04, 2016

关于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>

使用Python来开发Markdown脚本扩展的实例分享

Python 相关文章推荐
Python基于PycURL自动处理cookie的方法
Jul 25 Python
Python建立Map写Excel表实例解析
Jan 17 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
python 显示数组全部元素的方法
Apr 19 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
使用python turtle画高达
Jan 19 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 #Python
用Python编写简单的微博爬虫
Mar 04 #Python
python相似模块用例
Mar 04 #Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 #Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 #Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 #Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 #Python
You might like
php正则表达式获取内容所有链接
2015/07/24 PHP
php session的应用详细介绍
2017/03/22 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
详解Python字典小结
2018/10/20 Python
python3 爬取图片的实例代码
2018/11/06 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
中间件分为哪几类
2016/09/18 面试题
领导干部培训感言
2014/01/23 职场文书
五一劳动节活动记录
2014/03/23 职场文书
鸦片战争观后感
2015/06/09 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏