OSDN Git Service

remove trailing spaces
[luatex-ja/luatexja.git] / src / jfm-ujis.lua
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).
4
5 -- JIS X 4051:2004 では,行末の句読点や中点はベタなのでそれに従う
6 -- kanjiskip:    0pt plus .25zw minus 0pt
7 -- xkanjiskip: .25zw plus .25zw (or .0833zw) minus .125zw
8
9 local t = {
10    version = 3,
11    dir = 'yoko',
12    zw = 1.0, zh = 1.0,
13    kanjiskip =  { 0.0, 0.25, 0 },
14    xkanjiskip = { 0.25, 0.25, .125 },
15    [0] = {
16       align = 'left', left = 0.0, down = 0.0,
17       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
18       glue = {
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 },
28       },
29       kern = { [307] = 0 },
30       round_threshold = 0.01,
31    },
32
33    [1] = { -- 開き括弧類
34       chars = {
35          '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
36          '〘', '〝', '(', '[', '{', '⦅'
37       },
38       align = 'right', left = 0.0, down = 0.0,
39       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
40       glue = {
41 -- 3 のみ四分,あとは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 },
57       }
58    },
59
60    [2] = { -- 閉じ括弧類
61       chars = {
62          '’', '”', '〉', '》', '」', '』', '】', '〕',
63          '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ',*'
64       },
65       align = 'left', left = 0.0, down = 0.0,
66       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
67       glue = {
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 },
84       }
85    },
86
87    [3] = { -- 中点類
88       chars = {'・', ':', ';', '·'},
89       align = 'middle', left = 0.0, down = 0.0,
90       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
91       --end_stretch = 0.25,
92       glue = {
93 -- 3 のみ 0.5,あとは0.25
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 },
109       }
110    },
111
112    [4] = { -- 句点類
113       chars = {'。', '.'},
114       align = 'left', left = 0.0, down = 0.0,
115       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
116       glue = {
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 },
131       }
132    },
133
134    [5] = { -- 分離禁止文字
135       chars = { '―', '‥', '…', '〳', '〴', '〵', },
136       align = 'left', left = 0.0, down = 0.0,
137       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
138       glue = {
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 },
144       },
145       kern = {
146          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
147       }
148    },
149
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,
154       glue = {
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 },
160       },
161       kern = {
162          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
163       }
164    },
165
166    [205] = { -- em-dash
167       chars = { 0x2014 },
168       align = 'middle', left = 0.0, down = 0.0,
169       width = 1, height = 0.88, depth = 0.12, italic=0.0,
170       glue = {
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 },
176       },
177       kern = {
178          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
179       }
180    },
181    [305] = { -- two-em dash
182       chars = { 0x2E3A },
183       align = 'middle', left = 0.0, down = 0.0,
184       width = 2, height = 0.88, depth = 0.12, italic=0.0,
185       glue = {
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 },
191       },
192       kern = {
193          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
194       }
195    },
196    [405] = { -- three-em dash
197       chars = { 0x2E3B },
198       align = 'middle', left = 0.0, down = 0.0,
199       width = 3, height = 0.88, depth = 0.12, italic=0.0,
200       glue = {
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 },
206       },
207       kern = {
208          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
209       }
210    },
211
212    [6] = { -- 感嘆符・疑問符
213       chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
214       align = 'left', left = 0.0, down = 0.0,
215       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
216       glue = {
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 },
227       },
228       kern = {
229          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
230       }
231    },
232
233    [007] = { -- 半角カナ,その他半角CID
234       chars = {
235          '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
236          'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
237          'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
238          'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
239          'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
240          'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
241          'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
242       },
243       align = 'left', left = 0.0, down = 0.0,
244       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
245       glue = {
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 },
252       },
253       kern = { [307] = 0 },
254    },
255
256    [107] = { -- 1/3 角
257       chars = {},
258       align = 'left', left = 0.0, down = 0.0,
259       width = 1/3, height = 0.88, depth = 0.12, italic=0.0,
260       glue = {
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 },
268       }
269    },
270
271    [207] = { -- 1/4 角
272       chars = {},
273       align = 'left', left = 0.0, down = 0.0,
274       width = 0.25, height = 0.88, depth = 0.12, italic=0.0,
275       glue = {
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 },
283       }
284    },
285
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,
290       glue = {
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 },
298       }
299    },
300
301    [8] = { -- 罫線類.
302       chars = {
303          '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
304          '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
305          '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
306          '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
307          '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
308          '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
309          '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
310          '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
311          '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
312          '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
313          '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
314          '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
315          '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
316          '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
317          '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
318          '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
319       },
320       align = 'left', left = 0.0, down = 0.0,
321       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
322       glue = {
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 },
328       },
329       kern = {
330          [8] = 0.0
331       }
332    },
333
334    [99] = { -- box末尾
335       chars = {'boxbdd', 'glue'},
336    },
337    [199] = { -- box末尾
338       chars = {'parbdd'},
339    },
340 }
341
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
350
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
357   end
358 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
366   end
367 end
368
369 local jf = luatexja.jfont.jfm_feature
370 if jf and jf.beginpar_middledot_zw==true then
371     t[199].kern = { [3] = 0.25 }
372 end
373
374 luatexja.jfont.define_jfm(t)