X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=pret-trans.lua;h=062eceb536230b109585af5d19b8ec5a3f7e31ae;hp=6ad51b74574768036e04200f2be9b0734f60a1b2;hb=9a72aec767ba316761a70bbbcd87075db44bee3b;hpb=1687b8573daf7ee73241fa2651ac5bed07c10cdf diff --git a/pret-trans.lua b/pret-trans.lua index 6ad51b7..062eceb 100644 --- a/pret-trans.lua +++ b/pret-trans.lua @@ -13,19 +13,22 @@ local vis = buffers.newvisualizer("trans") local commands = {} -- A command to create a horizontal rule. -commands.rule = "\\blackrule[height=0.5pt,depth=0pt,width=.45\\textwidth]" +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" -- 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=.5\\textwidth]{\\sans" -commands.rightframe = "\\framed[offset=0mm,location=middle,strut=no,align=right,frame=off,width=.5\\textwidth]{" +commands.leftframe = "\\framed[offset=0mm,location=middle,strut=no,align=right,frame=off,width=.48\\textwidth]{\\sans" +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) @@ -63,11 +66,23 @@ 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 @@ -82,6 +97,12 @@ 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 @@ -165,6 +186,7 @@ function vis.end_of_display() -- Clean up lines = {} + buffers.visualizers.handlers.lam.end_of_block() end -- vim: set sw=4 sts=4 expandtab ai: