%% %% 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-2024 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-2024 Frank Mittelbach \def\unicodefonttabledate {2024/06/06} \def\unicodefonttableversion{1.0i} \RequirePackage{xcolor} \RequirePackage{xparse,l3keys2e} \ProvidesExplPackage{unicodefonttable} {\unicodefonttabledate} {\unicodefonttableversion} {Producing font tables for Unicode and other fonts} \cs_set:Npn \tbl_crcr:n #1 { \int_compare:nNnT \g__tbl_col_int > 0 { \tbl_count_missing_cells:n {#1} } \crcr } \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} \bool_lazy_and:nnT { \sys_if_engine_luatex_p: } { \int_compare_p:nNn { "EFFFF } < { "\l__fmuft_range_end_tl } } { \directlua{token.put_next(token.create(font.getfont(font.current()).hb~ and~ 'use_none:n'~ or~ 'use:n'))} { \msg_warning:nn {unicodefonttable}{noharfbuzz} } } \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 } \if_mode_vertical: \if_mode_inner: \@twocolumnfalse \fi: \fi: \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: } \msg_new:nnn {unicodefonttable}{noharfbuzz} { You~ asked~ for~ displaying~ glyphs~ with~ code \iow_newline: points~ above~ U+EFFFF~ \msg_line_context: ,~ i.e.,~ from~ the~ 'Supplementary~ Private~ Use~ Area-A'\iow_newline: without~ specifying~ '[Renderer=Harfbuzz]'~ when~ loading~ the~ font. \iow_newline:\iow_newline: With~ LuaLaTeX,~ this~ Unicode~ region~ is~ used~ for~ remappings~ (if~ the~ HarfBuzz~ engine~ is~ not~ used).~ Thus,~ the~ results~ shown~ do~ not~ reflect~ what~ is~ in~ the~ font! } \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-format-cont .cs_set:Np = \__fmuft_format_table_cont:nn #1#2 ,title-format-cont .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 ,hex-digits-row-format .cs_set:Np = \__fmuft_format_row_hex_digits:n #1 ,hex-digits-row-format .initial:n = U+#1 0 \, - \, #1 F ,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~ shown~ from~ #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~ shown~ from~ \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 \__fmuft_format_row_hex_digits:n {#1} } } \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 }{ Malayalam } { "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'.