summaryrefslogtreecommitdiff
path: root/tex/context/base/grph-inc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/grph-inc.lua')
-rw-r--r--tex/context/base/grph-inc.lua132
1 files changed, 74 insertions, 58 deletions
diff --git a/tex/context/base/grph-inc.lua b/tex/context/base/grph-inc.lua
index 8b81099a5..c8ad5995e 100644
--- a/tex/context/base/grph-inc.lua
+++ b/tex/context/base/grph-inc.lua
@@ -6,6 +6,8 @@ if not modules then modules = { } end modules ['grph-inc'] = {
license = "see context related readme files"
}
+-- figures -> managers.figures
+
-- lowercase types
-- mps tex tmp svg
-- partly qualified
@@ -42,9 +44,11 @@ local texsprint, texbox = tex.sprint, tex.box
local contains = table.contains
local concat = table.concat
local todimen = string.todimen
+local settings_to_array = utilities.parsers.settings_to_array
-local ctxcatcodes = tex.ctxcatcodes
-local variables = interfaces.variables
+local ctxcatcodes = tex.ctxcatcodes
+local variables = interfaces.variables
+local codeinjections = backends.codeinjections
local trace_figures = false trackers.register("figures.locating", function(v) trace_figures = v end)
local trace_bases = false trackers.register("figures.bases", function(v) trace_bases = v end)
@@ -56,6 +60,8 @@ local report_graphics = logs.new("graphics")
--- some extra img functions ---
+local img = img
+
local imgkeys = img.keys()
function img.totable(imgtable)
@@ -90,14 +96,17 @@ function img.check_size(size)
end
end
----
+--- we can consider an grph-ini file
figures = figures or { }
+local figures = figures
+
figures.loaded = figures.loaded or { }
figures.used = figures.used or { }
figures.found = figures.found or { }
figures.suffixes = figures.suffixes or { }
figures.patterns = figures.patterns or { }
+
figures.boxnumber = figures.boxnumber or 0
figures.defaultsearch = true
figures.defaultwidth = 0
@@ -200,7 +209,7 @@ function figures.setpaths(locationset,pathlist)
end
if h[iv["global"]] then
-- for s in gmatch(pathlist,",* *([^,]+)") do
- local list = aux.settings_to_array(pathlist)
+ local list = settings_to_array(pathlist)
for i=1,#list do
local s = list[i]
if not contains(t,s) then
@@ -340,7 +349,7 @@ local function register(askedname,specification)
if not newformat or newformat == "" then
newformat = defaultformat
end
- local converter = (newformat ~= format) and figures.converters[format]
+ local converter = (newformat ~= format) and converters[format]
if trace_conversion then
report_graphics("checking conversion of '%s': old format '%s', new format '%s', conversion '%s'",
askedname,format,newformat,conversion or "default")
@@ -641,18 +650,25 @@ end
-- -- -- plugins -- -- --
-figures.existers = figures.existers or { }
-figures.checkers = figures.checkers or { }
-figures.includers = figures.includers or { }
-figures.converters = figures.converters or { }
+figures.existers = figures.existers or { }
+local existers = figures.existers
+
+figures.checkers = figures.checkers or { }
+local checkers = figures.checkers
+
+figures.includers = figures.includers or { }
+local includers = figures.includers
+
+figures.converters = figures.converters or { }
+local converters = figures.converters
+
figures.identifiers = figures.identifiers or { }
-figures.programs = figures.programs or { }
+local identifiers = figures.identifiers
-figures.identifiers.list = {
- figures.identifiers.default
-}
+figures.programs = figures.programs or { }
+programs = figures.programs
-function figures.identifiers.default(data)
+function identifiers.default(data)
local dr, du, ds = data.request, data.used, data.status
local l = locate(dr)
local foundname = l.foundname
@@ -669,7 +685,7 @@ end
function figures.identify(data)
data = data or figures.current()
- local list = figures.identifiers.list
+ local list = identifiers.list -- defined at the end
for i=1,#list do
local identifier = list[i]
data = identifier(data)
@@ -680,17 +696,17 @@ function figures.identify(data)
return data
end
function figures.exists(askedname,format,resolve)
- return (figures.existers[format] or figures.existers.generic)(askedname,resolve)
+ return (existers[format] or existers.generic)(askedname,resolve)
end
function figures.check(data)
data = data or figures.current()
local dr, du, ds = data.request, data.used, data.status
- return (figures.checkers[ds.format] or figures.checkers.generic)(data)
+ return (checkers[ds.format] or checkers.generic)(data)
end
function figures.include(data)
data = data or figures.current()
local dr, du, ds = data.request, data.used, data.status
- return (figures.includers[ds.format] or figures.includers.generic)(data)
+ return (includers[ds.format] or includers.generic)(data)
end
function figures.scale(data) -- will become lua code
texsprint(ctxcatcodes,"\\doscalefigure")
@@ -727,7 +743,7 @@ end
-- -- -- generic -- -- --
-function figures.existers.generic(askedname,resolve)
+function existers.generic(askedname,resolve)
-- not findbinfile
local result
if lfs.isfile(askedname) then
@@ -745,7 +761,7 @@ function figures.existers.generic(askedname,resolve)
end
return result
end
-function figures.checkers.generic(data)
+function checkers.generic(data)
local dr, du, ds = data.request, data.used, data.status
local name, page, size, color = du.fullname or "unknown generic", du.page or dr.page, dr.size or "crop", dr.color or "natural"
local conversion = dr.conversion
@@ -756,9 +772,9 @@ function figures.checkers.generic(data)
local figure = figures.loaded[hash]
if figure == nil then
figure = img.new { filename = name, page = page, pagebox = dr.size }
- backends.codeinjections.setfigurecolorspace(data,figure)
+ codeinjections.setfigurecolorspace(data,figure)
figure = (figure and img.scan(figure)) or false
- local f, d = backends.codeinjections.setfigurealternative(data,figure)
+ local f, d = codeinjections.setfigurealternative(data,figure)
figure, data = f or figure, d or data
figures.loaded[hash] = figure
if trace_conversion then
@@ -778,7 +794,7 @@ function figures.checkers.generic(data)
end
return data
end
-function figures.includers.generic(data)
+function includers.generic(data)
local dr, du, ds = data.request, data.used, data.status
-- here we set the 'natural dimensions'
dr.width = du.width
@@ -807,13 +823,13 @@ end
-- -- -- nongeneric -- -- --
-function figures.checkers.nongeneric(data,command)
+function checkers.nongeneric(data,command)
local dr, du, ds = data.request, data.used, data.status
local name = du.fullname or "unknown nongeneric"
local hash = name
if dr.object then
-- hm, bugged
- if not jobobjects.get("FIG::"..hash) then
+ if not job.objects.get("FIG::"..hash) then
texsprint(ctxcatcodes,command)
texsprint(ctxcatcodes,format("\\setobject{FIG}{%s}\\vbox{\\box\\foundexternalfigure}",hash))
end
@@ -823,13 +839,13 @@ function figures.checkers.nongeneric(data,command)
end
return data
end
-function figures.includers.nongeneric(data)
+function includers.nongeneric(data)
return data
end
-- -- -- mov -- -- --
-function figures.checkers.mov(data)
+function checkers.mov(data)
local dr, du, ds = data.request, data.used, data.status
local width = todimen(dr.width or figures.defaultwidth)
local height = todimen(dr.height or figures.defaultheight)
@@ -842,7 +858,7 @@ function figures.checkers.mov(data)
-- we need to push the node.write in between ... we could make a shared helper for this
context.startfoundexternalfigure(width .. "sp",height .. "sp")
context(function()
- backends.codeinjections.insertmovie {
+ nodeinjections.insertmovie {
width = width,
height = height,
factor = number.dimenfactors.bp,
@@ -857,7 +873,7 @@ function figures.checkers.mov(data)
return data
end
-figures.includers.mov = figures.includers.nongeneric
+includers.mov = includers.nongeneric
-- -- -- mps -- -- --
@@ -870,45 +886,45 @@ local function internal(askedname)
end
end
-function figures.existers.mps(askedname)
+function existers.mps(askedname)
local mprun, mpnum = internal(askedname)
if mpnum then
return askedname
else
- return figures.existers.generic(askedname)
+ return existers.generic(askedname)
end
end
-function figures.checkers.mps(data)
+function checkers.mps(data)
local mprun, mpnum = internal(data.used.fullname)
if mpnum then
- return figures.checkers.nongeneric(data,format("\\docheckfiguremprun{%s}{%s}",mprun,mpnum))
+ return checkers.nongeneric(data,format("\\docheckfiguremprun{%s}{%s}",mprun,mpnum))
else
- return figures.checkers.nongeneric(data,format("\\docheckfiguremps{%s}",data.used.fullname))
+ return checkers.nongeneric(data,format("\\docheckfiguremps{%s}",data.used.fullname))
end
end
-figures.includers.mps = figures.includers.nongeneric
+includers.mps = includers.nongeneric
-- -- -- buffer -- -- --
-function figures.existers.buffer(askedname)
+function existers.buffer(askedname)
askedname = file.nameonly(askedname)
return buffers.exists(askedname) and askedname
end
-function figures.checkers.buffer(data)
- return figures.checkers.nongeneric(data,format("\\docheckfigurebuffer{%s}", file.nameonly(data.used.fullname)))
+function checkers.buffer(data)
+ return checkers.nongeneric(data,format("\\docheckfigurebuffer{%s}", file.nameonly(data.used.fullname)))
end
-figures.includers.buffers = figures.includers.nongeneric
+includers.buffers = includers.nongeneric
-- -- -- tex -- -- --
-function figures.existers.tex(askedname)
+function existers.tex(askedname)
askedname = resolvers.find_file(askedname)
return (askedname ~= "" and askedname) or false
end
-function figures.checkers.tex(data)
- return figures.checkers.nongeneric(data,format("\\docheckfiguretex{%s}", data.used.fullname))
+function checkers.tex(data)
+ return checkers.nongeneric(data,format("\\docheckfiguretex{%s}", data.used.fullname))
end
-figures.includers.tex = figures.includers.nongeneric
+includers.tex = includers.nongeneric
-- -- -- converters -- -- --
@@ -928,9 +944,9 @@ end
-- -- -- eps -- -- --
local epsconverter = { }
-figures.converters.eps = epsconverter
+converters.eps = epsconverter
-figures.programs.gs = {
+programs.gs = {
options = {
"-dAutoRotatePages=/None",
"-dPDFSETTINGS=/prepress",
@@ -940,7 +956,7 @@ figures.programs.gs = {
}
function epsconverter.pdf(oldname,newname)
- local gs = figures.programs.gs
+ local gs = programs.gs
runprogram (
'%s -q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH %s -sOutputFile="%s" "%s" -c quit',
gs.command, makeoptions(gs.options), newname, oldname
@@ -952,12 +968,12 @@ epsconverter.default = epsconverter.pdf
-- -- -- svg -- -- --
local svgconverter = { }
-figures.converters.svg = svgconverter
-figures.converters.svgz = svgconverter
+converters.svg = svgconverter
+converters.svgz = svgconverter
-- inkscape on windows only works with complete paths
-figures.programs.inkscape = {
+programs.inkscape = {
options = {
"--export-dpi=600"
},
@@ -965,7 +981,7 @@ figures.programs.inkscape = {
}
function svgconverter.pdf(oldname,newname)
- local inkscape = figures.programs.inkscape
+ local inkscape = programs.inkscape
runprogram (
'%s "%s" --export-pdf="%s" %s',
inkscape.command, oldname, newname, makeoptions(inkscape.options)
@@ -973,7 +989,7 @@ function svgconverter.pdf(oldname,newname)
end
function svgconverter.png(oldname,newname)
- local inkscape = figures.programs.inkscape
+ local inkscape = programs.inkscape
runprogram (
'%s "%s" --export-png="%s" %s',
inkscape.command, oldname, newname, makeoptions(inkscape.options)
@@ -985,15 +1001,15 @@ svgconverter.default = svgconverter.pdf
-- -- -- gif -- -- --
local gifconverter = { }
-figures.converters.gif = gifconverter
+converters.gif = gifconverter
-figures.programs.convert = {
+programs.convert = {
command = "convert" -- imagemagick
-- command = "gm convert" -- graphicmagick
}
function gifconverter.pdf(oldname,newname)
- local convert = figures.programs.convert
+ local convert = programs.convert
runprogram (
"%s %s %s %s",
convert.command, makeoptions(convert.options), oldname, newname
@@ -1099,7 +1115,7 @@ function bases.locate(askedlabel)
return false
end
-function figures.identifiers.base(data)
+function identifiers.base(data)
if bases.enabled then
local dr, du, ds = data.request, data.used, data.status
local fbl = bases.locate(dr.name or dr.label)
@@ -1116,9 +1132,9 @@ function figures.identifiers.base(data)
return data
end
-figures.identifiers.list = {
- figures.identifiers.base,
- figures.identifiers.default
+identifiers.list = {
+ identifiers.base,
+ identifiers.default
}
-- tracing