X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=pret-haskell.lua;h=f1dc31bdc421aea7cf2dbd0842463a98cb963432;hp=bf74fe075b6a3e7149922e3398687a2602d47de5;hb=21c8a86147c874c29156d1859a670c3f7c6df7ee;hpb=3f401d7d261570283bf23524ac2ecb7c08c0ccaa diff --git a/pret-haskell.lua b/pret-haskell.lua index bf74fe0..f1dc31b 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(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