summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/context/manuals/reference/en/pr-allfiles.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/context/manuals/reference/en/pr-allfiles.lua')
-rw-r--r--Master/texmf-dist/doc/context/manuals/reference/en/pr-allfiles.lua76
1 files changed, 76 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/context/manuals/reference/en/pr-allfiles.lua b/Master/texmf-dist/doc/context/manuals/reference/en/pr-allfiles.lua
new file mode 100644
index 00000000000..010c981e1b1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/manuals/reference/en/pr-allfiles.lua
@@ -0,0 +1,76 @@
+local function file2table(f, dir, t)
+ local ff = dir .. "/" .. f
+ if lfs.attributes(ff, "mode") ~= "file" then
+ return
+ end
+ local b = file.removesuffix(f)
+ t[b] = t[b] or {}
+ t[b].suffixes = t[b].suffixes or {}
+ table.insert(t[b].suffixes, file.suffix(f))
+ ff = io.open(ff)
+ local head = ff:read(500)
+ ff:close()
+ t[b].title = t[b].title or head:match(".+\n%%D%s+title=(.-),.-\n.+")
+ t[b].subtitle = t[b].subtitle or
+ head:match(".+\n%%D%s+subtitle=(.-),.-\n.+")
+ t[b].comment = t[b].comment or
+ head:match('.+\n%s*comment%s*=%s*"(.-)",\n.+') or
+ head:match('.+\n%s*comment%s*:%s*(.-)\n.+')
+end
+
+local function suffix_sort(a, b)
+ if a == "tex" then
+ return true
+ elseif b == "tex" then
+ return false
+ else
+ return a < b
+ end
+end
+
+local function list_files(dir)
+ local t, tt = {}, {}
+ for entry in lfs.dir(dir) do
+ file2table(entry, dir, t)
+ end
+ for k, v in pairs(t) do
+ tt[#tt + 1] = v
+ tt[#tt].name = k
+ table.sort(tt[#tt].suffixes, suffix_sort)
+ tt[#tt].main_suffix = tt[#tt].suffixes[1]
+ table.remove(tt[#tt].suffixes, 1)
+ end
+ table.sort(tt, function (a, b) return a.name < b.name end)
+ for _, v in ipairs(tt) do
+ context.contextfile({v.name .. "." .. v.main_suffix},
+ {title="{" .. (v.title or v.comment or "") .. "}",
+ subtitle="{" .. (v.subtitle or "") .. "}",
+ plusfiles="{" ..
+ table.concat(v.suffixes, ",")
+ .. "}"})
+ end
+end
+
+local function scan_dir(dir)
+ local title = string.format("Files in {\\tt %s}",
+ dir:match("^.+/(.-/.-/.-)$"))
+ context.startsection({title = title})
+ context.begingroup()
+ context.switchtobodyfont({"9pt"})
+ context.starttabulate({"|lT|l|p|"})
+ context([[ \NC \rm\bf filename(s) \NC title \NC subtitle \NC \FR ]])
+ list_files(dir)
+ context.stoptabulate()
+ context.endgroup()
+ context.stopsection()
+end
+
+local root = file.dirname(file.dirname(resolvers.findfile"context.mkiv"))
+for entry in lfs.dir(root) do
+ if entry:match("^[^.]") then
+ local dir = root .. "/" .. entry
+ if file.basename(dir) == "base" then -- the other sub-dirs later...
+ scan_dir(dir)
+ end
+ end
+end