使用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获取beautifulphoto随机某图片代码实例
Dec 18 Python
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
关于Python 3中print函数的换行详解
Aug 08 Python
python logging模块的使用总结
Jul 09 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
使用python制作一个解压缩软件
Nov 13 Python
Python input函数使用实例解析
Nov 22 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Python入门基础之数字字符串与列表
Feb 01 Python
教你用Python+selenium搭建自动化测试环境
Jun 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
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python实现梯度法 python最速下降法
2020/03/24 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
一套中级Java程序员笔试题
2015/01/14 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
优秀的教师个人的中文求职信
2013/09/21 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
学校消防演习方案
2014/02/19 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
MySQL数字类型自增的坑
2021/05/07 MySQL