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