使用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的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
python 编程之twisted详解及简单实例
Jan 28 Python
详解python基础之while循环及if判断
Aug 24 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python发送告警邮件脚本
Sep 17 Python
python儿童学游戏编程知识点总结
Jun 03 Python
python面试题之列表声明实例分析
Jul 08 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
Python matplotlib可视化实例解析
Jun 01 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 Python
python 调用js的四种方式
Apr 11 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 文件锁
2017/02/19 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
javascript globalStorage类代码
2009/06/04 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
开业主持词
2014/03/21 职场文书
环保建议书400字
2014/05/14 职场文书
企业安全标语
2014/06/07 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
债务纠纷委托书
2014/08/30 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
高中同学会致辞
2015/08/01 职场文书
2016年教师节感言
2015/12/09 职场文书
用python画城市轮播地图
2021/05/28 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers