0

我正在使用 Insitiki 代码并尝试扩展 maruku 语法以生成一些自定义 html 标记。

例子:

|youtube 0FWPr6u8YF |

应按如下方式打印 html 代码:

<object data='http://www.youtube.com/v/01hcB2zmMqM' style='width:425px; height:350px;' type='application/x-shockwave-flash'><param name='movie' value='http://www.youtube.com/v/01hcB2zmMqM'/></object>

因此给了我一个 youtube 嵌入视频。

为了使它工作,我遵循了本教程http://maruku.rubyforge.org/extending/extensions.html并查看了 maruku 文档。

问题是,使用 maruku 方法:

context.push(doc.md_html("<p>raw html</p>"))

生成的 html 代码被转义,所以我得到的是逐字文本,而不是我想要的原始 html。

我尝试改变策略并使用类似的东西:

context.push(doc.md_el(:raw_html,[],:raw_html => "<p> raw raw raw </p>")

没用......我现在得到的是:REXML could not parse this XML/HTML:

在这个问题上一无所获,maruku 文档真的很薄(或者我真的不擅长搜索)......这家伙似乎有类似的问题纺织品和 maruku 问题

任何帮助表示赞赏。

4

1 回答 1

1

我似乎无法在 maruku 版本 0.6.0 下重现此错误。

context.push(doc.md_html("<p>raw html</p>"))

生成预期的结果,没有 html 转义。也许问题已经解决了?

Maruku 对您生成的 HTML 相当严格,所以它可能不喜欢您插入的实际代码,而不是<p>raw html</p>

以供将来参考,这就是我设法注册跨度扩展以替换{{var_name}}<span class='text_var' text_var='var_name'>&nbsp;</span>maruku 0.6.0 下的方法:

TextVar = /(\{\{)(.+)(\}\})/

MaRuKu::In::Markdown.register_span_extension(
  :chars => 123, #ASCII ordinal of {
  :regexp => TextVar,
  :handler => lambda do |doc, src, con|
    m = src.read_regexp3(TextVar)
    var_name = m.captures.compact[1]
    string = "<span class='text_var' text_var='#{var_name}'>&nbsp;</span>"
    con.push doc.md_html(string)
    #con.push doc.md_html("<p>raw html</p>")
    true
end)
于 2011-02-10T16:25:20.267 回答