summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgfplots/tex/prepcontour_cli.lua
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/pgfplots/tex/prepcontour_cli.lua')
-rwxr-xr-xgraphics/pgf/contrib/pgfplots/tex/prepcontour_cli.lua97
1 files changed, 97 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/pgfplots/tex/prepcontour_cli.lua b/graphics/pgf/contrib/pgfplots/tex/prepcontour_cli.lua
new file mode 100755
index 0000000000..7584228d95
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/prepcontour_cli.lua
@@ -0,0 +1,97 @@
+#!/usr/bin/luatex
+
+--[[
+
+prepcontour_cli [Lua variant] - prepare contour lines (for pgfplots)
+
+Version: 1.4 (2021-02-22)
+
+Copyright (C) 2020-2021 Francesco Poli <invernomuto@paranoici.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+--]]
+
+-- directory separator ('\' for Windows, '/' for all other OSes)
+dsep = package.config:sub(1, 1)
+-- directory where the script lives
+mydir = arg[0]:match("(.*" .. dsep .. ")")
+-- add mydir to the search path for Lua loaders
+package.path = package.path .. ";" .. mydir .. "?.lua"
+-- load the module
+require "prepcontour"
+
+-- main program
+usage = "Usage: " .. arg[0] .. [[
+ CL NB NL {x|y} [VAL]... < IN > OUT
+
+where:
+CL number of text lines to be copied from the input beginning to the output
+NB number of text blocks to be read from the input
+NL number of text lines included in each input block
+x|y ordering ('x' if x varies, 'y' if y varies)
+VAL level for contour lines or
+ min:n:max for n levels between min and max or
+ corners=true to enable enhanced corner algorithm or
+ corners=false to disable it (this is the default initial state)
+IN input file
+OUT output file
+]]
+
+-- simplistic command-line argument parsing
+-- TODO: use a better approach (argparse? some other library?)
+if arg[4] == nil then
+ io.stderr:write(arg[0] .. ": too few arguments\n" .. usage)
+ os.exit(1)
+end
+copylines = tonumber(arg[1])
+nblocks = tonumber(arg[2])
+nlines = tonumber(arg[3])
+if copylines == nil or nblocks == nil or nlines == nil then
+ io.stderr:write(arg[0] .. ": failed to parse arguments\n" .. usage)
+ os.exit(2)
+end
+yvaries = arg[4]:sub(1, 1)
+if yvaries ~= 'x' and yvaries ~= 'y' then
+ io.stderr:write(arg[0] .. ": failed to parse argument '"
+ .. arg[4] .. "'!\n" .. usage)
+ os.exit(3)
+end
+yvaries = (yvaries == 'y')
+
+mesh = PrepcMesh.new(yvaries, nblocks, nlines, copylines)
+corners = false
+for n = 5, #arg do
+ if arg[n] == 'corners=true' then
+ corners = true
+ elseif arg[n] == 'corners=false' then
+ corners = false
+ else
+ level = tonumber(arg[n])
+ if level then
+ mesh:contour(level, corners)
+ else
+ lmin, nlevels, lmax = arg[n]:match('([^%:]+)%:([^%:]+)%:([^%:]+)')
+ nlevels = math.tointeger(tonumber(nlevels))
+ lmin = tonumber(lmin)
+ lmax = tonumber(lmax)
+ if nlevels and lmin and lmax then
+ mesh:autocontour(nlevels, lmin, lmax, corners)
+ end
+ end
+ end
+end
+
+mesh:printcontours()