1
2
3
4
5
6
7
8
9
10
11
12
13
14if known metafun_loaded_luas : endinput ; fi ;
15
16
17
18
19
20
21
22
23
24
25newinternal boolean metafun_loaded_luas ; metafun_loaded_luas := true ; immutable metafun_loaded_luas ;
26
27def newscriptindex suffix t = newinternal t ; immutable t ; enddef ;
28
29newscriptindex mfid_scriptindex ; mfid_scriptindex := runscript("mp.mf_script_index('scriptindex')") ;
30
31def scriptindex = runscript mfid_scriptindex enddef ;
32
33string mfun_lua_bs ; mfun_lua_bs := "[===[" ;
34string mfun_lua_es ; mfun_lua_es := "]===]" ;
35
36vardef mlib_luas_luacall(text t) =
37 runscript("" for s = t :
38 if string s :
39 & s
40
41 elseif numeric s :
42 & decimal s
43 elseif boolean s :
44 & if s : "true" else : "false" fi
45 elseif pair s :
46 & mfun_pair_to_table(s)
47 elseif path s :
48 & mfun_path_to_table(s)
49 elseif rgbcolor s :
50 & mfun_rgb_to_table(s)
51 elseif cmykcolor s :
52 & mfun_cmyk_to_table(s)
53 else :
54 & ditto & tostring(s) & ditto
55 fi endfor
56 )
57enddef ;
58
59newinternal mfun_luas_b ;
60
61def mlib_luas_luadone =
62 exitif numeric begingroup mfun_luas_b := 1 ; endgroup ;
63enddef ;
64
65vardef mlib_luas_lualist(expr c)(text t) =
66 interim mfun_luas_b := 0 ;
67 runscript(c & for s = t :
68 if mfun_luas_b = 0 :
69 "("
70
71 mlib_luas_luadone
72 else :
73 ","
74 fi
75 &
76 if string s :
77 mfun_lua_bs & s & mfun_lua_es
78 elseif numeric s :
79 decimal s
80 elseif boolean s :
81 if s : "true" else : "false" fi
82 elseif pair s :
83 mfun_pair_to_table(s)
84 elseif path s :
85 mfun_path_to_table(s)
86 elseif rgbcolor s :
87 mfun_rgb_to_table(s)
88 elseif cmykcolor s :
89 mfun_cmyk_to_table(s)
90 else :
91 ditto & tostring(s) & ditto
92 fi & endfor if mfun_luas_b = 0 : "()" else : ")" fi
93 )
94enddef ;
95
96def luacall = mlib_luas_luacall enddef ;
97
98vardef lualist@#(text t) = mlib_luas_lualist(str @#)(t) enddef ;
99
100string mlib_luas_s ;
101
102vardef lua@#(text t) =
103 mlib_luas_s := str @# ;
104 if length(mlib_luas_s) > 0 :
105 mlib_luas_lualist(mlib_luas_s,t)
106 else :
107 mlib_luas_luacall(t)
108 fi
109enddef ;
110
111vardef MP@#(text t) =
112 mlib_luas_lualist("MP." & str @#,t)
113enddef ;
114
115
116
117newscriptindex mfun_message ; mfun_message := scriptindex("message") ;
118
119def message text t =
120 runscript mfun_message tostring(t) ;
121enddef ;
122
123permanent newscriptindex, scriptindex, luacall, lua, lualist, mp, MP ;
124
125
126
127
128
129
130
131
132
133newscriptindex mfid_resolvedcolor ; mfid_resolvedcolor := scriptindex "namedcolor" ;
134
135def resolvedcolor = runscript mfid_resolvedcolor enddef ;
136
137permanent resolvedcolor ;
138
139
140
141newscriptindex mfid_mode ; mfid_mode := scriptindex "mode" ;
142newscriptindex mfid_systemmode ; mfid_systemmode := scriptindex "systemmode" ;
143
144vardef texmode (expr s) = runscript mfid_mode s enddef ;
145vardef systemmode (expr s) = runscript mfid_systemmode s enddef ;
146
147
148
149permanent texmode, systemmode ;
150
151
152
153newscriptindex mfid_isarray ; mfid_isarray := scriptindex "isarray" ;
154newscriptindex mfid_prefix ; mfid_prefix := scriptindex "prefix" ;
155newscriptindex mfid_dimension ; mfid_dimension := scriptindex "dimension" ;
156newscriptindex mfid_isobject ; mfid_isobject := scriptindex "isobject" ;
157
158vardef isarray suffix a = runscript mfid_isarray (str a) enddef ;
159vardef prefix suffix a = runscript mfid_prefix (str a) enddef ;
160vardef dimension suffix a = runscript mfid_dimension(str a) enddef ;
161
162vardef isobject expr p = if picture p : runscript mfid_isobject prescriptpart p else : false fi enddef ;
163
164permanent isarray, prefix, dimension, isobject ;
165
166
167
168newscriptindex mfid_getmacro ; mfid_getmacro := scriptindex "getmacro" ; def getmacro = runscript mfid_getmacro enddef ;
169newscriptindex mfid_getdimen ; mfid_getdimen := scriptindex "getdimen" ; def getdimen = runscript mfid_getdimen enddef ;
170newscriptindex mfid_getcount ; mfid_getcount := scriptindex "getcount" ; def getcount = runscript mfid_getcount enddef ;
171newscriptindex mfid_gettoks ; mfid_gettoks := scriptindex "gettoks" ; def gettoks = runscript mfid_gettoks enddef ;
172
173
174
175newscriptindex mfid_setmacro ; mfid_setmacro := scriptindex "setmacro" ; def setmacro(expr k, v) = runscript mfid_setmacro k v ; enddef ;
176newscriptindex mfid_setdimen ; mfid_setdimen := scriptindex "setdimen" ; def setdimen(expr k, v) = runscript mfid_setdimen k v ; enddef ;
177newscriptindex mfid_setcount ; mfid_setcount := scriptindex "setcount" ; def setcount(expr k, v) = runscript mfid_setcount k v ; enddef ;
178newscriptindex mfid_settoks ; mfid_settoks := scriptindex "settoks" ; def settoks (expr k, v) = runscript mfid_settoks k v ; enddef ;
179
180newscriptindex mfid_setglobalmacro ; mfid_setglobalmacro := scriptindex "setglobalmacro" ; def setglobalmacro(expr k, v) = runscript mfid_setglobalmacro k v ; enddef ;
181newscriptindex mfid_setglobaldimen ; mfid_setglobaldimen := scriptindex "setglobaldimen" ; def setglobaldimen(expr k, v) = runscript mfid_setglobaldimen k v ; enddef ;
182newscriptindex mfid_setglobalcount ; mfid_setglobalcount := scriptindex "setglobalcount" ; def setglobalcount(expr k, v) = runscript mfid_setglobalcount k v ; enddef ;
183newscriptindex mfid_setglobaltoks ; mfid_setglobaltoks := scriptindex "setglobaltoks" ; def setglobaltoks (expr k, v) = runscript mfid_setglobaltoks k v ; enddef ;
184
185permanent
186 getmacro, getdimen, getcount, gettoks,
187 setmacro, setdimen, setcount, settoks,
188 setglobalmacro, setglobaldimen, setglobalcount, setglobaltoks ;
189
190newscriptindex mfid_positionpath ; mfid_positionpath := scriptindex("positionpath") ;
191newscriptindex mfid_positioncurve ; mfid_positioncurve := scriptindex("positioncurve") ;
192newscriptindex mfid_positionxy ; mfid_positionxy := scriptindex("positionxy") ;
193newscriptindex mfid_positionx ; mfid_positionx := scriptindex("positionx") ;
194newscriptindex mfid_positiony ; mfid_positiony := scriptindex("positiony") ;
195newscriptindex mfid_positionposition ; mfid_positionparagraph := scriptindex("positionparagraph") ;
196newscriptindex mfid_positionwhd ; mfid_positionwhd := scriptindex("positionwhd") ;
197newscriptindex mfid_positionpage ; mfid_positionpage := scriptindex("positionpage") ;
198newscriptindex mfid_positioncolumn ; mfid_positioncolumn := scriptindex("positioncolumn") ;
199newscriptindex mfid_positionregion ; mfid_positionregion := scriptindex("positionregion") ;
200newscriptindex mfid_positionbox ; mfid_positionbox := scriptindex("positionbox") ;
201newscriptindex mfid_positionanchor ; mfid_positionanchor := scriptindex("positionanchor") ;
202newscriptindex mfid_positioncolumnfromx ; mfid_positioncolumnfromx := scriptindex("positioncolumnfromx") ;
203newscriptindex mfid_positioncolumnbox ; mfid_positioncolumnbox := scriptindex("positioncolumnbox") ;
204newscriptindex mfid_overlaycolumnbox ; mfid_overlaycolumnbox := scriptindex("overlaycolumnbox") ;
205
206vardef positionpath (expr name) = runscript mfid_positionpath (name) enddef ;
207vardef positioncurve (expr name) = runscript mfid_positioncurve (name) enddef ;
208vardef positionxy (expr name) = runscript mfid_positionxy (name) enddef ;
209vardef positionx (expr name) = runscript mfid_positionx (name) enddef ;
210vardef positiony (expr name) = runscript mfid_positiony (name) enddef ;
211vardef positionwhd (expr name) = runscript mfid_positionwhd (name) enddef ;
212vardef positionpage (expr name) = runscript mfid_positionpage (name) enddef ;
213vardef positioncolumn (expr name) = runscript mfid_positioncolumn (name) enddef ;
214vardef positionparagraph(expr name) = runscript mfid_positionparagraph(name) enddef ;
215vardef positionpar (expr name) = runscript mfid_positionparagraph(name) enddef ;
216vardef positionregion (expr name) = runscript mfid_positionregion (name) enddef ;
217vardef positionbox (expr name) = runscript mfid_positionbox (name) enddef ;
218vardef positionanchor = runscript mfid_positionanchor enddef ;
219vardef positioncolumnatx(expr name) = runscript mfid_positioncolumnatx(name) enddef ;
220vardef positioncolumnbox(expr column) = runscript mfid_positioncolumnbox(column) enddef ;
221vardef overlaycolumnbox (expr column) = runscript mfid_overlaycolumnbox (column) enddef ;
222
223vardef positioninregion =
224 currentpicture := currentpicture shifted positionxy(positionanchor) ;
225enddef ;
226
227vardef positionatanchor(expr name) =
228 currentpicture := currentpicture shifted positionxy(name) ;
229enddef ;
230
231permanent positionpath, positioncurve, positionxy, positionwhd,
232 positionpage, positionregion, positioncolumn, positionparagraph,
233 positionbox, positionanchor, positioninregion, positionatanchor,
234 positioncolumnatx, positioncolumnbox, overlaycolumnbox ;
235
236let wdpart = redpart ;
237let htpart = greenpart ;
238let dppart = bluepart ;
239
240permanent wdpart, htpart, dppart;
241
242newscriptindex mfid_sortedpath ; mfid_sortedpath := scriptindex "sortedpath" ;
243newscriptindex mfid_uniquepath ; mfid_uniquepath := scriptindex "uniquepath" ;
244
245def sortedpath = runscript mfid_sortedpath enddef ;
246def uniquepath = runscript mfid_uniquepath enddef ;
247
248permanent sortpath, uniquepath ;
249
250newscriptindex mfid_texvar ; mfid_texvar := scriptindex "texvar" ; vardef texvar(expr s) = runscript mfid_texvar s enddef ;
251newscriptindex mfid_texstr ; mfid_texstr := scriptindex "texstr" ; vardef texstr(expr s) = runscript mfid_texstr s enddef ;
252
253newscriptindex mfid_path_lengthof ; mfid_path_lengthof := scriptindex "pathlengthof" ;
254newscriptindex mfid_path_pointof ; mfid_path_pointof := scriptindex "pathpointof" ;
255newscriptindex mfid_path_leftof ; mfid_path_leftof := scriptindex "pathleftof" ;
256newscriptindex mfid_path_rightof ; mfid_path_rightof := scriptindex "pathrightof" ;
257newscriptindex mfid_path_reset ; mfid_path_reset := scriptindex "pathreset" ;
258
259
260
261 def inpath = = 1 step 1 until runscript mfid_path_lengthof enddef ;
262vardef pointof primary i = runscript mfid_path_pointof i enddef ;
263vardef leftof primary i = runscript mfid_path_leftof i enddef ;
264vardef rightof primary i = runscript mfid_path_rightof i enddef ;
265
266permanent inpath, pointof, leftof, rightof ;
267
268
269
270
271
272
273
274
275extra_endfig := extra_endfig & " runscript mfid_path_reset ; " ;
276
277newscriptindex mfid_utfnum ; mfid_utfnum := scriptindex "utfnum" ;
278newscriptindex mfid_utflen ; mfid_utflen := scriptindex "utflen" ;
279newscriptindex mfid_utfsub ; mfid_utfsub := scriptindex "utfsub" ;
280
281
282
283
284
285vardef utfnum(expr s) = runscript mfid_utfnum s enddef ;
286vardef utflen(expr s) = runscript mfid_utflen s enddef ;
287vardef utfsub(text t) = runscript mfid_utfsub t enddef ;
288
289permanent utfnum, utflen, utfsub ;
290
291newscriptindex mfid_getparameters ; mfid_getparameters := scriptindex "getparameters" ;
292newscriptindex mfid_presetparameters ; mfid_presetparameters := scriptindex "presetparameters" ;
293newscriptindex mfid_hasparameter ; mfid_hasparameter := scriptindex "hasparameter" ;
294newscriptindex mfid_hasoption ; mfid_hasoption := scriptindex "hasoption" ;
295newscriptindex mfid_getparameter ; mfid_getparameter := scriptindex "getparameter" ;
296newscriptindex mfid_getparameterdefault ; mfid_getparameterdefault := scriptindex "getparameterdefault" ;
297newscriptindex mfid_getparametercount ; mfid_getparametercount := scriptindex "getparametercount" ;
298newscriptindex mfid_getmaxparametercount ; mfid_getmaxparametercount := scriptindex "getmaxparametercount" ;
299newscriptindex mfid_getparameterpath ; mfid_getparameterpath := scriptindex "getparameterpath" ;
300newscriptindex mfid_getparameterpen ; mfid_getparameterpen := scriptindex "getparameterpen" ;
301newscriptindex mfid_getparametertext ; mfid_getparametertext := scriptindex "getparametertext" ;
302
303newscriptindex mfid_applyparameters ; mfid_applyparameters := scriptindex "applyparameters" ;
304newscriptindex mfid_mergeparameters ; mfid_mergeparameters := scriptindex "mergeparameters" ;
305newscriptindex mfid_pushparameters ; mfid_pushparameters := scriptindex "pushparameters" ;
306newscriptindex mfid_popparameters ; mfid_popparameters := scriptindex "popparameters" ;
307newscriptindex mfid_setluaparameter ; mfid_setluaparameter := scriptindex "setluaparameter" ;
308
309def getparameters = runscript mfid_getparameters enddef ;
310def presetparameters = runscript mfid_presetparameters enddef ;
311def hasparameter = runscript mfid_hasparameter enddef ;
312def hasoption = runscript mfid_hasoption enddef ;
313def getparameter = runscript mfid_getparameter enddef ;
314def getparameterdefault = runscript mfid_getparameterdefault enddef ;
315def getparametercount = runscript mfid_getparametercount enddef ;
316def getmaxparametercount = runscript mfid_getmaxparametercount enddef ;
317def getparameterpath = runscript mfid_getparameterpath enddef ;
318def getparameterpen = runscript mfid_getparameterpen enddef ;
319def getparametertext = runscript mfid_getparametertext enddef ;
320
321def applyparameters = runscript mfid_applyparameters enddef ;
322def mergeparameters = runscript mfid_mergeparameters enddef ;
323def pushparameters = runscript mfid_pushparameters enddef ;
324def popparameters = runscript mfid_popparameters enddef ;
325def setluaparameter = runscript mfid_setluaparameter enddef ;
326
327permanent getparameters, presetparameters, hasparameter, hasoption, getparameter, getparameterdefault,
328 getparametercount, getmaxparametercount, getparameterpath, getparameterpen, getparametertext,
329 applyparameters, mergeparameters, pushparameters, popparameters, setluaparameter ;
330
331newscriptindex mfun_newrecord ; mfun_newrecord := scriptindex "newrecord" ;
332newscriptindex mfun_setrecord ; mfun_setrecord := scriptindex "setrecord" ;
333newscriptindex mfun_getrecord ; mfun_getrecord := scriptindex "getrecord" ;
334newscriptindex mfun_cntrecord ; mfun_cntrecord := scriptindex "cntrecord" ;
335
336
337
338def record = newinternal numeric runscript enddef ;
339
340def newrecord = runscript mfun_newrecord ; enddef ;
341def setrecord = runscript mfun_setrecord ; enddef ;
342def getrecord = runscript mfun_getrecord enddef ;
343def cntrecord = runscript mfun_cntrecord enddef ;
344
345permanent
346 record, newrecord, setrecord, getrecord, cntrecord ;
347
348
349
350
351newscriptindex mfid_year ; mfid_year := scriptindex "year" ; def year = runscript mfid_year enddef ;
352newscriptindex mfid_month ; mfid_month := scriptindex "month" ; def month = runscript mfid_month enddef ;
353newscriptindex mfid_day ; mfid_day := scriptindex "day" ; def day = runscript mfid_day enddef ;
354newscriptindex mfid_hour ; mfid_hour := scriptindex "hour" ; def hour = runscript mfid_hour enddef ;
355newscriptindex mfid_minute ; mfid_minute := scriptindex "minute" ; def minute = runscript mfid_minute enddef ;
356newscriptindex mfid_second ; mfid_second := scriptindex "second" ; def second = runscript mfid_second enddef ;
357
358permanent year, month, day, hour, minute, second ;
359
360
361
362
363
364newscriptindex mfid_definecolor ; mfid_definecolor := scriptindex "definecolor" ;
365
366def definecolor = runscript mfid_definecolor ; enddef ;
367
368permanent definecolor ;
369
370
371
372
373newscriptindex mfid_showproperty ; mfid_showproperty := scriptindex("showproperty") ;
374newscriptindex mfid_showhashentry ; mfid_showhashentry := scriptindex("showhashentry") ;
375
376def showproperty = runscript mfid_showproperty enddef ;
377def showhashentry = runscript mfid_showhashentry enddef ;
378
379permanent showproperty, showhashentry ;
380
381newscriptindex mfid_textextanchor ; mfid_textextanchor := scriptindex("textextanchor") ;
382
383
384
385vardef textextanchor(expr p) =
386 runscript mfid_textextanchor (prescriptpart p)
387enddef ;
388
389permanent textextanchor ;
390
391newscriptindex mfid_anchorxy ; mfid_anchorxy := scriptindex "anchorxy" ;
392newscriptindex mfid_anchorx ; mfid_anchorx := scriptindex "anchorx" ;
393newscriptindex mfid_anchory ; mfid_anchory := scriptindex "anchory" ;
394newscriptindex mfid_anchorht ; mfid_anchorht := scriptindex "anchorht" ;
395newscriptindex mfid_anchordp ; mfid_anchordp := scriptindex "anchordp" ;
396newscriptindex mfid_anchorul ; mfid_anchorul := scriptindex "anchorul" ;
397newscriptindex mfid_anchorll ; mfid_anchorll := scriptindex "anchorll" ;
398newscriptindex mfid_anchorlr ; mfid_anchorlr := scriptindex "anchorlr" ;
399newscriptindex mfid_anchorur ; mfid_anchorur := scriptindex "anchorur" ;
400newscriptindex mfid_anchorbox ; mfid_anchorbox := scriptindex "anchorbox" ;
401newscriptindex mfid_anchorspan ; mfid_anchorspan := scriptindex "anchorspan" ;
402
403def anchorxy (expr name, x, y) = runscript mfid_anchorxy name x y enddef ;
404def anchorx (expr name, x, y) = runscript mfid_anchorx name x y enddef ;
405def anchory (expr name, x, y) = runscript mfid_anchory name x y enddef ;
406def anchorht (expr name, x, y) = runscript mfid_anchorht name x y enddef ;
407def anchordp (expr name, x, y) = runscript mfid_anchordp name x y enddef ;
408def anchorul (expr name, x, y) = runscript mfid_anchorul name x y enddef ;
409def anchorll (expr name, x, y) = runscript mfid_anchorll name x y enddef ;
410def anchorlr (expr name, x, y) = runscript mfid_anchorlr name x y enddef ;
411def anchorur (expr name, x, y) = runscript mfid_anchorur name x y enddef ;
412
413
414
415string mfun_local_anchor_tag ; mfun_local_anchor_tag := "matrix" ;
416
417
418vardef localanchorbox (expr lname, fx, fy, rname, tx, ty) = (runscript mfid_anchorbox lname fx fy rname tx ty) enddef ;
419vardef localanchorspan(expr lname, fx, fy, rname, tx, ty) = (runscript mfid_anchorspan lname fx fy rname tx ty) enddef ;
420vardef localanchorcell(expr name, x, y ) = (runscript mfid_anchorspan name x y name x y) enddef ;
421
422vardef anchorbox (expr fx, fy, tx, ty) = (runscript mfid_anchorbox mfun_local_anchor_tag fx fy mfun_local_anchor_tag tx ty) enddef ;
423vardef anchorspan(expr fx, fy, tx, ty) = (runscript mfid_anchorspan mfun_local_anchor_tag fx fy mfun_local_anchor_tag tx ty) enddef ;
424vardef anchorcell(expr x, y ) = (runscript mfid_anchorspan mfun_local_anchor_tag x y mfun_local_anchor_tag x y) enddef ;
425
426vardef matrixbox (expr fx, fy, tx, ty) = (runscript mfid_anchorbox mfun_local_anchor_tag fx fy mfun_local_anchor_tag (tx+1) ty) enddef ;
427vardef matrixspan(expr fx, fy, tx, ty) = (runscript mfid_anchorspan mfun_local_anchor_tag fx fy mfun_local_anchor_tag (tx+1) ty) enddef ;
428vardef matrixcell(expr x, y ) = (runscript mfid_anchorbox mfun_local_anchor_tag x y mfun_local_anchor_tag ( x+1) y) enddef ;
429
430permanent
431 anchorxy, anchorx, anchory,
432 anchorht, anchordp,
433 anchorul, anchorll, anchorlr, anchorur, anchorbox,
434 anchorspan ;
435
436permanent
437 matrixbox, matrixspan, matrixcell
438
439 |