使用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 Web服务器Tornado使用小结
May 06 Python
Python内置函数之filter map reduce介绍
Nov 30 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
Python 获取项目根路径的代码
Sep 27 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
Python3基于plotly模块保存图片表格
Aug 03 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+MySQL 制作简单的留言本
2009/11/02 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
js数据类型检测总结
2018/08/05 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
python获取txt文件词向量过程详解
2019/07/05 Python
Python的条件锁与事件共享详解
2019/09/12 Python
wxPython实现画图板
2020/08/27 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
python怎么调用自己的函数
2020/07/01 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
写给学生的新学期寄语
2014/01/18 职场文书
诚信承诺书
2015/01/19 职场文书
撤诉书怎么写
2015/05/19 职场文书
起诉书范文
2015/05/20 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
MySQL 数据类型详情
2021/11/11 MySQL