使用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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python中处理字符串之islower()方法的使用简介
May 19 Python
Python的pycurl包用法简介
Nov 13 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
wxPython实现窗口用图片做背景
Apr 25 Python
对python文件读写的缓冲行为详解
Feb 13 Python
python实现代码统计程序
Sep 19 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
python删除文件、清空目录的实现方法
Sep 23 Python
Python中22个万用公式的小结
Jul 21 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
PHP安全编程之加密功能
2006/10/09 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
Python线程创建和终止实例代码
2018/01/20 Python
详解django中使用定时任务的方法
2018/09/27 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python SVM 线性分类模型的实现
2019/07/19 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
python opencv肤色检测的实现示例
2020/12/21 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
网游商务专员求职信
2013/10/15 职场文书
留学推荐信英文范文
2015/03/26 职场文书
Python实现位图分割的效果
2021/11/20 Python