不合理的繁荣
  • 金沙手机APP
  • 使用语法突出显示干净地扩展Python Markdown

    2008年1月9日。
    Python(59), 标记(6)

    当我第一次开始在自己的博客上工作时,我开始工作的第一件事之一就是让我的条目突出显示代码语法。我甚至实施了一个乱写文章关于这个话题。

    挑战的关键正在扩展knardown,以具有表示应突出显示块的语法。我对我选择的语法感到非常舒服:

    
           
    def添加(一种那B.):返回一种+B.

    它没有任何花哨的东西,但它完成了工作。但是,我的第一次尝试延伸Python-Markdown以呈现语法正确是有点可怕的。它工作, 我是认真的工作好的,但是该死如果它没有蒙修Python-Markdown库虽然它做到了。

    这是一个不可原谅的罪在某些情况下,但Python-Markdown的实施者脱离了它的方式来使它成为可扩展...所以我感觉有点肮脏。因为我一直在工作我的博客软件,我决定现在是时候修复我以前的奇迹。

    让我们上班。

    第1步:获取新的标记副本

    我的旧副本的倒数瘫痪,在我的第一次修改后泪流满面,所以我必须得到一个新鲜的副本。你还想抓住一份pygments.当你在它的时候。

    Easy_install Pygments.

    第2步:写下该死的东西

    Markdown库中有一个全功能榜样(搜索脚注跳转到它),这是一个福音。每当混乱发现你时,请看看它以获取指导。

    现在我们需要制作一个新模块来放入我们的代码。它没有(而不应该是)在同一文件中markdown.py.py.。我命名了code.py.,因为我在名为的文件夹中标记。如果您在具有较少暗示名称的文件夹中将您的文件夹放置,则可能需要尝试更好的名称。

    您需要写的第一件事是预处理器。预处理器需要定义一个功能:

    def跑步(自己那线):# 做事返回线

    Markdown库将所有行拆分为“\ n”,然后为您提供结果。如果您想在文本上运行作为百波形,那么您必须自己重新加入:

    斑点=你“\ n“。加入(线)

    所以我们的班级将被称为codeblockpreprocessor.(吸引人,我知道),它会有这个跑步方法:

    def跑步(自己那线):纽约=[]看见=错误的郎=没有任何堵塞=[]为了线在线:如果线。以。。开始(“@@”)是真的和看见是错误的:郎=线。条(“@@”)看见=真的el线。以。。开始(“@@”)是真的和看见是真的:Lexer.=get_lexer_by_name.(郎)内容=“\ n“。加入(堵塞)突出显示=强调(内容那Lexer.那htmlformatter.())纽约。附加(“\ n%S.\ n“%(突出显示)))郎=没有任何堵塞=[]看见=错误的el看见是真的:堵塞。附加(线)别的:纽约。附加(线)返回纽约

    我们走过所有正在寻找开始到代码块的行(在行开头的符号(@)上由两个连续两个连续表示)。如果我们找到一个,我们会忽略文本,直到找到一个结算块(如果没有关闭块,那么打开块后的一切都将被丢弃......有点忘记,但不允许任何不期间的不期间)。然后我们使用Pygments在开始和结束中占用的代码,使用Lexer.在块的开口线上表示(例如@@ Ruby使用红宝石,和@@ html + django使用html + django.)。

    完成运行方法后,我们只需编写一些通用代码,很快我们就会对Python-Markdown进行干净的扩展。

    首先,我们需要在我们的文件顶部进行一些导入:

    进口关于从ddmarkup.进口啰嗦从pygments.进口强调从pygments.formatters.进口htmlformatter.从pygments.LEXERS.进口get_lexer_by_name.

    然后我们需要编写一个将用于控制我们新预处理的简单类。

    班级CodeExtension.:def扩展标记(自己那m):指数=m。预处理器。指数(啰嗦。html_block_preprocessor.)预处理器=codeblockpreprocessor.()预处理器。m=mm。预处理器。插(指数那预处理器)

    这与课程获得一样简单。您拍摄了Markdown类的实例,然后将CodeBlockPreprocessor的一个实例添加到其预处理器列表(在HTML_Block_Prepossor之前)。

    最后,我们需要使用我们的新预处理器调用Markdown来进行函数。

    def使成为(文本):m=啰嗦。啰嗦()CodeExtension.=CodeExtension.()CodeExtension.。扩展标记(m)m。来源=文本返回unicode.(m)

    我们创建了一个实例啰嗦,添加我们的扩展,然后渲染。如果我们想要我们可以让它从命令行接受参数:

    如果__名称__==.'__主要的__':打印使成为(文件(SYS.。argv.[1])。读())

    虽然它似乎是第一次修改Python-Markdown的努力,但它真的是一个精心设计的图书馆,以及设计图书馆的一个很好的例子,以便其他人可以清洁它们。在某个时候给出代码。

    嗨伙计。我是将要阿卡@lethain.。
    如果你想向我联系,那么我提供帮助的方式。如果您想从我这里收到电子邮件,请订阅我的每周时事通讯金沙手机APP。

    我写一个优雅的拼图。

    也,员工工程师。

    受欢迎的

    • 写五,然后合成:良好的工程战略很无聊。
    • 管理Codebase中的技术质量。
    • 致力于重要的事情。
    • 您的第一个90天作为CTO或VP工程。
    • Digg团队如何被剥夺。

    最近的

    • Mailbag:我们应该打电话给他们建筑师吗?
    • RSS饲料更换!接下来几天迁移博客。
    • sands金沙直营赌场
    • 工程造成措施。
    • 数字园艺在旺盛的草图。

    有关的

    • Pygments的赞同0.9
    • 使用没有Facebook中间件的Pyfacebook
    • 向Django应用程序添加社交书签
    • 语法用Markdown突出显示,以及Django的Automagick的捏
    • 从Django Datadump提取模型
    ©将金沙手机网larson 2021 标签 金沙手机APP rss. 关于