【问题标题】:Is it possible to substitute a token in markdown?是否可以在降价中替换标记?
【发布时间】:2012-05-27 12:25:19
【问题描述】:

我在 Python 中使用正则表达式从 CoffeeScript 文件中提取使用 Markdown 格式化的 cmets。 CS 使用### 作为多行 cmets 的开始和结束标记。这与 markdown 格式冲突,因为 # 用于表示标头类。是否可以让 Markdown 将 % 或 ^ 或其他字符解释为头类标记?

【问题讨论】:

  • 这不只是在你的 Markdown 库中搜索 '#' 字符并用你选择的字符替换合适的字符吗?
  • 你是不是建议我修改 Python Markdown 源代码只是为了这个任务?
  • 你能想出一个替代方案吗?您似乎需要自己的特殊降价风格,为什么不去呢?
  • 我希望找到一些以编程方式覆盖库的默认行为的方法。我仍在挖掘源代码,看看这是否可能,但我还没有找到任何东西。
  • CoffeeScript 文件中的### 是否真的用于表示标题?如果没有,为什么不将它们过滤掉(通过正则表达式),然后再将 cmets 提供给 Markdown 库?

标签: python regex coffeescript markdown


【解决方案1】:

可以利用markdown.extensions.Extension 类覆盖Python Markdown 的许多元素。经过一番挖掘和试验后,我通过编写一个扩展通用 BlockParser 的自定义标头解析器来实现这一点。

基本上看起来像这样

class CustomHeaderParser( BlockParser )
    def run( params )
        # implementation

class CustomExtension( Extension )
    def extendMarkdown( self, md, md_globals )
        md.parser.blockprocessor.add( 'custom_header_parser', CustomHeaderParser(md.parser), '<hashheader' )
        md.registerExtension( self )


markdown_parser = markdown.Markdown( extensions=[ CaretHeaderExtension() ] )
markdown_parser.convert( markdown_text )

在研究到一半的时候,我还发现了另一种不太理想的解决方法。 Markdown 可以理解 Settext 和 atx 两种类型的 header 样式。 Setext 在文本下方的行中使用 ==== 和 ----- 来提供两个标题级别 h1 和 h2。

【讨论】:

  • setext 和 atx 代表什么?
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2016-10-18
相关资源
最近更新 更多