Require a word (including its subscript) to end in a number or letter.
[matthijs/master-project/report.git] / pret-lam.lua
index e72bf2c6d6120cd2a612e393751016c81f9dbaa9..feaa5e43934cbb157757b9152c38a6ea8f624c72 100644 (file)
@@ -88,8 +88,12 @@ end
 -- the word taken.
 local function take_word(str)
         -- A word must always start with a-z (in particular, λ is not a valid
-        -- start of a word).
-        res, newstr = utf.match(str, "^([a-zA-Z][%a%d%+%-%,_]+)(.*)")
+        -- start of a word). A word must always end with a letter or a digit
+        res, newstr = utf.match(str, "^([a-zA-Z][%a%d%+%-%,_]*[%a%d]+)(.*)")
+        if not res then
+            -- The above does not catch single letter words
+            res, newstr = utf.match(str, "^([a-zA-Z])(.*)")
+        end
         return res, newstr or str
 end
 
@@ -209,7 +213,7 @@ 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[%d,]+)$"}
+        submatches = {"^(%a*)_([%a%d,]+)$", "^(%a+)(%d[%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.