1if not modules then modules = { } end modules [ ' meta-nod ' ] = {
2 version = 1 . 001 ,
3 comment = " companion to meta-nod.mkiv " ,
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 tonumber = tonumber
10local P , R , Cs , lpegmatch = lpeg . P , lpeg . R , lpeg . Cs , lpeg . match
11
12local references = { }
13local trace = false
14local report = logs . reporter ( " metapost " , " nodes " )
15
16local context = context
17local implement = interfaces . implement
18
19trackers . register ( " metapost.nodes " , function ( v ) trace = v end )
20
21local word = R ( " AZ " , " az " , " __ " ) ^ 1
22
23local pattern = Cs (
24 (
25 word / function ( s ) return references [ s ] or s end
26 + P ( " { " ) / " [ "
27 + P ( " } " ) / " ] "
28 + P ( 1 )
29 ) ^ 1
30)
31
32implement {
33 name = " grph_nodes_initialize " ,
34 actions = function ( )
35 references = { }
36 end
37}
38
39implement {
40 name = " grph_nodes_reset " ,
41 actions = function ( )
42 references = { }
43 end
44}
45
46implement {
47 name = " grph_nodes_register " ,
48 arguments = { " string " , " integer " } ,
49 actions = function ( s , r )
50 if not tonumber ( s ) then
51 if trace then
52 report ( " register %i as %a " , t , s )
53 end
54 references [ s ] = r
55 end
56 end
57}
58
59implement {
60 name = " grph_nodes_resolve " ,
61 arguments = " string " ,
62 actions = function ( s )
63 local r = references [ s ]
64 if r then
65 if trace then
66 report ( " resolve %a to %i " , s , r )
67 end
68 context ( r )
69 return
70 end
71 local n = lpegmatch ( pattern , s )
72 if s ~ = n then
73 if trace then
74 report ( " resolve '%s' to %s " , s , n )
75 end
76 context ( n )
77 return
78 end
79 context ( s )
80 end
81}
82 |