diff options
| -rw-r--r-- | scripts/mkimport | 84 | 
1 files changed, 78 insertions, 6 deletions
diff --git a/scripts/mkimport b/scripts/mkimport index ac8e8fa..43d76fd 100644 --- a/scripts/mkimport +++ b/scripts/mkimport @@ -138,6 +138,14 @@ local kind_tex       = 2  local kind_ignored   = 3  local kind_lualibs   = 4 +local kind_name = { +  [0] = "essential", +  [1] = "merged"   , +  [2] = "tex"      , +  [3] = "ignored"  , +  [4] = "lualibs"  , +} +  local imports = {    fontloader = { @@ -228,6 +236,18 @@ local derive_suffix = function (kind)    return ".lua"  end +local pfxlen +local strip_prefix = function (fname) +  if not pfxlen then pfxlen = #our_prefix end +  if #fname <= pfxlen + 2 then +    --- too short to accomodate prefix + basename +    return +  end +  if string.sub (fname, 1, pfxlen) == our_prefix then +    return string.sub (fname, pfxlen + 2) +  end +end +  local derive_fullname = function (cat, name, kind)    local tmp = prefixes[cat]    tmp = tmp and tmp .. "-" .. name or name @@ -240,6 +260,13 @@ local derive_ourname = function (name, kind)    return subdir, our_prefix .. "-" .. name .. suffix  end +local format_file_definition = function (def) +  return stringformat ("name = \"%s\", kind = \"%s\"", +                       def.name, +                       kind_name[def.kind] or def.kind) +      .. (def.ours and (", ours = \"" .. def.ours .. "\"") or "") +end +  local is_readable = function (f)    local fh = io.open (f, "r")    if fh then @@ -493,10 +520,7 @@ local search_defs = function (target)    return false  end -local search = function (arg) -  local target = arg[2] -  if not target then die "no filename given" end - +local search = function (target)    local look_for    --- pick a file    if lfs.isfile (target) then --- absolute path given @@ -518,15 +542,63 @@ local search = function (arg)    if not look_for then return end  ::found:: -  status ("found file %s at %s", target, look_for)    return look_for  end -local tell = function (target) +local find_matching_def = function (location) +  local basename = file.basename (location) +  if not basename then die ("corrupt path %s", location) end +  local barename = file.removesuffix (basename) +  local pfxless  = strip_prefix (barename) +  local kind     = file.suffix (pfxless) or "lua" +  for cat, defs in next, imports do +    for _, def in next, defs do +      local dname = def.name +      local dours = def.ours +      if dname == pfxless +      or dname == barename +      -- dname == basename -- can’t happen for lack of suffix +      or dours == pfxless +      or dours == barename +      then +        return cat, def +      end +    end +  end +  return false +end + +local describe = function (target, location) +  --- Map files to import definitions +  separator () +  status ("found file %s at %s", target, location) +  local cat, def = find_matching_def (location) +  if not cat or not def then +    die ("file %s not found in registry", location) +  end + +  local dname           = def.name +  local dkind           = def.kind +  local subdir, ourname = derive_ourname (dname, dkind) +  separator () +  status ("category       %s", cat) +  status ("kind           %s", kind_name[dkind]) +  status ("in Context     %s", derive_fullname (cat, def.name, def.kind)) +  status ("in Luaotfload  %s", ourname) +  separator () +  return 0 +end + +local tell = function (arg) +  local target = arg[2] +  if not target then die "no filename given" end +    local location = search (target)    if not location then      die ("file %s not found in any of the search locations", target)    end + +  return describe (target, location)  end  local help = function ()  | 
