使用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实现telnet服务器的方法
Jul 10 Python
python中正则表达式的使用方法
Feb 25 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
python将控制台输出保存至文件的方法
Jan 07 Python
Python理解递归的方法总结
Jan 28 Python
基于Python实现扑克牌面试题
Dec 11 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
详解Python3中的 input() 函数
Mar 18 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
Python读取yaml文件的详细教程
Jul 21 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
Django celery异步任务实现代码示例
Nov 26 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数据库操作
2010/11/01 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
vue组件间通信解析
2017/03/01 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
Python中random模块生成随机数详解
2016/03/10 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
浅谈Python中函数的参数传递
2016/06/21 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
Python 装饰器深入理解
2017/03/16 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
使用Python构造hive insert语句说明
2020/06/06 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
介绍一下木马病毒的种类
2015/07/26 面试题
关于赌博的检讨书
2014/01/24 职场文书
新闻发布会主持词
2014/03/28 职场文书
关于旅游的活动方案
2014/08/15 职场文书
党员先进事迹材料
2014/12/19 职场文书