使用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压缩和解压缩zip文件
Feb 14 Python
Python3访问并下载网页内容的方法
Jul 28 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
Python下划线5种含义代码实例解析
Jul 10 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
详解python中的异常和文件读写
Jan 03 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 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
我的群发邮件程序
2006/10/09 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python脚本开机自启的实现方法
2019/06/28 Python
python excel转换csv代码实例
2019/08/26 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
Java中compareTo和compare的区别
2016/04/12 面试题
统计每一学生的平均成绩
2014/06/06 面试题
学期自我鉴定范文
2013/10/01 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
个人委托书
2014/07/31 职场文书
八项规定整改方案
2014/10/01 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
责任书格式
2019/04/18 职场文书
JavaScript实现简单拖拽效果
2021/09/15 Javascript