2015-04-26 1 views
11

Я пытаюсь использовать pandochakyll, но это, вероятно, не важно), чтобы достичь следующего:Недостающие атрибуты для ссылок и других типов элементов в pandoc

  1. Читать файл уценки.
  2. Преобразуйте его в HTML.
  3. Добавить атрибут target="_blank" в каждую автоматически создаваемую ссылку.

Проблема заключается в том, что definition of Inline в pandoc, кажется, поддерживает атрибуты только для некоторых типов Inline с, например, для Span и Code, а не для других, например, для Link и Image.

Это произвольное ограничение pandoc, или оно было сделано специально по какой-то причине, что я не понимаю? Кроме того, есть ли способ достичь того, что я хочу, не прибегая к низкоуровневой обработке строк или к использованию конструктора RawInline?


Вот MWE:

import Text.Pandoc 
import Text.Pandoc.Walk 

fixLinks :: Pandoc -> Pandoc 
fixLinks = walk fixLink 
    where fixLink (Link inlines (url, title)) = 
      Link inlines (url, "I want to add a target=_blank to this link!") 
     fixLink inline = inline 

main = do 
    let md = "This is a link to [StackOverflow](http://stackoverflow.com/)." 
    (putStrLn . writeHtmlString def . fixLinks . readMarkdown def) md 

ответ

1

изображение и ссылка атрибуты описаны как функция 'не в Pandoc' на Pandoc vs Multimarkdown Wiki странице.

Есть открытые проблемы вокруг этого, например Permit adding attributes to all Markdown elements #684. Я не видел приложенных запросов кода/pull для их реализации, когда смотрел.

Если вы хотите добавить атрибут target="_blank" к автогенерированным ссылкам, я думаю, вам нужно использовать обходной путь, тем временем. (И обратите внимание, что вам может не понадобиться использовать необработанную строковую обработку, если вы отправляете HTML-код с помощью анализатора HTML без пардока.)

0

Вы должны иметь возможность сделать это с помощью pandoc filter.

pandoc-attributes фильтр может читать и писать атрибуты как markdown и html