pandoc-filters: change relative paths to absolute paths

时间:2018-02-01 18:35:47

标签: pandoc

How can I use pandoc-filters to transform relative links like [foo](act1.jpg) to absolute links [foo](pathtoact1/act1.jpg). I want to produce html5 document

Preferred with lua because its minimal footprint. Perhaps we could use this example for extracting document links info.

1 个答案:

答案 0 :(得分:1)

让我们一步一步地尝试。您已经找到了一个非常相关的示例,这意味着您大致了解如何使用lua过滤器,并且知道过滤器函数对同名元素起作用。您还知道您将要修改链接,以便您的过滤器看起来像这样:

function Link (element)
  -- fix link targets
  return element
end

我们还不知道链接element的样子,所以我们通过在页面中搜索链接来查看文档。经过一些搜索,我们找到了description for the Link constructor。文档中Somewhere表示pandoc也使用它来创建Link元素,因此理解这一点将回答我们的大部分问题。

可以使用构造函数中的参数名称访问元素的属性。要获得链接目标,我们只需要编写element.target

function Link (element)
  element.target = fix_path(element.target)
  return element
end

因此,让我们首先考虑修复路径需要做些什么。显然,我们只需要concatenate two strings,即。链接路径和路径前缀。

function fix_path (path)
  return 'path/prefix/' .. path
end

所以我们基本上完成了。但这只能修复链接。但是,文档中通常有其他路径。最值得注意的是指向图像的路径。快速搜索图像 reveals的文档,保存图像路径的属性名为src。我们可以使用它来过滤图像,因此完整的过滤器如下所示:

function fix_path (path)
  return 'you/path/prefix' .. path
end

function Link (element)
  element.target = fix_path(element.target)
  return element
end

function Image (element)
  element.src = fix_path(element.src)
  return element
end

Voilà,你的过滤器。