[wadalabfont-kit] / renderer / hiranew.l  

Annotation of /renderer/hiranew.l

Parent Directory | Revision Log

Revision: 1.4 - (view) (download)

1 : ktanaka 1.1 ;
2 :     ; please compile this file by iwasaki version compiler
3 :     ;
4 :     (declare (hirawidth *default-hirawidth* circle-ratio gothicwidth smallhira-affine smallhira-width) special)
5 :    
6 : ktanaka 1.4 ;
7 : ktanaka 1.1 (defelement mincho hira-long
8 :     (cond
9 :     ((equal 2 (length points))
10 :     (lets ((p0 (car points))
11 :     (p1 (cadr points))
12 :     (hwlist (assq 'hirawidth alist))
13 :     (w0 (cond (hwlist (cadr hwlist))(t *default-hirawidth*)))
14 :     (w1 (cond (hwlist (caddr hwlist))(t *default-hirawidth*)))
15 :     (l0 (rot270 (diff2 p1 p0)))
16 :     (a00 (plus2 p0 (normlen2 w0 l0)))
17 :     (a01 (diff2 p0 (normlen2 w0 l0)))
18 :     (a10 (plus2 p1 (normlen2 w1 l0)))
19 :     (a11 (diff2 p1 (normlen2 w1 l0))))
20 :     `(((angle .,a00)(angle .,a10))
21 :     ((angle .,a01)(angle .,a11)))))
22 :     (t
23 :     (lets ((npoints (length points))
24 :     ; (ms (times 0.5 meshsize))
25 :     (ms 0)
26 :     (array (vector (* npoints npoints) 0.0))
27 :     (func #'(lambda (x) (exp (times 0.66666 (log x)))))
28 :     (ti
29 :     (vector (1- npoints)
30 :     (do ((l points (cdr l))
31 :     (ret))
32 :     ((atom (cdr l))(nreverse ret))
33 :     (push (funcall func (metric2 (car l)(cadr l))) ret))))
34 :     (titi (vector (1- npoints)))
35 :     (hwlist (assq 'hirawidth alist))
36 :     (bwi (vector (1- (* npoints 2))))
37 :     (dwi (vector (1- (* npoints 2))))
38 :     (wi (cond (hwlist
39 :     (vector npoints
40 :     (do ((l (cdr hwlist)(cdr l))
41 :     (ret))
42 :     ((atom l)(nreverse ret))
43 :     (push (max ms (times (car l) hirawidth)) ret))))
44 :     (t
45 :     (vector npoints *default-hirawidth*))))
46 :     (center (tenhokan points func))
47 :     )
48 :     (do ((i 0 (1+ i)))((>= i (1- npoints)))
49 :     (vset titi i (times (vref ti i)(vref ti i))))
50 :     (vset array 0 (quotient 2.0 (vref ti 0)))
51 :     (vset array 1 (quotient 1.0 (vref ti 0)))
52 :     (vset bwi 0 (times (quotient 3.0 (vref titi 0))
53 :     (difference (vref wi 1)(vref wi 0))))
54 :     (do ((i 0 (1+ i))
55 :     (j npoints (+ j npoints)))
56 :     ((>= i (- npoints 2)))
57 :     (vset array (+ j i) (quotient 1.0 (vref ti i)))
58 :     (vset array (+ j i 1)(plus (quotient 2.0 (vref ti i))
59 :     (quotient 2.0 (vref ti (1+ i)))))
60 :     (vset array (+ j i 2) (quotient 1.0 (vref ti (1+ i))))
61 :     (vset bwi (1+ i)
62 :     (plus (times (quotient -3.0 (vref titi i))(vref wi i))
63 :     (times (difference (quotient 3.0 (vref titi i))
64 :     (quotient 3.0 (vref titi (1+ i))))
65 :     (vref wi (1+ i)))
66 :     (times (quotient 3.0 (vref titi (1+ i)))
67 :     (vref wi (+ i 2))))))
68 :     (vset array (- (* npoints npoints) 2)
69 :     (quotient 1.0 (vref ti (- npoints 2))))
70 :     (vset array (1- (* npoints npoints))
71 :     (quotient 2.0 (vref ti (- npoints 2))))
72 :     (vset bwi (1- npoints)
73 :     (times (quotient 3.0 (vref titi (- npoints 2)))
74 :     (difference (vref wi (1- npoints))(vref wi (- npoints 2)))))
75 :     (do ((i 0 (1+ i)))((>= i npoints))
76 :     (vset dwi i 0.0)
77 :     )
78 :     (gs npoints array dwi bwi)
79 :     (do ((i 0 (1+ i)))((>= i npoints))
80 :     (vset dwi i (times 0.2 (vref dwi i))))
81 :     (do ((l (reverse center))
82 :     (ret '(nil nil))
83 :     (i (1- npoints) (1- i)))
84 :     ((atom l) ret)
85 :     (match l
86 :     (((angle . p3)(bezier . p2)(beizer . p1)(angle . p0) . rest)
87 :     (setq ret (curve1 p0 p1 p2 p3
88 :     (vref wi (1- i))
89 :     (plus (vref wi (1- i))
90 :     (times 0.3333 (vref ti (1- i))
91 :     (vref dwi (1- i))))
92 :     (plus (vref wi i)
93 :     (times -0.3333 (vref ti (1- i))
94 :     (vref dwi i)))
95 :     (vref wi i)
96 :     ret))
97 :     (setq l (cdddr l)))
98 :     (any (setq l (cdr l)))))))))
99 :    
100 :     (defelement gothic hira-long
101 :     (cond
102 :     ((equal 2 (length points))
103 :     (lets ((p0 (car points))
104 :     (p1 (cadr points))
105 :     (hwlist (assq 'hirawidth alist))
106 :     (w0 (cond (hwlist (cadr hwlist))(t *default-hirawidth*)))
107 :     (w1 (cond (hwlist (caddr hwlist))(t *default-hirawidth*)))
108 :     (l0 (rot270 (diff2 p1 p0)))
109 :     (a00 (plus2 p0 (normlen2 w0 l0)))
110 :     (a01 (diff2 p0 (normlen2 w0 l0)))
111 :     (a10 (plus2 p1 (normlen2 w1 l0)))
112 :     (a11 (diff2 p1 (normlen2 w1 l0))))
113 :     `(((angle .,a00)(angle .,a10))
114 :     ((angle .,a01)(angle .,a11)))))
115 :     (t
116 :     (lets ((npoints (length points))
117 :     (array (vector (* npoints npoints) 0.0))
118 :     (func #'(lambda (x) (exp (times 0.66666 (log x)))))
119 :     (center (tenhokan points func))
120 :     (w gothicwidth)
121 :     )
122 :     (do ((l (reverse center))
123 :     (ret '(nil nil)))
124 :     ((atom l) ret)
125 :     (match l
126 :     (((angle . p3)(bezier . p2)(beizer . p1)(angle . p0) . rest)
127 :     (setq ret (curve1 p0 p1 p2 p3 w w w w ret))
128 :     (setq l (cdddr l)))
129 :     (any (setq l (cdr l)))))))))
130 :    
131 :     (setq circle-ratio (quotient (times 4.0 (difference (sqrt 2) 1)) 3.0))
132 :     (setq smallhira-affine (movexy 200 230 (scalexy 0.8 0.8 (movexy -200 -200))))
133 :     (setq smallhira-width 0.85)
134 :    
135 :     (defun smallkana (type list)
136 :     (lets ((prim (applykanji (car list) type))
137 :     (points (car prim))
138 :     (elements (cadr prim))
139 :     (newpoints)
140 :     (newelements))
141 :     (do ((l points (cdr l)))
142 :     ((atom l))
143 :     (push (affine (car l) smallhira-affine) newpoints))
144 :     (do ((l elements (cdr l))(element)(alist)(hirawidth))
145 :     ((atom l))
146 :     (setq element (car l))
147 :     (setq alist (cddr element))
148 :     (setq hirawidth (assq 'hirawidth alist))
149 :     (cond (hirawidth
150 :     (do ((ll (cdr hirawidth)(cdr ll))
151 :     (newhirawidth))
152 :     ((atom ll)
153 :     (push `(,(car element),(cadr element)
154 :     (hirawidth .,(nreverse newhirawidth))
155 :     .,(remq hirawidth alist))
156 :     newelements))
157 :     (push (fix (times smallhira-width (car ll))) newhirawidth)))
158 :     (t
159 :     (push element newelements))))
160 :     `(,(nreverse newpoints),(nreverse newelements)
161 :     (xlimit 15 385)(ylimit 15 385).,(cddr prim))))
162 :     ;
163 :     (defun kana-joint (fonttype list)
164 :     (lets ((affines (cadr (car list)))
165 :     (prims (cadr (cadr list))))
166 :     (do ((outlines (affinepart (applykanji (car prims)fonttype)(car affines)))
167 :     (a (cdr affines)(cdr a))
168 :     (p (cdr prims)(cdr p)))
169 :     ((atom p)`(,(car outlines),(cadr outlines)
170 :     (xlimit 15 385)(ylimit 15 385).,a))
171 :     (setq outlines
172 :     (appendpart outlines
173 :     (affinepart (applykanji (car p) fonttype)(car a)))))))
174 :     (defkazari mincho ((hira-short hira-long) 2 (hira-short hira-long) 0)
175 :     (progn
176 :     ; (print (list (vref cross 0)(vref cross 1)(vref cross 2)(vref cross 3)))
177 :     `((angle .,(vref cross 2))
178 :     (angle .,(vref cross 1)))))
179 :     (defkazari gothic (hira-long 2 hira-long 0)
180 :     (lets ((p0 (vref cross 0))
181 :     (p1 (vref cross 1))
182 :     (p2 (vref cross 2))
183 :     (p3 (vref cross 3))
184 :     (l0 (diff2 p2 p0))
185 :     (l1 (diff2 p1 p0))
186 :     (rightp (plusp (mul2 l1 (rot90 l0))))
187 :     (costheta (costheta l0 l1)))
188 :     (cond ((and rightp (lessp 0.2 costheta))
189 :     `((angle .,p1)
190 :     (angle .,p2)))
191 :     (t `((angle .,p0))))))
192 :     (defkazari gothic (hira-long 3 hira-long 1)
193 :     (lets ((p0 (vref cross 0))
194 :     (p1 (vref cross 1))
195 :     (p2 (vref cross 2))
196 :     (p3 (vref cross 3))
197 :     (l0 (diff2 p2 p0))
198 :     (l1 (diff2 p1 p0))
199 :     (rightp (plusp (mul2 l1 (rot90 l0))))
200 :     (costheta (costheta l0 l1)))
201 :     (cond ((and (not rightp) (lessp 0.2 costheta))
202 :     `((angle .,p2)
203 :     (angle .,p1)))
204 :     (t `((angle .,p3))))))
205 :    
206 :     ;
207 :     ; circle
208 :     ;
209 :     (defun circle0 (x y rx ry)
210 :     (lets ((rx1 (times rx circle-ratio))
211 :     (ry1 (times ry circle-ratio))
212 :     (p0 `(,x ,(difference y ry )))
213 :     )
214 :     `((angle .,p0)
215 :     (bezier ,(plus x rx1) ,(difference y ry ))
216 :     (bezier ,(plus x rx) ,(difference y ry1))
217 :     (angle ,(plus x rx) ,y)
218 :     (bezier ,(plus x rx) ,(plus y ry1))
219 :     (bezier ,(plus x rx1) ,(plus y ry ))
220 :     (angle ,x ,(plus y ry))
221 :     (bezier ,(difference x rx1) ,(plus y ry ))
222 :     (bezier ,(difference x rx) ,(plus y ry1))
223 :     (angle ,(difference x rx) ,y)
224 :     (bezier ,(difference x rx) ,(difference y ry1))
225 :     (bezier ,(difference x rx1) ,(difference y ry ))
226 :     (angle .,p0))))
227 :     ;
228 :     (defun hira-circle (points (alist))
229 :     (lets ((p0 (first points))
230 :     (p1 (second points))
231 :     (w (times *default-hirawidth* hirawidth))
232 :     (ix (difference (abs (difference (car p1)(car p0))) w))
233 :     (iy (difference (abs (difference (cadr p1)(cadr p0))) w))
234 :     (ox (plus (abs (difference (car p1)(car p0))) w))
235 :     (oy (plus (abs (difference (cadr p1)(cadr p0))) w))
236 :     (ic (circle0 (car p0)(cadr p0) ix iy))
237 :     (oc (circle0 (car p0)(cadr p0) ox oy)))
238 :     `(,ic ,oc)))
239 :     ;
240 :    
241 :     (defelement mincho hira-circle (hira-circle points alist))
242 :     (defelement naal hira-circle (hira-circle points alist))
243 :    
244 :     (defkazari mincho (hira-long 0 hira-long 1)
245 :     (kanastart (vref cross 0)(vref cross 1)(vref cross 2)(vref cross 3)))
246 :     (defkazari mincho (hira-long 2 hira-long 3)
247 :     (reverse
248 :     (kanastart (vref cross 1)(vref cross 0)(vref cross 3)(vref cross 2))))
249 :     (defun kanastart (p0 p1 p2 p3)
250 :     (lets ((pp0 (inter2 p2 p0 1.8))
251 :     (pp1 (inter2 p3 p1 1.8))
252 :     (pp2 (inter2 pp0 pp1 0.5)))
253 :     `((angle .,p0)
254 :     (bezier .,(inter2 p0 pp0 circle-ratio))
255 :     (bezier .,(inter2 pp2 pp0 circle-ratio))
256 :     (angle .,pp2)
257 :     (bezier .,(inter2 pp2 pp1 circle-ratio))
258 :     (bezier .,(inter2 p1 pp1 circle-ratio))
259 :     (angle .,p1))))

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help