[wadalabfont-kit] / renderer / hiranew.l  

Annotation of /renderer/hiranew.l

Parent Directory | Revision Log

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

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help