使用Python來開發Markdown指令碼擴充的執行個體分享

來源:互聯網
上載者:User
關於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('
' % line[3:].strip())       elif flag_in:         if line.strip() and line[0]=='!':           block.append(line[1:])         else:           flag_in = False           block.append('
') 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]=='

!<': line = line.lstrip('

').replace('

', '')[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, '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' 

轉換成:

  def foo():  return 'foo' 

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.