OSDN Git Service

jfm: new property "round_threshold" (only yoko direction now)
[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          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
51          [007] = { 0, 0, 0, kanjiskip_shrink=1 },
52          [107] = { 0, 0, 0, kanjiskip_shrink=1 },
53          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
54          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
55       }
56    },
57
58    [2] = { -- 閉じ括弧類
59       chars = {
60          '’', '”', '〉', '》', '」', '』', '】', '〕',
61          '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ',*'
62       },
63       align = 'left', left = 0.0, down = 0.0,
64       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
65       glue = {
66 -- 3 は四分, 2, 4, 9 は0, あとは0.5
67          [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
68          [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
69          [2] = { 0, 0, 0, kanjiskip_shrink=1},
70          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
71          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
72          [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
73          [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
74          [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
75          [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
76          [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
77          [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
78          [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
79       }
80    },
81
82    [3] = { -- 中点類
83       chars = {'・', ':', ';', '·'},
84       align = 'middle', left = 0.0, down = 0.0,
85       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
86       --end_stretch = 0.25,
87       glue = {
88 -- 3 のみ 0.5,あとは0.25
89          [0] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
90          [1] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
91          [2] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
92          [3] = { 0.5 , 0.0, 0.5 , priority=1 },
93          [4] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
94          [5] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
95          [105] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
96          [6] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
97          [007] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
98          [107] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
99          [207] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
100          [8] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
101       }
102    },
103
104    [4] = { -- 句点類
105       chars = {'。', '.'},
106       align = 'left', left = 0.0, down = 0.0,
107       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
108       glue = {
109          -- 3 は.75, 2, 4 は0, あとは0.5
110          [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
111          [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
112          [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1./3, kanjiskip_stretch=1 },
113          [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
114          [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
115          [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
116          [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
117          [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
118          [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
119          [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
120       }
121    },
122
123    [5] = { -- 分離禁止文字
124       chars = { '—', '―', '‥', '…', '〳', '〴', '〵', },
125       align = 'left', left = 0.0, down = 0.0,
126       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
127       glue = {
128          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
129          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
130          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
131          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
132          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
133       },
134       kern = {
135          [5] = 0.0,
136          [105] = 0.0
137       }
138    },
139
140    [105] = { -- 二分(二重)ダッシュ
141       chars = { '゠', '–' },
142       align = 'middle', left = 0.0, down = 0.0,
143       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
144       glue = {
145          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
146          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
147          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
148          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
149          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
150       },
151       kern = {
152          [5] = 0.0,
153          [105] = 0.0
154       }
155    },
156
157    [6] = { -- 感嘆符・疑問符
158       chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
159       align = 'left', left = 0.0, down = 0.0,
160       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
161       glue = {
162          [0] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
163          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
164          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
165          [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1 },
166          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
167          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
168          [007] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
169          [107] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
170          [207] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
171          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
172       },
173       kern = {
174          [5] = 0.0,
175          [105] = 0.0
176       }
177    },
178
179    [007] = { -- 半角カナ,その他半角CID
180       chars = {
181          '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
182          'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
183          'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
184          'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
185          'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
186          'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
187          'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
188       },
189       align = 'left', left = 0.0, down = 0.0,
190       width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
191       glue = {
192          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
193          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
194          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
195          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
196          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
197          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
198       },
199       kern = { [307] = 0 },      
200    },
201
202    [107] = { -- 1/3 角
203       chars = {},
204       align = 'left', left = 0.0, down = 0.0,
205       width = 1/3, height = 0.88, depth = 0.12, italic=0.0,
206       glue = {
207          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
208          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
209          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
210          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
211          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
212          [107] = { 0, 0, 0, kanjiskip_shrink=1 },
213          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
214       }
215    },
216
217    [207] = { -- 1/4 角
218       chars = {},
219       align = 'left', left = 0.0, down = 0.0,
220       width = 0.25, height = 0.88, depth = 0.12, italic=0.0,
221       glue = {
222          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
223          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
224          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
225          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
226          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
227          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
228          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
229       }
230    },
231
232    [307] = { -- 1/4 角
233       chars = { 0x3099, 0x309A },
234       align = 'right', left = 0.0, down = 0.0,
235       width = 0, height = 0.88, depth = 0.12, italic=0.0,
236       glue = {
237          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
238          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
239          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
240          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
241          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
242          [207] = { 0, 0, 0, kanjiskip_shrink=1 },
243          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
244       }
245    },
246
247    [8] = { -- 罫線類.
248       chars = {
249          '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
250          '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
251          '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
252          '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
253          '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
254          '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
255          '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
256          '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
257          '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
258          '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
259          '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
260          '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
261          '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
262          '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
263          '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
264          '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
265       },
266       align = 'left', left = 0.0, down = 0.0,
267       width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
268       glue = {
269          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
270          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
271          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
272          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
273          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
274       },
275       kern = {
276          [8] = 0.0
277       }
278    },
279
280
281    [99] = { -- box末尾
282       chars = {'boxbdd', 'parbdd', 'glue'},
283    },
284
285 }
286
287 local ht = t[007].chars
288 for i=231,632 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
289 for i=8718,8719 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
290 for i=12063,12087 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
291 local ht = t[107].chars
292 for i=9758,9778 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
293 local ht = t[207].chars
294 for i=9738,9757 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
295
296 t[100]=table.fastcopy(t[0])
297 t[100].chars={'nox_alchar'}
298 for i,v in pairs(t) do
299   if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
300     if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
301     if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
302   end
303 end
304
305 luatexja.jfont.define_jfm(t)