OSDN Git Service

fix #37610
[luatex-ja/luatexja.git] / tool / ivslist.tex
1 %#!lualatex
2 \documentclass{article}
3 \batchmode
4 \usepackage{luaotfload,booktabs,array,luacode,longtable}
5 \usepackage[scale=0.8]{geometry}
6 \errorstopmode
7
8 \ifdefined\myfontname\else
9 {\newlinechar=`@
10 \message{@Name of the font to test = }
11 \read-1 to\myfontname \global\let\myfontname\myfontname
12 \message{@}}
13 \fi
14 \font\test=\myfontname\space at 12pt
15 {\test\begin{luacode}
16   ident = fonts.hashes.identifiers[font.current()]
17 \end{luacode}
18 }
19
20
21 \def\FMT#1#2{{\oalign{\test\char#1\crcr\rm\tiny\hss#2\hss\crcr}}}
22 \def\OUT#1{\leavevmode\hbox to 7em{{\test\char"#1}\ ({\tt U+#1})\hss}}%"
23 \begin{document}
24 {\noindent\Large\bf \myfontname\\\null\hfill (%
25   \directlua{tex.sprint(ident.fullname)}%
26 )}
27
28 \bigskip
29 \baselineskip18pt
30
31 \begin{luacode}
32 local fl = fontloader.open(ident.filename)
33 local ft = fontloader.to_table(fl)
34
35 local ivs, ivsi = {}, {}
36 local uniq_flag
37 local function add_ivs_table(tg)
38    for gu, gv in pairs(tg) do
39       local ga = gv.altuni
40       if ga then
41          for _,at in pairs(ga) do
42             local bu, vs = at.unicode, (at.variant or 0)-0xE0100
43             if vs>=0 and vs<0xF0 then
44                if not ivs[bu] then ivs[bu] = {}; ivsi[1+#ivsi]=bu end
45                uniq_flag = true
46                for _,v in pairs(ivs[bu]) do
47                   if v[1]==vs then uniq_flag = false; break end
48                end
49                if uniq_flag then ivs[bu][1+#(ivs[bu])] = { vs, gv.name } end
50             end
51          end
52       end
53    end
54 end
55
56 add_ivs_table(ft.glyphs)
57 if ft.subfonts then
58    for _,v in pairs(ft.subfonts) do
59       add_ivs_table(v.glyphs)
60    end
61 end
62 fontloader.close(fl)
63
64 local unicodes = ident.resources.unicodes
65 local sort = table.sort
66 local sortfn = function (a,b) return a[1]<b[1] end
67 sort(ivsi)
68 for _,v in pairs(ivsi) do 
69    sort(ivs[v], sortfn) 
70    tex.sprint('\\OUT{' .. string.format('%X', v) .. '}\\ ')
71    for _, cn in pairs(ivs[v]) do
72      tex.sprint('\\FMT{' .. tostring(unicodes[cn[2]]) .. '}{' .. cn[1] .. '}' )
73    end
74    tex.sprint('\\par')
75 end
76
77
78 \end{luacode}
79
80
81 \end{document}