summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/verb-tex.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/verb-tex.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/verb-tex.lua122
1 files changed, 122 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/verb-tex.lua b/Master/texmf-dist/tex/context/base/verb-tex.lua
new file mode 100644
index 00000000000..dbb483ad5df
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/verb-tex.lua
@@ -0,0 +1,122 @@
+-- filename : type-tex.lua
+-- comment : companion to core-buf.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not buffers then buffers = { } end
+if not buffers.visualizers then buffers.visualizers = { } end
+if not buffers.visualizers.tex then buffers.visualizers.tex = { } end
+
+buffers.visualizers.tex.colors = {
+ "prettytwo",
+ "prettyone",
+ "prettythree",
+ "prettyfour"
+}
+
+buffers.visualizers.tex.states = {
+ ['$']=2, ['{']=2, ['}']=2,
+ ['[']=3, [']']=3, ['(']=3, [')']=3, ['<']=3, ['>']=3, ['#']=3, ['=']=3, ['"']=3,
+ ['/']=4, ['^']=4, ['_']=4, ['-']=4, ['&']=4, ['+']=4, ["'"]=4, ['`']=4, ['|']=4, ['%']=4
+}
+
+-- using a table to store the result does not make sense here (actually,
+-- it's substantial slower since we're flushing lines on the fly)
+--
+-- we could use a special catcode regime: only \ { }
+
+function buffers.visualizers.tex.flush_line(str,nested)
+ local result, state = { }, 0
+ local first, escaping = false, false
+ local byte, find = utf.byte, utf.find
+ local finish, change = buffers.finish_state, buffers.change_state
+ buffers.currentcolors = buffers.visualizers.tex.colors
+ for c in string.utfcharacters(str) do
+ if c == " " then
+ if escaping then
+ result[#result+1] = " "
+ else
+ state = finish(state, result)
+ result[#result+1] = "\\obs "
+ end
+ escaping, first = false, false
+ elseif c == "\t" then
+ if escaping then
+ result[#result+1] = " "
+ else
+ state = finish(state, result)
+ result[#result+1] = "\\obs "
+ end
+ if buffers.visualizers.enabletab then
+ result[#result+1] = string.rep("\\obs ",i%buffers.visualizers.tablength)
+ end
+ escaping, first = false, false
+ elseif buffers.visualizers.enableescape and (c == buffers.visualizers.escapetoken) then
+ if escaping then
+ if first then
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] =c
+ else
+ result[#result+1] ="\\char" .. byte(c) .. " "
+ end
+ first = false
+ else
+ result[#result+1] = "\\"
+ first = true
+ end
+ else
+ state = finish(state, result)
+ result[#result+1] = "\\"
+ escaping, first = true, true
+ end
+ elseif escaping then
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ first = false
+ elseif first then
+ state = 1
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ state = finish(state, result)
+ end
+ first = false
+ elseif state == 1 then
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] = c
+ first = false
+ elseif c == "\\" then
+ state = change(1, state, result)
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ first = true
+ else
+ state = change(buffers.visualizers.tex.states[c], state, result)
+ if state == 0 then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ first = false
+ end
+ elseif c == "\\" then
+ first = true
+ state = change(1, state, result)
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ else
+ state = change(buffers.visualizers.tex.states[c], state, result)
+ if state == 0 then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ first = false
+ end
+ end
+ state = finish(state, result)
+ buffers.flush_result(result,nested)
+end