|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- blogme4.lua
-- Just a handful of ideas thrown together.
-- This file may be executable, or may be not.
-- At some point this will be like blogme3, but cleaner
-- and more general... for example, the same core functions
-- will be used to generate both HTML and TeXinfo code.
-- Current version: 2010aug03.
--------[ The "obj" table ]--------
-- We start with a object system similar to the one in newtrees.lua:
-- (find-dn4 "newtrees.lua" "metatables")
-- (find-dn4 "newtrees.lua" "trees")
objs = {}
string_mt = getmetatable("foo")
string_mt.__index = function (str, key)
if key == "id" then return str end -- str.id = str
if key == "T" then return objs[str] end -- str.T = objs[str]
return string[key] -- str.f = string.f
end
obj_mt = obj_mt or {}
obj_mt.__index = function (T, key)
if key == "T" then return T end
end
setobjid = function (T, id)
setmetatable(T, obj_mt) -- add a metatable to T
T.id = id -- set T.id = id
objs[id] = T -- set objs[id] = T
return T
end
--------[ ]--------
-- (find-dn4 "newtrees.lua" "trees")
-- (find-angg "TEXINFO/eev.texi")
-- (find-angg "TEXINFO/eev.texi.lua")
obj_newid = function (kind)
local nkinds = "n"..kind.."s"
objs[nkinds] = objs[nkinds] + 1
local n = objs[nkinds]
local id = "_"..kind..n
return id
end
obj_setid = function (kind, T)
local id = obj_newid(kind)
objs[id] = T
T.id = id
setmetatable(T, obj_mt)
return T
end
obj_link = function (obj1, dir1, dir2, obj2)
obj1.T[dir1] = obj2.id
obj2.T[dir2] = obj1.id
end
obj_adjustchildren = function (this, dir)
this = this.T
for i=1,#this do
local child = this[i].T
this[i] = child.id
child[dir] = this.id
child[dir.."n"] = i
end
end
obj_appendto = function (parent, dir, this)
tinsert(parent.T, this.id)
this.T[dir] = parent.id
this.T[dir.."n"] = #(parent.T)
end
obj_next = function (this, dir)
local parent = this.T[dir]
local n = this.T[dir.."n"]
return parent.T[n+1]
end
objs.ntins = 0
newtin = function (nodename, ...)
local T = obj_setid("tin", {nodename=nodename, ...})
obj_adjustchildren(T, "L")
return T
end
-- Rough map:
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
ee_dofile "~/blogme3/blogme4.lua"
nin = newtin2
a = nin("Top",
nin "Zico",
nin("Dani",
nin "Ricardo",
nin "Bruno",
nin "Fernanda"),
nin "Mari")
PP(objs)
for key,val in mysortedpairs(objs) do PP(key, val) end
PP(a)
PP(a.id)
PP(a.T.nodename)
PP(a.T[2].T.nodename)
--]]
-- Local Variables:
-- coding: raw-text-unix
-- End: