X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=pret-haskell.lua;h=4ce8d3e524670d51077b56b4f3967553cb93e6c0;hp=bf74fe075b6a3e7149922e3398687a2602d47de5;hb=b92b16b7e4ab854699bcd151bad0be7c5d73c0ae;hpb=3f401d7d261570283bf23524ac2ecb7c08c0ccaa diff --git a/pret-haskell.lua b/pret-haskell.lua index bf74fe0..4ce8d3e 100644 --- a/pret-haskell.lua +++ b/pret-haskell.lua @@ -9,24 +9,40 @@ local utf = unicode.utf8 local visualizer = buffers.newvisualizer('haskell') +-- Print a string or table of strings with the catcodes set to the default +-- context ones. Use this function to print a string that contains context +-- macro's that should be interpreted. Does not insert any automatic +-- linebreaking. +local function ctxsprint(str) + tex.sprint(tex.ctxcatcodes, str) +end + +-- Print a string or table of strings almost literal. Each character in the +-- string will be printed with the "character" catcode, causing it to show up +-- literal in the output. Only the space character is printed with the "space" +-- catcode. +local function texwrite(str) + tex.write(str) +end + function visualizer.flush_line(str,nested) while str ~= '' do if utf.match(str, '^ ') then - tex.sprint('\\obs ') + ctxsprint('\\obs ') -- Eat the first character str = utf.sub(str, 2) else local text, rest = utf.match(str, "^%-%-(.-)%-%-(.*)") if text then - tex.sprint('\\strikethrough{') + ctxsprint('\\strikethrough{') -- Recursively call ourselves to handle spaces gracefully. visualizer.flush_line(text) - tex.sprint('}') + ctxsprint('}') -- Eat the processed characters str = rest else -- Write the first character - tex.write(utf.sub(str, 1, 1)) + texwrite(utf.sub(str, 1, 1)) -- Eat the first character str = utf.sub(str, 2) end