From 92e8189f0833024f4ad53c013fc7bd568a9c3bf0 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Thu, 9 Sep 2010 11:57:09 +0200 Subject: proper file IO; cleaned up debug helper --- rst_context.lua | 11 ++--- rst_helpers.lua | 136 +++++++++++++++++++++++++------------------------------- rst_parser.lua | 58 ++++++++++++++++-------- 3 files changed, 106 insertions(+), 99 deletions(-) diff --git a/rst_context.lua b/rst_context.lua index 033c252..64c2cd6 100644 --- a/rst_context.lua +++ b/rst_context.lua @@ -13,7 +13,9 @@ require "lpeg" -require "rst_helpers" +require help = "rst_helpers" + +local dbg_write = help.dbg_write local C, Cb, Cc, Cg, Cmt, Cp, Cs, Ct, P, R, S, V, match = lpeg.C, lpeg.Cb, lpeg.Cc, lpeg.Cg, lpeg.Cmt, lpeg.Cp, lpeg.Cs, lpeg.Ct, lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match @@ -281,7 +283,7 @@ local inline_parser = P{ function rst_context.paragraph (tab) local str = inline_parser:match(table.concat(tab, " ")) - print(inline_parser:match(table.concat(tab, " "))) + --print(inline_parser:match(table.concat(tab, " "))) return string.format([[ \\startparagraph @@ -405,7 +407,7 @@ function rst_context.startitemize(str) local listtype = enumeration_types[str] or parse_itemstring(str) if type(listtype) == "table" then - print(type(listtype), listtype[2]) + --print(type(listtype), listtype[2]) setup = listtype.setup listtype = listtype.str end @@ -424,7 +426,7 @@ end function rst_context.bullet_item (str) return [[ -\\item ]] .. str .. [[ +\\item ]] .. inline_parser:match(str) .. [[ ]] end @@ -684,7 +686,6 @@ function rst_context.table_row (tab) local tmp = [[\\bTR]] for n, cell in ipairs(tab) do tmp = tmp .. [[\\bTC]] .. cell .. [[\\eTC]] .. "\n" - print (cell) end tmp = tmp .. [[\\eTR diff --git a/rst_helpers.lua b/rst_helpers.lua index caf3ed3..acd61ed 100644 --- a/rst_helpers.lua +++ b/rst_helpers.lua @@ -20,6 +20,14 @@ local helpers = {} helpers.table = {} helpers.cell = {} +local function dbg_writef(...) + if helpers_debug == true then + io.write(string.format(...)) + end +end + +helpers.dbg_write = dbg_write + local patterns = {} do @@ -47,12 +55,10 @@ do + (p.dash - p.cellcontent)^1, matchwidth = Cmt(C(p.celldelim) * Carg(1), function(s,i,del, layout) - --print("~~~~~~~~~~~~~~ NEXT MATCH ~~~~~~~~~~~~~~") local pos = 1 local lw = layout.widths for n=1, #lw do pos = pos + lw[n] + 1 - --print(">",pos,i-1,i-1==pos) if (i - 1) == pos then return true end end return false @@ -89,13 +95,10 @@ function helpers.cell.create(raw, n_row, n_col, parent, variant) end function helpers.cell.get_x_span(content, layout, init) - --print(#content,">"..content.."<") - --print(layout.widths[init],">"..layout.slices[init].."<") local acc = 0 local lw = layout.widths for n=init, #lw do acc = acc + lw[n] + 1 - --print(n, layout.slices[n], acc) if utf.len(content) + 1 == acc then return n - init end @@ -288,8 +291,8 @@ end --self.__init() --return self --end - +helpers_debug = true function helpers.table.create(raw) local self = {} self.rows = {} @@ -321,67 +324,50 @@ function helpers.table.create(raw) self.has_head = true end - --if not this_row.sepline and not this_row.sephead then - --print("new row" , row) - local splitted = { p.cells:match(row, 1, selflayout) } - local pos_layout, pos_row = 1, 1 - local make_empty = {} - make_empty.n, make_empty.parent = 0, nil - - while pos_layout <= #selflayout.widths do - local splitpos = splitted[pos_layout] - local layoutwidth = selflayout.widths[pos_layout] - local span = 1 - local this - - if make_empty.n > 0 then - --print(make_empty.n, make_empty.parent) - make_empty.n = make_empty.n - 1 - this = hc.create("", nr, pos_layout, make_empty.parent) - this.parent = make_empty.parent - p_row, p_col = self.resolve_parent(this.parent.y, this.parent.x) - --print(p_row, p_col) - local thisparent = self.rows[p_row][p_col] - --print(this.parent.y, this.parent.x,p_row,p_col) - --this.variant = "empty" --self.rows[p_row][p_col].variant - --if self.rows[p_row][p_col].variant == "separator" then - if this_row.sepline or this_row.sephead or - self.rows[p_row][p_col].variant == "separator" then - this.variant = "separator" - else - this.variant = "empty1" - end - --this.variant = self.rows[p_row][p_col].variant + local splitted = { p.cells:match(row, 1, selflayout) } + local pos_layout, pos_row = 1, 1 + local make_empty = {} + make_empty.n, make_empty.parent = 0, nil + + while pos_layout <= #selflayout.widths do + local splitpos = splitted[pos_layout] + local layoutwidth = selflayout.widths[pos_layout] + local span = 1 + local this + + if make_empty.n > 0 then + make_empty.n = make_empty.n - 1 + this = hc.create("", nr, pos_layout, make_empty.parent) + this.parent = make_empty.parent + p_row, p_col = self.resolve_parent(this.parent.y, this.parent.x) + local thisparent = self.rows[p_row][p_col] + if this_row.sepline or this_row.sephead or + self.rows[p_row][p_col].variant == "separator" then + this.variant = "separator" else - local cellwidth = utf.len(splitpos) - if cellwidth > layoutwidth then - span = span + hc.get_x_span(splitpos, selflayout, pos_layout) - end - pos_row = pos_row + span - this = hc.create(splitpos, nr, pos_layout, nil) - --print("this parent: ",this.parent) - if p.dashesonly:match(splitpos) or - this_row.sepline or this_row.sephead then - this.variant = "separator" - end - this.span.x = span - make_empty.n = span - 1 - make_empty.parent = span > 1 and { y = nr, x = pos_layout } or nil - --print(this.content, make_empty.parent.y, make_empty.parent.x) + this.variant = "empty1" end + else + local cellwidth = utf.len(splitpos) + if cellwidth > layoutwidth then + span = span + hc.get_x_span(splitpos, selflayout, pos_layout) + end + pos_row = pos_row + span + this = hc.create(splitpos, nr, pos_layout, nil) + if p.dashesonly:match(splitpos) or + this_row.sepline or this_row.sephead then + this.variant = "separator" + end + this.span.x = span + make_empty.n = span - 1 + make_empty.parent = span > 1 and { y = nr, x = pos_layout } or nil + end - this_row[pos_layout] = this - pos_layout = pos_layout + 1 - end -- while - --end -- if + this_row[pos_layout] = this + pos_layout = pos_layout + 1 + end -- while end -- for loop over rows - --for i, j in ipairs(self.rows) do - --print(i, #j) - --if #j > 0 and j[3].parent then - --print(j[3].content, j[3].span.x, j[3].parent.y, j[3].parent.x, j[3].variant) - --end - --end local oldrows = self.rows --local newrows = {} local newrows = oldrows @@ -393,7 +379,7 @@ function helpers.table.create(raw) for nr, row in ipairs(newrows) do --newrows[nr] = newrows[nr] or {} local cell = row[nc] - io.write(string.format("nc: %s, nr:%2s | %9s | ", nc, nr,cell.variant)) + dbg_writef("nc: %s, nr:%2s | %9s | ", nc, nr,cell.variant) if row.sepline or row.sephead or p.dashesonly:match(cell.content) or cell.variant == "separator" then -- separator; skipping and beginning new row @@ -402,11 +388,11 @@ function helpers.table.create(raw) newrows[nr][nc] = cell currentrow = currentrow + 1 newrow = true - io.write(string.format("new >%24s< ", cell.stripped)) - if cell.parent then io.write("parent |") else io.write("no par |") end + dbg_writef("new >%24s< ", cell.stripped) + if cell.parent then dbg_writef("parent |") else dbg_writef("no par |") end else - io.write(string.format("old >%24s< ", cell.stripped)) - if cell.parent then io.write("parent |") else io.write("no par |") end + dbg_writef("old >%24s< ", cell.stripped) + if cell.parent then dbg_writef("parent |") else dbg_writef("no par |") end if newrow then --newrows[currentrow] = cell newrows[nr][nc] = cell @@ -416,17 +402,17 @@ function helpers.table.create(raw) local par_row, par_col local parent if cell.parent then - --io.write(string.format(" use %s,%2s | ", cell.parent.x, cell.parent.y)) + --dbg_writef(" use %s,%2s | ", cell.parent.x, cell.parent.y) par_row, par_col = self.resolve_parent(cell.parent.y, cell.parent.x, newrows) - io.write(string.format(" use %s,%2s | ", par_col, par_row)) + dbg_writef(" use %s,%2s | ", par_col, par_row) else -- Using vertical predecessor. par_row, par_col = self.resolve_parent(nr-1,nc, newrows) - io.write(string.format(" new %s,%2s | ", par_col, par_row)) + dbg_writef(" new %s,%2s | ", par_col, par_row) end parent = newrows[par_row][par_col] if newrows[nr].seppart then - io.write("span++") + dbg_writef("span++") parent.span.y = parent.span.y + 1 end @@ -446,7 +432,7 @@ function helpers.table.create(raw) end newrow = false end - io.write("\n") + dbg_writef("\n") newrows[nr][nc] = cell end -- for loop over rows end -- for loop over columns @@ -464,10 +450,10 @@ function helpers.table.create(raw) if cell.parent then field = field .. string.format(" %s,%2s",cell.parent.x, cell.parent.y) end - io.write(string.format("%12s | ", field)) - --io.write(string.format("%10s | ",(cell.parent and "true" or "false"))) + dbg_writef("%12s | ", field) + --dbg_writef("%10s | ",(cell.parent and "true" or "false")) end - io.write("\n") + dbg_writef("\n") end end diff --git a/rst_parser.lua b/rst_parser.lua index d68645f..cc4304d 100644 --- a/rst_parser.lua +++ b/rst_parser.lua @@ -16,7 +16,7 @@ rst = require "rst_context" helpers = require "rst_helpers" -local rst_debug = false +local rst_debug = true local warn = function(str, ...) if not rst_debug then return false end @@ -281,10 +281,6 @@ local parser = P{ gt_body = ((V"gt_contentrow" - V"gt_bodysep")^1 * V"gt_bodysep")^1, - --gt_row = (V"gt_contentrow" - V"gt_bodysep")^1 - --* C(V"gt_bodysep") - --, - gt_bodysep = V"gt_matchindent" * C(Cmt(V"table_intersection" * (V"table_hline"^1 * V"table_intersection")^1, function(s, i, separator) @@ -524,7 +520,6 @@ local parser = P{ * V"eol", option_desc_more = V"space"^2 - --* V"rest_of_line" * (1 - V"eol")^1 * V"eol" * V"indented_lines" @@ -688,7 +683,6 @@ local parser = P{ end return false end) - --* V"bullet_indent" / rst.startitemize, * Cs(V"bullet_indent") / rst.startitemize, bullet_indent = V"space"^0 * V"bullet_expr" * V"space"^1, @@ -808,7 +802,7 @@ local parser = P{ return a == b end), - target_link = ( V"space"^0 * V"target_firstindent" -- * C((1 - V"eol")^1) * V"eol") + target_link = ( V"space"^0 * V"target_firstindent" * Ct(C(1 - V"whitespace" - V"eol")^1 * (V"target_indentmatch" * C(1 - V"whitespace" - V"eol")^1)^0) @@ -840,7 +834,6 @@ local parser = P{ * Ct(C((1 - V"eol")^1) * V"eol" * (V"par_matchindent" * C((1 - V"eol")^1) * V"eol")^0) * V"blank_line"^1 - --* V"endpar" / rst.paragraph, par_setindent = Cmt(V"space"^0, function (s, i, indent) @@ -1048,15 +1041,42 @@ local parser = P{ table_header_hline = P"=", } -f = io.open("inlinefmt.rst", "r") -testdata = f:read("*all") -f:close() +local function load_file (name) + f = assert(io.open(name, "r"), "Not a file!") + if not f then return 1 end + local tmp = f:read("*all") + f:close() + return tmp +end + +local function save_file (name, data) + f = assert(io.open(name, "w"), "Could not open file "..name.." for writing! Check its permissions") + if not f then return 1 end + f:write(data) + f:close() + return 0 +end + +local function main() + local testdata = load_file(arg[1]) + if testdata == 1 then return 1 end -print(parser:match(testdata)) ---print(">>>Last used char>: " ..tracklists.lastbullet.." <<<<") ---print(">>>Max list nestin>: "..tracklists.bullets.max .." <<<<") + local processeddata = parser:match(testdata) + + if processeddata then + save_file(arg[2], processeddata) + else + return 1 + end + + --print(">>>Last used char>: " ..tracklists.lastbullet.." <<<<") + --print(">>>Max list nestin>: "..tracklists.bullets.max .." <<<<") + + --for i,j in next, rst.collected_references do + --print (string.format("== %7s => %s <=", i,j)) + --end + --parser:print() + return 0 +end ---for i,j in next, rst.collected_references do - --print (string.format("== %7s => %s <=", i,j)) ---end ---parser:print() +return main() -- cgit v1.2.3