1if not modules then modules = { } end modules [ ' lpdf-nod ' ] = {
2 version = 1 . 001 ,
3 comment = " companion to lpdf-ini.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 nodecodes = nodes . nodecodes
10local whatsitcodes = nodes . whatsitcodes
11
12local nodeinjections = backends . nodeinjections
13
14local nuts = nodes . nuts
15
16local setfield = nuts . setfield
17local setdata = nuts . setdata
18
19local copy_node = nuts . copy
20local new_node = nuts . new
21
22local nodepool = nuts . pool
23local register = nodepool . register
24
25local whatsit_code = nodecodes . whatsit
26
27local savewhatsit_code = whatsitcodes . save
28local restorewhatsit_code = whatsitcodes . restore
29local setmatrixwhatsit_code = whatsitcodes . setmatrix
30local literalwhatsit_code = whatsitcodes . literal
31
32local literalvalues = nodes . literalvalues
33local originliteral_code = literalvalues . origin
34local pageliteral_code = literalvalues . page
35local directliteral_code = literalvalues . direct
36local rawliteral_code = literalvalues . raw
37
38local tomatrix = drivers . helpers . tomatrix
39
40local originliteralnode = register ( new_node ( whatsit_code , literalwhatsit_code ) ) setfield ( originliteralnode , " mode " , originliteral_code )
41local pageliteralnode = register ( new_node ( whatsit_code , literalwhatsit_code ) ) setfield ( pageliteralnode , " mode " , pageliteral_code )
42local directliteralnode = register ( new_node ( whatsit_code , literalwhatsit_code ) ) setfield ( directliteralnode , " mode " , directliteral_code )
43local rawliteralnode = register ( new_node ( whatsit_code , literalwhatsit_code ) ) setfield ( rawliteralnode , " mode " , rawliteral_code )
44
45function nodepool . originliteral ( str ) local t = copy_node ( originliteralnode ) setdata ( t , str ) return t end
46function nodepool . pageliteral ( str ) local t = copy_node ( pageliteralnode ) setdata ( t , str ) return t end
47function nodepool . directliteral ( str ) local t = copy_node ( directliteralnode ) setdata ( t , str ) return t end
48function nodepool . rawliteral ( str ) local t = copy_node ( rawliteralnode ) setdata ( t , str ) return t end
49
50local literals = {
51 [ originliteral_code ] = originliteralnode , [ literalvalues [ originliteral_code ] ] = originliteralnode ,
52 [ pageliteral_code ] = pageliteralnode , [ literalvalues [ pageliteral_code ] ] = pageliteralnode ,
53 [ directliteral_code ] = directliteralnode , [ literalvalues [ directliteral_code ] ] = directliteralnode ,
54 [ rawliteral_code ] = rawliteralnode , [ literalvalues [ rawliteral_code ] ] = rawliteralnode ,
55}
56
57function nodepool . literal ( mode , str )
58 if str then
59 local t = copy_node ( literals [ mode ] or pageliteralnode )
60 setdata ( t , str )
61 return t
62 else
63 local t = copy_node ( pageliteralnode )
64 setdata ( t , mode )
65 return t
66 end
67end
68
69local savenode = register ( new_node ( whatsit_code , savewhatsit_code ) )
70local restorenode = register ( new_node ( whatsit_code , restorewhatsit_code ) )
71local setmatrixnode = register ( new_node ( whatsit_code , setmatrixwhatsit_code ) )
72
73function nodepool . save ( )
74 return copy_node ( savenode )
75end
76
77function nodepool . restore ( )
78 return copy_node ( restorenode )
79end
80
81function nodepool . setmatrix ( rx , sx , sy , ry , tx , ty )
82 local t = copy_node ( setmatrixnode )
83 setdata ( t , tomatrix ( rx , sx , sy , ry , tx , ty ) )
84 return t
85end
86 |