From 754983b9ff12abf4fd16b7f7a2d2bf7e0b024f0c Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Sun, 6 Dec 2009 16:55:28 +0100 Subject: [PATCH] Add strikethrough to the lambda prettyprinter. --- Outline | 1 - pret-lam.lua | 64 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/Outline b/Outline index d08c12b..997276d 100644 --- a/Outline +++ b/Outline @@ -64,5 +64,4 @@ TODO: Reorder future work. TODO: Future work: Use Cλash TODO: Abstract TODO: Preface -TODO: strikethrough in pret-lam TOOD: Footnote font has not lambda diff --git a/pret-lam.lua b/pret-lam.lua index 3cc01af..f8ddb67 100644 --- a/pret-lam.lua +++ b/pret-lam.lua @@ -49,6 +49,15 @@ local bases = {} -- Store the last line for each indent level local indentlines = {} +function array_concat(a1, a2) + local res = a1 + for k,v in ipairs(a2) do + table.insert(res, v) + end + return res +end + + -- See if str starts with a symbol, and return the remaining string and that -- symbol. If no symbol from the table is matched, just returns the first -- character. We can do a lookup directly, since symbols can be different in @@ -212,38 +221,47 @@ vis.begin_of_inline = vis.begin_of_display vis.end_of_inline = vis.end_of_display function vis.flush_line(str,nested) - local result, state = { }, 0 - local finish, change = buffers.finish_state, buffers.change_state + buffers.flush_result(vis.do_line(str), nested) +end + +function vis.do_line(str) + result = {} str = do_indent(str) - -- Set the colorscheme, which is used by finish_state and change_state - buffers.currentcolors = colors while str ~= "" do local found = false local word, symbol - -- See if the next token is a word - word, str = take_word(str) - if word then - if keywords[res] then - -- Make all keywords bold - word = "{\\bold " .. word .. "}" - if keywords[res].small then - word = "\\small" .. word -- Curlies were added above + local text, rest = utf.match(str, "^%-%-(.-)%-%-(.*)") + if text then + table.insert(result, '\\strikethrough{') + -- Recursively call ourselves to handle spaces gracefully. + result = array_concat(result, vis.do_line(text)) + table.insert(result, '}') + -- Eat the processed characters + str = rest + else + -- See if the next token is a word + word, str = take_word(str) + if word then + if keywords[res] then + -- Make all keywords bold + word = "{\\bold " .. word .. "}" + if keywords[res].small then + word = "\\small" .. word -- Curlies were added above + end + else + -- Process any subscripts in the word + word = do_subscripts(word) end + table.insert(result, word) else - -- Process any subscripts in the word - word = do_subscripts(word) + -- The next token is not a word, it must be a symbol + symbol, str = take_symbol(str) + table.insert(result, symbol) end - else - -- The next token is not a word, it must be a symbol - symbol, str = take_symbol(str) end - - -- Append the resulting token - result[#result+1] = word or symbol end - - state = finish(state, result) - buffers.flush_result(result,nested) + + return result end -- vim: set sw=4 sts=4 expandtab ai: -- 2.30.2