OSDN Git Service

2bfe670b9e5f0901c1b2d25d3fdf926e6cd86cb1
[luatex-ja/luatexja.git] / src / jfm-ujisv.lua
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).
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 = 'tate',
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 = 'middle', left = 0.00, down = 0.00,
17       width = 1.0, height = 0.50, depth = 0.50, 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          [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 },
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.50, depth = 0.50, 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_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 },
54       }
55    },
56
57    [2] = { -- 閉じ括弧類
58       chars = {
59          '’', '”', '〉', '》', '」', '』', '】', '〕',
60          '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ','
61       },
62       align = 'left', left = 0.0, down = 0.0,
63       width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
64       glue = {
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 },
78       }
79    },
80
81    [3] = { -- 中点類
82       chars = {'・', ':', ';', '·'},
83       align = 'middle', left = 0.0, down = 0.0,
84       width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
85       --end_stretch = 0.25,
86       glue = {
87 -- 3 のみ 0.5,あとは0.25
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 },
100       }
101    },
102
103    [4] = { -- 句点類
104       chars = {'。', '.'},
105       align = 'left', left = 0.0, down = 0.0,
106       width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
107       glue = {
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 },
119       }
120    },
121
122    [5] = { -- 分離禁止文字
123       chars = { '—', '―', '‥', '…', '〳', '〴', '〵', },
124       align = 'left', left = 0.0, down = 0.0,
125       width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
126       glue = {
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 },
132       },
133       kern = {
134          [5] = 0.0,
135          [105] = 0.0,
136       }
137    },
138
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,
143       glue = {
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 },
149       },
150       kern = {
151          [5] = 0.0,
152          [105] = 0.0
153       }
154    },
155
156    [6] = { -- 感嘆符・疑問符
157       chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
158       align = 'left', left = 0.0, down = 0.0,
159       width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
160       glue = {
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 },
171       },
172       kern = {
173          [5] = 0.0,
174          [105] = 0.0,
175       }
176    },
177
178    [7] = { -- 半角カナ,その他半角CID
179       chars = {
180          '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
181          'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
182          'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
183          'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
184          'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
185          'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
186          'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
187       },
188       align = 'left', left = 0.0, down = 0.0,
189       width = 0.5, height = 0.5, depth = 0.5, italic=0.0,
190       glue = {
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 },
198       }
199    },
200
201    [107] = { -- 1/3 角
202       chars = {},
203       align = 'left', left = 0.0, down = 0.0,
204       width = 1/3, height = 0.5, depth = 0.5, italic=0.0,
205       glue = {
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 },
213       }
214    },
215    [207] = { -- 1/4 角
216       chars = {},
217       align = 'left', left = 0.0, down = 0.0,
218       width = 1/4, height = 0.5, depth = 0.5, italic=0.0,
219       glue = {
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 },
227       }
228    },
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,
233       glue = {
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 },
240       }
241    },
242
243    [8] = { -- 罫線類.
244       chars = {
245          '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
246          '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
247          '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
248          '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
249          '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
250          '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
251          '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
252          '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
253          '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
254          '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
255          '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
256          '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
257          '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
258          '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
259          '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
260          '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
261       },
262       align = 'left', left = 0.0, down = 0.0,
263       width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
264       glue = {
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 },
270       },
271       kern = {
272          [8] = 0.0
273       }
274    },
275
276    [99] = { -- box末尾
277       chars = {'boxbdd', 'glue'},
278    },
279    [199] = { -- box末尾
280       chars = {'parbdd'},
281    },
282
283 }
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
291
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
298   end
299 end
300 t[200]=table.fastcopy(t[0])
301 t[200].chars={'〱', '〲'}
302 t[200].width = 2.0
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
307   end
308 end
309
310 local jf = luatexja.jfont.jfm_feature
311 if jf and jf.beginpar_middledot_zw==true then
312     t[199].kern = { [3] = 0.25 }
313 end
314
315 luatexja.jfont.define_jfm(t)