1
0
Fork 0
mirror of https://github.com/nix-community/nixvim.git synced 2025-11-08 19:46:06 +01:00
nixvim/docs/fix-links/filter.lua
Matt Sturgeon 6f8d8f7aee
docs/fix-links: generalise checks for links targeting .
- Strip trailing `?query` and/or `#anchor`
- Strip leading `./` recursively
- Check if what's left is `""` or `"."`

Any link that targets the current page should be left as-is (no-op).
2025-02-25 21:47:17 +00:00

48 lines
1.1 KiB
Lua

local len = pandoc.text.len
local sub = pandoc.text.sub
-- True if str starts with prefix
local function hasPrefix(prefix, str)
local pfxLen = len(prefix)
local strLen = len(str)
if pfxLen == strLen then
return prefix == str
end
if pfxLen < strLen then
return prefix == sub(str, 1, pfxLen)
end
return false
end
function Link(link)
local target = link.target
-- Check for targets on the same page
-- TODO: handle ../
local bareTarget, _ = target:gsub("[#?].*$", "")
-- strip leading ./
while hasPrefix("./", bareTarget) do
bareTarget = sub(bareTarget, 3)
end
-- No-op for targets on the same page
if bareTarget == "" or bareTarget == "." then
return nil
end
-- Relative links should target the github repo
if not hasPrefix("https://", target) then
link.target = githubUrl .. target
return link
end
-- Check for absolute links, pointing to the docs website
if docsUrl == target then
link.target = "."
return link
end
if hasPrefix(docsUrl, target) then
local i = len(docsUrl) + 1
link.target = sub(target, i)
return link
end
end