使用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读取注册表中值的方法
Apr 08 Python
Python捕捉和模拟鼠标事件的方法
Jun 03 Python
Python中有趣在__call__函数
Jun 21 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
Python算法应用实战之栈详解
Feb 04 Python
python实现定时发送qq消息
Jan 18 Python
python pygame实现五子棋小游戏
Oct 26 Python
python多线程http压力测试脚本
Jun 25 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
win10安装python3.6的常见问题
Jul 01 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 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
加强版phplib的DB类
2008/03/31 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
vue实现分页组件
2020/06/16 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
详解Python中for循环是如何工作的
2017/06/30 Python
python爬取指定微信公众号文章
2018/12/20 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
python cumsum函数的具体使用
2019/07/29 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python Django搭建网站流程图解
2020/06/13 Python
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
如何进行Linux分区优化
2013/02/12 面试题
初一英语教学反思
2014/01/11 职场文书
职务说明书范文
2014/05/07 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
质量保证书格式
2015/02/27 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript