X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=pret-trans.lua;h=a0ae9c2c73747ae99650e63d6f87f19b6d14c591;hp=062eceb536230b109585af5d19b8ec5a3f7e31ae;hb=898bdb75483e570effe1a926592fc938419d83e9;hpb=72a9e027667346a15478adc8109c26a4ffd17f5e diff --git a/pret-trans.lua b/pret-trans.lua index 062eceb..a0ae9c2 100644 --- a/pret-trans.lua +++ b/pret-trans.lua @@ -14,21 +14,19 @@ local vis = buffers.newvisualizer("trans") local commands = {} -- A command to create a horizontal rule. commands.rule = "\\HLine[width=.40 * \\the\\textwidth]" --- Pretty printer to use for the stuff before and after the line -commands.before_pret = "lam" -commands.after_pret = "lam" +-- Typing environment to use for the stuff before and after the line. Will be +-- prefixed with \start and \stop automatically. +commands.beforeenv = "unboxedlambda" +commands.afterenv = "unboxedlambda" -- Frame commands to use for the left (before + line + after) and right -- (conditions) parts. Should include an opening {, which will be closed -- automatically. -commands.leftframe = "\\framed[offset=0mm,location=middle,strut=no,align=right,frame=off,width=.48\\textwidth]{\\sans" +commands.leftframe = "\\framed[offset=0mm,location=middle,strut=no,align=right,frame=off,width=.48\\textwidth]{" commands.rightframe = "\\framed[offset=0mm,location=middle,strut=no,align=right,frame=off,width=.48\\textwidth]{" -- A table to keep the lines in this buffer, so we can process them all at -- once at the end. local lines --- A counter to keep track of the mininum amount of indentation found in each --- display. -local min_indent -- Some helper functions local function ltrim(s) @@ -66,23 +64,11 @@ end -- Capture all lines, without generating any output function vis.begin_of_display() lines = {} - -- Let all the lambda pretty printing in this buffer use shared subscript - -- detection - buffers.visualizers.handlers.lam.begin_of_block() - min_indent = nil end function vis.begin_of_line(n) -- Don't generate output here end function vis.flush_line(str, nested) - -- Keep track of the minimum indent level of all lines. Note that we don't - -- look at empty lines, of course. - indent = utf.len(utf.match(str, "^%s*")) - -- Find the lowest indent (but don't count empty lines) - if (not min_indent or indent < min_indent) then - min_indent = indent - end - table.insert(lines, str) -- Don't generate output here end @@ -97,12 +83,6 @@ end -- We do the actual work here. Process all the lines in the buffer and -- generate output for them. function vis.end_of_display() - -- Strip indent that is present on every line - min_indent = min_indent or 0 - for i = 1,#lines do - lines[i] = utf.sub(lines[i], min_indent + 1) - end - -- Find the horizontal rule, and see how long it is. len = nil for i = 1,#lines do @@ -146,17 +126,29 @@ function vis.end_of_display() -- Real output starts here -- + -- Let all the lambda pretty printing in this buffer use shared subscript + -- detection + tex.sprint("\\directlua{buffers.visualizers.handlers.lam.begin_of_block()}") + -- Ensure the left and right frames end up next to each other. tex.sprint("\\dontleavehmode") -- Open and fill the left frame tex.sprint(commands.leftframe) - prettyprint('lam', before) + tex.sprint("\\start" .. commands.beforeenv) + + tex.sprint(table.concat(before, "\n")) + + tex.sprint("\\stop" .. commands.beforeenv) tex.sprint(commands.rule) - prettyprint('lam', after) + tex.sprint("\\start" .. commands.afterenv) + + tex.sprint(table.concat(after, "\n")) + + tex.sprint("\\stop" .. commands.afterenv) -- Close the left frame tex.sprint("}") @@ -183,10 +175,11 @@ function vis.end_of_display() -- Close the right frame tex.sprint("}") + + tex.sprint("\\directlua{buffers.visualizers.handlers.lam.end_of_block()}") -- Clean up lines = {} - buffers.visualizers.handlers.lam.end_of_block() end -- vim: set sw=4 sts=4 expandtab ai: