Warning: this is an htmlized version!
The original is across this link,
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: