summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README52
-rw-r--r--examples/automatarc-eca.lua5
-rw-r--r--misc/run.lua37
-rw-r--r--module/tex/context/third/simpleslides/automata/automata-eca.lua10
4 files changed, 87 insertions, 17 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..f222bd6
--- /dev/null
+++ b/README
@@ -0,0 +1,52 @@
+················································································
+· Automata for ConTeXt ·
+················································································
+
+····· What? ····································································
+
+This module provides a means of drawing cellular automata in your context
+documents, preferably as backgrounds for presentations. Currently, two kinds of
+automata are supported: Conway's Game of Life and Elementary Cellular Automata.
+In both cases custom initial states can be loaded as well as the rules
+governing the automaton's progress.
+
+····· How? ·····································································
+
+Install the Automata package by copying the content of the “module/” directory
+into the “texmf-local” of your context distribution; e.g.
+
+$ cp -r modules/tex/ ~/context/tex/texmf-local/
+
+if you happen to have the context minimals installed in you $HOME dir.
+
+Have a look at the usage examples to get an overview. The usage does not
+significantly differ from the other styles the Simple Slides package provides.
+You might want to tweak the color definitions in “simpleslides-s-Automaton.tex”
+and adapt them for your particular use case.
+
+Also, try the command line tool “run.lua” from the directory “misc/”. Put it
+to some safe directory together with the scripts from
+“module/tex/context/third/simpleslides/automata/automata-eca.lua” and invoke it
+on one of the examples:
+
+$ texlua run.lua --file=sships.gol --n=90
+$ texlua run.lua --file=w50m.eca --n=20 --rule=182
+
+····· May I … ? ································································
+
+This code is licensed under the GNU GPL v.2 (no later versions) as is the Simple
+Slides module. Have a look at the file “COPYING” to find out more.
+
+····· Who? ·····································································
+
+Written by Philipp Gesang, blame all bugs on him. (Actually, I'd appreciate your
+reporting a bug to me.)
+
+http://bitbucket.org/phg/
+string.format("%s@%s", "megas.kapaneus", "googlemail.com")
+
+····· Why? ·····································································
+
+Why not?
+
+················································································
diff --git a/examples/automatarc-eca.lua b/examples/automatarc-eca.lua
index a56833e..ea1e27b 100644
--- a/examples/automatarc-eca.lua
+++ b/examples/automatarc-eca.lua
@@ -5,9 +5,10 @@ mplife.setup.rc = {}
do
local c = {}
- c.file = "initial-eca/w40r.eca"
- c.init = eca.parse_file(c.file)
c.rule = eca.gen_rule(110)
+ c.n = 40
+
+ c.from = ""
c.clip = "left"
diff --git a/misc/run.lua b/misc/run.lua
index 0fcc030..b90f90d 100644
--- a/misc/run.lua
+++ b/misc/run.lua
@@ -25,7 +25,11 @@ GOTO http://www.luatex.org/
return 1
end
-require "life"
+mplife = {}
+mplife.setup = {}
+
+require "automata-life"
+require "automata-eca"
local C, Cs, Ct, P, R, S, match = lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.P, lpeg.R, lpeg.S, lpeg.match
@@ -102,15 +106,8 @@ function life (current)
return 0
end
-function eca(current)
- local eca = require "eca"
- -- how many lines to draw
- current.n = tonumber(current.kv_args.n) or 30
- current.aspect = tonumber(current.kv_args.aspect) or 3/4
- current.rule = eca.gen_rule(tonumber(current.kv_args.rule) or 110)
- current.from = eca.parse_file(current.kv_args.file)
- current.framesize = math.floor(current.aspect * current.from:len())
-
+function elem(current)
+ print (current.n, type(current.n))
for n=1,current.n,1 do
gol.pre_section(current.from:len(), n)
eca.successive(current)
@@ -121,14 +118,30 @@ end
function main ()
local current = {}
current.kv_args = get_args()
- current.file = current.kv_args.file or "10x10_glider.gol"
+ current.file = current.kv_args.file
local p_suf = P"." * (1-P".")^3 * -P(1)
local p_fn = (1-p_suf)^1 * C(p_suf)
local suffix = p_fn:match(current.file) or ".gol" -- assume .gol format as default
if suffix == ".eca" then
- return eca(current)
+ require "automatarc-eca"
+ for i,j in pairs(mplife.setup.rc) do
+ current[i] = mplife.setup.rc[i]
+ end
+ current.aspect = tonumber(current.kv_args.aspect) or 3/4
+ current.rule = eca.gen_rule(tonumber(current.kv_args.rule) or 110)
+ current.from = eca.parse_file(current.kv_args.file)
+ current.framesize = math.floor(current.aspect * current.from:len())
+
+ current.n = tonumber(current.kv_args.n)
+ end
+
+ current.n = tonumber(current.kv_args.n)
+
+ if suffix == ".eca" then
+ mplife.setup.current = current
+ return elem(current)
else
return life(current)
end
diff --git a/module/tex/context/third/simpleslides/automata/automata-eca.lua b/module/tex/context/third/simpleslides/automata/automata-eca.lua
index 95d1f71..27450ba 100644
--- a/module/tex/context/third/simpleslides/automata/automata-eca.lua
+++ b/module/tex/context/third/simpleslides/automata/automata-eca.lua
@@ -10,7 +10,11 @@
--------------------------------------------------------------------------------
--
-environment.loadluafile( "automata-life" )
+if context then
+ environment.loadluafile( "automata-life" )
+else
+ require "automata-life"
+end
local help = gol.helpers
@@ -82,11 +86,11 @@ function eca.gen_frame(from, lines, rule)
local cnt = 1
local c = mplife.setup.current
- local new = { [1] = eca.stripcells(from, c.clip, c.diff ) }
+ local new = { [1] = eca.stripcells(from, c.clip, c.diff or 0 ) }
repeat
from = eca.next_line(from, rule)
- table.insert( new, eca.stripcells(from, c.clip, c.diff) )
+ table.insert( new, eca.stripcells(from, c.clip, c.diff or 0) )
cnt = cnt + 1
until cnt == lines
return eca.next_line(from, rule), new