diff options
author | Karl Berry <karl@freefriends.org> | 2021-10-21 20:31:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-10-21 20:31:49 +0000 |
commit | a4756b9a2c587fe3fe092cc9cfd8e3b1fb267445 (patch) | |
tree | 0b4d0134bccafad5daeb2ede7b872e66e611a6a6 /Master/texmf-dist/tex/latex/unicodefonttable | |
parent | c1fb42e1c4a88d363f56d1eed4804bc16bcaee59 (diff) |
unicodefonttable (21oct21)
git-svn-id: svn://tug.org/texlive/trunk@60826 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/unicodefonttable')
-rw-r--r-- | Master/texmf-dist/tex/latex/unicodefonttable/unicodefont.tex | 125 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/unicodefonttable/unicodefonttable.sty | 725 |
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'. |