Finalize section on state in prototype chapter.
[matthijs/master-project/report.git] / pret-haskell.lua
index 483d660dd2c70c577b64ceaf2a7fef9db475f1a6..4ce8d3e524670d51077b56b4f3967553cb93e6c0 100644 (file)
@@ -9,25 +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
-        print("Looking at '" .. str .. "'")
         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