使用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之用while来循环
Oct 02 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
PyQT实现多窗口切换
Apr 20 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
python实现处理mysql结果输出方式
Apr 09 Python
Python如何对XML 解析
Jun 28 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 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
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
Python的math模块中的常用数学函数整理
2016/02/04 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python用for循环实现九九乘法表
2018/05/31 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
Python 使用多属性来进行排序
2019/09/01 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
在keras里实现自定义上采样层
2020/06/28 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
python 写一个文件分发小程序
2020/12/05 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
路政管理专业推荐信
2013/11/11 职场文书
店长岗位职责
2013/11/21 职场文书
查环查孕证明
2014/01/10 职场文书
关于迟到的检讨书
2014/01/26 职场文书
精彩的英文自荐信
2014/01/30 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
维稳承诺书
2015/01/20 职场文书
升职自荐信范文
2015/03/27 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
亲戚关系证明
2015/06/24 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
Android Studio 计算器开发
2022/05/20 Java/Android