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
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
36
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 },
62 { "rest", rest },
63}
64
65weblexer._tokenstyles = context.styleset
66
67return weblexer
68 |