1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
if not modules then modules = { } end modules ['cldf-bas'] = {
version = 1.001,
comment = "companion to cldf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-- used in chem-ini.lua
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local P, R, V, Cc, Cs = lpeg.P, lpeg.R, lpeg.V, lpeg.Cc, lpeg.Cs
local format = string.format
local cpatterns = patterns.context or { }
patterns.context = cpatterns
local utf8character = patterns.utf8character
local cardinal = patterns.cardinal
local leftbrace = P("{")
local rightbrace = P("}")
local backslash = P("\\")
local csname = backslash * P(1) * (1-backslash-leftbrace)^0 * P(" ")^0
local sign = P("+") / "\\textplus "
+ P("-") / "\\textminus "
local nested = P { leftbrace * (V(1) + (1-rightbrace))^0 * rightbrace }
local subscript = P("_")
local superscript = P("^")
-- local scripts = P { "start",
-- start = V("csname") + V("lowfirst") + V("highfirst"),
-- csname = csname,
-- content = Cs(V("csname") + nested + sign^-1 * (cardinal + utf8character)),
-- lowfirst = subscript * ( Cc("\\lohi{%s}{%s}") * V("content") * superscript + Cc("\\low{%s}" ) ) * V("content") / format,
-- highfirst = superscript * ( Cc("\\hilo{%s}{%s}") * V("content") * subscript + Cc("\\high{%s}") ) * V("content") / format,
-- }
-- local scripts = P { "start",
-- start = (V("csname") + V("lowfirst") + V("highfirst"))^1,
-- csname = csname,
-- content = Cs(V("csname") + nested + sign^-1 * (cardinal + utf8character)),
-- lowfirst = (subscript /"") * ( Cc("\\lohi{") * V("content") * Cc("}{") * (superscript/"") + Cc("\\low{" ) ) * V("content") * Cc("}"),
-- highfirst = (superscript/"") * ( Cc("\\hilo{") * V("content") * Cc("}{") * (subscript /"") + Cc("\\high{") ) * V("content") * Cc("}"),
-- }
local scripted = Cs { "start",
start = (V("csname") + V("nested") + V("lowfirst") + V("highfirst") + V("character"))^1,
rest = V("csname") + V("nested") + V("lowfirst") + V("highfirst"),
csname = csname,
character = utf8character,
-- nested = leftbrace * (V("rest") + (V("character")-rightbrace))^0 * rightbrace,
nested = leftbrace * (V("start") -rightbrace)^0 * rightbrace,
-- content = Cs(V("nested") + sign^-1 * (cardinal + V("character"))),
content = V("nested") + sign^-1 * (cardinal + V("character")) + sign,
lowfirst = (subscript /"") * ( Cc("\\lohi{") * V("content") * Cc("}{") * (superscript/"") + Cc("\\low{" ) ) * V("content") * Cc("}"),
highfirst = (superscript/"") * ( Cc("\\hilo{") * V("content") * Cc("}{") * (subscript /"") + Cc("\\high{") ) * V("content") * Cc("}"),
}
cpatterns.csname = csname
cpatterns.scripted = scripted
cpatterns.nested = nested
-- print(lpegmatch(scripted,"10^-3_x"))
-- print(lpegmatch(scripted,"\\L {C_5}"))
-- print(lpegmatch(scripted,"\\SL{}"))
-- print(lpegmatch(scripted,"\\SL{C_5}"))
-- print(lpegmatch(scripted,"\\SL{C_5}"))
-- print(lpegmatch(scripted,"{C_5}"))
-- print(lpegmatch(scripted,"{\\C_5}"))
-- print(lpegmatch(scripted,"10^-a"))
|