OSDN Git Service

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