X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=pret-lam.lua;h=6935043297ee5077a9e77495187b4ad0623e7662;hp=7058f620f01d5a8f2298418e9842f1137e86210b;hb=f3a705e9d90ff0e54ef6bfec8db58947d7587704;hpb=eca644f36a8fc0b7cc7abd985ef3c3779a0de712 diff --git a/pret-lam.lua b/pret-lam.lua index 7058f62..6935043 100644 --- a/pret-lam.lua +++ b/pret-lam.lua @@ -23,7 +23,7 @@ local symbols = { -- The default * sits very high above the baseline, \ast (u+2217) looks -- better. ['*'] = {repr = '\\ast'}, - ['~'] = {repr = '\\sim'}, + ['~'] = {repr = '\\HDLine[width=.20 * \\the\\textwidth]'}, ['|'] = {repr = '\\char' .. utf.byte('|')}, } @@ -35,6 +35,7 @@ local keywords = { ['letrec'] = {}, ['letnonrec'] = {}, ['in'] = {}, + ['DEFAULT'] = {}, } local in_block = 0 @@ -42,6 +43,10 @@ local submatches = {} local bases = {} -- Store the last line for each indent level local indentlines = {} +-- The amount of indent of the first line, which we will strip of all +-- subsequent lines. This allows the entire block to be indented as normal in +-- the tex source code. +local first_indent -- 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 @@ -128,6 +133,17 @@ end -- line4, and line is no longer in scope since it is replaced by line4. local function do_indent(line) newind, rest = utf.match(line, '^(%s*)(.*)') + + -- Store the first line's indent + if not first_indent then + first_indent = utf.len(newind) + end + + -- Strip the indent of the first line from this line's indent. + newind = utf.sub(newind, first_indent + 1) + -- Rebuild line, so we can still use it below + line = newind .. rest + prev = -1 -- Loop all the previous lines for indent, unused in pairs(indentlines) do @@ -191,13 +207,14 @@ function vis.begin_of_display() if in_block == 0 then -- Initially allow subscripts using _ or just appending a number (later, -- we will add extra patterns here. - submatches = {"^(%a*)_([%a%d,]+)$", "^(%a+)(%d+)$"} + submatches = {"^(%a*)_([%a%d,]+)$", "^(%a+)([%d,]+)$"} -- This stores all the bases we've encountered so far (to prevent -- duplicates). For each of them there will be a pattern in submatches -- above. bases = {} end indentlines = {} + first_indent = nil end