1 -- -*- coding: utf-8 -*-
2 -- jfm-ujisv.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 = 'middle', left = 0.00, down = 0.00,
17 width = 1.0, height = 0.50, depth = 0.50, 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 [7] = { 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.50, depth = 0.50, 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_stretch=1, kanjiskip_shrink=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 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
50 [7] = { 0, 0, 0, kanjiskip_shrink=1 },
51 [107] = { 0, 0, 0, kanjiskip_shrink=1 },
52 [207] = { 0, 0, 0, kanjiskip_shrink=1 },
53 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
59 '’', '”', '〉', '》', '」', '』', '】', '〕',
60 '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ','
62 align = 'left', left = 0.0, down = 0.0,
63 width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
65 -- 3 は四分, 2, 4, 9 は0, あとは0.5
66 [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
67 [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
68 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
69 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
70 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
71 [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
72 [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
73 [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
74 [7] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
75 [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
76 [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
77 [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
82 chars = {'・', ':', ';', '·'},
83 align = 'middle', left = 0.0, down = 0.0,
84 width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
88 [0] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
89 [1] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
90 [2] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
91 [3] = { 0.5 , 0.0, 0.25, priority=1 },
92 [4] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
93 [5] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
94 [105] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
95 [6] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
96 [7] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
97 [107] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
98 [207] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
99 [8] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
105 align = 'left', left = 0.0, down = 0.0,
106 width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
108 -- 3 は.75, 2, 4 は0, あとは0.5
109 [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
110 [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
111 [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1./3, kanjiskip_stretch=1 },
112 [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
113 [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
114 [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
115 [7] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
116 [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
117 [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
118 [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
123 chars = { '—', '―', '‥', '…', '〳', '〴', '〵', },
124 align = 'left', left = 0.0, down = 0.0,
125 width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
127 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
128 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
129 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
130 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
131 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
139 [105] = { -- -- 二分(二重)ダッシュ
140 chars = { '゠', '–' },
141 align = 'middle', left = 0.0, down = 0.0,
142 width = 0.50, height = 0.50, depth = 0.50, italic=0.0,
144 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
145 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
146 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
147 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
148 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
157 chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
158 align = 'left', left = 0.0, down = 0.0,
159 width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
161 [0] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
162 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
163 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
164 [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1 },
165 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
166 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
167 [7] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
168 [107] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
169 [207] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
170 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
178 [7] = { -- 半角カナ,その他半角CID
180 '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
181 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
182 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
183 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
184 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
185 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
186 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
188 align = 'left', left = 0.0, down = 0.0,
189 width = 0.5, height = 0.5, depth = 0.5, italic=0.0,
191 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
192 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
193 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
194 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
195 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
196 [7] = { 0, 0, 0, kanjiskip_shrink=1 },
197 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
203 align = 'left', left = 0.0, down = 0.0,
204 width = 1/3, height = 0.5, depth = 0.5, italic=0.0,
206 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
207 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
208 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
209 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
210 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
211 [107] = { 0, 0, 0, kanjiskip_shrink=1 },
212 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
217 align = 'left', left = 0.0, down = 0.0,
218 width = 1/4, height = 0.5, depth = 0.5, italic=0.0,
220 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
221 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
222 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
223 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
224 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
225 [207] = { 0, 0, 0, kanjiskip_shrink=1 },
226 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
229 [307] = { -- 合成用濁点・半濁点
230 chars = { 0x3099, 0x309A },
231 align = 'right', left = 0.0, down = 0.0,
232 width = 0, height = 0.5, depth = 0.5, italic=0.0,
234 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
235 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
236 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
237 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
238 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
239 [8] = { 0, 0, 0, kanjiskip_shrink=1 },
245 '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
246 '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
247 '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
248 '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
249 '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
250 '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
251 '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
252 '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
253 '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
254 '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
255 '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
256 '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
257 '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
258 '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
259 '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
260 '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
262 align = 'left', left = 0.0, down = 0.0,
263 width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
265 [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
266 [2] = { 0, 0, 0, kanjiskip_shrink=1 },
267 [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
268 [4] = { 0, 0, 0, kanjiskip_shrink=1 },
269 [6] = { 0, 0, 0, kanjiskip_shrink=1 },
277 chars = {'boxbdd', 'glue'},
284 local ht = t[007].chars
285 for i=8950,9353 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
286 for i=10185,10195 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
287 local ht = t[107].chars
288 for i=13274,13294 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
289 local ht = t[207].chars
290 for i=13254,13273 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
292 t[100]=table.fastcopy(t[0])
293 t[100].chars={'nox_alchar'}
294 for i,v in pairs(t) do
295 if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
296 if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
297 if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
300 t[200]=table.fastcopy(t[0])
301 t[200].chars={'〱', '〲'}
303 for i,v in pairs(t) do
304 if type(v)=='table' then
305 if v.glue and v.glue[0] then v.glue[200] = v.glue[0] end
306 if v.kern and v.kern[0] then v.kern[200] = v.kern[0] end
310 local jf = luatexja.jfont.jfm_feature
311 if jf and jf.beginpar_middledot_zw==true then
312 t[199].kern = { [3] = 0.25 }
315 luatexja.jfont.define_jfm(t)