缺少pandoc中链接和其他类型元素的属性

时间:2015-04-26 09:20:48

标签: haskell pandoc

我正在尝试使用pandoc(使用hakyll,但这可能并不重要)以实现以下目标:

  1. 阅读降价文件。
  2. 将其转换为HTML。
  3. 为每个自动生成的链接添加target="_blank"属性。
  4. 问题是pandoc中的definition of Inline似乎只支持某些类型Inline的属性,例如SpanCode,而不是其他人,例如LinkImage

    这是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
    

2 个答案:

答案 0 :(得分:1)

图片和链接属性在Pandoc vs Multimarkdown Wiki页面上记录为“不在Pandoc中”的功能。

围绕此问题存在未解决的问题,例如Permit adding attributes to all Markdown elements #684。当我查看时,我没有看到附加的代码/拉取请求来实现它们。

如果您想为自动生成的链接添加target="_blank"属性,我认为您需要在此期间使用解决方法。 (请注意,如果使用非Pandoc HTML解析器对HTML进行后处理,则可能不需要使用原始字符串处理。)

答案 1 :(得分:0)

您应该可以使用pandoc filter执行此操作。

pandoc-attributes过滤器可以在markdownhtml中读取和写入属性