summaryrefslogtreecommitdiff
path: root/context/data/scite/context/lexers/scite-context-lexer-mps.lua
diff options
context:
space:
mode:
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.lua127
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