Inclinación (kramdown) que impide el procesamiento de ERB cuando se procesa la rebaja

Estoy construyendo un sitio web conIntermediario. Estoy almacenando mucha información en archivos de datos, ya que voy a usar la misma información en varias páginas. (Los parciales no funcionarían para mí, ya que el mismo texto de los datos puede usarse con diferentes etiquetas HTML o modificarse ligeramente para diferentes páginas).

Quiero escribirrebaja en archivos de datos y luego úsalodentro de las plantillas HAML para páginas específicas Cuando intento crear enlaces relativos a otras páginas mientras uso una referencia a otro archivo de datos, el HTML resultante no es lo que debería ser.

data/pages.yaml:

pageA:
  link: /it-can-change-A.html
  name: PageA name
  info: Some other related info

pageB:
  link: /subject-to-change-B.html
  name: PageB name
  info: Some other related info

pageC:
  link: /some-C.html
  name: PageC name
  info: Some other related info

data/faq.yaml:

testcase: Some text with [internal link to page A](ref.pageA). And *another* [internal reference](ref.pageB).

verbatim: Some text with [internal link to page A](/it-can-change-A.html). And *another* [internal reference](/subject-to-change-B.html).

Al intentar encontrar la causa raíz de este problema, he probado varias formas de "extraer" enlaces relativos del archivo de datos y ponerlos en la plantilla HAML. Mi objetivo final es hacer que el caso (5) funcione.

Comenté los resultados de cada código directamente en mitest.html.md.erb.haml:

Tenga en cuenta que HAML debe procesarse antes de ERB, por lo que .haml debe ser la última extensión. Si las extensiones .erb y .haml cambian de lugar, los casos (3) y (4) a continuación producirán una salida diferente.

/ Pure ERB; ERB is processed before markdown => :)
(1) This is just some text with [ERB link to first page](<%= data.pages.pageA.link %>) and *another* one [to second page](<%= data.pages.pageB.link %>). 

/ ERB inside HAML tag; markdown is not processed => :|
.haml
    (2) This is just some text with [ERB link to first page](<%= data.pages.pageA.link %>) and *another* one [to second page](<%= data.pages.pageB.link %>). 

/ Helper used WITHOUT a tag; ERB is processed before markdown => :)
(3)
= refonly(data.faq.testcase) 

/ Helper used WITH a tag; ERB is processed, but markdown is not => :|
.question1
    (4)
    = refonly(data.faq.testcase)

/ "Tilt-powered" helper used WITHIN a tag; trying to process markdown with Tilt results in "%=%20data.pages.pageA.link%20%" links. Expected behavior: ERB should be processed first, then Tilt should process markdown with actual relative links being the same as in .question1 above => :(
.question2
    (5)
    = mymarkdown(data.faq.testcase)

/ Helper with Tilt to process verbatim text; markdown is processed correctly => :)
.question3
    (6)
    = justmarkdown(data.faq.verbatim)

Ayudantes utilizados en la plantilla anterior:

def refonly(text)
    text.gsub(/ref\.(page[A-Z])/,"<\%= data.pages.\\1.link %>")
end

def mymarkdown(text)
    newtext = refonly(text)
    Tilt['markdown'].new(context: @app) { newtext }.render
end

def justmarkdown(text)
    Tilt['markdown'].new(context: @app) { text }.render
end

El propósito del primer ayudante es cambiar la referencia fácil de escribir dentro del archivo de datos (ref.pageName) a código ERB, igual que el utilizado en (1). El propósito del segundo ayudante es hacer una rebaja en el caso donde.md la extensión de plantilla en sí misma no puede procesarla automáticamente El propósito del último ayudante es mostrar que Tilt puede representar texto textualmente correctamente en (6), pero cuando acepta el mismo texto como variable, no puede proporcionar la misma salida en (5).

A. Cuando uso "puro ERB" (1), orefonly ayudante sin etiqueta HAML (3), la salida es la esperada: la ruta relativa se obtiene del archivo de datos y luego el descuento se procesa por el motor de descuento predeterminado (kramdown) gracias a.md extensión de plantilla

B. Cuando trato de usar la etiqueta HAML, directamente con el código ERB (2) o conrefonly helper (4), ERB se procesa correctamente y se coloca en la salida. Sin embargo, la rebaja no se procesa automáticamente por algún motivo, aunque.md la extensión se usa directamente después.html, por lo tanto, la rebaja debe procesarse después de que los bits HAML y ERB hayan finalizado.

C. Con el fin de "forzar" el renderizado de rebajas, estoy usando Tilt en mi segundo ayudante. Mi intención era pasar el texto devuelto porrefonly (que tiene la sintaxis correcta de reducción con el enlace deseado extraído de los datos) a Tilt. Mi expectativa era que Tilt simplemente representaría el texto literal que se le pasó en (5), tal como lo hace en (6). En cambio, el enlace resultante apunta a%=%20data.pages.pageA.link%20%, que parece ser un código HTML para mostrar el código ERB textualmente. Entonces, parece pasarnewtext variable a Inclinación de alguna manera detiene el procesamiento ERB y el código ERB se pasa directamente a Markdown.

Miprimario la pregunta es: ¿cómo puedo asegurarme de que Tilt obtenga el texto adecuado con un enlace relativo (como lo devuelverefonly) y produce la salida esperada en (5)?

Misecundario pregunta: ¿por qué Middleman no procesa automáticamente la rebaja en los casos descritos en B.?

Supongo que la respuesta a mi pregunta principal requiere conocimiento de Ruby and Tilt, mientras que la respuesta a mi pregunta secundaria requiere conocimiento de Middleman. Si bien la solución a mi problema principal sería excelente, la respuesta a la pregunta secundaria podría permitir omitir Tilt por completo y, por lo tanto, resolver el problema de una manera más fácil.

Respuestas a la pregunta(1)

Su respuesta a la pregunta