summaryrefslogtreecommitdiff
path: root/mod/tex
diff options
context:
space:
mode:
Diffstat (limited to 'mod/tex')
-rw-r--r--mod/tex/context/third/rst/rst_context.lua27
-rw-r--r--mod/tex/context/third/rst/rst_helpers.lua93
-rw-r--r--mod/tex/context/third/rst/rst_parser.lua6
3 files changed, 78 insertions, 48 deletions
diff --git a/mod/tex/context/third/rst/rst_context.lua b/mod/tex/context/third/rst/rst_context.lua
index a5fb603..f880f35 100644
--- a/mod/tex/context/third/rst/rst_context.lua
+++ b/mod/tex/context/third/rst/rst_context.lua
@@ -844,7 +844,8 @@ function rst_context.deflist (list)
local deflist = [[
\\startRSTdefinitionlist
]]
- for nd, item in ipairs(list) do
+ for nd=1, #list do
+ local item = list[nd]
local term = item[1]
local nc = 2
local tmp = [[
@@ -862,7 +863,9 @@ function rst_context.deflist (list)
\\RSTdeflistdefinition{%
]]
- for np, par in ipairs(item[#item]) do -- definitions, multi-paragraph
+ local final = item[#item]
+ for np=1, #final do
+ local par = final[np]
tmp = tmp .. [[
\\RSTdeflistparagraph{%
]] .. inline_parser:match(par) .. "}\n"
@@ -1056,9 +1059,9 @@ function rst_context.grid_table (tab)
]]
while nr <= tab.head_end do
local r = tab.rows[nr]
- --for i,r in ipairs(tab.rows) do
local isempty = true
- for n, cell in ipairs(r) do
+ for n=1, #r do
+ local cell = r[n]
if cell.variant == "normal" then
isempty = false
break
@@ -1067,7 +1070,8 @@ function rst_context.grid_table (tab)
if not isempty then
local row = [[\\bTR]]
- for n,c in ipairs(r) do
+ for n=1, #r do
+ local c = r[n]
if not (c.parent or
c.variant == "separator") then
local celltext = inline_parser:match(c.stripped)
@@ -1105,9 +1109,9 @@ function rst_context.grid_table (tab)
end
while nr <= #tab.rows do
local r = tab.rows[nr]
- --for i,r in ipairs(tab.rows) do
local isempty = true
- for n, cell in ipairs(r) do
+ for n=1, #r do
+ local cell = r[n]
if cell.variant == "normal" then
isempty = false
break
@@ -1116,7 +1120,8 @@ function rst_context.grid_table (tab)
if not isempty then
local row = [[\\bTR]]
- for n,c in ipairs(r) do
+ for n=1, #r do
+ local c = r[n]
if not (c.parent or
c.variant == "separator") then
local celltext = inline_parser:match(c.stripped)
@@ -1164,7 +1169,8 @@ function rst_context.simple_table(tab)
if not row.ignore then
dbg_write(">hr>" .. #row)
head = head .. [[\\bTR]]
- for nc,cell in ipairs(row) do
+ for nc=1, #row do
+ local cell = row[nc]
dbg_write("%7s | ", cell.content)
local celltext = inline_parser:match(cell.content)
if cell.span then
@@ -1203,7 +1209,8 @@ function rst_context.simple_table(tab)
if not row.ignore then
dbg_write(">tr>" .. #row)
body = body .. [[\\bTR]]
- for nc,cell in ipairs(row) do
+ for nc=1, #row do
+ local cell = row[nc]
dbg_write("%7s | ", cell.content)
local celltext = inline_parser:match(cell.content)
if cell.span then
diff --git a/mod/tex/context/third/rst/rst_helpers.lua b/mod/tex/context/third/rst/rst_helpers.lua
index 3ff53fe..936da97 100644
--- a/mod/tex/context/third/rst/rst_helpers.lua
+++ b/mod/tex/context/third/rst/rst_helpers.lua
@@ -8,7 +8,7 @@
--------------------------------------------------------------------------------
--
-local P, R, S, V, match
+local P, R, S, V, lpegmatch
= lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match
local C, Carg, Cb, Cc, Cg,
@@ -58,8 +58,8 @@ do
p.col_start = Cp() * p.dash_or_equals^1
p.col_stop = p.dash_or_equals^1 * Cp()
- p.column_starts = p.col_start * ( p.space^1 * p.col_start)^1
- p.column_stops = p.col_stop * ( p.space^1 * p.col_stop)^1
+ p.column_starts = Ct(p.col_start * ( p.space^1 * p.col_start)^1)
+ p.column_stops = Ct(p.col_stop * ( p.space^1 * p.col_stop)^1)
p.st_headsep = p.equals^1 * (p.space^1 * p.equals^1)^1
p.st_colspan = p.dash^1 * (p.space^1 * p.dash^1)^0 * p.space^0 * p.last
@@ -159,7 +159,9 @@ local function set_layout (line)
layout.widths = {}
layout.slices = {}
- for n, elm in ipairs(slice:match(line)) do
+ local elms = lpegmatch(slice, line)
+ for n=1, #elms do
+ local elm = elms[n]
layout.widths[n] = #elm
layout.slices[n] = elm
end
@@ -187,7 +189,8 @@ function helpers.table.create(raw)
local hc = helpers.cell
local rowcount = 0
local newtablayout = newtab.layout
- for nr, row in ipairs(raw) do
+ for nr=1, #raw do
+ local row = raw[nr]
newtab.rows[nr] = {}
local this_row = newtab.rows[nr]
this_row.sepline = p.sep_line:match(row)
@@ -244,11 +247,13 @@ function helpers.table.create(raw)
local oldrows = newtab.rows
local newrows = oldrows
- for nc, width in ipairs(newtablayout.widths) do
+ for nc=1, #newtablayout.widths do
+ local width = newtablayout.widths[nc]
-- this is gonna be extremely slow but at least it's readable
local newrow
local currentrow = 1
- for nr, row in ipairs(newrows) do
+ for nr=1, #newrows do
+ local row = newrows[nr]
local cell = row[nc]
dbg_write("nc: %s, nr:%2s | %9s | ", nc, nr,cell.variant)
if row.sepline or row.sephead
@@ -300,18 +305,22 @@ function helpers.table.create(raw)
newtab.__init()
- --newtab.__draw_debug = function()
- --for nr, row in ipairs(newtab.rows) do
- --for nc, cell in ipairs(row) do
- --local field = cell.variant:sub(1,7)
- --if cell.parent then
- --field = field .. string.format(" %s,%2s",cell.parent.x, cell.parent.y)
- --end
- --dbg_write("%12s | ", field)
- --end
- --dbg_write("\n")
- --end
- --end
+--[[
+ newtab.__draw_debug = function()
+ for nr=1, #newtab.rows do
+ local row = newtab.rows[nr]
+ for nc=1, #row do
+ local cell = row[nc]
+ local field = cell.variant:sub(1,7)
+ if cell.parent then
+ field = field .. string.format(" %s,%2s",cell.parent.x, cell.parent.y)
+ end
+ dbg_write("%12s | ", field)
+ end
+ dbg_write("\n")
+ end
+ end
+--]]
return newtab
end
@@ -330,13 +339,20 @@ end
-- Check the column boundaries of a simple table.
function helpers.get_st_boundaries (str)
- local p = helpers.patterns
- local starts, stops, slices = {}, {}, {}
- for n, elm in ipairs({ p.column_starts:match(str) }) do
+ local p_column_starts = helpers.patterns.column_starts
+ local p_column_stops = helpers.patterns.column_stops
+ local starts, stops, slices, elms = { }, { }, { }, nil
+
+ elms = lpegmatch(p_column_starts, str)
+ for n=1, #elms do
+ local elm = elms[n]
slices[n] = { start = elm }
starts[elm] = true
end
- for n, elm in ipairs({ p.column_stops :match(str) }) do
+
+ elms = lpegmatch(p_column_stops, str)
+ for n=1, #elms do
+ local elm = elms[n]
slices[n]["stop"] = elm
stops[elm] = true
end
@@ -349,9 +365,9 @@ function helpers.table.simple(raw)
local bounds = helpers.get_st_boundaries(raw[1])
local p = helpers.patterns
- for nr, row in ipairs(raw) do
+ for nr=1, #raw do
+ local row = raw[nr]
local newrow = {}
- local nc = 1
if not p.st_headsep:match(row) and
not p.st_colspan:match(row) then
local starts, stops = {}, {}
@@ -361,13 +377,15 @@ function helpers.table.simple(raw)
stops = p.st_span_stops :match(raw[nr+1])
check_span = true
else
- for colnr, slice in ipairs(bounds.slices) do
- starts[colnr] = slice.start
- stops [colnr] = slice.stop
+ for ncol=1, #bounds.slices do
+ local slice = bounds.slices[ncol]
+ starts[ncol] = slice.start
+ stops [ncol] = slice.stop
end
end
- for nc, start in ipairs(starts) do
+ for nc=1, #starts do
+ local start = starts[nc]
-- last column can exceed layout width
local stop = nc ~= #starts and stops[nc] or #row
local cell = {
@@ -377,18 +395,19 @@ function helpers.table.simple(raw)
cell.content = stringstrip(row:sub(start, stop))
if check_span then
local start_at, stop_at
- for colnr, slice in ipairs(bounds.slices) do
+ for ncol=1, #bounds.slices do
+ local slice = bounds.slices[ncol]
if slice.start == start then
- start_at = colnr
+ start_at = ncol
end
if start_at and
- not (colnr == #bounds.slices) then
+ not (ncol == #bounds.slices) then
if slice.stop == stop then
- stop_at = colnr
+ stop_at = ncol
break
end
else -- last column, width doesn't matter
- stop_at = colnr
+ stop_at = ncol
end
end
cell.span.x = 1 + stop_at - start_at
@@ -408,10 +427,12 @@ function helpers.table.simple(raw)
rows[nr] = newrow
end
- for nr, row in ipairs(rows) do
+ for nr=1, #rows do
+ local row = rows[nr]
if not row.ignore and row[1].content == "" then
row.ignore = true
- for nc, cell in ipairs(row) do
+ for nc=1, #row do
+ local cell = row[nc]
local par_row, par_col = helpers.table.resolve_parent(nr - 1, nc, rows)
parent = rows[par_row][par_col]
parent.content = parent.content .. " " .. cell.content
diff --git a/mod/tex/context/third/rst/rst_parser.lua b/mod/tex/context/third/rst/rst_parser.lua
index d0d8de9..27c77e2 100644
--- a/mod/tex/context/third/rst/rst_parser.lua
+++ b/mod/tex/context/third/rst/rst_parser.lua
@@ -45,7 +45,9 @@ do
local slen = #str + 3
--str = "*["..str.."]"
str = stringformat("*[%4d][%s]", ndebug, str)
- for i,j in ipairs({...}) do
+ local arglst = { ... }
+ for i=1, #arglst do
+ local current = arglst[i]
if 80 - i * 8 - slen < 0 then
local indent = ""
for i=1, slen do
@@ -53,7 +55,7 @@ do
end
str = str .. "\n" .. indent
end
- str = str .. stringformat(" |%6s", stringstrip(tostring(j)))
+ str = str .. stringformat(" |%6s", stringstrip(tostring(current)))
end
iowrite(str .. " |\n")
return 0