scite-context-lexer-web.lua /size: 2281 b    last modification: 2020-07-01 14:35
1local info = {
2    version   = 1.003,
3    comment   = "scintilla lpeg lexer for web",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files",
7}
8
9local P, R, S = lpeg.P, lpeg.R, lpeg.S
10
11local lexer       = require("scite-context-lexer")
12local context     = lexer.context
13local patterns    = context.patterns
14
15local token       = lexer.token
16local exact_match = lexer.exact_match
17
18local weblexer    = lexer.new("web","scite-context-lexer-web")
19local whitespace  = weblexer.whitespace
20
21local space       = patterns.space -- S(" \n\r\t\f\v")
22local any         = patterns.any
23local restofline  = patterns.restofline
24local startofline = patterns.startofline
25
26local period      = P(".")
27local percent     = P("%")
28
29local spacing     = token(whitespace, space^1)
30local rest        = token("default", any)
31
32local eop         = P("@>")
33local eos         = eop * P("+")^-1 * P("=")
34
35-- we can put some of the next in the web-snippets file
36-- is f okay here?
37
38local texcomment  = token("comment", percent * restofline^0)
39
40local texpart     = token("label",P("@"))  * #spacing
41                  + token("label",P("@") * P("*")^1) * token("function",(1-period)^1) * token("label",period)
42local midpart     = token("label",P("@d")) * #spacing
43                  + token("label",P("@f")) * #spacing
44local cpppart     = token("label",P("@c")) * #spacing
45                  + token("label",P("@p")) * #spacing
46                  + token("label",P("@") * S("<(")) * token("function",(1-eop)^1) * token("label",eos)
47
48local anypart     = P("@") * ( P("*")^1 + S("dfcp") + space^1 + S("<(") * (1-eop)^1 * eos )
49local limbo       = 1 - anypart - percent
50
51local texlexer    = lexer.load("scite-context-lexer-tex-web")
52local cpplexer    = lexer.load("scite-context-lexer-cpp-web")
53
54lexer.embed_lexer(weblexer, texlexer, texpart + limbo,   #anypart)
55lexer.embed_lexer(weblexer, cpplexer, cpppart + midpart, #anypart)
56
57local texcomment    = token("comment", percent * restofline^0)
58
59weblexer._rules = {
60    { "whitespace", spacing    },
61    { "texcomment", texcomment }, -- else issues with first tex section
62    { "rest",       rest       },
63}
64
65weblexer._tokenstyles = context.styleset
66
67return weblexer
68