diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/verb-lua.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/verb-lua.lua | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/verb-lua.lua b/Master/texmf-dist/tex/context/base/verb-lua.lua new file mode 100644 index 00000000000..78d5f2a2c1f --- /dev/null +++ b/Master/texmf-dist/tex/context/base/verb-lua.lua @@ -0,0 +1,212 @@ +-- filename : type-lua.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 + +-- BROKEN : result is now table + + + +if not buffers then buffers = { } end +if not buffers.visualizers then buffers.visualizers = { } end +if not buffers.visualizers.lua then buffers.visualizers.lua = { } end + +buffers.visualizers.lua.identifiers = { } + +-- borrowed from scite + +buffers.visualizers.lua.identifiers.core = { + "and", "break", "do", "else", "elseif", "end", "false", "for", "function", + "if", "in", "local", "nil", "not", "or", "repeat", "return", "then", + "true", "until", "while" +} + +buffers.visualizers.lua.identifiers.base = { + "assert", "collectgarbage", "dofile", "error", "gcinfo", "loadfile", + "loadstring", "print", "rawget", "rawset", "require", "tonumber", + "tostring", "type", "unpack", +} + +buffers.visualizers.lua.identifiers.five = { + "_G", "getfenv", "getmetatable", "ipairs", "loadlib", "next", "pairs", + "pcall", "rawequal", "setfenv", "setmetatable", "xpcall", "string", "table", + "math", "coroutine", "io", "os", "debug", "load", "module", "select" +} + +buffers.visualizers.lua.identifiers.libs = { + -- coroutine + "coroutine.create", "coroutine.resume", "coroutine.status", "coroutine.wrap", + "coroutine.yield", "coroutine.running", + -- package + "package.cpath", "package.loaded", "package.loadlib", "package.path", + -- io + "io.close", "io.flush", "io.input", "io.lines", "io.open", "io.output", + "io.read", "io.tmpfile", "io.type", "io.write", "io.stdin", "io.stdout", + "io.stderr", "io.popen", + -- math + "math.abs", "math.acos", "math.asin", "math.atan", "math.atan2", "math.ceil", + "math.cos", "math.deg", "math.exp", "math.floor math.", "math.ldexp", + "math.log", "math.log10", "math.max", "math.min math.mod math.pi", "math.pow", + "math.rad", "math.random", "math.randomseed", "math.sin", "math.sqrt", + "math.tan", "math.cosh", "math.fmod", "math.modf", "math.sinh", "math.tanh", + "math.huge", + -- string + "string.byte", "string.char", "string.dump", "string.find", "string.len", + "string.lower", "string.rep", "string.sub", "string.upper", "string.format", + "string.gfind", "string.gsub", "string.gmatch", "string.match", "string.reverse", + -- table + "table.maxn", "table.concat", "table.foreach", "table.foreachi", "table.getn", + "table.sort", "table.insert", "table.remove", "table.setn", + -- os + "os.clock", "os.date", "os.difftime", "os.execute", "os.exit", "os.getenv", + "os.remove", "os.rename", "os.setlocale", "os.time", "os.tmpname", + -- package + "package.preload", "package.seeall" +} + +buffers.visualizers.lua.words = { } + +for k,v in pairs(buffers.visualizers.lua.identifiers) do + for _,w in pairs(v) do + buffers.visualizers.lua.words[w] = k + end +end + +buffers.visualizers.lua.styles = { } + +buffers.visualizers.lua.styles.core = "" +buffers.visualizers.lua.styles.base = "\\sl " +buffers.visualizers.lua.styles.five = "\\sl " +buffers.visualizers.lua.styles.libs = "\\sl " + +-- btex .. etex + +buffers.visualizers.lua.colors = { + "prettyone", + "prettytwo", + "prettythree", + "prettyfour", +} + +buffers.visualizers.lua.states = { + ['1']=1, ['2']=1, ['3']=1, ['4']=1, ['5']=1, ['6']=1, ['7']=1, ['8']=1, ['9']=1, ['0']=1, + ['--']=4, + ['"']=3, ["'"]=3, + ['+']=1, ['-']=1, ['*']=1, ['/']=1, ['%']=1, ['^']=1, +} + +buffers.visualizers.lua.options = { } + +buffers.visualizers.lua.options.colorize_strings = false +buffers.visualizers.lua.options.colorize_comments = false + +function buffers.flush_lua_word(state, word, result) + if #word>0 then + local id = buffers.visualizers.lua.words[word] + if id then + state, result = buffers.change_state(2, state, result) + if buffers.visualizers.lua.styles[id] then + state, result = buffers.finish_state(state,result .. buffers.visualizers.lua.styles[id] .. word) + else + state, result = buffers.finish_state(state,result .. word) + end + return state, result + else + state, result = buffers.finish_state(state,result) + return state, result .. buffers.escaped(word) -- cmp mp + end + else + state, result = buffers.finish_state(state,result) + return state, result + end +end + +buffers.visualizers.lua.states.incomment = false + +-- to be sped up + +function buffers.visualizers.lua.flush_line(str, nested) + local result, state = { }, 0 + local instr, inesc, incom = false, false, false + local c, p + local sb, ss, sf = string.byte, string.sub, string.find + local code, comment +--~ buffers.currentcolors = buffers.visualizers.lua.colors +--~ if sf(str,"^%-%-%[") then +--~ buffers.visualizers.lua.states.incomment = true +--~ code, comment, incom = "", str, true +--~ elseif sf(str,"^%]%-%-") then +--~ buffers.visualizers.lua.states.incomment = false +--~ code, comment, incom = "", str, true +--~ elseif buffers.visualizers.lua.states.incomment then +--~ code, comment, incom = "", str, true +--~ else +--~ code, comment = string.match(str,"^(.-)%-%-(.*)$") +--~ if not code then +--~ code, comment = str, "" +--~ end +--~ end +--~ -- bla bla1 bla.bla +--~ for c in string.utfcharacters(code) do +--~ if instr then +--~ if c == s then +--~ if inesc then +--~ result = result .. "\\char" .. sb(c) .. " " +--~ inesc = false +--~ else +--~ state, result = buffers.change_state(buffers.visualizers.lua.states[c], state, result) +--~ instr = false +--~ result = result .. "\\char" .. sb(c) .. " " +--~ state, result = buffers.finish_state(state,result) +--~ end +--~ elseif c == "\\" then +--~ inesc = not inesc +--~ result = result .. buffers.escaped_chr(c) +--~ else +--~ inesc = false +--~ result = result .. buffers.escaped_chr(c) +--~ end +--~ elseif sf(c,"^([\'\"])$") then +--~ s, instr = c, true +--~ state, result = buffers.change_state(buffers.visualizers.lua.states[c], state, result) +--~ result = result .. "\\char" .. sb(c) .. " " +--~ if not buffers.visualizers.lua.options.colorize_strings then +--~ state, result = buffers.finish_state(state,result) +--~ end +--~ elseif c == " " then +--~ state, result = buffers.flush_lua_word(state, word, result) +--~ word = "" +--~ result = result .. "\\obs " +--~ elseif sf(c,"^[%a]$") then +--~ state, result = buffers.finish_state(state,result) +--~ word = word .. c +--~ elseif (#word > 1) and sf(c,"^[%d%.%_]$") then +--~ word = word .. c +--~ else +--~ state, result = buffers.flush_lua_word(state, word, result) +--~ word = "" +--~ state, result = buffers.change_state(buffers.visualizers.lua.states[c], state, result) +--~ result = result .. "\\char" .. sb(c) .. " " +--~ instr = (c == '"') +--~ end +--~ end +--~ state, result = buffers.flush_lua_word(state, word, result) +--~ if comment ~= "" then +--~ state, result = buffers.change_state(buffers.visualizers.lua.states['--'], state, result) +--~ if not incom then +--~ result = result .. buffers.escaped("--") +--~ end +--~ if buffers.visualizers.lua.options.colorize_comments then +--~ state, result = buffers.finish_state(state,result) +--~ result = result .. buffers.escaped(comment) +--~ else +--~ result = result .. buffers.escaped(comment) +--~ state, result = buffers.finish_state(state,result) +--~ end +--~ else +--~ state, result = buffers.finish_state(state,result) +--~ end +--~ tex.sprint(tex.ctxcatcodes,result) + return "not yet finished" +end |