Расширяя MaRuKu для генерации необработанных HTML-тегов, md_html экранирует HTML - PullRequest
0 голосов
/ 09 августа 2010

Я работаю в коде 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 очень тонкие (или я очень плохо разбираюсь) ... кажется, у этого парня похожая проблема проблема текстиля и маруку

Любая помощь приветствуется.

1 Ответ

1 голос
/ 10 февраля 2011

Я не могу воспроизвести эту ошибку в 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)
...