%%
%% 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'.
