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).
This commit is contained in:
Matt Sturgeon 2025-02-24 13:39:39 +00:00
parent 53f9d242ff
commit 6f8d8f7aee
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299

View file

@ -16,16 +16,20 @@ end
function Link(link)
local target = link.target
-- Check for relative links
-- Check for targets on the same page
-- TODO: handle ../
while hasPrefix("./", target) do
-- strip leading ./
target = sub(target, 3)
local bareTarget, _ = target:gsub("[#?].*$", "")
-- strip leading ./
while hasPrefix("./", bareTarget) do
bareTarget = sub(bareTarget, 3)
end
if hasPrefix("#", target) then
-- No-op for anchor targets on the same page
-- 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