Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/Caixinhas1.lua.html
--   http://anggtwu.net/LUA/Caixinhas1.lua
--          (find-angg "LUA/Caixinhas1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- Used by: (c2m251fpa "defs-caixinhas")

Caixinhas = Class {
  type    = "Caixinhas",
  from    = function (str) return Caixinhas(split(str)) end,
  from1   = function (str) return Caixinhas(split(bitrim(str), "(.)")) end,
  __tostring = function (c) return c:tostring() end,
  __index = {
    innerfmt = "\\,%s\\,",
    outerfmt = "\\ensuremath{[%s]}",
    sep      = ":",
    plus     = function (c) c = copy(c); c.sep=" + ";
                            c.innerfmt="%s"; c.outerfmt="\\ensuremath{%s}"
                            return c end,
    pr       = function (c) print(VTable(copy(c))); return c end,
    ton      = function (c) return table.concat(c) end,
    tostring = function (c)
        local f = function (s) return format(c.innerfmt, s) end
        local g = function (s) return format(c.outerfmt, s) end
        return g(mapconcat(f,c,c.sep))
      end,
    coefdotxk = function (c, coef, x, k, dot, simplify)
        x = x or "x"
        dot = dot or ""
        local xk = format("%s^%s", x, k)
        if simplify and k == 0 then xk = "" end
        if simplify and k == 1 then xk = x end
        if simplify and k == 0 then dot = "" end
        return coef..dot..xk
      end,
    itok = function (c, i) return #c-i end,
    add = function (c, x, dot, simplify, verbose)
        local A = Caixinhas {}
        for i=1,#c do A[i] = c:coefdotxk(c[i], x, c:itok(i), dot, simplify) end
        return A
      end,
    cxx  = function (c) return c:add(nil,  nil,    nil) end,
    cxxs = function (c) return c:add(nil,  nil, "simp") end,
    cxd  = function (c) return c:add("10", "·",    nil) end,
    cxds = function (c) return c:add("10", "·", "simp") end,
  },
}


--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "Caixinhas1.lua"
=   Caixinhas.from  " a b c "
=   Caixinhas.from1 " 234 "
c = Caixinhas.from1 " 234 "
= c:itok(1)
= c:itok(3)
= c:pr()
= c:pr():add():pr()
= c:pr():add("10", "·"):pr()
= c:pr():add("10", "·", "simp"):pr()
= c:pr():add(nil,  nil,    nil):pr()
= c:pr():add(nil,  nil, "simp"):pr()
= c:ton()
= c:cxx ():pr()
= c:cxxs():pr()
= c:cxd ():pr()
= c:cxds():pr()
= c:cxds():plus():pr()

--]]