core-sys.lmt /size: 3974 b    last modification: 2024-01-16 09:02
1if not modules then modules = { } end modules ['core-sys'] = {
2    version   = 1.001,
3    comment   = "companion to core-sys.mkiv",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files"
7}
8
9local lower, format, gsub = string.lower, string.format, string.gsub
10local suffixonly, basename, removesuffix = file.suffix, file.basename, file.removesuffix
11
12local environment  = environment
13local context      = context
14local implement    = interfaces.implement
15
16local report_files = logs.reporter("system","files")
17
18function environment.initializefilenames()
19
20    local arguments      = environment.arguments
21
22    local jobname        = arguments.jobname
23    local fulljobname    = arguments.fulljobname
24    local inputfilename  = arguments.input
25
26    if not fulljobname then
27        fulljobname = inputfilename or tex.jobname
28    end
29    if not inputfilename then
30        inputfilename = fulljobname
31    end
32    if not jobname then
33        jobname = removesuffix(fulljobname)
34    end
35
36    local inputfilebase  = basename(inputfilename)
37    local outputfilename = type(arguments.result) =="string" and arguments.result or removesuffix(fulljobname)
38
39--     local inputfilename  = suffixonly(inputfilename) == "tex" and removesuffix(inputfilename) or inputfilename or ""
40
41    local filename       = fulljobname
42    local suffix         = suffixonly(filename)
43
44    local filename       = ctxrunner.resolve(filename) -- in case we're prepped
45
46    local jobfilename    = jobname -- alias
47    local jobfilebase    = basename(jobfilename)
48
49 -- jobfilename          = gsub(jobfilename,  "^./","")
50 -- inputfilename        = gsub(inputfilename,"^./","")
51
52    environment.jobfilefullname   = fulljobname
53    environment.jobfilename       = jobfilebase
54    environment.jobfilesuffix     = lower(suffixonly(jobfilebase))
55
56    environment.inputfilename     = inputfilename -- so here we keep e.g. ./ or explicit paths
57    environment.inputfilebarename = removesuffix(inputfilebase)
58    environment.inputfilesuffix   = lower(suffixonly(inputfilebase))
59
60    environment.outputfilename    = outputfilename or environment.inputfilebarename or ""
61
62    environment.filename          = filename
63    environment.suffix            = suffix
64
65 -- if tex then
66 --     tex.jobname = jobfilename
67 -- end
68
69    report_files("jobname %a, input %a, result %a",jobfilename,inputfilename,outputfilename)
70
71    function environment.initializefilenames() end
72end
73
74-- we could set a macro (but will that work when we're expanding? needs testing!)
75
76implement { name = "operatingsystem",     public = true, actions = function() context(os.platform)                     end }
77implement { name = "jobfilefullname",     public = true, actions = function() context(environment.jobfilefullname)     end }
78implement { name = "jobfilename",         public = true, actions = function() context(environment.jobfilename)         end }
79implement { name = "jobfilesuffix",       public = true, actions = function() context(environment.jobfilesuffix)       end }
80implement { name = "inputfilebarename",   public = true, actions = function() context(environment.inputfilebarename)   end }
81implement { name = "inputfilerealsuffix", public = true, actions = function() context(environment.inputfilerealsuffix) end }
82implement { name = "inputfilesuffix",     public = true, actions = function() context(environment.inputfilesuffix)     end }
83implement { name = "inputfilename",       public = true, actions = function() context(environment.inputfilename)       end }
84implement { name = "outputfilename",      public = true, actions = function() context(environment.outputfilename)      end }
85
86implement {
87    name      = "systemlog",
88    arguments = "3 strings",
89    public    = true,
90    protected = true,
91    actions   = function(whereto,category,text)
92        logs.system(whereto,"context",tex.jobname,category,text)
93    end,
94}
95