-- Symbols that should have a different representation
local symbols = {
- [' '] = {repr = '\\obs '},
+ -- Note, the space we replace with is a Unicode non-breaking space
+ -- (U+00A0).
+ [' '] = {repr = ' '},
['_'] = {repr = '\\_'},
- ['->'] = {repr = '\\rightarrow'},
+ ['->'] = {repr = '→'},
+ ['=>'] = {repr = '⇒'},
-- 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('|')},
+ -- Use ▶ from our roman font, since Iwona doesn't have the glyph
+ ['▶'] = {repr = '{\\rm{}▶}'},
}
-- Keywords that should be bold
['letrec'] = {},
['letnonrec'] = {},
['in'] = {},
- ['DEFAULT'] = {},
+ ['DEFAULT'] = {small = true},
}
local in_block = 0
local bases = {}
-- Store the last line for each indent level
local indentlines = {}
--- The amount of indent of the first line, which we will strip of all
--- subsequent lines. This allows the entire block to be indented as normal in
--- the tex source code.
-local first_indent
-- See if str starts with a symbol, and return the remaining string and that
-- symbol. If no symbol from the table is matched, just returns the first
submatches[#submatches+1] = "^(" .. base .. ")([%a%d])$"
-- Seconde, the base with a longer prefix that includes at least
-- one of +-, (to catch things like ri+1, but not return).
- submatches[#submatches+1] = "^(" .. base .. ")([%a%d]*[%-%+%,]+[%a%d%-%+%,]*)$"
+ submatches[#submatches+1] = "^(" .. base .. ")([%a%d]*[%-%+,]+[%a%d%-%+,]*)$"
end
end
return word
-- line4, and line is no longer in scope since it is replaced by line4.
local function do_indent(line)
newind, rest = utf.match(line, '^(%s*)(.*)')
-
- -- Store the first line's indent
- if not first_indent then
- first_indent = utf.len(newind)
- end
-
- -- Strip the indent of the first line from this line's indent.
- newind = utf.sub(newind, first_indent + 1)
- -- Rebuild line, so we can still use it below
- line = newind .. rest
-
prev = -1
-- Loop all the previous lines
for indent, unused in pairs(indentlines) do
bases = {}
end
indentlines = {}
- first_indent = nil
end
if keywords[res] then
-- Make all keywords bold
word = "{\\bold " .. word .. "}"
+ if keywords[res].small then
+ word = "\\small" .. word -- Curlies were added above
+ end
else
-- Process any subscripts in the word
word = do_subscripts(word)