summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-10-21 20:31:49 +0000
committerKarl Berry <karl@freefriends.org>2021-10-21 20:31:49 +0000
commita4756b9a2c587fe3fe092cc9cfd8e3b1fb267445 (patch)
tree0b4d0134bccafad5daeb2ede7b872e66e611a6a6 /Master/texmf-dist/tex
parentc1fb42e1c4a88d363f56d1eed4804bc16bcaee59 (diff)
unicodefonttable (21oct21)
git-svn-id: svn://tug.org/texlive/trunk@60826 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/unicodefonttable/unicodefont.tex125
-rw-r--r--Master/texmf-dist/tex/latex/unicodefonttable/unicodefonttable.sty725
2 files changed, 850 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/unicodefonttable/unicodefont.tex b/Master/texmf-dist/tex/latex/unicodefonttable/unicodefont.tex
new file mode 100644
index 00000000000..309f1eb1b9b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/unicodefonttable/unicodefont.tex
@@ -0,0 +1,125 @@
+%%
+%% This is file `unicodefont.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% unicodefonttable.dtx (with options: `standalone')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2019-2021 Frank Mittelbach
+%%
+%% This file was generated from file(s) of the LaTeX `unicodefonttable Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `unicodefonttable Bundle'. You may however distribute the `unicodefonttable Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/FrankMittelbach/fmitex-unicodetable
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%%%%% \iffalse meta-comment
+%% File: unicodefonttable.dtx (C) Copyright 2019-2021 Frank Mittelbach
+
+\def\unicodefonttabledate {2021/10/19}
+\def\unicodefonttableversion{v1.0e}
+
+
+\documentclass{article}
+\setlength\textwidth{470pt}
+\setlength\oddsidemargin{0pt}
+\addtolength\textheight{7\baselineskip}
+\addtolength\topmargin{-3\baselineskip}
+\usepackage{unicodefonttable}
+\def\DEFAULTfontname{Latin Modern Roman}
+\def\DEFAULTfontfeatures{}
+\def\DEFAULTtableconfig{}
+\def\DEFAULTunicodefont{}
+\begin{document}
+\typeout{^^J}
+\ifx\generatetable\undefined
+\else
+ \typein[\answer]{^^JReuse settings from last time (default yes)?^^J^^J%
+ [ font name = \DEFAULTfontname^^J
+ \space unicode? = \ifx\DEFAULTunicodefont\empty yes^^J
+ \space font features = \DEFAULTfontfeatures
+ \else no\fi^^J
+ \space table config = \DEFAULTtableconfig \space]}
+\fi
+\ifx\answer\empty
+ \let\FontNameToTable\DEFAULTfontname
+ \let\IsUnicodeFont\DEFAULTunicodefont
+ \let\FontFeaturesToApply\DEFAULTfontfeatures
+ \let\TableConfigurationToApply\DEFAULTtableconfig
+\else
+\typein[\FontNameToTable]%
+ {^^JInput external font name as understood by fontspec, e.g.,^^J%
+ 'TeX Gyre Pagella' or 'lmroman10-regular.otf'%
+ \ifx\DEFAULTfontname\empty\else
+ ^^J^^J[default \DEFAULTfontname]\fi:}
+\ifx\FontNameToTable\empty \let\FontNameToTable\DEFAULTfontname \fi
+\typein[\IsUnicodeFont]%
+ {^^JIs this a Unicode font?^^J^^J%
+ \ifx\DEFAULTunicodefont\empty [default yes]\else [default no]\fi:}
+\ifx\IsUnicodeFont\empty
+ \let\IsUnicodeFont\DEFAULTunicodefont
+\else
+ \ifx\DEFAULTunicodefont\empty
+ \else
+ \let\IsUnicodeFont\empty
+ \fi
+\fi
+\ifx\IsUnicodeFont\empty
+ \typein[\FontFeaturesToApply]%
+ {^^JInput font feature key/value list to apply%
+ \ifx\DEFAULTfontfeatures\empty\else
+ ^^J^^J[default \DEFAULTfontfeatures]\fi:}
+ \ifx\FontFeaturesToApply\empty \let\FontFeaturesToApply\DEFAULTfontfeatures \fi
+\else
+ \let\FontFeaturesToApply\DEFAULTfontfeatures
+\fi
+\typein[\TableConfigurationToApply]%
+ {^^JInput table configuration key/value list to apply%
+ \ifx\DEFAULTtableconfig\empty\else
+ ^^J^^J[default
+ \expandafter\detokenize\expandafter{\DEFAULTtableconfig}]\fi:}
+\ifx\TableConfigurationToApply\empty
+ \let\TableConfigurationToApply\DEFAULTtableconfig
+\fi
+\edef\generatetable{\noexpand\displayfonttable
+ \ifx\IsUnicodeFont\empty\else *\fi
+ \ifx\TableConfigurationToApply\empty\else
+ [\expandafter\unexpanded\expandafter{\TableConfigurationToApply}]\fi
+ {\FontNameToTable}%
+ \ifx\FontFeaturesToApply\empty\else[\FontFeaturesToApply]\fi
+}
+\fi
+\makeatletter
+\protected@write\@auxout{}{\gdef\string\generatetable
+ {\expandafter\detokenize\expandafter{\generatetable}}}
+\protected@write\@auxout{}{\gdef\string\DEFAULTfontname{\FontNameToTable}}
+\protected@write\@auxout{}{\gdef\string\DEFAULTunicodefont{\IsUnicodeFont}}
+\protected@write\@auxout{}{\gdef\string\DEFAULTfontfeatures{\FontFeaturesToApply}}
+\protected@write\@auxout{}{\gdef\string\DEFAULTtableconfig
+ {\expandafter\detokenize\expandafter{\TableConfigurationToApply}}}
+\makeatother
+\generatetable
+\end{document}
+
+\endinput
+%%
+%% End of file `unicodefont.tex'.
diff --git a/Master/texmf-dist/tex/latex/unicodefonttable/unicodefonttable.sty b/Master/texmf-dist/tex/latex/unicodefonttable/unicodefonttable.sty
new file mode 100644
index 00000000000..fb4df406402
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/unicodefonttable/unicodefonttable.sty
@@ -0,0 +1,725 @@
+%%
+%% This is file `unicodefonttable.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% unicodefonttable.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% Copyright 2019-2021 Frank Mittelbach
+%%
+%% This file was generated from file(s) of the LaTeX `unicodefonttable Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `unicodefonttable Bundle'. You may however distribute the `unicodefonttable Bundle'
+%% without such generated files.
+%%
+%% The newest sources can be found below
+%%
+%% https://github.com/FrankMittelbach/fmitex-unicodetable
+%%
+%% where one can also log issues in case there are any.
+%%
+%%
+%%%%% \iffalse meta-comment
+%% File: unicodefonttable.dtx (C) Copyright 2019-2021 Frank Mittelbach
+
+\def\unicodefonttabledate {2021/10/19}
+\def\unicodefonttableversion{v1.0e}
+
+
+\RequirePackage{xcolor}
+
+\RequirePackage{xparse,l3keys2e}
+\ProvidesExplPackage{unicodefonttable}
+ {\unicodefonttabledate}
+ {\unicodefonttableversion}
+ {Producing font tables for Unicode and other fonts}
+
+\NewDocumentCommand \fonttablesetup { m }
+ { \keys_set:nn {__fmuft} {#1} \ignorespaces }
+\NewDocumentCommand\displayfonttable {s O{} m o}{%
+ \IfBooleanTF #1
+ {
+ \__fmuft_display_fonttable:nnn
+ {nostatistics,display-block=none,hex-digits=head,range-end=FF,#2}
+ {#3}{#4}
+ }
+ {
+ \__fmuft_display_fonttable:nnn {#2}{#3}{#4}
+ }
+}
+\cs_new:Npn \__fmuft_display_fonttable:nnn #1#2#3 {
+ \group_begin:
+ \fontspec{#2}[#3]
+ \keys_set:nn{__fmuft}{#1}
+ \tl_if_empty:NTF \l__fmuft_compare_with_tl
+ { \tl_clear:N \l__fmuft_compare_font_tl }
+ {
+ \setfontface \l__fmuft_compare_font_tl {\l__fmuft_compare_with_tl}[]
+ \cs_set_eq:NN \__fmuft_handle_missing_glyph:n
+ \__fmuft_handle_missing_glyph_compare:n
+ }
+ \begin{longtable\bool_if:NF\l__fmuft_display_header_bool{*}}
+ {@{}r@{\quad}*{16}{c}@{}}
+ \__fmuft_setup_header_footer:nn{#2}{#3}
+ \__fmuft_produce_table_rows:
+ \__fmuft_handle_table_ending:n {#2}
+ \end{longtable\bool_if:NF\l__fmuft_display_header_bool{*}}
+ \group_end:
+}
+
+\DeclareDocumentCommand \fonttableglyphcount {}
+ { \int_use:N \g__fmuft_glyph_int }
+\int_new:N \g__fmuft_glyph_int
+\int_new:N \g__fmuft_glyph_only_B_int
+\int_new:N \g__fmuft_glyph_also_B_int
+
+\cs_new:Npn \__fmuft_setup_header_footer:nn #1#2{
+ \bool_if:NT \l__fmuft_display_header_bool
+ { \__fmuft_format_table_title:nn{#1}{#2} \__fmuft_debug_nl:n{T}\\*[6pt] }
+ \bool_if:NT \l__fmuft_header_hex_digits_bool
+ { \__fmuft_display_row_of_hex_digits: \__fmuft_debug_nl:n{H}\\* }
+ \endfirsthead
+ \bool_if:NT \l__fmuft_display_header_bool
+ { \__fmuft_format_table_cont:nn{#1}{#2} \__fmuft_debug_nl:n{T}\\*[6pt] }
+ \bool_if:NT \l__fmuft_header_hex_digits_bool
+ { \__fmuft_display_row_of_hex_digits: \__fmuft_debug_nl:n{H}\\* }
+ \endhead
+ \bool_if:NT \l__fmuft_footer_hex_digits_bool
+ { \__fmuft_display_row_of_hex_digits: \__fmuft_debug_nl:n{H}\\* }
+ \endfoot
+ \endlastfoot
+}
+\bool_new:N \l__fmuft_header_hex_digits_bool
+\bool_new:N \l__fmuft_footer_hex_digits_bool
+\bool_new:N \l__fmuft_blockwise_hex_digits_bool
+\cs_new:Npn \__fmuft_display_row_of_hex_digits: {
+ & \__fmuft_format_hex_digit:n{0} & \__fmuft_format_hex_digit:n{1}
+ & \__fmuft_format_hex_digit:n{2} & \__fmuft_format_hex_digit:n{3}
+ & \__fmuft_format_hex_digit:n{4} & \__fmuft_format_hex_digit:n{5}
+ & \__fmuft_format_hex_digit:n{6} & \__fmuft_format_hex_digit:n{7}
+ & \__fmuft_format_hex_digit:n{8} & \__fmuft_format_hex_digit:n{9}
+ & \__fmuft_format_hex_digit:n{A} & \__fmuft_format_hex_digit:n{B}
+ & \__fmuft_format_hex_digit:n{C} & \__fmuft_format_hex_digit:n{D}
+ & \__fmuft_format_hex_digit:n{E} & \__fmuft_format_hex_digit:n{F} }
+\cs_new:Npn \__fmuft_format_hex_digit:n #1 {
+ \l__fmuft_hex_digits_font_tl \l__fmuft_color_tl #1 }
+
+\tl_new:N \l__fmuft_color_tl
+\keys_define:nn {__fmuft} {
+ ,header .bool_set:N = \l__fmuft_display_header_bool
+ ,header .default:n = true
+ ,header .initial:n = true
+ ,noheader .bool_set_inverse:N = \l__fmuft_display_header_bool
+ ,noheader .default:n = true
+ ,title-format .cs_set:Np = \__fmuft_format_table_title:nn #1#2
+ ,title-format .initial:n =
+ \IfValueTF{#2} { \caption{ #1~ (features:~ \texttt{\small#2}) } }
+ { \caption{ #1 } }
+ ,title-cont-format .cs_set:Np = \__fmuft_format_table_cont:nn #1#2
+ ,title-cont-format .initial:n = \caption[]{#1~ \emph{cont.}}
+ ,hex-digits .choice:
+ ,hex-digits / block .code:n =
+ \bool_set_true:N \l__fmuft_blockwise_hex_digits_bool
+ \bool_set_false:N \l__fmuft_header_hex_digits_bool
+ \bool_set_false:N \l__fmuft_footer_hex_digits_bool
+ ,hex-digits / foot .code:n =
+ \bool_set_true:N \l__fmuft_footer_hex_digits_bool
+ \bool_set_false:N \l__fmuft_header_hex_digits_bool
+ \bool_set_false:N \l__fmuft_blockwise_hex_digits_bool
+ ,hex-digits / head .code:n =
+ \bool_set_true:N \l__fmuft_header_hex_digits_bool
+ \bool_set_false:N \l__fmuft_footer_hex_digits_bool
+ \bool_set_false:N \l__fmuft_blockwise_hex_digits_bool
+ ,hex-digits / head+foot .code:n =
+ \bool_set_true:N \l__fmuft_header_hex_digits_bool
+ \bool_set_true:N \l__fmuft_footer_hex_digits_bool
+ \bool_set_false:N \l__fmuft_blockwise_hex_digits_bool
+ ,hex-digits / none .code:n =
+ \bool_set_false:N \l__fmuft_header_hex_digits_bool
+ \bool_set_false:N \l__fmuft_footer_hex_digits_bool
+ \bool_set_false:N \l__fmuft_blockwise_hex_digits_bool
+ ,hex-digits .initial:n = head
+ ,hex-digits-font .tl_set:N = \l__fmuft_hex_digits_font_tl
+ ,hex-digits-font .initial:n = \ttfamily \scriptsize
+ ,color .choice:
+ ,color / none .code:n = \tl_clear:N \l__fmuft_color_tl
+ ,color / unknown .code:n = \tl_set:Nn \l__fmuft_color_tl { \color {#1} }
+ ,color .initial:n = blue
+ }
+\cs_new:Npn \__fmuft_handle_table_ending:n #1 {
+ \__fmuft_debug_nl:n{H} \\*
+ \bool_if:NT \l__fmuft_footer_hex_digits_bool
+ { \__fmuft_display_row_of_hex_digits: \__fmuft_debug_nl:n{H} \\* }
+ \bool_if:NT \l__fmuft_display_statistics_bool
+ { \\*[2pt]
+ \multicolumn{17}{l}{ \l__fmuft_stats_font_tl
+ \tl_if_empty:NTF \l__fmuft_compare_with_tl
+ {
+ \__fmuft_format_stats:nn{#1}{\fonttableglyphcount}
+ }
+ {
+ \__fmuft_format_compare_stats:nnnnnn{#1}{\fonttableglyphcount}
+ { \l__fmuft_compare_with_tl }
+ { \int_eval:n { \int_use:N\g__fmuft_glyph_also_B_int +
+ \int_use:N\g__fmuft_glyph_only_B_int }
+ }
+ { \int_eval:n { \fonttableglyphcount -
+ \int_use:N\g__fmuft_glyph_also_B_int }
+ }
+ { \int_use:N\g__fmuft_glyph_only_B_int }
+ }
+ \hspace*{-3cm}
+ }
+ }
+}
+\keys_define:nn {__fmuft} {
+ ,statistics .bool_set:N = \l__fmuft_display_statistics_bool
+ ,statistics .default:n = true
+ ,statistics .initial:n = true
+ ,nostatistics .bool_set_inverse:N = \l__fmuft_display_statistics_bool
+ ,nostatistics .default:n = true
+ ,statistics-font .tl_set:N = \l__fmuft_stats_font_tl
+ ,statistics-font .initial:n = \normalfont\small
+ ,statistics-format .cs_set:Np = \__fmuft_format_stats:nn #1#2
+ ,statistics-format .initial:n = Total~ number~ of~ glyphs~ in~ #1:~#2
+ }
+\cs_new:Npn \__fmuft_debug_nl:n #1 {}
+\keys_define:nn {__fmuft} {
+ debug .code:n = \cs_set:Npn \__fmuft_debug_nl:n ##1
+ {\rlap{\normalfont\scriptsize \qquad ##1}} }
+
+\tl_new:N \g__fmuft_hex_H_tl % higher plane
+\tl_new:N \g__fmuft_hex_A_tl
+\tl_new:N \g__fmuft_hex_B_tl
+\tl_new:N \g__fmuft_hex_C_tl
+\clist_const:Nn\c__fmuft_hex_digits_clist{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
+\cs_new:Npn \__fmuft_produce_table_rows: {
+ \__fmuft_initialize_table_rows:
+ \clist_map_function:nN { { } , 1, 2, E, F } \__fmuft_handle_hex_H:n }
+\cs_new:Npn \__fmuft_handle_hex_H:n #1 { \tl_gset:Nn\g__fmuft_hex_H_tl{#1}
+ \clist_map_function:NN \c__fmuft_hex_digits_clist \__fmuft_handle_hex_A:n }
+\cs_new:Npn \__fmuft_handle_hex_A:n #1 { \tl_gset:Nn\g__fmuft_hex_A_tl{#1}
+ \clist_map_function:NN \c__fmuft_hex_digits_clist \__fmuft_handle_hex_B:n }
+\cs_new:Npn \__fmuft_handle_hex_B:n #1 { \tl_gset:Nn\g__fmuft_hex_B_tl{#1}
+ \clist_map_function:NN \c__fmuft_hex_digits_clist \__fmuft_handle_hex_C:n }
+\cs_new:Npn \__fmuft_handle_hex_C:n #1 { \tl_gset:Nn\g__fmuft_hex_C_tl{#1}
+ \clist_map_function:NN \c__fmuft_hex_digits_clist \__fmuft_handle_hex_D:n }
+\cs_new:Npn \__fmuft_handle_hex_D:n #1 {
+ \__fmuft_handle_slot:x
+ { " \g__fmuft_hex_H_tl \g__fmuft_hex_A_tl
+ \g__fmuft_hex_B_tl \g__fmuft_hex_C_tl #1 }
+}
+\tl_new:N \g__fmuft_row_tl
+
+\cs_new:Npn \__fmuft_handle_slot:n #1 {
+ \__fmuft_if_uchar_exists:nTF { #1 }
+ { \tl_gput_right:Nn \g__fmuft_row_tl
+ { & \__fmuft_format_glyph:n { \symbol{#1} } }
+ \int_gincr:N\g__fmuft_glyph_int
+ \bool_gset_true:N \g__fmuft_glyph_seen_bool
+ \tl_if_empty:NF \l__fmuft_compare_font_tl
+ {
+ \group_begin:
+ \l__fmuft_compare_font_tl
+ \__fmuft_if_uchar_exists:nT { #1 }
+ { \int_gincr:N \g__fmuft_glyph_also_B_int }
+ \group_end:
+ }
+ }
+ { \__fmuft_handle_missing_glyph:n {#1} }
+}
+\cs_generate_variant:Nn \__fmuft_handle_slot:n {x}
+
+\cs_new:Npn \__fmuft_handle_missing_glyph_std:n #1 {
+ \tl_gput_right:Nn \g__fmuft_row_tl
+ { &
+ \__fmuft_format_glyph:n {
+ {\l__fmuft_missing_glyph_color_tl
+ \l__fmuft_missing_glyph_font_tl
+ \l__fmuft_missing_glyph_tl }
+ }
+ }
+}
+\keys_define:nn {__fmuft} {
+ missing-glyph-color .choice:
+ ,missing-glyph-color / none .code:n =
+ \tl_clear:N \l__fmuft_missing_glyph_color_tl
+ ,missing-glyph-color / unknown .code:n =
+ \tl_set:Nn \l__fmuft_missing_glyph_color_tl { \color {#1} }
+ ,missing-glyph-font .tl_set:N = \l__fmuft_missing_glyph_font_tl
+ ,missing-glyph-font .initial:n = \ttfamily \scriptsize
+ ,missing-glyph .tl_set:N = \l__fmuft_missing_glyph_tl
+ ,missing-glyph .initial:n = - }
+\tl_new:N \l__fmuft_missing_glyph_color_tl
+\tl_set:Nn \l__fmuft_missing_glyph_color_tl {\l__fmuft_color_tl}
+\cs_new:Npn \__fmuft_handle_missing_glyph_compare:n #1 {
+ \group_begin:
+ \l__fmuft_compare_font_tl
+ \__fmuft_if_uchar_exists:nTF { #1 }
+ {
+ \tl_gput_right:Nn \g__fmuft_row_tl
+ { &
+ \__fmuft_format_glyph:n
+ { \l__fmuft_compare_bgcolor_tl { \l__fmuft_compare_color_tl
+ \l__fmuft_compare_font_tl
+ \symbol {#1} }
+ }
+ }
+ \int_gincr:N \g__fmuft_glyph_only_B_int
+ \bool_gset_true:N \g__fmuft_glyph_seen_bool
+ }
+ { \__fmuft_handle_missing_glyph_std:n {} }
+ \group_end:
+}
+\tl_new:N \l__fmuft_compare_with_tl
+\tl_new:N \l__fmuft_compare_color_tl
+\tl_new:N \l__fmuft_compare_bgcolor_tl
+\keys_define:nn {__fmuft}
+ {
+ ,compare-with .tl_set:N = \l__fmuft_compare_with_tl
+ ,compare-with .initial:n =
+ ,compare-color .choice:
+ ,compare-color / none .code:n
+ = \tl_clear:N \l__fmuft_compare_color_tl
+ ,compare-color / unknown .code:n
+ = \tl_set:Nn \l__fmuft_compare_color_tl { \color {#1} }
+ ,compare-color .initial:n = red
+ ,compare-bgcolor .choice:
+ ,compare-bgcolor / none .code:n
+ = \tl_clear:N \l__fmuft_compare_bgcolor_tl
+ ,compare-bgcolor / unknown .code:n
+ = \tl_set:Nn \l__fmuft_compare_bgcolor_tl { \colorbox {#1} }
+ ,compare-bgcolor .initial:n = black!10
+ ,statistics-compare-format .cs_set:Np
+ = \__fmuft_format_compare_stats:nnnnnn #1#2#3#4#5#6
+ ,statistics-compare-format .initial:n
+ = \parbox{\linewidth}{
+ Total~ number~ of~ glyphs~ in~ \texttt{#1}:~#2\\
+ Comparison~ font~ \texttt{#3}~ has~ #5~ missing~ and~ #6~
+ extra~ glyphs}
+ }
+\cs_new_eq:NN \__fmuft_handle_missing_glyph:n
+ \__fmuft_handle_missing_glyph_std:n
+
+\cs_new:Npn \__fmuft_format_glyph:n #1 {
+ \hbox_to_wd:nn {\l__fmuft_glyph_box_dim} { \hss #1 \hss } }
+\dim_new:N\l__fmuft_glyph_box_dim
+\keys_define:nn {__fmuft} {
+ glyph-width .dim_set:N = \l__fmuft_glyph_box_dim
+ ,glyph-width .initial:n = 6pt
+}
+
+\prg_set_conditional:Npnn \__fmuft_if_uchar_exists:n #1 { TF , T }
+ { \tex_iffontchar:D \tex_font:D #1 \scan_stop:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\cs_set:Npn \__fmuft_handle_hex_C:n #1 {
+ \__fmuft_maybe_typeset_a_row_and_display_a_block_title:
+ \tl_gset:Nn\g__fmuft_hex_C_tl{#1}
+ \__fmuft_update_block_title:n { \g__fmuft_hex_H_tl
+ \g__fmuft_hex_A_tl
+ \g__fmuft_hex_B_tl
+ \g__fmuft_hex_C_tl }
+ \int_compare:nNnF
+ { " \g__fmuft_hex_H_tl \g__fmuft_hex_A_tl
+ \g__fmuft_hex_B_tl \g__fmuft_hex_C_tl 0 }
+ < { "\l__fmuft_range_start_tl }
+ {
+ \int_compare:nNnTF
+ { " \g__fmuft_hex_H_tl \g__fmuft_hex_A_tl
+ \g__fmuft_hex_B_tl \g__fmuft_hex_C_tl 0 }
+ > { "\l__fmuft_range_end_tl }
+ { \clist_map_break: }
+ {
+ \tl_gset:Nx \g__fmuft_row_tl
+ {
+ \exp_not:N \__fmuft_format_row_title:n
+ { \g__fmuft_hex_H_tl \g__fmuft_hex_A_tl
+ \g__fmuft_hex_B_tl \g__fmuft_hex_C_tl }
+ }
+ \clist_map_function:NN \c__fmuft_hex_digits_clist
+ \__fmuft_handle_hex_D:n
+ }
+ }
+}
+\cs_new:Npn \__fmuft_format_row_title:n #1 {
+ \texttt { \footnotesize \l__fmuft_color_tl U+#1 0 \, - \, #1 F }
+}
+\tl_new:N \l__fmuft_range_start_tl
+\tl_new:N \l__fmuft_range_end_tl
+\keys_define:nn {__fmuft}
+ {
+ ,range-start .tl_set:N = \l__fmuft_range_start_tl
+ ,range-start .initial:n = 0000
+ ,range-end .tl_set:N = \l__fmuft_range_end_tl
+ ,range-end .initial:n = FFFF
+ }
+\cs_new:Npn \__fmuft_maybe_typeset_a_row_and_display_a_block_title: {
+ \bool_if:NTF \g__fmuft_glyph_seen_bool
+ {
+ \tl_if_empty:NTF \g__fmuft_block_title_tl
+ {
+ \bool_if:NTF \g__fmuft_row_missing_bool
+ { \__fmuft_debug_nl:n{A}\\[6pt] }
+ { \__fmuft_debug_nl:n{B}\\ }
+ }
+ {
+ \typeout{ Processing~ \tl_use:N \g__fmuft_block_title_tl }
+ \bool_if:NTF \l__fmuft_display_block_bool
+ {
+ \bool_if:NTF \g__fmuft_first_row_bool
+ {
+ \bool_gset_false:N \g__fmuft_first_row_bool
+ \__fmuft_debug_nl:n{C}\\[-4pt]
+ }
+ {
+ \__fmuft_debug_nl:n{D}\\[8pt]
+ \noalign{\vskip 1pt plus 1pt} % space above block: customizable?
+ }
+ \multicolumn{17}{c}{\normalfont \bfseries
+ \tl_use:N \g__fmuft_block_title_tl}
+ \bool_if:NTF \l__fmuft_blockwise_hex_digits_bool
+ { \__fmuft_debug_nl:n{E}\\*
+ \__fmuft_display_row_of_hex_digits:
+ \__fmuft_debug_nl:n{H}\\*[2pt]
+ }
+ { \__fmuft_debug_nl:n{F}\\*[2pt] }
+ }
+ {
+ \bool_if:NTF \g__fmuft_first_row_bool
+ { \bool_gset_false:N \g__fmuft_first_row_bool }
+ {
+ \__fmuft_debug_nl:n{G~ (new~ block)}
+ \l__fmuft_display_block_action_tl
+ }
+ }
+ \tl_gclear:N \g__fmuft_block_title_tl
+ }
+ \bool_gset_false:N \g__fmuft_glyph_seen_bool
+ \bool_gset_false:N \g__fmuft_row_missing_bool
+ \tl_use:N \g__fmuft_row_tl
+ }
+ {
+ \bool_gset_true:N \g__fmuft_row_missing_bool
+ }
+}
+
+\bool_new:N \g__fmuft_first_row_bool
+\bool_new:N \g__fmuft_glyph_seen_bool
+\bool_new:N \g__fmuft_row_missing_bool
+
+\cs_new:Npn \__fmuft_initialize_table_rows: {
+ \bool_gset_true:N \g__fmuft_first_row_bool
+ \bool_gset_false:N \g__fmuft_glyph_seen_bool
+ \bool_gset_false:N \g__fmuft_row_missing_bool
+ \int_gzero:N \g__fmuft_glyph_int
+ \int_gzero:N \g__fmuft_glyph_only_B_int
+ \int_gzero:N \g__fmuft_glyph_also_B_int
+}
+
+\tl_new:N \g__fmuft_block_title_tl
+
+\cs_new:Npn \__fmuft_update_block_title:n #1 {
+ \tl_gset:Nx \g__fmuft_block_title_tl {
+ \int_case:nnF{ "#1 }
+ {
+ { "000 }{ Basic~ Latin }
+ { "008 }{ Latin-1~ Supplement }
+ { "010 }{ Latin~ Extended-A }
+ { "018 }{ Latin~ Extended-B }
+ { "025 }{ IPA~ Extensions }
+ { "02B }{ Spacing~ Modifier~ Letters }
+ { "030 }{ Combining~ Diacritical~ Marks }
+ { "037 }{ Greek~ and~ Coptic }
+ { "040 }{ Cyrillic }
+ { "053 }{ Armenian }
+ { "059 }{ Hebrew }
+ { "060 }{ Arabic }
+ { "070 }{ Syriac }
+ { "075 }{ Arabic~ Supplement }
+ { "078 }{ Thaana }
+ { "07C }{ NKo }
+ { "090 }{ Devanagari }
+ { "098 }{ Bengali }
+ { "0A0 }{ Gurmukhi }
+ { "0A8 }{ Gujarati }
+ { "0B0 }{ Oriya }
+ { "0B8 }{ Tamil }
+ { "0C0 }{ Telugu }
+ { "0C8 }{ Kannada }
+ { "0D0 }{ Malayalm }
+ { "0D8 }{ Sinhala }
+ { "0E0 }{ Thai }
+ { "0E8 }{ Lao }
+ { "0F0 }{ Tibetan }
+ { "100 }{ Myanmar }
+ { "10A }{ Georgian }
+ { "110 }{ Hangul~ Jamo }
+ { "120 }{ Ethiopic }
+ { "138 }{ Ethiopic~ Supplement }
+ { "13A }{ Cherokee }
+ { "140 }{ Unified~ Canadian~ Aboriginal~ Syllabics }
+ { "168 }{ Ogham }
+ { "16A }{ Runic }
+ { "170 }{ Tagalog }
+ { "172 }{ Hanunoo }
+ { "174 }{ Buhid }
+ { "176 }{ Tagbanwa }
+ { "178 }{ Khmer }
+ { "180 }{ Mongolian }
+ { "190 }{ Limbu }
+ { "195 }{ Tai~ Le }
+ { "198 }{ New~ Tai~ Le }
+ { "19E }{ Khmer~ Symbols }
+ { "1A0 }{ Buginese }
+ { "1B0 }{ Balinese }
+ { "1D0 }{ Phonetic~ Extensions }
+ { "1D8 }{ Phonetic~ Extensions~ Supplement }
+ { "1DC }{ Combining~ Diacritical~ Marks~ Supplement }
+ { "1E0 }{ Latin~ Extended~ Additional }
+ { "1F0 }{ Greek~ Extended }
+ { "200 }{ General~ Punctuation }
+ { "207 }{ Superscripts~ and~ Subscripts }
+ { "20A }{ Currency~ Symbols }
+ { "20D }{ Combining~ Diacritical~ Marks~ for~ Symbols }
+ { "210 }{ Letterlike~ Symbols }
+ { "215 }{ Number~ Forms }
+ { "219 }{ Arrows }
+ { "220 }{ Mathematical~ Operators }
+ { "230 }{ Miscellaneous~ Technical }
+ { "240 }{ Control~ Pictures }
+ { "244 }{ Optical~ Character~ Recognition }
+ { "246 }{ Enclosed~ Alphanumerics }
+ { "250 }{ Box~ Drawing }
+ { "258 }{ Block~ Elements }
+ { "25A }{ Geometric~ Shapes }
+ { "260 }{ Miscellaneous~ Shapes }
+ { "270 }{ Dingbats }
+ { "27C }{ Miscellaneous~ Mathematical~ Symbols-A }
+ { "27F }{ Supplemental~ Arrows-A }
+ { "280 }{ Braille~ Patterns }
+ { "290 }{ Supplemental~ Arrows-B }
+ { "298 }{ Miscellaneous~ Mathematical~ Symbols-B }
+ { "2A0 }{ Supplemental~ Mathematical~ Operators }
+ { "2B0 }{ Miscellaneous~ Symbols~ and~ Arrows }
+ { "2C0 }{ Glagolitic }
+ { "2C6 }{ Latin~ Extended-C }
+ { "2C8 }{ Coptic }
+ { "2D0 }{ Georgian~ Supplement }
+ { "2D3 }{ Tifinagh }
+ { "2D8 }{ Ethiopic~ Extended }
+ { "2E0 }{ Supplemental~ Punctuation }
+ { "2E8 }{ CJK~ Radicals~ Supplement }
+ { "2F0 }{ Kangxi~ Radicals }
+ { "2FF }{ Ideographic~ Description~ Characters }
+ { "300 }{ CJK~ Symbols~ and~ Punctuation }
+ { "304 }{ Hiragana }
+ { "30A }{ Katakana }
+ { "310 }{ Bopomofo }
+ { "313 }{ Hangul~ Compatibility~ Jamo }
+ { "319 }{ Kanbun }
+ { "31A }{ Bopomofo~ Extended }
+ { "31C }{ CJK~ Strokes }
+ { "31F }{ Katakana~ Phonetic~ Extensions }
+ { "320 }{ Enclosed~ CJK~ Letters~ and~ Months }
+ { "330 }{ CJK~ Compatibility }
+ { "4DC }{ Yijing~ Hexagram~ Symbols }
+ { "A00 }{ Yi~ Syllables }
+ { "A49 }{ Yi~ Radicals }
+ { "A70 }{ Modifier~ Tone~ Letters }
+ { "A72 }{ Latin~ Extended-D }
+ { "A80 }{ Syloti~ Nagri }
+ { "A84 }{ Phags-pa }
+ { "A88 }{ Saurashtra }
+ { "A8E }{ Devanagari Extended }
+ { "A90 }{ Kayah Li }
+ { "A93 }{ Rejang }
+ { "A96 }{ Hangul Jamo Extended-A }
+ { "A98 }{ Javanese }
+ { "A9E }{ Myanmar Extended-B }
+ { "AA0 }{ Cham }
+ { "AA6 }{ Myanmar Extended-A }
+ { "AA8 }{ Tai Viet }
+ { "AAE }{ Meetei Mayek Extensions }
+ { "AB0 }{ Ethiopic Extended-A }
+ { "AB3 }{ Latin Extended-E }
+ { "AB7 }{ Cherokee Supplement }
+ { "ABC }{ Meetei Mayek }
+ { "AC0 }{ Hangul Syllables }
+ { "D7B }{ Hangul Jamo Extended-B }
+ { "D80 }{ High Surrogates }
+ { "DB8 }{ High Private Use Surrogates }
+ { "DC0 }{ Low Surrogates }
+ { "E00 }{ Private~ Use~ Area }
+ { "F90 }{ CJK~ Compatibility~ Ideographs }
+ { "FB0 }{ Alphabetic~ Presentation~ Forms }
+ { "FB5 }{ Arabic~ Presentation~ Forms-A }
+ { "FE0 }{ Variation~ Selectors }
+ { "FE1 }{ Vertical~ Forms }
+ { "FE2 }{ Combining~ Half~ Marks }
+ { "FE3 }{ CJK~ Compatibility~ Forms }
+ { "FE5 }{ Small~ Form~ Variants }
+ { "FE7 }{ Arabic~ Presentation~ Forms-B }
+ { "FF0 }{ Halfwidth~ and Fullwidth~ Forms }
+ { "FFF }{ Specials~ ... }
+%% ... Plane 1 ...
+ { "1000 }{ Linear~ B~ Syllabary }
+ { "1008 }{ Linear~ B~ Ideograms }
+ { "1010 }{ Aegean~ Numbers }
+ { "1014 }{ Ancient~ Greek~ Numbers }
+ { "1019 }{ Ancient~ Symbols }
+ { "101D }{ Phaistos~ Disc }
+ { "1028 }{ Lycian }
+ { "102A }{ Carian }
+ { "102E }{ Coptic~ Epact~ Numbers }
+ { "1030 }{ Old~ Italic }
+ { "1033 }{ Gothic }
+ { "1035 }{ Old~ Permic }
+ { "1038 }{ Ugaritic }
+ { "103A }{ Old~ Persian }
+ { "1040 }{ Deseret }
+ { "1045 }{ Shavian }
+ { "1048 }{ Osmanya }
+ { "104B }{ Osage }
+ { "1050 }{ Elbasan }
+ { "1053 }{ Caucasian~ Albanian }
+ { "1060 }{ Linear~ A }
+ { "1080 }{ Cypriot~ Syllabary }
+ { "1084 }{ Imperial~ Aramaic }
+ { "1086 }{ Palmyrene }
+ { "1088 }{ Nabataean }
+ { "108E }{ Hatran }
+ { "1090 }{ Phoenician }
+ { "1092 }{ Lydian }
+ { "1098 }{ Meroitic~ Hieroglyphs }
+ { "109A }{ Meroitic~ Cursive }
+ { "10A0 }{ Kharoshthi }
+ { "10A6 }{ Old~ South~ Arabian }
+ { "10A8 }{ Old~ North~ Arabian }
+ { "10AC }{ Manichaean }
+ { "10B0 }{ Avestan }
+ { "10B4 }{ Inscriptional~ Parthian }
+ { "10B6 }{ Inscriptional~ Pahlavi }
+ { "10B8 }{ Psalter~ Pahlavi }
+ { "10C0 }{ Old~ Turkic }
+ { "10C8 }{ Old~ Hungarian }
+ { "10E6 }{ Rumi~ Numeral~ Symbols }
+ { "1100 }{ Brahmi }
+ { "1108 }{ Kaithi }
+ { "110D }{ Sora~ Sompeng }
+ { "1110 }{ Chakma }
+ { "1115 }{ Mahajani }
+ { "1118 }{ Sharada }
+ { "111E }{ Sinhala~ Archaic~ Numbers }
+ { "1120 }{ Khojki }
+ { "1128 }{ Multani }
+ { "112B }{ Khudawadi }
+ { "1130 }{ Grantha }
+ { "1140 }{ Newa }
+ { "1148 }{ Tirhuta }
+ { "1158 }{ Siddham }
+ { "1160 }{ Modi }
+ { "1166 }{ Mongolian~ Supplement }
+ { "1168 }{ Takri }
+ { "1170 }{ Ahom }
+ { "118A }{ Warang~ Citi }
+ { "11A0 }{ Zanabazar~ Square }
+ { "11A5 }{ Soyombo }
+ { "11AC }{ Pau~ Cin~ Hau }
+ { "11C0 }{ Bhaiksuki }
+ { "11C7 }{ Marchen }
+ { "11D0 }{ Masaram~ Gondi }
+ { "1200 }{ Cuneiform }
+ { "1240 }{ Cuneiform~ Numbers~ and~ Punctuation }
+ { "1248 }{ Early~ Dynastic~ Cuneiform }
+ { "1300 }{ Egyptian~ Hieroglyphs }
+ { "1440 }{ Anatolian~ Hieroglyphs }
+ { "1680 }{ Bamum~ Supplement }
+ { "16A4 }{ Mro }
+ { "16AD }{ Bassa~ Vah }
+ { "16B0 }{ Pahawh~ Hmong }
+ { "16F0 }{ Miao }
+ { "16FE }{ Ideographic~ Symbols~ and~ Punctuation }
+ { "1700 }{ Tangut }
+ { "1880 }{ Tangut~ Components }
+ { "1B00 }{ Kana~ Supplement }
+ { "1B10 }{ Kana~ Extended-A }
+ { "1B17 }{ Nushu }
+ { "1BC0 }{ Duployan }
+ { "1BCA }{ Shorthand~ Format~ Controls }
+ { "1D00 }{ Byzantine~ Musical~ Symbols }
+ { "1D10 }{ Musical~ Symbols }
+ { "1D20 }{ Ancient~ Greek~ Musical~ Notation }
+ { "1D30 }{ Tai~ Xuan~ Jing~ Symbols }
+ { "1D36 }{ Counting~ Rod~ Numerals }
+ { "1D40 }{ Mathematical~ Alphanumeric~ Symbols }
+ { "1D80 }{ Sutton~ SignWriting }
+ { "1E00 }{ Glagolitic~ Supplement }
+ { "1E80 }{ Mende~ Kikakui }
+ { "1E90 }{ Adlam }
+ { "1EE0 }{ Arabic~ Mathematical~ Alphabetic~ Symbols }
+ { "1F00 }{ Mahjong~ Tiles }
+ { "1F03 }{ Domino~ Tiles }
+ { "1F0A }{ Playing~ Cards }
+ { "1F10 }{ Enclosed~ Alphanumeric~ Supplement }
+ { "1F20 }{ Enclosed~ Ideographic~ Supplement }
+ { "1F30 }{ Miscellaneous~ Symbols~ and~ Pictographs }
+ { "1F60 }{ Emoticons }
+ { "1F65 }{ Ornamental~ Dingbats }
+ { "1F68 }{ Transport~ and~ Map~ Symbols }
+ { "1F70 }{ Alchemical~ Symbols }
+ { "1F78 }{ Geometric~ Shapes~ Extended }
+ { "1F80 }{ Supplemental~ Arrows-C }
+ { "1F90 }{ Supplemental~ Symbols~ and~ Pictographs }
+ { "2000 }{ CJK~ Unified~ Ideographs~ Extension~ B }
+ { "2A70 }{ CJK~ Unified~ Ideographs~ Extension~ C }
+ { "2B74 }{ CJK~ Unified~ Ideographs~ Extension~ D }
+ { "2B82 }{ CJK~ Unified~ Ideographs~ Extension~ E }
+ { "2CEB }{ CJK~ Unified~ Ideographs~ Extension~ F }
+ { "2F80 }{ CJK~ Compatibility~ Ideographs~ Supplement }
+ { "E010 }{ Tags }
+ { "E000 }{ Variation~ Selectors~ Supplement }
+ { "F000 }{ Supplementary~ Private~ Use~ Area-A }
+ }
+ { \tl_use:N \g__fmuft_block_title_tl }
+ }
+}
+\bool_new:N \l__fmuft_display_block_bool
+\tl_new:N \l__fmuft_display_block_action_tl
+\keys_define:nn {__fmuft}
+ {
+ ,display-block .choice:
+ ,display-block / titles .code:n =
+ \bool_set_true:N \l__fmuft_display_block_bool
+ \tl_set:Nn \l__fmuft_display_block_action_tl {\\}
+ ,display-block / rules .code:n =
+ \bool_set_false:N \l__fmuft_display_block_bool
+ \tl_set:Nn \l__fmuft_display_block_action_tl {\\ \midrule}
+ ,display-block / none .code:n =
+ \bool_set_false:N \l__fmuft_display_block_bool
+ \tl_set:Nn \l__fmuft_display_block_action_tl {\\}
+ ,display-block .initial:n = titles
+ }
+\ExplSyntaxOff
+\RequirePackage{longtable,booktabs,caption,fontspec}
+\ProcessKeysPackageOptions{__fmuft}
+
+\endinput
+%%
+%% End of file `unicodefonttable.sty'.