diff options
Diffstat (limited to 'context/data/scite/context/lexers/scite-context-lexer-mps.lua')
-rw-r--r-- | context/data/scite/context/lexers/scite-context-lexer-mps.lua | 127 |
1 files changed, 57 insertions, 70 deletions
diff --git a/context/data/scite/context/lexers/scite-context-lexer-mps.lua b/context/data/scite/context/lexers/scite-context-lexer-mps.lua index 356bf1f6b..ddf62ecb0 100644 --- a/context/data/scite/context/lexers/scite-context-lexer-mps.lua +++ b/context/data/scite/context/lexers/scite-context-lexer-mps.lua @@ -10,15 +10,13 @@ local global, string, table, lpeg = _G, string, table, lpeg local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V local type = type -local lexer = require("scite-context-lexer") -local context = lexer.context -local patterns = context.patterns +local lexers = require("scite-context-lexer") -local token = lexer.token -local exact_match = lexer.exact_match +local patterns = lexers.patterns +local token = lexers.token -local metafunlexer = lexer.new("mps","scite-context-lexer-mps") -local whitespace = metafunlexer.whitespace +local metafunlexer = lexers.new("mps","scite-context-lexer-mps") +local metafunwhitespace = metafunlexer.whitespace local metapostprimitives = { } local metapostinternals = { } @@ -34,7 +32,7 @@ local mergedinternals = { } do - local definitions = context.loaddefinitions("scite-context-data-metapost") + local definitions = lexers.loaddefinitions("scite-context-data-metapost") if definitions then metapostprimitives = definitions.primitives or { } @@ -43,7 +41,7 @@ do metapostcommands = definitions.commands or { } end - local definitions = context.loaddefinitions("scite-context-data-metafun") + local definitions = lexers.loaddefinitions("scite-context-data-metafun") if definitions then metafuninternals = definitions.internals or { } @@ -69,6 +67,7 @@ end local space = patterns.space -- S(" \n\r\t\f\v") local any = patterns.any +local exactmatch = patterns.exactmatch local dquote = P('"') local cstoken = patterns.idtoken @@ -81,43 +80,44 @@ local cstokentex = R("az","AZ","\127\255") + S("@!?_") -- we could collapse as in tex -local spacing = token(whitespace, space^1) -local rest = token("default", any) -local comment = token("comment", P("%") * (1-S("\n\r"))^0) -local internal = token("reserved", exact_match(mergedshortcuts,false)) -local shortcut = token("data", exact_match(mergedinternals)) - -local helper = token("command", exact_match(metafuncommands)) -local plain = token("plain", exact_match(metapostcommands)) -local quoted = token("quote", dquote) - * token("string", P(1-dquote)^0) - * token("quote", dquote) +local spacing = token(metafunwhitespace, space^1) + +local rest = token("default", any) +local comment = token("comment", P("%") * (1-S("\n\r"))^0) +local internal = token("reserved", exactmatch(mergedshortcuts)) +local shortcut = token("data", exactmatch(mergedinternals)) + +local helper = token("command", exactmatch(metafuncommands)) +local plain = token("plain", exactmatch(metapostcommands)) +local quoted = token("quote", dquote) + * token("string", P(1-dquote)^0) + * token("quote", dquote) local separator = P(" ") + S("\n\r")^1 local btex = (P("btex") + P("verbatimtex")) * separator local etex = separator * P("etex") -local texstuff = token("quote", btex) - * token("string", (1-etex)^0) - * token("quote", etex) -local primitive = token("primitive", exact_match(metapostprimitives)) -local identifier = token("default", cstoken^1) -local number = token("number", number) -local grouping = token("grouping", S("()[]{}")) -- can be an option -local suffix = token("number", P("#@") + P("@#") + P("#")) -local special = token("special", P("#@") + P("@#") + S("#()[]{}<>=:\"")) -- or else := <> etc split -local texlike = token("warning", P("\\") * cstokentex^1) -local extra = token("extra", P("+-+") + P("++") + S("`~%^&_-+*/\'|\\")) +local texstuff = token("quote", btex) + * token("string", (1-etex)^0) + * token("quote", etex) +local primitive = token("primitive", exactmatch(metapostprimitives)) +local identifier = token("default", cstoken^1) +local number = token("number", number) +local grouping = token("grouping", S("()[]{}")) -- can be an option +local suffix = token("number", P("#@") + P("@#") + P("#")) +local special = token("special", P("#@") + P("@#") + S("#()[]{}<>=:\"")) -- or else := <> etc split +local texlike = token("warning", P("\\") * cstokentex^1) +local extra = token("extra", P("+-+") + P("++") + S("`~%^&_-+*/\'|\\")) local nested = P { leftbrace * (V(1) + (1-rightbrace))^0 * rightbrace } -local texlike = token("embedded", P("\\") * (P("MP") + P("mp")) * mptoken^1) +local texlike = token("embedded", P("\\") * (P("MP") + P("mp")) * mptoken^1) * spacing^0 - * token("grouping", leftbrace) - * token("default", (nested + (1-rightbrace))^0 ) - * token("grouping", rightbrace) - + token("warning", P("\\") * cstokentex^1) + * token("grouping", leftbrace) + * token("default", (nested + (1-rightbrace))^0 ) + * token("grouping", rightbrace) + + token("warning", P("\\") * cstokentex^1) -- lua: we assume: lua ( "lua code" ) -local cldlexer = lexer.load("scite-context-lexer-cld","mps-cld") +local cldlexer = lexers.load("scite-context-lexer-cld","mps-cld") local startlua = P("lua") * space^0 * P('(') * space^0 * P('"') local stoplua = P('"') * space^0 * P(')') @@ -125,13 +125,13 @@ local stoplua = P('"') * space^0 * P(')') local startluacode = token("embedded", startlua) local stopluacode = #stoplua * token("embedded", stoplua) -lexer.embed_lexer(metafunlexer, cldlexer, startluacode, stopluacode) +lexers.embed(metafunlexer, cldlexer, startluacode, stopluacode) local luacall = token("embedded",P("lua") * ( P(".") * R("az","AZ","__")^1 )^1) local keyword = token("default", (R("AZ","az","__")^1) * # P(space^0 * P("="))) -metafunlexer._rules = { +metafunlexer.rules = { { "whitespace", spacing }, { "comment", comment }, { "keyword", keyword }, -- experiment, maybe to simple @@ -153,37 +153,24 @@ metafunlexer._rules = { { "rest", rest }, } -metafunlexer._tokenstyles = context.styleset - -metafunlexer._foldpattern = patterns.lower^2 -- separate entry else interference - -metafunlexer._foldsymbols = { - _patterns = { - "[a-z][a-z]+", - }, - ["plain"] = { - ["beginfig"] = 1, - ["endfig"] = -1, - ["beginglyph"] = 1, - ["endglyph"] = -1, - -- ["begingraph"] = 1, - -- ["endgraph"] = -1, - }, - ["primitive"] = { - ["def"] = 1, - ["vardef"] = 1, - ["primarydef"] = 1, - ["secondarydef" ] = 1, - ["tertiarydef"] = 1, - ["enddef"] = -1, - ["if"] = 1, - ["fi"] = -1, - ["for"] = 1, - ["forever"] = 1, - ["endfor"] = -1, - } +metafunlexer.folding = { + ["beginfig"] = { ["plain"] = 1 }, + ["endfig"] = { ["plain"] = -1 }, + ["beginglyph"] = { ["plain"] = 1 }, + ["endglyph"] = { ["plain"] = -1 }, + -- ["begingraph"] = { ["plain"] = 1 }, + -- ["endgraph"] = { ["plain"] = -1 }, + ["def"] = { ["primitive"] = 1 }, + ["vardef"] = { ["primitive"] = 1 }, + ["primarydef"] = { ["primitive"] = 1 }, + ["secondarydef" ] = { ["primitive"] = 1 }, + ["tertiarydef"] = { ["primitive"] = 1 }, + ["enddef"] = { ["primitive"] = -1 }, + ["if"] = { ["primitive"] = 1 }, + ["fi"] = { ["primitive"] = -1 }, + ["for"] = { ["primitive"] = 1 }, + ["forever"] = { ["primitive"] = 1 }, + ["endfor"] = { ["primitive"] = -1 }, } --- if inspect then inspect(metafunlexer) end - return metafunlexer |