diff options
| author | Hans Hagen <pragma@wxs.nl> | 2020-07-20 11:09:33 +0200 | 
|---|---|---|
| committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2020-07-20 11:09:33 +0200 | 
| commit | 81095dd1bf20eb5f7e126adbdc8047f940504180 (patch) | |
| tree | c0cdf7b074e8a2d00c56fde09519e89f155bd425 /tex/context/base/mkiv/mlib-fio.lua | |
| parent | f1129626606384a7a55a21a83531f51f8b5dee25 (diff) | |
| download | context-81095dd1bf20eb5f7e126adbdc8047f940504180.tar.gz | |
2020-07-20 10:42:00
Diffstat (limited to 'tex/context/base/mkiv/mlib-fio.lua')
| -rw-r--r-- | tex/context/base/mkiv/mlib-fio.lua | 85 | 
1 files changed, 85 insertions, 0 deletions
| diff --git a/tex/context/base/mkiv/mlib-fio.lua b/tex/context/base/mkiv/mlib-fio.lua new file mode 100644 index 000000000..51c88eb22 --- /dev/null +++ b/tex/context/base/mkiv/mlib-fio.lua @@ -0,0 +1,85 @@ +if not modules then modules = { } end modules ['mlib-run'] = { +    version   = 1.001, +    comment   = "companion to mlib-ctx.mkiv", +    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL", +    copyright = "PRAGMA ADE / ConTeXt Development Team", +    license   = "see context related readme files", +} + +local concat = table.concat +local mplib  = mplib + +local report_logger = logs.reporter("metapost log") +local report_error  = logs.reporter("metapost error") + +local l, nl, dl = { }, 0, false +local t, nt, dt = { }, 0, false +local e, ne, de = { }, 0, false + +mplib.realtimelogging = false + +local function logger(target,str) +    if target == 1 then +        -- log +    elseif target == 2 or target == 3 then +        -- term +        if str == "\n" then +            mplib.realtimelogging = true +            if nl > 0 then +                report_logger(concat(l,"",1,nl)) +                nl, dl = 0, false +            elseif not dl then +                report_logger("") +                dl = true +            end +        else +            nl = nl + 1 +            l[nl] = str +        end +    elseif target == 4 then +        report_error(str) +    end +end + +local finders = { } +mplib.finders = finders -- also used in meta-lua.lua + +local new_instance = mplib.new + +local function validftype(ftype) +    if ftype == "mp" then +        return "mp" +    else +        return nil +    end +end + +finders.file = function(specification,name,mode,ftype) +    return resolvers.findfile(name,validftype(ftype)) +end + +local function i_finder(name,mode,ftype) -- fake message for mpost.map and metafun.mpvi +    local specification = url.hashed(name) +    local finder = finders[specification.scheme] or finders.file +    local found = finder(specification,name,mode,validftype(ftype)) +    return found +end + +local function o_finder(name,mode,ftype) +    return name +end + +o_finder = sandbox.register(o_finder,sandbox.filehandlerone,"mplib output finder") + +local function finder(name,mode,ftype) +    return (mode == "w" and o_finder or i_finder)(name,mode,validftype(ftype)) +end + +function mplib.new(specification) +    specification.find_file  = finder +    specification.run_logger = logger +    return new_instance(specification) +end + +mplib.finder = finder + | 
