%#!lualatex
\documentclass{article}
\batchmode
\usepackage{luaotfload,booktabs,array,luacode,longtable}
\usepackage[scale=0.8]{geometry}
\errorstopmode

\ifdefined\myfontname\else
{\newlinechar=`@
\message{@Name of the font to test = }
\read-1 to\myfontname \global\let\myfontname\myfontname
\message{@}}
\fi
\font\test=\myfontname\space at 12pt
{\test\begin{luacode}
  ident = fonts.hashes.identifiers[font.current()]
\end{luacode}
}


\def\FMT#1#2{{\oalign{\test\char#1\crcr\rm\tiny\hss#2\hss\crcr}}}
\def\OUT#1{\leavevmode\hbox to 7em{{\test\char"#1}\ ({\tt U+#1})\hss}}%"
\begin{document}
{\noindent\Large\bf \myfontname\\\null\hfill (%
  \directlua{tex.sprint(ident.fullname)}%
)}

\bigskip
\baselineskip18pt

\begin{luacode}
local t = ident.shared.rawdata
t = t and t.resources
t = t and t.variants
local ivs, ivsi = {}, {}
for i,v in pairs(t) do
  if i>=0xE0100 then
    for j,w in pairs(v) do
       if not ivs[j] then table.insert(ivsi,j); ivs[j]=ivs[j] or {}; end
       table.insert(ivs[j],{i-0xE0100,w})
    end
  end
end
local sort = table.sort
local sortfn = function (a,b) return a[1]<b[1] end
sort(ivsi)
for _,v in pairs(ivsi) do
   sort(ivs[v], sortfn)
   tex.sprint('\\OUT{' .. string.format('%X', v) .. '}\\ ')
   for _, cn in pairs(ivs[v]) do
     tex.sprint('\\FMT{' .. tostring(cn[2]) .. '}{' .. cn[1] .. '}' )
   end
   tex.sprint('\\par')
end
\end{luacode}


\end{document}