1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16if known context_grph : endinput ; fi ;
17
18boolean context_grph ; context_grph := true ;
19
20picture _currentpicture_ ;
21
22numeric _fig_nesting_ ; _fig_nesting_ := 0 ;
23
24def beginfig (expr c) =
25 _fig_nesting_ := _fig_nesting_ 1 ;
26 if _fig_nesting_ = 1 :
27 begingroup
28 charcode := c ;
29 resetfig ;
30 scantokens extra_beginfig ;
31 fi ;
32enddef ;
33
34def endfig =
35 ;
36 if _fig_nesting_ = 1 :
37 scantokens extra_endfig ;
38 shipit ;
39 endgroup ;
40 fi ;
41 _fig_nesting_ := _fig_nesting_ 1 ;
42enddef;
43
44def resetfig =
45 clearxy ;
46 clearit ;
47 clearpen ;
48 pickup defaultpen ;
49 interim linecap := linecap ;
50 interim linejoin := linejoin ;
51 interim miterlimit := miterlimit ;
52 save stacking ; numeric stacking ; stacking := 0 ;
53 save makingfigure ; boolean makingfigure ; makingfigure := true ;
54 save _background_ ; color _background_ ; _background_ := background ;
55 save background ; color background ; background := _background_ ;
56 drawoptions () ;
57enddef ;
58
59def protectgraphicmacros =
60 save showtext ;
61 save beginfig ; let beginfig = begingraphictextfig ;
62 save endfig ; let endfig = endgraphictextfig ;
63 save end ; let end = relax ;
64 interim prologues := prologues ;
65 resetfig ;
66enddef ;
67
68numeric currentgraphictext ; currentgraphictext := 0 ;
69
70def begingraphictextfig (expr n) =
71 foundpicture := n ;
72 scratchpicture := nullpicture ;
73enddef ;
74
75def endgraphictextfig =
76 if foundpicture = currentgraphictext :
77 expandafter endinput
78 else :
79 scratchpicture := nullpicture ;
80 fi ;
81enddef ;
82
83def loadfigure primary filename =
84 mfun_load_figure(filename)
85enddef ;
86
87def mfun_load_figure (expr filename) text figureattributes =
88 begingroup ;
89 save figurenumber, figurepicture, number, fixedplace ;
90 numeric figurenumber ; figurenumber := 0 ;
91 boolean figureshift ; figureshift := true ;
92 picture figurepicture ; figurepicture := currentpicture ;
93 def number primary n = hide(figurenumber := n) enddef ;
94 def fixedplace = hide(figureshift := false) enddef ;
95 protectgraphicmacros ;
96
97 interim linecap := rounded ;
98 interim linejoin := rounded ;
99 interim miterlimit := 10 ;
100
101 currentpicture := nullpicture ;
102 draw fullcircle figureattributes ;
103 currentpicture := nullpicture ;
104 def beginfig (expr n) =
105 currentpicture := nullpicture ;
106 if (figurenumber=n) or (figurenumber=0) :
107 let endfig = endinput ;
108 fi ;
109 enddef ;
110 let endfig = relax ;
111 readfile(filename) ;
112 if figureshift :
113 currentpicture := currentpicture shifted llcorner currentpicture ;
114 fi ;
115 addto figurepicture also currentpicture figureattributes ;
116 currentpicture := figurepicture ;
117 endgroup ;
118enddef ;
119
120
121
122boolean mfun_gt_color_fill ;
123boolean mfun_gt_color_draw ;
124boolean mfun_gt_shade_fill ;
125boolean mfun_gt_reverse_fill ;
126boolean mfun_gt_outline_fill ;
127picture mfun_gt_picture ;
128
129def mfun_gt_default =
130 scaled 11.5
131 withpen pencircle scaled .1
132enddef ;
133
134def graphictext primary t =
135 begingroup ;
136 mfun_graphic_text_indeed(t)
137enddef ;
138
139def mfun_graphic_text_indeed(expr t) text rest =
140 interim linecap := butt ;
141 interim linejoin := mitered ;
142
143
144 let normalwithshade = withshade ;
145
146 save reversefill, outlinefill, withshade, withfillcolor, withdrawcolor ;
147
148 def mfun_gt_fill = enddef ;
149 def mfun_gt_draw = enddef ;
150 def mfun_gt_shade = enddef ;
151
152 mfun_gt_color_fill := false ;
153 mfun_gt_color_draw := false ;
154 mfun_gt_shade_fill := false ;
155 mfun_gt_reverse_fill := false ;
156
157 def reversefill = hide(mfun_gt_reverse_fill := true) enddef ;
158 def outlinefill = enddef ;
159 def withshade primary c = hide(mfun_gt_shade_fill := true; def mfun_gt_shade = normalwithshade c enddef ;) enddef ;
160 def withfillcolor primary c = hide(mfun_gt_color_fill := true; def mfun_gt_fill = withcolor c enddef ;) enddef ;
161 def withdrawcolor primary c = hide(mfun_gt_color_draw := true; def mfun_gt_draw = withcolor c enddef ;) enddef ;
162
163 mfun_gt_picture := nullpicture ;
164 addto mfun_gt_picture doublepath origin rest ;
165 mfun_gt_picture := nullpicture ;
166
167 def reversefill = enddef ;
168 def outlinefill = enddef ;
169 def withshade primary c = enddef ;
170 def withfillcolor primary c = enddef ;
171 def withdrawcolor primary c = enddef ;
172
173 if mfun_gt_shade_fill :
174 draw outlinetext.f(t)(mfun_gt_shade) rest;
175 elseif mfun_gt_color_fill and mfun_gt_color_draw :
176 if mfun_gt_reverse_fill :
177 draw outlinetext.r(t)(mfun_gt_default mfun_gt_fill)(mfun_gt_default mfun_gt_draw) rest;
178 else :
179 draw outlinetext.b(t)(mfun_gt_default mfun_gt_draw)(mfun_gt_default mfun_gt_fill) rest;
180 fi ;
181 elseif mfun_gt_color_fill :
182 draw outlinetext.f(t)(mfun_gt_default mfun_gt_fill) rest;
183 elseif mfun_gt_color_draw :
184 draw outlinetext.d(t)(mfun_gt_default mfun_gt_draw) rest ;
185 else :
186 draw outlinetext.d(t)(mfun_gt_default) rest ;
187 fi ;
188
189 endgroup ;
190enddef ;
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209 |