OSDN Git Service

JFM v3: 「仮想的な文字」'alchar', 'nox_alchar', 'glue'
[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    },
31
32    [1] = { -- 開き括弧類
33       chars = {
34          '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
35          '〘', '〝', '(', '[', '{', '⦅'
36       },
37       align = 'right', left = 0.0, down = 0.0,
38       width = 0.5, height = 0.88, depth = 0.12, 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_shrink=1, kanjiskip_stretch=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          [007] = { 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.88, depth = 0.12, 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          [007] = { 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.88, depth = 0.12, 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.5 , 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          [007] = { 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.88, depth = 0.12, 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          [007] = { 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.88, depth = 0.12, 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    [105] = { -- 二分(二重)ダッシュ
139       chars = { '゠', '–' },
140       align = 'middle', left = 0.0, down = 0.0,
141       width = 0.5, height = 0.88, depth = 0.12, 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.88, depth = 0.12, italic=0.0,
159       glue = {
160          [0] = { 0.5 , 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          [007] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
167          [107] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
168          [207] = { 0.5 , 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    [007] = { -- 半角カナ,その他半角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.88, depth = 0.12, 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          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
196       }
197    },
198
199    [107] = { -- 1/3 角
200       chars = {},
201       align = 'left', left = 0.0, down = 0.0,
202       width = 1/3, height = 0.88, depth = 0.12, italic=0.0,
203       glue = {
204          [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
205          [2] = { 0, 0, 0, kanjiskip_shrink=1 },
206          [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
207          [4] = { 0, 0, 0, kanjiskip_shrink=1 },
208          [6] = { 0, 0, 0, kanjiskip_shrink=1 },
209          [107] = { 0, 0, 0, kanjiskip_shrink=1 },
210          [8] = { 0, 0, 0, kanjiskip_shrink=1 },
211       }
212    },
213
214    [207] = { -- 1/4 角
215       chars = {},
216       align = 'left', left = 0.0, down = 0.0,
217       width = 0.25, height = 0.88, depth = 0.12, 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          [207] = { 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.88, depth = 0.12, 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
263    [99] = { -- box末尾
264       chars = {'boxbdd', 'parbdd', 'glue'},
265    },
266
267 }
268
269 local ht = t[007].chars
270 for i=231,632 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
271 for i=8718,8719 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
272 for i=12063,12087 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
273 local ht = t[107].chars
274 for i=9758,9778 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
275 local ht = t[207].chars
276 for i=9738,9757 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
277
278 t[100]=table.fastcopy(t[0])
279 t[100].chars={'nox_alchar'}
280 for i,v in pairs(t) do
281   if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
282     if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
283     if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
284   end
285 end
286
287 luatexja.jfont.define_jfm(t)