Allow for ordering of symbols in the lambda prettyprinter.
authorMatthijs Kooijman <matthijs@stdin.nl>
Wed, 9 Dec 2009 09:02:36 +0000 (10:02 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Wed, 9 Dec 2009 09:02:36 +0000 (10:02 +0100)
By using an array instead of a table, the symbols can be ordered. This
allows using symbols where one is a prefix of the other, by placing the
longer one first.

pret-lam.lua

index 43e8c8c..ed84d0a 100644 (file)
@@ -19,17 +19,17 @@ local colors = {
 local symbols = {
     -- Note, the space we replace with is a Unicode non-breaking space
     -- (U+00A0).
 local symbols = {
     -- Note, the space we replace with is a Unicode non-breaking space
     -- (U+00A0).
-    [' '] = {repr = ' '},
-    ['_'] = {repr = '\\_'},
-    ['->'] = {repr = '→'},
-    ['=>'] = {repr = '⇒'},
+    {symbol = ' ', repr = ' '},
+    {symbol = '_', repr = '\\_'},
+    {symbol = '->', repr = '→'},
+    {symbol = '=>', repr = '⇒'},
     -- The default * sits very high above the baseline, \ast (u+2217) looks
     -- better.
     -- The default * sits very high above the baseline, \ast (u+2217) looks
     -- better.
-    ['*'] = {repr = '\\ast'},
-    ['~'] = {repr = '\\HDLine[width=.20 * \\the\\textwidth]'},
-    ['|'] = {repr = '\\char' .. utf.byte('|')},
+    {symbol = '*', repr = '\\ast'},
+    {symbol = '~', repr = '\\HDLine[width=.20 * \\the\\textwidth]'},
+    {symbol = '|', repr = '\\char' .. utf.byte('|')},
     -- Use ▶ from our roman font, since Iwona doesn't have the glyph
     -- Use ▶ from our roman font, since Iwona doesn't have the glyph
-    ['▶'] = {repr = '{\\rm{}▶}'},
+    {symbol = '▶', repr = '{\\rm{}▶}'},
 }
 
 -- Keywords that should be bold
 }
 
 -- Keywords that should be bold
@@ -63,9 +63,9 @@ end
 -- character.  We can do a lookup directly, since symbols can be different in
 -- length, so we just loop over all symbols, trying them in turn.
 local function take_symbol(str)
 -- character.  We can do a lookup directly, since symbols can be different in
 -- length, so we just loop over all symbols, trying them in turn.
 local function take_symbol(str)
-    for symbol,props in pairs(symbols) do
+    for i,props in ipairs(symbols) do
         -- Try to remove symbol from the start of str 
         -- Try to remove symbol from the start of str 
-        symbol, newstr = utf.match(str, "^(" .. symbol .. ")(.*)")
+        symbol, newstr = utf.match(str, "^(" .. props.symbol .. ")(.*)")
         if symbol then
             -- Return this tokens repr, or just the token if it has no
             -- repr.
         if symbol then
             -- Return this tokens repr, or just the token if it has no
             -- repr.