summaryrefslogtreecommitdiff
path: root/mplife.cld
diff options
context:
space:
mode:
authorPhilipp Gesang <pgesang@ix.urz.uni-heidelberg.de>2010-08-12 17:07:57 +0200
committerPhilipp Gesang <pgesang@ix.urz.uni-heidelberg.de>2010-08-12 17:07:57 +0200
commit2bf2a6a88958f404171d20030feb98642aae2950 (patch)
tree2f438fba69b29cebf36840f934ffd9bcf19a60ec /mplife.cld
parent1092d5cc8e88b3fe88c9ac7678fdfd9c809935e8 (diff)
downloadautomata-backgrounds-2bf2a6a88958f404171d20030feb98642aae2950.tar.gz
iterating over strings via lpeg
Diffstat (limited to 'mplife.cld')
-rw-r--r--mplife.cld318
1 files changed, 0 insertions, 318 deletions
diff --git a/mplife.cld b/mplife.cld
deleted file mode 100644
index eac9bbb..0000000
--- a/mplife.cld
+++ /dev/null
@@ -1,318 +0,0 @@
---
---------------------------------------------------------------------------------
--- FILE: mplife.cld
--- USAGE: ./mplife.cld
--- DESCRIPTION: Metapost output for Conway's Game of Life
--- OPTIONS: ---
--- REQUIREMENTS: ---
--- BUGS: ---
--- NOTES: ---
--- AUTHOR: Philipp Gesang (Phg), <megas.kapaneus@gmail.com>
--- COMPANY:
--- VERSION: 1.0
--- CREATED: 06/08/10 12:28:35 CEST
--- REVISION: ---
---------------------------------------------------------------------------------
---
-
-require "run"
-
-local mplife = {}
-
-gol.setup = gol.setup or {}
-gol.setup.current = gol.setup.current or {}
-
-do
- local c = gol.setup.current
-
- --c.file = c.file or "examples/10x10_glider.gol"
- c.file = c.file or "examples/gliders.gol"
- --c.file = c.file or "examples/ggun.gol"
- c.rule = gol.parse_rule("B3/S23") -- default Conway
- c.init = gol.parse_file(c.file)
- c.last = c.init -- for successive mode
-
- c.pensize = .1
- c.color = { r = .6, g = .6, b = .8 }
- c.fade = false
- c.firstframe = 1
- c.frames = 5
- c.preamble = [[
-\setupcolors[state=start]
-\setupbackgrounds[state=start]
-\setuppapersize[S6][S6]
-
-\setuppagenumbering[state=stop,location=]
-]]
- --c.before_frame = [[
---\defineoverlay
- --[back]
- --[\bgroup
---]]
- --c.after_frame = [[
---\egroup]
-
---\setupbackgrounds [paper] [background=back]
---\page
---]]
- c.before_frame = [[
-\startuseMPgraphic{back}
-pickup pencircle xyscaled (.25*]] .. c.pensize .. [[pt, ]] .. c.pensize .. [[pt) rotated 45;
-]]
- c.after_frame = [[
-currentpicture := currentpicture xysized (\the\paperwidth, \the\paperheight);
-\stopuseMPgraphic
-\defineoverlay[back][\useMPgraphic{back}]
-
-\setupbackgrounds [page] [background=back]
-]]
-
- gol.setup.current = c
-end
-
-
-
-mplife.fade = true
-
-mplife.format = {
-
- nl = "\n", space = " ",
-
- opar = "(", cpar = ")",
-
- hyphen = "-", comma = ",",
- scolon = ";", path = "--",
-
- filldraw = "fill", -- "draw",
- draw = "draw",
- cycle = "cycle",
-
- p = function (x,y)
- return string.format("(%s,%s)", x, y)
- end,
-}
-
-function mplife.runcode (mpcode)
- --context.startMPcode()
- context(mpcode)
- --context.stopMPcode()
- --context.MPdrawing(mpcode) -- comes with next beta!
-end
-
-function mplife.p_square (from, filled, fade_level)
- local f = mplife.format
-
- -- p1 p2
- -- from from + d.x
- -- +-------+
- -- | |
- -- | |
- -- | |
- -- | |
- -- +-------+
- -- from - d.y from + d.x && - d.y
- -- p4 p3
-
- local d = { x = 1, y = 1, unit = "" }
- local points = {
- [1] = { x = from.x, y = from.y },
- [2] = { x = from.x+d.x, y = from.y },
- [3] = { x = from.x+d.x, y = from.y-d.y },
- [4] = { x = from.x, y = from.y-d.y },
- }
-
-
- local buildsqr = function (unit)
- local draw
- if filled then
- draw = f.filldraw
- else
- draw = f.draw
- end
-
- local tmp = f.nl .. draw
- tmp = tmp .. f.p( points[1].x .. unit, points[1].y .. unit ) .. f.path -- automatic type conversion to string
- tmp = tmp .. f.p( points[2].x .. unit, points[2].y .. unit ) .. f.path
- tmp = tmp .. f.p( points[3].x .. unit, points[3].y .. unit ) .. f.path
- tmp = tmp .. f.p( points[4].x .. unit, points[4].y .. unit ) .. f.path
- tmp = tmp .. f.cycle
-
- if filled and fade_level then
- --tmp = tmp .. f.space .. "withcolor" .. f.space .. 1/fade_level .. "black"
- if fade_level == 0 then
- fade_level = 1
- elseif fade_level == 1 then
- fade_level = 0
- else
- fade_level = .05 * fade_level + .5
- end
- tmp = tmp .. f.space .. "scaled 200 " .. "withcolor" .. f.space .. fade_level .. "white"
- end
-
- tmp = tmp .. f.scolon
- return tmp
- end
-
- return buildsqr (from.unit)
-end
-
-function mplife.draw_grid(grid)
- local h = gol.helpers
- local pat = ""
- if type(grid) == "string" then
- grid = h.split(grid, "\n") -- may leave an empty string as last item
- if grid[#grid] == "" then grid[#grid] = nil end
- end
-
- local max = {}
- max.x, max.y = grid[1]:len(), #grid
-
- local n = 0
- local pos -- kept in broader scope for picture border estimation
- while grid[#grid-n] ~= nil do
-
- local row = grid[#grid-n]
- pos = 1
-
- repeat
- local opacity
- local cell = row:sub(pos, pos)
- local p = { x = pos-1, y = n, unit = "" }
-
- local fill, fade_level
- fill = true
-
- if fill and mplife.fade then
- fade_level = tonumber(cell)
- end
-
- if not fade_level then -- no number --> cell once dead (marked "D")
- fade_level = 9.3
- end
-
- if fade_level ~= 0 then -- don't draw dead cells
- if fade_level == 1 then
- opacity = .33
- pat = pat .. string.format("%s unitsquare shifted (%s,%s) withcolor transparent(1,%s,\\MPcolor{lifesquare});\n",
- "draw", p.x, p.y, opacity*2)
- else
- opacity = (1/3) - (fade_level / 30)
- end
- pat = pat .. string.format("%s unitsquare scaled .9 shifted (%s+.05,%s+.05) withcolor transparent(1,%s,\\MPcolor{lifesquare});\n",
- "filldraw", p.x, p.y, opacity)
- end
- pos = pos + 1
- until pos > row:len()
- pat = pat .. "\n"
- n = n + 1
- end
-
- pat = pat .. string.format([[
-path border;
-border = (0,0)--(%s,0)--(%s,%s)--(0,%s)--cycle;
-fill border withcolor transparent (1,.75, white) ;
-setbounds currentpicture to boundingbox border ;
-]], max.x, max.x, max.y, max.y)
-
---fill border withcolor transparent (1,.3,1white) ;
- --print("Pic\n", pat)
- mplife.runcode(pat)
- return true
-end
-
---- testing section
-
-function mplife.checker(n)
- local squares = ""
- local cnt = 0
- for y=1, n, 1 do
- for x=1, n, 1 do
- local fill
- if cnt % 2 == 0 then fill = true end
- local p = { x = x, y = y, unit = "" }
- squares = squares .. mplife.p_square( p, fill )
- cnt = cnt + 1
- end
- if n % 2 == 0 then cnt = cnt + 1 end -- needed for even column numbers
- end
- --print (squares)
- return squares
-end
-
-function mplife.rand_pattern(n, digits)
- local pat = ""
- for y=1, n, 1 do
- for x=1, n, 1 do
- pat = pat .. math.random(0,digits)
- end
- pat = pat .. "\n"
- end
- return pat
-end
-
---print(mplife.rand_pattern(10,1))
-
---- interfacing with life.lua
-
-function mplife.life_frame (frame)
- --local c = gol.setup.current
-
- mplife.draw_grid(frame)
-
- return true
-end
-
-function mplife.life_movie (frames, next_page)
- local c = gol.setup.current
- for i, frame in ipairs(frames) do
- context(c.before_frame)
- mplife.life_frame(frame)
- context(c.after_frame)
- end
-end
-
-function mplife.life_frames ()
- local c = gol.setup.current
-
-
- local frames = gol.frames( c.init, c.rule, c.frames, c.firstframe )
- mplife.life_movie( frames, false )
- return true
-end
-
-function mplife.successive ()
- local c = gol.setup.current
- context(c.before_frame)
- mplife.draw_grid(c.last)
- context(c.after_frame)
- gol.setup.current.last = gol.next_frame( c.last, c.rule )
- return true
-end
-
-
-
-
-function mplife.main ()
- local c = gol.setup.current
-
- context.definecolor({ "lifesquare" }, c.color)
- context(c.preamble) -- only once
- context.starttext()
-
- --mplife.runcode (mplife.checker(20))
-
- --mplife.draw_grid(mplife.rand_pattern(10,6))
-
- --mplife.life_frames()
-
- for i=1,10,1 do
- mplife.successive()
- --context("\\input knuth")
- context.page()
- end
- context.stoptext()
- return 0
-end
-
-
-return mplife.main()