%%
%% This is file `checkencodingsubset.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% lttextcomp.dtx  (with options: `TS1check')
%% 
%% This is a generated file.
%% 
%% The source is maintained by the LaTeX Project team and bug
%% reports for it can be opened at https://latex-project.org/bugs.html
%% (but please observe conditions on bug reports sent to that address!)
%% 
%% 
%% Copyright (C) 1993-2026
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%% 
%% This file was generated from file(s) of the LaTeX base system.
%% --------------------------------------------------------------
%% 
%% 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 has the LPPL maintenance status "maintained".
%% 
%% This file may only be distributed together with a copy of the LaTeX
%% base system. You may however distribute the LaTeX base system without
%% such generated files.
%% 
%% The list of all files belonging to the LaTeX base distribution is
%% given in the file `manifest.txt'. See also `legal.txt' for additional
%% information.
%% 
%% The list of derived (unpacked) files belonging to the distribution
%% and covered by LPPL is defined by the unpacking scripts (with
%% extension .ins) which are part of the distribution.
%%% From File: lttextcomp.dtx
\ProvidesFile{checkencodingsubset.tex}
 [2024/10/18 v0.5b Figure out safe TS1 encoding subsets]
\let\typeoutdetails\typeout
\def\doesglyphexist#1#2{\iffontchar\testFont #1 0\else 1\relax \fi}
\def\glyphmissingdetails#1#2{\iffontchar\testFont #1 \else
  \typeoutdetails{\space\space\space ==> \string#2 (#1) is missing}\fi}
\newif\ifsafesubencodingfound
\newif\ifcoremisses
\def\testgroup#1#2#3{%
  \ifnum 0 = #1%
    \ifnum #2<0
    \typeoutdetails{All glyphs in core exist}%
    \else
    \typeoutdetails{All glyphs between sub-encoding #2 and #3  exist}%
    \fi
  \else
    \ifnum #2<0
      \typeoutdetails{**********************************}%
      \typeoutdetails{Some glyphs are missing from core:}%
      \coremissestrue
      \ifsafesubencodingfound \else
        \def\subencodingresult{#2}%
      \fi
    \else
      \typeoutdetails{Some glyphs are missing from sub-encoding #2:}%
      \ifsafesubencodingfound \else
        \def\subencodingresult{#3}%
      \fi
    \fi
    {\let\doesglyphexist \glyphmissingdetails #1}%
    \safesubencodingfoundtrue
  \fi
}
\def\currsubencoding#1{\csname TS1:\ifcsname TS1:#1\endcsname #1\else ?\fi\endcsname}
\DeclareFixedFont\cmrFont{TS1}{cmr}{m}{n}{10pt}
\def\testallgroups#1{%
  \DeclareFixedFont\testFont{TS1}{#1}{m}{n}{10pt}%
  \ifx\testFont\cmrFont
    \typeout{***** Font family #1 not found ****}%
  \else
    \safesubencodingfoundfalse
    \coremissesfalse
    \typeoutdetails{^^J-----------------------------------------}%
    \typeoutdetails{Testing font family #1^^J(currently TS1-sub-encoding
      \currsubencoding{#1})}%
    \typeout{-----------------------------------------}%
    \testgroup{%
       \doesglyphexist{21}{\texttwelveudash}%
       \doesglyphexist{22}{\textthreequartersemdash}%
       \doesglyphexist{134}{\textbardbl}%
       \doesglyphexist{137}{\textcelsius}%
       \doesglyphexist{178}{\texttwosuperior}%
       \doesglyphexist{179}{\textthreesuperior}%
       \doesglyphexist{185}{\textonesuperior}%
    }{8}{9}%
    \testgroup{%
       \doesglyphexist{32}{\textblank}%
       \doesglyphexist{148}{\textinterrobang}%
       \doesglyphexist{149}{\textinterrobangdown}%
       \doesglyphexist{191}{\texteuro}%
    }{7}{8}%
    \testgroup{%
       \doesglyphexist{47}{\textfractionsolidus}%
       \doesglyphexist{61}{\textminus}%
       \doesglyphexist{87}{\textohm}%
       \doesglyphexist{181}{\textmu}%
    }{6}{7}%
    \testgroup{%
       \doesglyphexist{140}{\textflorin}%
       \doesglyphexist{164}{\textcurrency}%
    }{5}{6}%
    \testgroup{%
       \doesglyphexist{155}{\textnumero}%
       \doesglyphexist{157}{\textestimated}%
    }{4}{5}%
    \testgroup{%
       \doesglyphexist{24}{\textleftarrow}%
       \doesglyphexist{25}{\textrightarrow}%
       \doesglyphexist{94}{\textuparrow}%
       \doesglyphexist{95}{\textdownarrow}%
       \doesglyphexist{141}{\textcolonmonetary}%
       \doesglyphexist{142}{\textwon}%
       \doesglyphexist{146}{\textlira}%
       \doesglyphexist{150}{\textdong}%
    }{3}{4}%
    \testgroup{%
       \doesglyphexist{60}{\textlangle}%
       \doesglyphexist{62}{\textrangle}%
    }{2}{3}%
    \testgroup{%
       \doesglyphexist{0}{\capitalgrave}%
       \doesglyphexist{1}{\capitalacute}%
       \doesglyphexist{2}{\capitalcircumflex}%
       \doesglyphexist{3}{\capitaltilde}%
       \doesglyphexist{4}{\capitaldieresis}%
       \doesglyphexist{5}{\capitalhungarumlaut}%
       \doesglyphexist{6}{\capitalring}%
       \doesglyphexist{7}{\capitalcaron}%
       \doesglyphexist{8}{\capitalbreve}%
       \doesglyphexist{9}{\capitalmacron}%
       \doesglyphexist{10}{\capitaldotaccent}%
       \doesglyphexist{11}{\capitalcedilla}%
       \doesglyphexist{12}{\capitalogonek}%
       \doesglyphexist{26}{\t}%
       \doesglyphexist{27}{\capitaltie}%
       \doesglyphexist{28}{\newtie}%
       \doesglyphexist{29}{\capitalnewtie}%
       \doesglyphexist{45}{\textdblhyphen}%
       \doesglyphexist{48}{\textzerooldstyle}%
       \doesglyphexist{49}{\textoneoldstyle}%
       \doesglyphexist{50}{\texttwooldstyle}%
       \doesglyphexist{51}{\textthreeoldstyle}%
       \doesglyphexist{52}{\textfouroldstyle}%
       \doesglyphexist{53}{\textfiveoldstyle}%
       \doesglyphexist{54}{\textsixoldstyle}%
       \doesglyphexist{55}{\textsevenoldstyle}%
       \doesglyphexist{56}{\texteightoldstyle}%
       \doesglyphexist{57}{\textnineoldstyle}%
       \doesglyphexist{77}{\textmho}%
       \doesglyphexist{79}{\textbigcircle}%
       \doesglyphexist{91}{\textlbrackdbl}%
       \doesglyphexist{93}{\textrbrackdbl}%
       \doesglyphexist{96}{\textasciigrave}%
       \doesglyphexist{98}{\textborn}%
       \doesglyphexist{99}{\textdivorced}%
       \doesglyphexist{100}{\textdied}%
       \doesglyphexist{108}{\textleaf}%
       \doesglyphexist{109}{\textmarried}%
       \doesglyphexist{110}{\textmusicalnote}%
       \doesglyphexist{126}{\texttildelow}%
       \doesglyphexist{127}{\textdblhyphenchar}%
       \doesglyphexist{128}{\textasciibreve}%
       \doesglyphexist{129}{\textasciicaron}%
       \doesglyphexist{175}{\textasciimacron}%
       \doesglyphexist{130}{\textacutedbl}%
       \doesglyphexist{131}{\textgravedbl}%
       \doesglyphexist{138}{\textdollaroldstyle}%
       \doesglyphexist{139}{\textcentoldstyle}%
       \doesglyphexist{143}{\textnaira}%
       \doesglyphexist{144}{\textguarani}%
       \doesglyphexist{145}{\textpeso}%
       \doesglyphexist{147}{\textrecipe}%
       \doesglyphexist{152}{\textpertenthousand}%
       \doesglyphexist{153}{\textpilcrow}%
       \doesglyphexist{154}{\textbaht}%
       \doesglyphexist{156}{\textdiscount}%
       \doesglyphexist{158}{\textopenbullet}%
       \doesglyphexist{159}{\textservicemark}%
       \doesglyphexist{160}{\textlquill}%
       \doesglyphexist{161}{\textrquill}%
       \doesglyphexist{168}{\textasciidieresis}%
       \doesglyphexist{171}{\textcopyleft}%
       \doesglyphexist{173}{\textcircledP}%
       \doesglyphexist{180}{\textasciiacute}%
       \doesglyphexist{184}{\textreferencemark}%
       \doesglyphexist{187}{\textsurd}%
    }{1}{2}%
    \testgroup{%
      \doesglyphexist{79}{\textcircled}%  this is not a proper test because the symbol is
                                       %  usually available but not usable
    }{0}{1}%
    \testgroup{%
       \doesglyphexist{13}{\textquotestraightbase}%
       \doesglyphexist{18}{\textquotestraightdblbase}%
       \doesglyphexist{23}{\textcapitalcompwordmark}%
       \doesglyphexist{31}{\textascendercompwordmark}%
       \doesglyphexist{36}{\textdollar}%
       \doesglyphexist{39}{\textquotesingle}%
       \doesglyphexist{42}{\textasteriskcentered}%
       \doesglyphexist{132}{\textdagger}%
       \doesglyphexist{133}{\textdaggerdbl}%
       \doesglyphexist{135}{\textperthousand}%
       \doesglyphexist{136}{\textbullet}%
       \doesglyphexist{151}{\texttrademark}%
       \doesglyphexist{162}{\textcent}%
       \doesglyphexist{163}{\textsterling}%
       \doesglyphexist{165}{\textyen}%
       \doesglyphexist{166}{\textbrokenbar}%
       \doesglyphexist{167}{\textsection}%
       \doesglyphexist{169}{\textcopyright}%
       \doesglyphexist{170}{\textordfeminine}%
       \doesglyphexist{172}{\textlnot}%
       \doesglyphexist{174}{\textregistered}%
       \doesglyphexist{176}{\textdegree}%
       \doesglyphexist{177}{\textpm}%
       \doesglyphexist{182}{\textparagraph}%
       \doesglyphexist{183}{\textperiodcentered}%
       \doesglyphexist{186}{\textordmasculine}%
       \doesglyphexist{188}{\textonequarter}%
       \doesglyphexist{189}{\textonehalf}%
       \doesglyphexist{190}{\textthreequarters}%
       \doesglyphexist{214}{\texttimes}%
       \doesglyphexist{246}{\textdiv}%
    }{-1}{0}%
    \ifsafesubencodingfound\else
      \def\subencodingresult{0}%
    \fi
    \typeoutdetails{-----------------------------------------}%
    \typeout{TS1 encoding subset for #1\ifcoremisses \space(ignoring core misses)\fi
      \space (\ifnum\subencodingresult =
      \currsubencoding{#1} ok\else bad\fi)}%
    \typeout{Use sub-encoding \subencodingresult
      \ifnum\subencodingresult = \currsubencoding{#1}\else
        \space (not \currsubencoding{#1})\fi}
    \typeout{-----------------------------------------^^J}%
  \fi
}
\long\def\testallkerneldefinedfamilies{%
\testallgroups{ccr}%     {0}
\testallgroups{cmbr}%    {0}
%%\testallgroups{cmr}%   {0}  % don't test this one as it is the fallback
                              % thus reports that the family is not found
\testallgroups{cmss}%    {0}
\testallgroups{cmtl}%    {0}
\testallgroups{cmtt}%    {0}
\testallgroups{cmvtt}%   {0}
\testallgroups{pxr}%     {0}
\testallgroups{pxss}%    {0}
\testallgroups{pxtt}%    {0}
\testallgroups{qag}%     {0}
\testallgroups{qbk}%     {0}
\testallgroups{qcr}%     {0}
\testallgroups{qcs}%     {0}
\testallgroups{qhvc}%    {0}
\testallgroups{qhv}%     {0}
\testallgroups{qpl}%     {0}
\testallgroups{qtm}%     {0}
\testallgroups{qzc}%     {0}
\testallgroups{txr}%     {0}
\testallgroups{txss}%    {0}
\testallgroups{txtt}%    {0}
\testallgroups{zi4}%  {9}
%% not installed normally

\testallgroups{lato-LF}%   {0}  % with a bunch of tofu inside --- should probably be changed
\testallgroups{opensans-TLF}%{0}  % with a bunch of tofu inside --- should probably be changed
\testallgroups{cantarell-TLF}%  {0}  % with a bunch of tofu inside --- should probably be changed
\testallgroups{fbb-LF}%     {0}  % missing centoldstyle ---> 2
\testallgroups{tli}%       {1}  % with lots of tofu inside --- should probably be changed
\testallgroups{Alegreya-OsF}%       {2}
\testallgroups{AlegreyaSans-OsF}%   {2}
\testallgroups{DejaVuSans-TLF}%     {2}
\testallgroups{DejaVuSansCondensed-TLF}%  {2}
\testallgroups{DejaVuSansMono-TLF}% {2} this is missing \textfractionsolidus which makes it 7 really
\testallgroups{EBGaramond-LF}%      {2}
\testallgroups{Tempora-TLF}%        {2}
\testallgroups{Tempora-TOsF}%       {2}
\testallgroups{Arimo-TLF}%          {3}
\testallgroups{Crlt-TLF}%           {3}       changed from Carlito-
\testallgroups{FiraSans-LF}%        {3}     should be 4
\testallgroups{IBMPlexSans-TLF}%    {3}
\testallgroups{Merriwthr-OsF}%   {3}         changed from Merriweather- and should be 2
\testallgroups{Montserrat-LF}%      {3}     now 2
\testallgroups{MontserratAlternates-LF}%{3}     now 2
\testallgroups{SourceCodePro-TLF}%  {3}
\testallgroups{SourceCodePro-TOsF}% {3}
\testallgroups{SourceSansPro-OsF}%  {3}
\testallgroups{SourceSerifPro-LF}%  {3}
\testallgroups{Tinos-TLF}%          {3}
\testallgroups{AccanthisADFStdNoThree-LF}%{4}
\testallgroups{Cabin-TLF}%          {4}
\testallgroups{Caladea-TLF}%        {4}
\testallgroups{Chivo-LF}%           {4}
\testallgroups{ClearSans-TLF}%      {4}
\testallgroups{Coelacanth-LF}%      {4}
\testallgroups{CrimsonPro-LF}%      {4}
\testallgroups{FiraMono-TLF}%       {4}
\testallgroups{FiraMono-TOsF}%      {4}
\testallgroups{Go-TLF}%             {4}
\testallgroups{GoMono-TLF}%         {4}
\testallgroups{InriaSans-LF}%       {4}
\testallgroups{InriaSerif-LF}%      {4}
\testallgroups{LibertinusSans-LF}%  {4}
\testallgroups{LibertinusSerif-LF}% {4}
\testallgroups{LibreBodoni-TLF}%    {4}
\testallgroups{LibreFranklin-TLF}%  {4}
\testallgroups{LinguisticsPro-LF}%  {4}
\testallgroups{LinguisticsPro-OsF}% {4}
\testallgroups{LinuxBiolinumT-LF}%  {4}
\testallgroups{LinuxLibertineT-LF}% {4}
\testallgroups{MerriwthrSans-OsF}%  {4}          name change and now 2
\testallgroups{MintSpirit-LF}%      {4}
\testallgroups{MintSpiritNoTwo-LF}% {4}
\testallgroups{PTMono-TLF}%         {4}
\testallgroups{PTSans-TLF}%         {4}
\testallgroups{PTSansCaption-TLF}%  {4}
\testallgroups{PTSansNarrow-TLF}%   {4}
\testallgroups{PTSerif-TLF}%        {4}
\testallgroups{PTSerifCaption-TLF}% {4}
\testallgroups{Raleway-TLF}%        {4}
\testallgroups{Raleway-TOsF}%       {4}
\testallgroups{Roboto-LF}%          {4}
\testallgroups{RobotoMono-TLF}%     {4}
\testallgroups{RobotoSlab-TLF}%     {4}
\testallgroups{Rosario-LF}%         {4}
\testallgroups{SticksTooText-LF}%   {4}
\testallgroups{UniversalisADFStd-LF}%{4}
\testallgroups{Almndr-OsF}%       {5}     name change
\testallgroups{Baskervaldx-LF}%   {5}
\testallgroups{BaskervilleF-LF}%  {5}   now 2
\testallgroups{Bttr-TLF}%         {5}   name changed from Bitter-...
\testallgroups{Cinzel-LF}%        {5}
\testallgroups{CinzelDecorative-LF}%{5}
\testallgroups{DejaVuSerif-TLF}%  {5}
\testallgroups{DejaVuSerifCondensed-TLF}% {5}
\testallgroups{GilliusADF-LF}%    {5}
\testallgroups{charssil-TLF} %%  missing should be 5
\testallgroups{GilliusADFCond-LF}%{5}
\testallgroups{GilliusADFNoTwo-LF}%{5}
\testallgroups{GilliusADFNoTwoCond-LF}%{5}
\testallgroups{Lbstr-LF}%      {5}      name change  and should be 7
\testallgroups{OldStandard-TLF}%  {5}
\testallgroups{PlyfrDisplay-LF}%{5}       name change
\testallgroups{PlyfrDisplay-OsF}% {5}       name change
\testallgroups{TheanoDidot-TLF}%  {5}
\testallgroups{TheanoDidot-TOsF}% {5}
\testallgroups{TheanoModern-TLF}% {5}
\testallgroups{TheanoModern-TOsF}%{5}
\testallgroups{TheanoOldStyle-TLF}%{5}
\testallgroups{TheanoOldStyle-TOsF}%{5}
\testallgroups{Crimson-TLF}%      {6}
\testallgroups{IBMPlexMono-TLF}%  {6}  now 3
\testallgroups{IBMPlexSerif-TLF}% {6}  now 3
\testallgroups{LibertinusMono-TLF}%{6}  should be 8
\testallgroups{LibertinusSerifDisplay-LF}%{6}
\testallgroups{LinuxLibertineDisplayT-LF}%{6}
\testallgroups{LinuxLibertineMonoT-LF}%{6}
\testallgroups{LinuxLibertineMonoT-TLF}%{6}
\testallgroups{Ovrlck-LF}%       {6}     name changed
\testallgroups{CormorantGaramond-LF}%{7}
\testallgroups{Heuristica-TLF}%  {7}
\testallgroups{Heuristica-TOsF}% {7}
\testallgroups{IMFELLEnglish-TLF}%{7}
\testallgroups{LibreBskvl-LF}%   {7}  %%  wrong name LibreBaskerville-TLF
\testallgroups{LibreCsln-LF}%    {7}  changed from LibreCaslon-
\testallgroups{Mrcls-LF}%        {7}       %%  wrong name Marcellus-LF
\testallgroups{NotoSans-LF}%     {7}
\testallgroups{NotoSansMono-TLF}%{7}  now 2
\testallgroups{NotoSansMono-TOsF}%{7}  now 2
\testallgroups{NotoSerif-LF}%    {7}
\testallgroups{Quattro-LF}%      {7}  changed from Quattrocento-
\testallgroups{QuattroSans-LF}%  {7}  changed from QuattrocentoSans-
\testallgroups{XCharter-TLF}%    {7}  now 2
\testallgroups{XCharter-TOsF}%   {7}  now 2
\testallgroups{erewhon-LF}%      {7}  now 2
\testallgroups{ComicNeue-TLF}%   {7}
\testallgroups{ComicNeueAngular-TLF}%{7}
\testallgroups{Frm-LF}%{7}  % the superiors are missing; name changed from Forum-LF
\testallgroups{Cochineal-TLF}%   {8} now 5
\testallgroups{AlgolRevived-TLF}%{9}
}
\typeout{^^J=====================================================================}
\typeout{| Enter font family to check (or <enter> for kernel defined families)}
\typeout{=====================================================================}
\typein[\FontFamilyToCheck]{}
\if!\FontFamilyToCheck!
  \typeout{=====================================================================}
  \typeout{| Detailed output? (default no)}
  \typeout{=====================================================================}
  \typein[\Details]{}
  \if!\Details!
    \def\typeoutdetails#1{}
  \else
    \let\typeoutdetails\typeout
  \fi
  \testallkerneldefinedfamilies
\else
  \let\typeoutdetails\typeout
  \testallgroups\FontFamilyToCheck
\fi
\stop

\endinput
%%
%% End of file `checkencodingsubset.tex'.
