OSDN Git Service

jfm-ujis.lua: add new character classes for (two- or three-) em-dashes
[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
10 local t = {
11    version = 3,
12    dir = 'yoko',
13    zw = 1.0, zh = 1.0,
14    kanjiskip =  { 0.0, 0.25, 0 },
15    xkanjiskip = { 0.25, 0.25, .125 },
16    [0] = {
17       align = 'left', left = 0.0, down = 0.0,
18       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
19       glue = {
20          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
21          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
22          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
23          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
24          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
25          [007] = { 0, 0, 0, kanjiskip_shrink=1 },
26          [107] = { 0, 0, 0, kanjiskip_shrink=1 },
27          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
28          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
29       },
30       kern = { [307] = 0 },      
31       round_threshold = 0.01,
32    },
33
34    [1] = { -- 開き括弧類
35       chars = {
36          '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
37          '〘', '〝', '(', '[', '{', '⦅'
38       },
39       align = 'right', left = 0.0, down = 0.0,
40       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
41       glue = {
42 -- 3 のみ四分,あとは0
43          [0] = { 0, 0, 0, kanjiskip_shrink=1 },
44          [1] = { 0, 0, 0, kanjiskip_shrink=1 },
45          [2] = { 0, 0, 0, kanjiskip_shrink=1, kanjiskip_stretch=1 },
46          [3] = { 0.25, 0.0, 0.25, priority=1 },
47          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
48          [5] = { 0, 0, 0, kanjiskip_shrink=1 },
49          [105] = { 0, 0, 0, kanjiskip_shrink=1 },
50          [205] = { 0, 0, 0, kanjiskip_shrink=1 },
51          [305] = { 0, 0, 0, kanjiskip_shrink=1 },
52          [405] = { 0, 0, 0, kanjiskip_shrink=1 },
53          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
54          [007] = { 0, 0, 0, kanjiskip_shrink=1 },
55          [107] = { 0, 0, 0, kanjiskip_shrink=1 },
56          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
57          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
58       }
59    },
60
61    [2] = { -- 閉じ括弧類
62       chars = {
63          '’', '”', '〉', '》', '」', '』', '】', '〕',
64          '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ',*'
65       },
66       align = 'left', left = 0.0, down = 0.0,
67       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
68       glue = {
69 -- 3 は四分, 2, 4, 9 は0, あとは0.5
70          [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
71          [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
72          [2] = { 0, 0, 0, kanjiskip_shrink=1},
73          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
74          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
75          [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
76          [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
77          [205] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
78          [305] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
79          [405] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
80          [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
81          [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
82          [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
83          [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
84          [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
85       }
86    },
87
88    [3] = { -- 中点類
89       chars = {'・', ':', ';', '·'},
90       align = 'middle', left = 0.0, down = 0.0,
91       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
92       --end_stretch = 0.25,
93       glue = {
94 -- 3 のみ 0.5,あとは0.25
95          [0] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
96          [1] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
97          [2] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
98          [3] = { 0.5 , 0.0, 0.5 , priority=1 },
99          [4] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
100          [5] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
101          [105] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
102          [205] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
103          [305] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
104          [405] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
105          [6] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
106          [007] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
107          [107] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
108          [207] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
109          [8] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
110       }
111    },
112
113    [4] = { -- 句点類
114       chars = {'。', '.'},
115       align = 'left', left = 0.0, down = 0.0,
116       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
117       glue = {
118          -- 3 は.75, 2, 4 は0, あとは0.5
119          [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
120          [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
121          [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1./3, kanjiskip_stretch=1 },
122          [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
123          [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
124          [205] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
125          [305] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
126          [405] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
127          [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
128          [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
129          [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
130          [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
131          [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
132       }
133    },
134
135    [5] = { -- 分離禁止文字
136       chars = { '―', '‥', '…', '〳', '〴', '〵', },
137       align = 'left', left = 0.0, down = 0.0,
138       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
139       glue = {
140          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
141          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
142          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
143          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
144          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
145       },
146       kern = {
147          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
148       }
149    },
150
151    [105] = { -- 二分(二重)ダッシュ
152       chars = { '゠', '–' },
153       align = 'middle', left = 0.0, down = 0.0,
154       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
155       glue = {
156          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
157          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
158          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
159          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
160          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
161       },
162       kern = {
163          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
164       }
165    },
166
167    [205] = { -- em-dash
168       chars = { 0x2014 },
169       align = 'middle', left = 0.0, down = 0.0,
170       width = 1, height = 0.88, depth = 0.12, italic=0.0,
171       glue = {
172          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
173          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
174          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
175          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
176          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
177       },
178       kern = {
179          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
180       }
181    },
182    [305] = { -- two-em dash
183       chars = { 0x2E3A },
184       align = 'middle', left = 0.0, down = 0.0,
185       width = 2, height = 0.88, depth = 0.12, italic=0.0,
186       glue = {
187          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
188          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
189          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
190          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
191          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
192       },
193       kern = {
194          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
195       }
196    },
197    [405] = { -- two-em dash
198       chars = { 0x2E3B },
199       align = 'middle', left = 0.0, down = 0.0,
200       width = 3, height = 0.88, depth = 0.12, italic=0.0,
201       glue = {
202          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
203          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
204          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
205          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
206          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
207       },
208       kern = {
209          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
210       }
211    },
212
213    [6] = { -- 感嘆符・疑問符
214       chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
215       align = 'left', left = 0.0, down = 0.0,
216       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
217       glue = {
218          [0] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
219          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
220          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
221          [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1 },
222          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
223          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
224          [007] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
225          [107] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
226          [207] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
227          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
228       },
229       kern = {
230          [5] = 0.0, [105] = 0.0, [205] = 0.0, [305] = 0.0, [405] = 0.0,
231       }
232    },
233
234    [007] = { -- 半角カナ,その他半角CID
235       chars = {
236          '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
237          'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
238          'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
239          'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
240          'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
241          'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
242          'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
243       },
244       align = 'left', left = 0.0, down = 0.0,
245       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
246       glue = {
247          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
248          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
249          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
250          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
251          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
252          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
253       },
254       kern = { [307] = 0 },      
255    },
256
257    [107] = { -- 1/3 角
258       chars = {},
259       align = 'left', left = 0.0, down = 0.0,
260       width = 1/3, height = 0.88, depth = 0.12, italic=0.0,
261       glue = {
262          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
263          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
264          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
265          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
266          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
267          [107] = { 0, 0, 0, kanjiskip_shrink=1 },
268          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
269       }
270    },
271
272    [207] = { -- 1/4 角
273       chars = {},
274       align = 'left', left = 0.0, down = 0.0,
275       width = 0.25, height = 0.88, depth = 0.12, italic=0.0,
276       glue = {
277          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
278          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
279          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
280          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
281          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
282          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
283          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
284       }
285    },
286
287    [307] = { -- 合成用(半)濁点
288       chars = { 0x3099, 0x309A },
289       align = 'right', left = 0.0, down = 0.0,
290       width = 0, height = 0.88, depth = 0.12, italic=0.0,
291       glue = {
292          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
293          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
294          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
295          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
296          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
297          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
298          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
299       }
300    },
301
302    [8] = { -- 罫線類.
303       chars = {
304          '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
305          '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
306          '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
307          '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
308          '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
309          '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
310          '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
311          '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
312          '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
313          '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
314          '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
315          '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
316          '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
317          '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
318          '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
319          '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
320       },
321       align = 'left', left = 0.0, down = 0.0,
322       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
323       glue = {
324          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
325          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
326          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
327          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
328          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
329       },
330       kern = {
331          [8] = 0.0
332       }
333    },
334
335
336    [99] = { -- box末尾
337       chars = {'boxbdd', 'parbdd', 'glue'},
338    },
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
360 luatexja.jfont.define_jfm(t)