Отсутствующие атрибуты для ссылок и других типов элементов в pandoc

Я пытаюсь использовать pandochakyll, но это, вероятно, не важно) для достижения следующего:

  • Прочитайте файл отметки.
  • Преобразуйте его в HTML.
  • Добавьте атрибут target="_blank" к каждой автоматически создаваемой ссылке.

Проблема заключается в том, что определение Inline в pandoc похоже, поддерживает атрибуты только для некоторых типов Inline s, например, для 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.

Есть открытые проблемы вокруг этого, например Разрешить добавлять атрибуты ко всем элементам Markdown # 684. Я не видел прикрепленных запросов кода /pull для их реализации, когда смотрел.

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

Ответ 2

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

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