diff options
| author | Volpeon <git@volpeon.ink> | 2021-05-28 17:51:16 +0200 |
|---|---|---|
| committer | Volpeon <git@volpeon.ink> | 2021-05-28 17:51:16 +0200 |
| commit | 65f299a8b89e8423a271b48116b178fb1d08bf31 (patch) | |
| tree | 064d6bc3b9fd27b7007353e179de7f578965ac52 /scripts | |
| parent | Use full URLs everywhere in ATOM feed (diff) | |
| download | volpeon.ink-65f299a8b89e8423a271b48116b178fb1d08bf31.tar.gz volpeon.ink-65f299a8b89e8423a271b48116b178fb1d08bf31.tar.bz2 volpeon.ink-65f299a8b89e8423a271b48116b178fb1d08bf31.zip | |
Use pandoc.path to compute URLs
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/metadata_filter.lua | 43 |
1 files changed, 5 insertions, 38 deletions
diff --git a/scripts/metadata_filter.lua b/scripts/metadata_filter.lua index 6c3817a..895139d 100644 --- a/scripts/metadata_filter.lua +++ b/scripts/metadata_filter.lua | |||
| @@ -1,3 +1,5 @@ | |||
| 1 | local path = require 'pandoc.path' | ||
| 2 | |||
| 1 | function format_date(date) | 3 | function format_date(date) |
| 2 | if not date then return date end | 4 | if not date then return date end |
| 3 | 5 | ||
| @@ -55,51 +57,16 @@ function group_by(l, field, insert) | |||
| 55 | return groups | 57 | return groups |
| 56 | end | 58 | end |
| 57 | 59 | ||
| 58 | function splitstr(input, sep) | ||
| 59 | sep = sep or "%s" | ||
| 60 | local t = {} | ||
| 61 | for str in input:gmatch("([^" .. sep .. "]+)") do table.insert(t, str) end | ||
| 62 | return t | ||
| 63 | end | ||
| 64 | |||
| 65 | function relative_to(dir, target) | ||
| 66 | dir = splitstr(dir, "/") | ||
| 67 | target = splitstr(target, "/") | ||
| 68 | |||
| 69 | local prefix = true | ||
| 70 | local path = "" | ||
| 71 | |||
| 72 | for i = 1, math.min(#dir, #target) do | ||
| 73 | local t = target[i] | ||
| 74 | if prefix then | ||
| 75 | if dir[i] ~= t then | ||
| 76 | prefix = false | ||
| 77 | path = "../" .. t | ||
| 78 | end | ||
| 79 | else | ||
| 80 | path = "../" .. path .. "/" .. t | ||
| 81 | end | ||
| 82 | end | ||
| 83 | |||
| 84 | if #dir < #target then | ||
| 85 | for i = #dir + 1, #target do path = path .. (path == "" and "" or "/") .. target[i] end | ||
| 86 | elseif #dir > #target then | ||
| 87 | for _ = #target + 1, #dir do path = "../" .. path end | ||
| 88 | end | ||
| 89 | |||
| 90 | return path | ||
| 91 | end | ||
| 92 | |||
| 93 | function make_absolute(rel, base) | 60 | function make_absolute(rel, base) |
| 94 | return rel:find("^/") and rel or base:gsub("^(.*)/.-$", "%1") .. "/" .. rel | 61 | return path.is_absolute(rel) and rel or path.join({ path.directory(base), rel }) |
| 95 | end | 62 | end |
| 96 | 63 | ||
| 97 | function resolve_url(site_url, ref_file, target_file) | 64 | function resolve_url(site_url, ref_file, target_file) |
| 98 | target_file = target_file:gsub("/index%.html$", "/") | 65 | target_file = target_file:gsub("/index%.html$", "/") |
| 99 | 66 | ||
| 100 | local ref_base_dir = ref_file:gsub("^(.*)/.-$", "%1") | 67 | local ref_base_dir = path.directory(ref_file) |
| 101 | local abs = target_file | 68 | local abs = target_file |
| 102 | local rel = relative_to(ref_base_dir, abs):gsub("/index%.html$", "/") | 69 | local rel = path.make_relative(abs, ref_base_dir, true) |
| 103 | 70 | ||
| 104 | return { abs = abs, rel = rel, full = (site_url .. abs) } | 71 | return { abs = abs, rel = rel, full = (site_url .. abs) } |
| 105 | end | 72 | end |
