2012-02-28 156 views
3

我在寫評論系統。它必須有像stackoverflow的格式化系統。降低python降價能力

用戶可以使用一些內聯降價語法,如加粗斜體。我認爲我可以使用正則表達式替換來解決這個需求。

但還有一件事我必須做:通過給4個空格縮進用戶可以創建代碼塊。我認爲我不能通過使用正則表達式來做到這一點。或解析idents是太高級用法:)另外,通過使用正則表達式替換創建列表看起來像對我來說是不可能的。

  • 這樣做的最佳方法是什麼?
  • 是否有任何降價庫可以減少它的功能? (例如我會嘗試刪除表的支持)
  • 我是否應該寫我自己的解析器,我應該寫一個有限狀態機從劃痕?或者有沒有其他庫讓它更容易?

感謝您給予時間和您的回覆。

+0

當談到解析器生成器時,有很多選擇。你可以看看這個頁面,例如:http://wiki.python.org/moin/LanguageParsing – 2012-02-28 21:46:25

+0

我使用降價模塊(你可以得到它與easy_install的),發現它很容易添加更多的功能通過編寫一個自定義的擴展。 – Frg 2012-02-28 21:54:51

回答

8

我只是繼續前進,並使用python-markdown和猴子補丁。您可以在寫自己的def_block_parser()功能和替代默認的禁用某些功能降價:

from markdown import blockprocessors as bp 
def build_block_parser(md_instance, **kwargs): 
    """ Build the default block parser used by Markdown. """ 
    parser = bp.BlockParser(md_instance) 
    parser.blockprocessors['empty'] = bp.EmptyBlockProcessor(parser) 
    parser.blockprocessors['indent'] = bp.ListIndentProcessor(parser) 
    # parser.blockprocessors['code'] = bp.CodeBlockProcessor(parser) 
    parser.blockprocessors['hashheader'] = bp.HashHeaderProcessor(parser) 
    parser.blockprocessors['setextheader'] = bp.SetextHeaderProcessor(parser) 
    parser.blockprocessors['hr'] = bp.HRProcessor(parser) 
    parser.blockprocessors['olist'] = bp.OListProcessor(parser) 
    parser.blockprocessors['ulist'] = bp.UListProcessor(parser) 
    parser.blockprocessors['quote'] = bp.BlockQuoteProcessor(parser) 
    parser.blockprocessors['paragraph'] = bp.ParagraphProcessor(parser) 
    return parser 
bp.build_block_parser = build_block_parser 

請注意,我簡單地複製,並從blockprocessors.py文件粘貼默認build_block_processor()功能,調整了它一點點(在該模塊的所有名稱前面插入bp.),並將其添加到代碼塊處理器的行中。然後將生成的函數修補回模塊中。對於inlinepatterns.py,treeprocessor.py,preprocessor.pypostprocessor.py而言,類似的方法看起來是可行的,其中的每一種進行不同類型的處理。

而不是重寫設置單個解析器的函數,正如我在上面所做的那樣,您也可以用無所事事的子類自己修補解析器類本身,這些子類仍然會被調用但什麼都不會做。這可能是簡單的:

from markdown import blockprocessors as bp 
class NoProcessing(bp.BlockProcessor): 
    def test(self, parent, block): 
     return False # never invoke this processor 

bp.CodeBlockProcessor = NoProcessing 

可能有其他的降價庫,更明確地允許被禁用的功能,但python-markdown看起來是相當容易被破解。