Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
-- This is a "shadow file" (like in Forth) for dednat5.lua...
-- Note that it contains not only comments but also tests
-- (mostly in eepitch blocks).


-- «.expansion»			(to "expansion")
-- «.heads»			(to "heads")



-- «expansion»  (to ".expansion")
-- (find-dn4 "dednat5.lua" "prefixes-and-ptables")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
ee_dofile "~/dednat4/dednat5.lua"

ptable_adds(expansion_table, "->", "\\to ", "|->", "\\mto ", "|-", "\\vdash ")
PP(expansion_table)
PP(expand("foo|->bar |- plic->naw", 1, expansion_table, {}))
PP(expand_all("foo|->bar |- plic->naw", 1, expansion_table, {}))
PP(expand_all("foo|->bar |- plic->|naw|", 1, expansion_table, {}))

head_add("%:", "tree")
head_add("%:*", "abbrev")
PP(head_for("% foo"))
PP(head_for("%: foo"))
PP(head_for("%:*foo*bar*"))




-- «heads»  (to ".heads")
-- (find-dn4 "dednat5.lua" "heads")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
ee_dofile "~/dednat4/dednat5.lua"

head_table = {}
head_add("",   {aftereach = PP})
head_add("%L", {
    beforefirst = function () PP("beforefirst") end,
    aftereach = function (str) PP("aftereach:", str) end,
    afterlast = function () PP("afterlast") end,
  })
head_add("%L", {
    beforefirst = function () lua_lines = {} end,
    aftereach = function (str) tinsert(lua_lines, str) end,
    afterlast = function () eval(table.concat(lua_lines, "\n")) end,
  })

flines = {
  "bar",
  "%L PP('hello',",
  "%L    'world')",
  "foo",
}
linen = 1

for _,li in ipairs(flines) do
  PP(head_for(li))
end

process_blocks()





* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
ee_dofile "~/dednat4/dednat5.lua"
ptable_adds(expansion_table, "->", "\\to ", "|->", "\\mto ", "|-", "\\vdash ")

-- (find-LATEXfile "2009unilog-dnc.tex" "\\TeX{}")
-- (fooi "«" "<<" "»" ">>")

-- <<\pi>> = function (pair) return pair[1] end
-- <<\pi'>> = function (pair) return pair[2] end
--     local a = <<\pi>>(<<a,b>>)
--     local b = <<\pi'>>(<<a,b>>)

S = [[
pi1 = function (pair) return pair[1] end
pi2 = function (pair) return pair[2] end
<<b|->c>> = function (b) return b+2 end
<<a,b|->a,c>> = function (<<a,b>>)
    local a = pi1(<<a,b>>)
    local b = pi2(<<a,b>>)
    local c = <<b|->c>>(b)
    local <<a,c>> = {a, c}
    return <<a,c>>
  end
]]

S = [[
<<a,b|->a,c>> = function (<<a,b>>)
    local a = pi1(<<a,b>>)
    local b = pi2(<<a,b>>)
    local c = <<b|->c>>(b)
    local <<a,c>> = {a, c}
    return <<a,c>>
  end
]]

width = "2cm"
boxname = "myboxa"

pre = function ()
    print("\\setbox0=\\hbox{%")
    print("\\begin{minipage}[c]{"..width.."}")
  end
post = function ()
    print("\\end{minipage}%")
    print("}")
    print("\\savebox{\\"..boxname.."}{\\copy0}\n")
  end

c = "!"

LATEX = {
  vfun = function (v) return "\\verb"..c..v..c end,
  dfun = function (d) return "$\\angg{"..expand(d).."}$" end,
  pfun = function (L) print("\\par "..table.concat(L)) end,
}
SOURCE = {
  vfun = function (v) return v end,
  dfun = function (d) return "\171"..d.."\187" end,
  pfun = function (L) print("\\par \\verb"..c..table.concat(L)..c) end,
  prep = function () print("\\myttchars") end,
}
dnctable = {n=0}
DNC = {
  vfun = function (v) return v end,
  dfun = function (d)
      if dnctable[d] then return dnctable[d] end
      dnctable[d] = format("dnc%02d", dnctable.n)
      dnctable.n = dnctable.n + 1
      return dnctable[d]
    end,
  pfun = function (L) print("\\par \\verb"..c..table.concat(L)..c) end,
}

dncto = function (ops, S)
    pre()
    if ops.prep then ops.prep() end
    for _,li in ipairs(splitlines(S)) do
      local L = {}
      local replfun = function (v, d)
          if v ~= "" then tinsert(L, ops.vfun(v)) end
          tinsert(L, ops.dfun(d))
          return ""
        end
      local rest = string.gsub(li, "(.-)<<(.-)>>", replfun)
      if rest ~= "" then tinsert(L, ops.vfun(rest)) end
      ops.pfun(L)
    end
    post()
  end

do
width = "5.5cm"; boxname = "myboxsrc"; dncto(SOURCE, S)
width = "5.5cm"; boxname = "myboxltx"; dncto(LATEX, S)
width = "4.4cm"; boxname = "myboxdnc"; dncto(DNC, S)
end




-- S = [[
-- «» = function (pair) return pair[1] end
-- «'» = function (pair) return pair[2] end
-- «b|->c» = function (b) return b+2 end
-- «a,b|->a,c» = function («a,b»)
--     local a = «»(«a,b»)
--     local b = «'»(«a,b»)
--     local c = «b|->c»(b)
--     local «a,c» = {a, c}
--     return «a,c»
--   end
-- ]]



%:
%:            [a,b]^1 	    
%:            -------	    
%:  [a,b]^1      b     b|->c
%:  -------      ---------  
%:     a             c	    
%:     ---------------	    
%:         a,c		    
%:       -------1	    
%:       a,b|->a,c            
%:
%:       ^bar1              
%:

pi1 = function (pair) return pair[1] end
pi2 = function (pair) return pair[2] end
f   = function (b) return b+2 end
Axf = function (ab)
    local a = pi1(ab)
    local b = pi2(ab)
    local c = f(b)
    local ac = {a, c}
    return ac
  end







-- Local Variables:
-- coding: raw-text-unix
-- End: