OSDN Git Service

ltj-jfmglue.lua: treat glyph_node with \nullfont as a node of ALchar
[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       kern = { [307] = 0 },      
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    [5] = { -- -- 二分(二重)ダッシュ
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', 'parbdd', 'glue'},
278    },
279
280 }
281 local ht = t[007].chars
282 for i=8950,9353 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
283 for i=10185,10195 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
284 local ht = t[107].chars
285 for i=13274,13294 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
286 local ht = t[207].chars
287 for i=13254,13273 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
288
289 t[100]=table.fastcopy(t[0])
290 t[100].chars={'nox_alchar'}
291 for i,v in pairs(t) do
292   if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
293     if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
294     if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
295   end
296 end
297 t[200]=table.fastcopy(t[0])
298 t[200].chars={'〱', '〲'}
299 t[200].width = 2.0
300 for i,v in pairs(t) do
301   if type(v)=='table' then
302     if v.glue and v.glue[0] then v.glue[200] = v.glue[0] end
303     if v.kern and v.kern[0] then v.kern[200] = v.kern[0] end
304   end
305 end
306
307 luatexja.jfont.define_jfm(t)