65 lines
1.9 KiB
Lua
65 lines
1.9 KiB
Lua
--[[
|
|
|
|
This file defines a few helper functions, in particular with respect to pandoc.
|
|
|
|
--]]
|
|
|
|
local Options = require("acronyms_options")
|
|
|
|
|
|
local Helpers = {}
|
|
|
|
|
|
-- Helper function to determine pandoc's version.
|
|
-- `version` must be a table of numbers, e.g., `{2, 17, 0, 1}`
|
|
function Helpers.isAtLeastVersion(version)
|
|
-- `PANDOC_VERSION` exists since 2.1, but we never know...
|
|
if PANDOC_VERSION == nil then
|
|
return false
|
|
end
|
|
-- Loop up over the components
|
|
-- e.g., `2.17.0.1` => [0]=2, [1]=17, [2]=0, [3]=1
|
|
for k, v in ipairs(version) do
|
|
if PANDOC_VERSION[k] == nil or PANDOC_VERSION[k] < version[k] then
|
|
-- Examples: 2.17 < 2.17.0.1, or 2.16 < 2.17
|
|
return false
|
|
elseif PANDOC_VERSION[k] > version[k] then
|
|
-- Example: 2.17 > 2.16.2 (we do not need to check the next!)
|
|
return true
|
|
end
|
|
end
|
|
-- At this point, all components are equal
|
|
return true
|
|
end
|
|
|
|
|
|
-- Helper function to determine whether a metadata field is a list.
|
|
function Helpers.isMetaList(field)
|
|
-- We want to know whether we have multiple values (MetaList).
|
|
-- Pandoc 2.17 introduced a compatibility-breaking change for this:
|
|
-- the `.tag` is no longer present in >= 2.17 ;
|
|
-- the `pandoc.utils.type` function is only available in >= 2.17
|
|
if Helpers.isAtLeastVersion({2, 17}) then
|
|
-- Use the new `pandoc.utils.type` function
|
|
return pandoc.utils.type(field) == "List"
|
|
else
|
|
-- Use the (old) `.tag` type attribute
|
|
return field.t == "MetaList"
|
|
end
|
|
end
|
|
|
|
|
|
-- Helper function to generate the ID (identifier) from an acronym key.
|
|
-- The ID can be used for, e.g., links.
|
|
function Helpers.key_to_id(key)
|
|
return Options["id_prefix"] .. key
|
|
end
|
|
|
|
|
|
-- Similar helper but for the link itself (based on the ID).
|
|
function Helpers.key_to_link(key)
|
|
return "#" .. Helpers.key_to_id(key)
|
|
end
|
|
|
|
|
|
return Helpers
|