Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://angg.twu.net/LUA/CabosNaDiagonal.lua.html
--   http://angg.twu.net/LUA/CabosNaDiagonal.lua
--           (find-angg "LUA/CabosNaDiagonal.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- Supersedes: (find-LATEX "2021-2-C3-diag-nums.lua")
-- Superseded by: (find-angg "LUA/Cabos1.lua")
--
-- (defun e () (interactive) (find-angg "LUA/CabosNaDiagonal.lua"))

-- «.barranco»	(to "barranco")


CabosNaDiagonal = Class {
  type = "CabosNaDiagonal",
  from = function (bigstr)
      local bigarr = {}
      for i,line in ipairs(splitlines(bigstr)) do
        local sline = split(line)
        if #sline > 0 then table.insert(bigarr, sline) end
      end
      PPPV(bigarr)
      return CabosNaDiagonal { bigstr=bigstr, bigarr=bigarr, n=0 }
    end,
  __index = {
    maxy = function (c) return (#c.bigarr    - 1) / 2 end,
    maxx = function (c) return (#c.bigarr[1] - 1) / 2 end,
    bigget = function (c, x, y)
        local a = #c.bigarr - y*2
        local b = x*2 + 1
        -- print(a, b)
        return c.bigarr[a][b]
      end,
    xyz = function (c, x, y)
        return format("%s,%s,%s", x, y, c:bigget(x, y))
      end,
    vertices = function (c, x, y)
        local nw, ne = c:xyz(x, y+1), c:xyz(x+1, y+1)
        local sw, se = c:xyz(x, y),   c:xyz(x+1, y) 
        middle = c:bigget(x+0.5, y+0.5)
        return nw, ne, sw, se, middle
      end,
    square = function (c, nw, ne, sw, se)
        return format("%s to %s to %s to %s to %s", sw, se, ne, nw, sw)
      end,
    triangles = function (c, nw, ne, sw, se, middle)
        if middle == "/" then
          return format("%s to %s to %s to %s", sw, ne, nw, sw),
                 format("%s to %s to %s to %s", sw, se, ne, sw)
        elseif middle == "\\" then
          return format("%s to %s to %s to %s", sw, se, nw, sw),
                 format("%s to %s to %s to %s", se, ne, nw, se)
        else PP("bad middle", middle); error()
        end
      end,
    nincr = function (c) c.n = c.n+1; return c.n end,
    squareortriangle = function (c, x, y)
        local nw, ne, sw, se, middle = c:vertices(x, y)
        if middle == "." then
          local sq = c:square(nw, ne, sw, se)
          return format("set obj %d polygon from %s", c:nincr(), sq)
        else
          local tri1, tri2 = c:triangles(nw, ne, sw, se, middle)
          return format("set obj %d polygon from %s\n", c:nincr(), tri1)
              .. format("set obj %d polygon from %s",   c:nincr(), tri2)
        end
      end, 
    allsots = function (c)
        local sots = {}
        for y=c:maxy()-1,0,-1 do
          for x=0,c:maxx()-1 do
            table.insert(sots, c:squareortriangle(x, y))
          end
        end
        return table.concat(sots, "\n")
      end,
  },
}


bigstr_video = [[
  0 - 0 - 0 - 1 - 2 - 3
  | . | . | . | . | / |
  0 - 0 - 0 - 1 - 2 - 2
  | . | . | . | \ | . |
  0 - 0 - 0 - 1 - 1 - 1
  | . | . | / | . | . |
  0 - 0 - 0 - 0 - 0 - 0
  | . | . | . | . | . |
  0 - 0 - 0 - 0 - 0 - 0
  | . | . | . | . | . |
  0 - 0 - 0 - 0 - 0 - 0
]]

bigstr_barranco = [[
  4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4
  | . | . | . | . | . | . | . | . |
  4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4
  | . | . | . | \ | . | . | . | . |
  3 - 3 - 3 - 3 - 4 - 4 - 4 - 4 - 4
  | . | . | . | . | \ | . | . | . |
  2 - 2 - 2 - 2 - 3 - 4 - 4 - 4 - 4
  | . | . | . | . | . | \ | . | . |
  1 - 1 - 1 - 1 - 2 - 3 - 4 - 4 - 4
  | . | . | . | . | . | . | \ | . |
  0 - 0 - 0 - 0 - 1 - 2 - 3 - 4 - 4
  | . | . | . | \ | . | . | / | . |
  0 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2
  | . | . | . | . | \ | . | . | . |
  0 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1
  | . | . | . | . | . | \ | . | . |
  0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0
]]


--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "CabosNaDiagonal.lua"

c = CabosNaDiagonal.from(bigstr_video)
PPPV(c.bigarr)
= c:maxy()
= c:maxx()
= c:bigget(4, 3)
= c:bigget(4, 4)
= c:xyz(4, 4)
= c:vertices(3, 3)
= c:squareortriangle(2, 3)
= c:squareortriangle(3, 3)
= c:allsots()
c.n = 0
= c:allsots()

--]==]


-- «barranco»  (to ".barranco")
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "CabosNaDiagonal.lua"

c = CabosNaDiagonal.from(bigstr_barranco)
= c:allsots()

--]==]



-- Local Variables:
-- coding:  utf-8-unix
-- End: