2015-04-26 58 views
11

Próbuję użyć pandoc (z hakyll, ale prawdopodobnie nie jest to ważne) do osiągnięcia następujących celów:Brakujące atrybuty linków i innych rodzajów elementów pandoc

  1. odczytać plik markdown.
  2. Konwersja do HTML.
  3. Dodaj atrybut target="_blank" do każdego linku, który jest automatycznie tworzony.

Problemem jest to, że definition of Inline w pandoc wydają się potwierdzać atrybuty tylko dla niektórych rodzajów Inline s, na przykład dla Span i Code, a nie do innych, na przykład, na Link i Image.

Czy to jest arbitralne ograniczenie pandoc, czy też zostało zrobione celowo z jakiegoś powodu, którego nie rozumiem? Co więcej, czy istnieje sposób na osiągnięcie tego, co chcę, bez uciekania się do przetwarzania ciągów niskopoziomowych lub korzystania z konstruktora RawInline?


Oto 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 

Odpowiedz

1

i link atrybuty są udokumentowane jako cecha pozbawione Pandoc 'na stronie Pandoc vs Multimarkdown Wiki.

Są to otwarte problemy, takie jak Permit adding attributes to all Markdown elements #684. Nie widziałem załączonych żądań kodu/ciągnięcia, aby je zaimplementować, gdy je obejrzałem.

Jeśli chcesz dodać atrybut automatycznego generowania linków do atrybutu target="_blank", to w międzyczasie będziesz musiał zastosować obejście. (Zwróć uwagę, że nie musisz używać przetwarzania ciągłego łańcucha, jeśli przetwarzasz kod HTML za pomocą parsera HTML innego niż Pandoc.)