1 -- -*- coding: utf-8 -*-
2 -- jfm-ujis.lua: LuaTeX-ja 標準 JFM
3 -- based on upnmlminr-h.tfm (a metric in UTF/OTF package used by upTeX).
5 -- JIS X 4051:2004 では,行末の句読点や中点はベタなのでそれに従う
6 -- kanjiskip: 0pt plus .25zw minus 0pt
7 -- xkanjiskip: .25zw plus .25zw (or .0833zw) minus .125zw
13 kanjiskip = { 0.0, 0.25, 0 },
14 xkanjiskip = { 0.25, 0.25, .125 },
16 align = 'left', left = 0.0, down = 0.0,
17 width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
19 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
20 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
21 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
22 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
23 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
24 [007] = { 0, 0, 0, kanjiskip_shrink=1 },
25 [107] = { 0, 0, 0, kanjiskip_shrink=1 },
26 [207] = { 0, 0, 0, kanjiskip_shrink=1 },
27 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
30 round_threshold = 0.01,
35 '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
36 '〘', '〝', '(', '[', '{', '⦅'
38 align = 'right', left = 0.0, down = 0.0,
39 width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
42 [0] = { 0, 0, 0, kanjiskip_shrink=1 },
43 [1] = { 0, 0, 0, kanjiskip_shrink=1 },
44 [2] = { 0, 0, 0, kanjiskip_shrink=1, kanjiskip_stretch=1 },
45 [3] = { 0.25, 0.0, 0.25, priority=1 },
46 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
47 [5] = { 0, 0, 0, kanjiskip_shrink=1 },
48 [105] = { 0, 0, 0, kanjiskip_shrink=1 },
49 [205] = { 0, 0, 0, kanjiskip_shrink=1 },
50 [305] = { 0, 0, 0, kanjiskip_shrink=1 },
51 [405] = { 0, 0, 0, kanjiskip_shrink=1 },
52 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
53 [007] = { 0, 0, 0, kanjiskip_shrink=1 },
54 [107] = { 0, 0, 0, kanjiskip_shrink=1 },
55 [207] = { 0, 0, 0, kanjiskip_shrink=1 },
56 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
62 '’', '”', '〉', '》', '」', '』', '】', '〕',
63 '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ',*'
65 align = 'left', left = 0.0, down = 0.0,
66 width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
68 -- 3 は四分, 2, 4, 9 は0, あとは0.5
69 [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
70 [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
71 [2] = { 0, 0, 0, kanjiskip_shrink=1},
72 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
73 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
74 [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
75 [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
76 [205] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
77 [305] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
78 [405] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
79 [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
80 [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
81 [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
82 [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
83 [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
88 chars = {'・', ':', ';', '·'},
89 align = 'middle', left = 0.0, down = 0.0,
90 width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
94 [0] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
95 [1] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
96 [2] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
97 [3] = { 0.5 , 0.0, 0.5 , priority=1 },
98 [4] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
99 [5] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
100 [105] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
101 [205] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
102 [305] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
103 [405] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
104 [6] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
105 [007] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
106 [107] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
107 [207] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
108 [8] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
114 align = 'left', left = 0.0, down = 0.0,
115 width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
117 -- 3 は.75, 2, 4 は0, あとは0.5
118 [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
119 [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
120 [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1./3, kanjiskip_stretch=1 },
121 [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
122 [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
123 [205] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
124 [305] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
125 [405] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
126 [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
127 [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
128 [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
129 [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
130 [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
135 chars = { '―', '‥', '…', '〳', '〴', '〵', },
136 align = 'left', left = 0.0, down = 0.0,
137 width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
139 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
140 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
141 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
142 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
143 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
146 [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
150 [105] = { -- 二分(二重)ダッシュ
151 chars = { '゠', '–' },
152 align = 'middle', left = 0.0, down = 0.0,
153 width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
155 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
156 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
157 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
158 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
159 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
162 [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
168 align = 'middle', left = 0.0, down = 0.0,
169 width = 1, height = 0.88, depth = 0.12, italic=0.0,
171 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
172 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
173 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
174 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
175 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
178 [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
181 [305] = { -- two-em dash
183 align = 'middle', left = 0.0, down = 0.0,
184 width = 2, height = 0.88, depth = 0.12, italic=0.0,
186 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
187 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
188 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
189 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
190 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
193 [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
196 [405] = { -- three-em dash
198 align = 'middle', left = 0.0, down = 0.0,
199 width = 3, height = 0.88, depth = 0.12, italic=0.0,
201 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
202 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
203 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
204 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
205 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
208 [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
213 chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
214 align = 'left', left = 0.0, down = 0.0,
215 width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
217 [0] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
218 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
219 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
220 [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1 },
221 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
222 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
223 [007] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
224 [107] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
225 [207] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
226 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
229 [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
233 [007] = { -- 半角カナ,その他半角CID
235 '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
236 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
237 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
238 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
239 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
240 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
241 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
243 align = 'left', left = 0.0, down = 0.0,
244 width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
246 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
247 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
248 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
249 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
250 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
251 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
253 kern = { [307] = 0 },
258 align = 'left', left = 0.0, down = 0.0,
259 width = 1/3, height = 0.88, depth = 0.12, italic=0.0,
261 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
262 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
263 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
264 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
265 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
266 [107] = { 0, 0, 0, kanjiskip_shrink=1 },
267 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
273 align = 'left', left = 0.0, down = 0.0,
274 width = 0.25, height = 0.88, depth = 0.12, italic=0.0,
276 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
277 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
278 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
279 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
280 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
281 [207] = { 0, 0, 0, kanjiskip_shrink=1 },
282 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
286 [307] = { -- 合成用(半)濁点
287 chars = { 0x3099, 0x309A },
288 align = 'right', left = 0.0, down = 0.0,
289 width = 0, height = 0.88, depth = 0.12, italic=0.0,
291 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
292 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
293 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
294 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
295 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
296 [207] = { 0, 0, 0, kanjiskip_shrink=1 },
297 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
303 '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
304 '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
305 '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
306 '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
307 '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
308 '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
309 '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
310 '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
311 '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
312 '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
313 '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
314 '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
315 '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
316 '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
317 '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
318 '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
320 align = 'left', left = 0.0, down = 0.0,
321 width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
323 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
324 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
325 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
326 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
327 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
335 chars = {'boxbdd', 'glue'},
342 local ht = t[007].chars
343 for i=231,632 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
344 for i=8718,8719 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
345 for i=12063,12087 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
346 local ht = t[107].chars
347 for i=9758,9778 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
348 local ht = t[207].chars
349 for i=9738,9757 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
351 t[100]=table.fastcopy(t[0])
352 t[100].chars={'nox_alchar'}
353 for i,v in pairs(t) do
354 if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
355 if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
356 if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
359 t[200]=table.fastcopy(t[0])
360 t[200].chars={ 0x3031,0x3032 }
361 t[200].height=1.38; t[200].depth=0.62
362 for i,v in pairs(t) do
363 if type(i)=='number' and type(v)=='table' then
364 if v.glue and v.glue[0] then v.glue[200] = v.glue[0] end
365 if v.kern and v.kern[0] then v.kern[200] = v.kern[0] end
369 local jf = luatexja.jfont.jfm_feature
370 if jf and jf.beginpar_middledot_zw==true then
371 t[199].kern = { [3] = 0.25 }
374 luatexja.jfont.define_jfm(t)