Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
-- tos.lua: a "tostring" class for varios kinds of pretty-printers.
-- This file:
--   http://angg.twu.net/dednat5/tos.lua.html
--   http://angg.twu.net/dednat5/tos.lua
--                    (find-dn5 "tos.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2011dec20 / 2012mar16
-- License: GPL3
--
-- Ancestors:
--   (find-angg "LUA/lua50init.lua" "tos")
--   (find-angg "LUA/tos.lua")
--   (find-angg "LUA/tos2.lua")

require "eoo"         -- (find-dn5 "eoo.lua")
-- ee_dofile "~/dednat5/eoo.lua"

Tos = Class {
  type    = "Tos",
  __index = {
    -- (find-angg "LUA/lua50init.lua" "tos")
    compare_pairs = function (pair1, pair2)   -- not a method
        local key1,  key2  = pair1.key,  pair2.key
        local type1, type2 = type(key1), type(key2)
        if type1 == type2 then
          if type1 == "number" then return key1 < key2 end
          if type1 == "string" then return key1 < key2 end
          return tostring(key1) < tostring(key2)  -- fast
        else
          return type1 < type2   -- numbers before strings before tables, etc
        end
      end,
    sorted_pairs = function (tos, T)  -- sort a list of {key, val} pairs
        local P = {}
        for key,val in pairs(T) do
          table.insert(P, {key=key, val=val})
        end
        return sorted(P, tos.compare_pairs)
      end,
    pair = function (tos, pair)       -- {key, val} pair to string
        return tos:o(pair.key).."="..tos:o(pair.val)
      end,
    table = function (tos, T, sep)    -- table to string
        local tos_pair = function (p) return tos:pair(p) end
        return "{"..mapconcat(tos_pair, tos:sorted_pairs(T), sep or ", ").."}"
      end,
    o = function (tos, o)             -- (arbitrary) object to string
        local t = type(o)
        if t=="number" then return tostring(o) end
        if t=="string" then return format("%q", o) end
        if t=="table"  then return tos:table(o) end
        return "<"..tostring(o)..">"
      end
  },
}

-- (find-angg "LUA/lua50init.lua" "PP")


-- dump-to: tests
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
require "tos"
tos = Tos {}
p = function (o) print(tos:o(o)) end
p(22)
p "234"
p {10, 20, 30}
p {10, 20, 30, [{2, 3}]=print}

--]==]

-- Local Variables:
-- coding:             raw-text-unix
-- ee-anchor-format:   "«%s»"
-- End: