%%
%% This is file `glossary-table.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% glossaries-extra.dtx  (with options: `glossary-table.sty,package')
%% 
%%  glossaries-extra.dtx
%%  Copyright 2025 Nicola Talbot
%% 
%%  This work may be distributed and/or modified under the
%%  conditions of the LaTeX Project Public License, either version 1.3
%%  of this license or (at your option) any later version.
%%  The latest version of this license is in
%%    http://www.latex-project.org/lppl.txt
%%  and version 1.3 or later is part of all distributions of LaTeX
%%  version 2005/12/01 or later.
%% 
%%  This work has the LPPL maintenance status `maintained'.
%% 
%%  The Current Maintainer of this work is Nicola Talbot.
%% 
%%  This work consists of the files glossaries-extra.dtx and glossaries-extra.ins and the derived files glossaries-extra.sty, glossaries-extra-abbrstyles.def, glossaries-extra-bib2gls.sty, glossaries-extra-stylemods.sty, glossary-bookindex.sty, glossary-longextra.sty, glossary-topic.sty, glossary-table.sty, example-glossaries-xr.tex, example-glossaries-acronym-desc.bib, example-glossaries-acronym.bib, example-glossaries-acronyms-lang.bib, example-glossaries-brief.bib, example-glossaries-childmultipar.bib, example-glossaries-childnoname.bib, example-glossaries-cite.bib, example-glossaries-images.bib, example-glossaries-long.bib, example-glossaries-longchild.bib, example-glossaries-multipar.bib, example-glossaries-parent.bib, example-glossaries-symbolnames.bib, example-glossaries-symbols.bib, example-glossaries-url.bib, example-glossaries-user.bib, example-glossaries-utf8.bib, example-glossaries-xr.bib, glossaries-extra-2021-11-22.sty, glossaries-extra-bib2gls-2021-11-22.sty, glossaries-extra-stylemods-2021-11-22.sty, glossary-bookindex-2021-11-22.sty, glossary-longextra-2021-11-22.sty, glossary-topic-2021-11-22.sty.
%% 
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{glossary-table}[2025/03/04 v1.57 (NLCT)]
\RequirePackage{longtable}
\RequirePackage{array}
\RequirePackage{booktabs}
\ifdef\gls@start@measuring
{}
{\PackageError{glossary-table}%
 {glossaries.sty v4.51+ required. Please update glossaries.sty}
 {Your version of glossaries.sty is too old. Minimum version 4.51 required}
}
\newcount\glstableblockperrowcount
\glstableblockperrowcount=2\relax
\define@key{printglosstable}{blocks}{\glstableblockperrowcount=#1\relax}
\newcount\glstablecurrentblockindex
\newcount\glstabletotalcols
\glstabletotalcols=4\relax
\newcommand{\glstablenameheader}{\entryname}
\newcommand{\glstabledescheader}{\descriptionname}
\newcommand{\glstableotherheader}{\MFUsentencecase{\glstableotherfield}}
\newcommand{\glstablesymbolheader}{\symbolname}
\define@boolkey{printglosstable}{header}[true]{}
\KV@printglosstable@headertrue
\define@boolkey{printglosstable}{rules}[true]{}
\KV@printglosstable@rulestrue
\define@boolkey{printglosstable}{caption}[true]{}
\KV@printglosstable@captiontrue
\define@key{printglosstable}{blocksep}{\renewcommand{\glstable@blockalignsep}{#1}}
\newcommand{\glstable@blockalignsep}{|}
\newcommand{\glstablesubentryalign}{%
 \glstableleftalign{\dimexpr\glstablesubentrywidth-\tabcolsep}@{}}
\newcommand{\glstablesubentrywidth}{\glstabledescwidth}
\newenvironment{glstablesubentries}%
 {%
   \protected@edef\@gls@dotabular{%
     \noexpand\begin{tabular}[t]{\glstablesubentryalign}}%
   \@gls@dotabular
 }%
 {\end{tabular}}
\newcommand{\glstablePreChildren}{\glstableifpar{\par}}
\newcommand{\glstableblocksubentrysep}{\glstablenewline}
\define@choicekey{printglosstable}{par}
[\@glstable@par@val\@glstable@par@n]
{false,justified,ragged}
{%
  \ifcase\@glstable@par@n
    \renewcommand{\glstable@parcase}[3]{##1}%
  \or
    \renewcommand{\glstable@parcase}[3]{##2}%
  \or
    \renewcommand{\glstable@parcase}[3]{##3}%
  \fi
}
\newcommand{\glstable@parcase}[3]{#1}
\newcommand{\glstableifpar}[1]{\glstable@parcase{}{#1}{#1}}
\newcommand{\glstableleftalign}[1]{%
 \glstable@parcase{l}{p{#1}}{>{\protect\raggedright}p{#1}}%
}
\newcommand{\glstablerightalign}[1]{%
 \glstable@parcase{r}{p{#1}}{>{\protect\raggedleft}p{#1}}%
}
\newcommand{\glstablecenteralign}[1]{%
 \glstable@parcase{c}{p{#1}}{>{\protect\centering}p{#1}}%
}
\newcommand{\glstablenamecolalign}{\glstableleftalign{\glstablenamewidth}}
\newcommand{\glstabledesccolalign}{\glstableleftalign{\glstabledescwidth}}
\newcommand{\glstableothercolalign}{\glstableleftalign{\glstableotherwidth}}
\newcommand{\glstablesymbolcolalign}{\glstablecenteralign{\glstablesymbolwidth}}
\newcommand{\glstableNameTarget}[1]{%
 \glstarget{#1}{\glstableName{#1}}%
}
\newcommand{\glstableNameFmt}[1]{#1}
\newcommand{\glstableName}[1]{%
 \glsentryitem{#1}%
 \glstableNameFmt{\glossentryname{#1}}}
\newcommand{\glstableSubNameTarget}[1]{%
 \glstarget{#1}{\glstableSubName{#1}}%
}
\newcommand{\glstableSubNameFmt}[1]{}
\newcommand{\glstableSubName}[1]{%
 \glssubentryitem{#1}%
 \glstableSubNameFmt{\glossentryname{#1}}%
}
\newcommand{\glstableotherfield}{}
\newcommand{\glstableifhasotherfield}[3]{%
  \ifdefvoid\glstableotherfield
  {#3}%
  {%
    \ifglsfieldvoid{\glstableotherfield}{#1}{#3}{#2}%
  }%
}
\define@key{printglosstable}{other}{\renewcommand{\glstableotherfield}{#1}}
\newcommand{\glstableOther}[1]{%
 \glstableOtherFmt{\glsxtrusefield{#1}{\glstableotherfield}}}
\newcommand{\glstableOtherFmt}[1]{#1}
\newcommand{\glstableSubOther}[1]{\glstableOther{#1}}
\newcommand{\glstableOtherWithSep}[3]{%
 \glstableifhasotherfield{#2}%
 {#1\glstableOther{#2}#3}%
 {}%
}
\newcommand{\glstableSubOtherWithSep}[3]{%
 \glstableifhasotherfield{#2}%
 {#1\glstableSubOther{#2}#3}%
 {}%
}
\newcommand{\glstableNameSingleFmt}[1]{%
  \glstableNameTarget{#1}%
  \ifglshasdesc{#1}%
  {%
    \glstableNameSinglePostName
    \glstableNameSingleSuppl
    {%
      \ifglshassymbol{#1}%
      {\glstableSymbol{#1}\glstableNameSingleSymSep}%
      {}%
      \glstableOtherWithSep{}{#1}{\glstableOtherSep}%
      \glstableDesc{#1}%
    }%
  }%
  {%
   \ifglshassymbol{#1}%
   {%
      \glstableNameSinglePostName
      \glstableNameSingleSuppl
      {%
        \glstableSymbol{#1}%
        \glstableifhasotherfield{#1}%
        {%
          \glstableNameSingleSymSep\glstableOther{#1}%
        }%
        {}%
      }%
   }%
   {%
      \glstableifhasotherfield{#1}%
      {%
       \glstableNameSinglePostName
       \glstableNameSingleSuppl{\glstableOther{#1}}%
      }%
      {%
      }%
    }%
  }%
}
\newcommand{\glstableNameSingleSuppl}[1]{(#1)}
\newcommand{\glstableNameSinglePostName}{ }
\newcommand{\glstableNameSingleSymSep}{ }
\newcommand{\glstableOtherSep}{, }
\newcommand{\glstableSubOtherSep}{\glstableOtherSep}
\newcommand{\glstableSubDescSep}{\glstableSubOtherSep}
\newcommand{\glstableSubNameSingleFmt}[1]{%
 \glstableSubNameTarget{#1}%
 \ifglshasdesc{#1}%
 {%
   \ifglshassymbol{#1}%
   {%
     \glstableifhasotherfield{#1}%
     {%
       \glstableNameSinglePostSubName
       \glstableNameSingleSubSuppl
       {%
         \glstableSubSymbol{#1}%
         \glstableNameSingleSymSep
         \glstableSubOtherWithSep{}{#1}{\glstableSubOtherSep}%
         \glstableSubDesc{#1}%
       }%
     }%
     {%
      \glstableNameSinglePostSubName
      \glstableNameSingleSubSuppl
      {%
        \glstableSubSymbol{#1}%
        \glstableNameSingleSymSep
        \glstableSubDesc{#1}%
      }%
    }%
   }%
   {%
     \glstableNameSinglePostSubName
     \glstableNameSingleSubSuppl
     {%
       \glstableSubOtherWithSep{}{#1}{\glstableSubOtherSep}%
       \glstableSubDesc{#1}%
     }%
   }%
 }%
 {%
   \ifglshassymbol{#1}%
   {%
     \glstableNameSinglePostSubName
     \glstableNameSingleSubSuppl
     {%
       \glstableifhasotherfield{#1}%
       {%
         \glstableSubSymbol{#1}\glstableNameSingleSymSep
         \glstableSubOther{#1}%
       }%
       {%
         \glstableSubSymbol{#1}%
       }%
     }%
   }%
   {%
     \glstableifhasotherfield{#1}%
     {%
       \glstableNameSinglePostSubName
       \glstableNameSingleSubSuppl{\glstableSubOther{#1}}%
     }%
     {%
     }%
   }%
 }%
}
\newcommand{\glstableNameSingleSubSuppl}[1]{#1}
\newcommand{\glstableNameSinglePostSubName}{ }
\newcommand{\glstableSubSep}{\space}
\newcommand{\glstableSubNameSep}{}
\newcommand{\glstableNameNoDesc}[1]{%
  \glstableNameTarget{#1}%
  \glstableOtherWithSep{\glstableSubNameSep}{##1}{}%
}
\newcommand{\glstableSubNameNoDesc}[1]{%
  \glstableSubNameTarget{#1}%
  \glstableSubOtherWithSep{\glstableSubNameSep}{#1}{}%
}
\newcommand{\glstableSubNameSymbolNoDesc}[1]{%
  \glstableSubNameTarget{#1}%
  \glstableifhasotherfield{#1}%
  {%
    \glstableSubOther{#1}%
    \ifglshassymbol{#1}%
    {\glstableSubOtherSep\glstableSubSymbol{#1}}%
    {}%
  }%
  {%
    \ifglshassymbol{#1}%
    {\glstableSubSymbol{#1}}%
    {}%
  }%
}
\newcommand{\glstableSymbolFmt}[1]{#1}
\newcommand{\glstableSymbol}[1]{\glstableSymbolFmt{\glossentrysymbol{#1}}}
\newcommand{\glstableSubSymbolFmt}[1]{\glstableSymbolFmt{#1}}
\newcommand{\glstableSubSymbol}[1]{\glstableSubSymbolFmt{\glossentrysymbol{#1}}}
\newcommand{\glstableSubSymbolWithSep}[3]{%
 \ifglshassymbol{#2}%
 {#1\glstableSubSymbol{#2}#3}%
 {}%
}
\newcommand{\glstableSymbolNameTarget}[1]{%
 \glstarget{#1}{\glstableSymbolName{#1}}%
}
\newcommand{\glstableSymbolNameFmt}[1]{%
 \glstableSymbolFmt{#1}%
}
\newcommand{\glstableSymbolName}[1]{%
 \glsentryitem{#1}\glstableSymbolNameFmt{\glossentrysymbol{#1}}%
}
\newcommand{\glstableSubSymbolNameTarget}[1]{%
 \glstarget{#1}{\glstableSubSymbolName{#1}}%
}
\newcommand{\glstableSubSymbolNameFmt}[1]{}
\newcommand{\glstableSubSymbolName}[1]{%
 \glssubentryitem{#1}\glstableSubSymbolNameFmt{\glossentrysymbol{#1}}%
}
\newcommand{\glstableDesc}[1]{%
 \glstableDescFmt{\glossentrydesc{#1}\glspostdescription}%
}
\newcommand{\glstableDescFmt}[1]{#1}
\newcommand{\glstableDescWithOther}[1]{%
  \glstableifhasotherfield{#1}%
  {%
    \glstableOther{#1}%
    \ifglshasdesc{#1}{\glstableOtherSep\glstableDesc{#1}}{}%
  }%
  {%
    \ifglshasdesc{#1}{\glstableDesc{#1}}{}%
  }%
}
\newcommand{\glstableSubDescFmt}[1]{\glstableDescFmt{#1}}
\newcommand{\glstableSubDesc}[1]{%
 \glstableSubDescFmt{\glossentrydesc{#1}\glspostdescription}%
}
\newcommand{\glstableSubDescWithOther}[1]{\glstableDescWithOther{#1}}
\newcommand{\glstableSubDescSymbolOther}[1]{%
  \ifglshasdesc{#1}%
  {%
    \glstableSubDesc{#1}%
    \ifglshassymbol{#1}%
    {%
      \glstableSubDescSep
      \glstableSubSymbol{#1}%
      \glstableSubOtherWithSep{\glstableSubSep}{#1}{}%
    }%
    {%
      \glstableSubOtherWithSep{\glstableSubOtherSep}{#1}{}%
    }%
  }%
  {%
    \ifglshassymbol{#1}%
    {%
      \glstableSubSymbol{#1}%
      \glstableSubOtherWithSep{\glstableSubSep}{#1}{}%
    }%
    {\glstableSubOther{#1}}%
  }%
}
\newcommand{\glstableOtherNoDesc}[1]{%
 \glstableOtherIfSet{#1}%
}
\newcommand{\glstableOtherIfSet}[1]{%
  \glstableifhasotherfield{#1}{\glstableOther{#1}}{}%
}
\newcommand{\glstableSubOtherNoDesc}[1]{%
 \glstableOtherNoDesc{#1}%
}
\newcommand{\glstableSubOtherIfSet}[1]{%
 \glstableOtherIfSet{#1}%
}
\newcommand{\glstableHeaderFmt}[1]{\textbf{#1}}
\define@key{printglosstable}{block-style}
{\glstablesetstyle{#1}}
\newcount\glstablecolsperblock
\glstablecolsperblock=2\relax
\newcommand{\glstableblockheader}{}
\newcommand{\glstableblockalign}{}
\newcommand{\glstableblockentry}[1]{}
\newcommand{\glstableblocksubentry}[1]{}
\newcommand{\glstableinitlengthupdates}{}
\newcommand{\glstablelengthupdate}[1]{}
\newcommand{\glstablefinishlengthupdates}{}
\newcommand{\glstablesetstyle}[1]{%
  \ifcsdef{@glstable@style@#1}%
  {\csuse{@glstable@style@#1}}%
  {\PackageError{glossary-table}{Unknown style `#1'}{}}%
}
\newcommand{\glstablenewstyle}[2]{%
  \ifcsdef{@glstable@style@#1}%
  {\PackageError{glossary-table}{style `#1' already defined}{}}%
  {\csdef{@glstable@style@#1}{#2}}%
}
\glstablenewstyle{name-desc}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
   \fi
   \setlength{\glstabledescwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstabledescwidth}{\dimexpr\glstableblockwidth
    - \glstablenamewidth}%
   \ifdim\glstabledescwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstabledescwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} &
   \glstableDescWithOther{##1}%
   \glstableChildEntries{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep
   \glstableSubDescWithOther{##1}%
 }%
 \renewcommand{\glstablesubentrywidth}{\glstabledescwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstabledescheader}%
 \renewcommand{\glstableblockalign}{\glstablenamecolalign\glstabledesccolalign}%
}
\glstablesetstyle{name-desc}
\glstablenewstyle{name}{%
 \glstablecolsperblock=1\relax
 \renewcommand{\glstableinitlengthupdates}{}%
 \renewcommand{\glstablelengthupdate}[1]{}%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstablenamewidth}{\glstableblockwidth}%
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameSingleFmt{##1}%
   \glstableChildEntries{##1}%
}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameSingleFmt{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstableblockwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader}%
 \renewcommand{\glstableblockalign}{\glstablenamecolalign}%
}
\glstablenewstyle{name-symbol}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
   \else
     \setlength{\glstablesymbolwidth}{0pt}%
   \fi
   \setlength{\glstablenamewidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbol{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstablenamewidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth}%
   \ifdim\glstablenamewidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstablesymbolwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameNoDesc{##1}%
   \glstableChildEntries{##1}%
 & \glstableSymbol{##1}}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameSymbolNoDesc{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstablenamewidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstablesymbolheader}%
 \renewcommand{\glstableblockalign}{\glstablenamecolalign\glstablesymbolcolalign}%
}
\glstablenewstyle{desc-name}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
   \fi
   \setlength{\glstabledescwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstabledescwidth}{\dimexpr\glstableblockwidth
    - \glstablenamewidth}%
   \ifdim\glstabledescwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstabledescwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableDescWithOther{##1}%
   \glstableChildEntries{##1}%
 &
   \glstableNameTarget{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubDescWithOther{##1}\glstableSubNameSep
   \glstableSubNameTarget{##1}%
 }%
 \renewcommand{\glstablesubentrywidth}{\glstabledescwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstabledescheader &
   \glstableHeaderFmt\glstablenameheader
 }%
 \renewcommand{\glstableblockalign}{\glstabledesccolalign\glstablenamecolalign}%
}
\glstablenewstyle{symbol-name}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
   \else
     \setlength{\glstablesymbolwidth}{0pt}%
   \fi
   \setlength{\glstablenamewidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbol{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstablenamewidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth}%
   \ifdim\glstablenamewidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstablesymbolwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableSymbol{##1} &
   \glstableNameNoDesc{##1}%
   \glstableChildEntries{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubSymbolWithSep{}{##1}{\glstableSubSep}%
   \glstableSubNameNoDesc{##1}%
 }%
 \renewcommand{\glstablesubentrywidth}{\glstablenamewidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstablenameheader
 }%
 \renewcommand{\glstableblockalign}{\glstablesymbolcolalign\glstablenamecolalign}%
}
\glstablenewstyle{name-symbol-desc}{%
 \glstablecolsperblock=3\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
     \setlength{\glstablesymbolwidth}{0pt}%
   \fi
   \setlength{\glstabledescwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbol{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstabledescwidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth - \glstablenamewidth}%
   \ifdim\glstabledescwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth
    - 0.5\glstablesymbolwidth}%
     \setlength{\glstabledescwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} &
   \glstableSymbol{##1} &
   \glstableDescWithOther{##1}%
   \glstableChildEntries{##1}%
}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep
   \glstableSubSymbolWithSep{}{##1}{\glstableSubSep}%
   \glstableSubDescWithOther{##1}%
 }%
 \renewcommand{\glstablesubentrywidth}{\glstabledescwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstabledescheader}%
 \renewcommand{\glstableblockalign}{%
   \glstablenamecolalign\glstablesymbolcolalign\glstabledesccolalign}%
}
\glstablenewstyle{name-other-desc}{%
 \glstablecolsperblock=3\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
     \glsmeasurewidth{\glstableotherwidth}%
       {\glstableHeaderFmt\glstableotherheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
     \setlength{\glstableotherwidth}{0pt}%
   \fi
   \setlength{\glstabledescwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
   \glstablemeasureandupdate{\glstableotherwidth}{\glstableOther{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstabledescwidth}{\dimexpr\glstableblockwidth
    - \glstableotherwidth - \glstablenamewidth}%
   \ifdim\glstabledescwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth
    - 0.5\glstableotherwidth}%
     \setlength{\glstabledescwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} &
   \glstableOther{##1} &
   \glstableDesc{##1}%
   \glstableChildEntries{##1}%
}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep
   \glstableSubOtherWithSep{}{##1}{\glstableSubOtherSep}%
   \glstableSubDesc{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstabledescwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstabledescheader}%
 \renewcommand{\glstableblockalign}{%
   \glstablenamecolalign\glstableothercolalign\glstabledesccolalign}%
}
\glstablenewstyle{desc-other-name}{%
  \glstablesetstyle{name-other-desc}%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableDesc{##1}%
   \glstableChildEntries{##1} &
   \glstableOther{##1} &
   \glstableNameTarget{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubDesc{##1}%
   \glstableSubOtherWithSep{\glstableSubOtherSep}{##1}{}%
   \glstableSubNameSep
   \glstableSubNameTarget{##1}%
 }%
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstabledescheader &
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstablenameheader
 }%
 \renewcommand{\glstableblockalign}{%
   \glstabledesccolalign
   \glstableothercolalign
   \glstablenamecolalign
 }%
}
\glstablenewstyle{name-symbol-other-desc}{%
 \glstablecolsperblock=4\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
     \glsmeasurewidth{\glstableotherwidth}%
       {\glstableHeaderFmt\glstableotherheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
     \setlength{\glstablesymbolwidth}{0pt}%
     \setlength{\glstableotherwidth}{0pt}%
   \fi
   \setlength{\glstabledescwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbol{##1}}%
   \glstablemeasureandupdate{\glstableotherwidth}{\glstableOther{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstabledescwidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth - \glstablenamewidth - \glstableotherwidth}%
   \ifdim\glstabledescwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.25\glstableblockwidth}%
     \setlength{\glstablesymbolwidth}{\glstablenamewidth}%
     \setlength{\glstableotherwidth}{\glstablenamewidth}%
     \setlength{\glstabledescwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} &
   \glstableSymbol{##1} &
   \glstableOther{##1} &
   \glstableDesc{##1}%
   \glstableChildEntries{##1}%
}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep
   \glstableSubSymbolWithSep{}{##1}{\glstableSubSep}%
   \glstableSubOtherWithSep{}{##1}{\glstableSubOtherSep}%
   \glstableSubDesc{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstabledescwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstabledescheader}%
 \renewcommand{\glstableblockalign}{%
   \glstablenamecolalign
   \glstablesymbolcolalign
   \glstableothercolalign
   \glstabledesccolalign}%
}
\glstablenewstyle{name-desc-symbol}{%
 \glstablecolsperblock=3\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
     \setlength{\glstablesymbolwidth}{0pt}%
   \fi
   \setlength{\glstabledescwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbol{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstabledescwidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth - \glstablenamewidth}%
   \ifdim\glstabledescwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth
    - 0.5\glstablesymbolwidth}%
     \setlength{\glstabledescwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} &
   \glstableDescWithOther{##1}%
   \glstableChildEntries{##1}%
 &
   \glstableSymbol{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep
   \glstableSubDescWithOther{##1}%
   \glstableSubSymbolWithSep{\glstableSubSep}{##1}{}%
 }%
 \renewcommand{\glstablesubentrywidth}{\glstabledescwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstabledescheader &
   \glstableHeaderFmt\glstablesymbolheader
 }%
 \renewcommand{\glstableblockalign}{%
   \glstablenamecolalign\glstabledesccolalign\glstablesymbolcolalign}%
}
\glstablenewstyle{desc-symbol-other-name}{%
  \glstablesetstyle{name-symbol-other-desc}%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableDesc{##1}%
   \glstableChildEntries{##1} &
   \glstableSymbol{##1} &
   \glstableOther{##1} &
   \glstableNameTarget{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubDescSymbolOther{##1}%
   \glstableSubNameSep
   \glstableSubNameTarget{##1}%
 }%
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstabledescheader &
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstablenameheader
 }%
 \renewcommand{\glstableblockalign}{%
   \glstabledesccolalign
   \glstablesymbolcolalign
   \glstableothercolalign
   \glstablenamecolalign
 }%
}
\glstablenewstyle{desc-other-symbol-name}{%
  \glstablesetstyle{name-symbol-other-desc}%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableDesc{##1}%
   \glstableChildEntries{##1} &
   \glstableOther{##1} &
   \glstableSymbol{##1} &
   \glstableNameTarget{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubDesc{##1}%
   \glstableSubOtherWithSep{\glstableSubOtherSep}{##1}{}%
   \glstableSubSymbolWithSep{\glstableSubSep}{##1}{}%
   \glstableSubNameSep
   \glstableSubNameTarget{##1}%
 }%
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstabledescheader &
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstablenameheader
 }%
 \renewcommand{\glstableblockalign}{%
   \glstabledesccolalign
   \glstableothercolalign
   \glstablesymbolcolalign
   \glstablenamecolalign
 }%
}
\glstablenewstyle{name-other-symbol-desc}{%
  \glstablesetstyle{name-symbol-other-desc}%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} &
   \glstableOther{##1} &
   \glstableSymbol{##1} &
   \glstableDesc{##1}%
   \glstableChildEntries{##1}%
 }%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep
   \glstableSubOtherWithSep{}{##1}{\glstableSubOtherSep}%
   \glstableSubSymbolWithSep{}{##1}{\glstableSubSep}%
   \glstableSubDesc{##1}%
 }%
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstabledescheader
 }%
 \renewcommand{\glstableblockalign}{%
   \glstablenamecolalign
   \glstableothercolalign
   \glstablesymbolcolalign
   \glstabledesccolalign
 }%
}
\glstablenewstyle{name-other}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
   \fi
   \setlength{\glstableotherwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstableotherwidth}{\dimexpr\glstableblockwidth
    - \glstablenamewidth}%
   \ifdim\glstableotherwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstableotherwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableNameTarget{##1} & \glstableOtherNoDesc{##1}%
   \glstableChildEntries{##1}%
}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubNameTarget{##1}\glstableSubNameSep \glstableSubOtherNoDesc{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstableotherwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablenameheader &
   \glstableHeaderFmt\glstableotherheader}%
 \renewcommand{\glstableblockalign}{\glstablenamecolalign\glstableothercolalign}%
}
\glstablenewstyle{other-name}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablenamewidth}%
       {\glstableHeaderFmt\glstablenameheader}%
   \else
     \setlength{\glstablenamewidth}{0pt}%
   \fi
   \setlength{\glstableotherwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablenamewidth}{\glstableName{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstableotherwidth}{\dimexpr\glstableblockwidth
    - \glstablenamewidth}%
   \ifdim\glstableotherwidth<0pt\relax
     \setlength{\glstablenamewidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstableotherwidth}{\glstablenamewidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableOtherNoDesc{##1}%
   \glstableChildEntries{##1}%
 &
   \glstableNameTarget{##1}}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubOtherNoDesc{##1}\glstableSubNameSep
   \glstableSubNameTarget{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstableotherwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstablenameheader}%
 \renewcommand{\glstableblockalign}{\glstableothercolalign\glstablenamecolalign}%
}
\glstablenewstyle{symbol-other}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
   \else
     \setlength{\glstablesymbolwidth}{0pt}%
   \fi
   \setlength{\glstableotherwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbolName{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstableotherwidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth}%
   \ifdim\glstableotherwidth<0pt\relax
     \setlength{\glstablesymbolwidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstableotherwidth}{\glstablesymbolwidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableSymbolNameTarget{##1} & \glstableOtherNoDesc{##1}%
   \glstableChildEntries{##1}%
}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubSymbolNameTarget{##1}\glstableSubNameSep
   \glstableSubOtherNoDesc{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstableotherwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstablesymbolheader &
   \glstableHeaderFmt\glstableotherheader}%
 \renewcommand{\glstableblockalign}{\glstablesymbolcolalign\glstableothercolalign}%
}
\glstablenewstyle{other-symbol}{%
 \glstablecolsperblock=2\relax
 \renewcommand{\glstableinitlengthupdates}{%
   \ifKV@printglosstable@header
     \glsmeasurewidth{\glstablesymbolwidth}%
       {\glstableHeaderFmt\glstablesymbolheader}%
   \else
     \setlength{\glstablesymbolwidth}{0pt}%
   \fi
   \setlength{\glstableotherwidth}{0pt}%
 }%
 \renewcommand{\glstablelengthupdate}[1]{%
   \glstablemeasureandupdate{\glstablesymbolwidth}{\glstableSymbolName{##1}}%
 }%
 \renewcommand{\glstablefinishlengthupdates}{%
   \setlength{\glstableotherwidth}{\dimexpr\glstableblockwidth
    - \glstablesymbolwidth}%
   \ifdim\glstableotherwidth<0pt\relax
     \setlength{\glstablesymbolwidth}{\dimexpr0.5\glstableblockwidth}%
     \setlength{\glstableotherwidth}{\glstablesymbolwidth}%
   \fi
 }%
 \renewcommand{\glstableblockentry}[1]{%
   \glstableOtherNoDesc{##1}%
   \glstableChildEntries{##1}%
 & \glstableSymbolNameTarget{##1}}%
 \renewcommand{\glstableblocksubentry}[1]{%
   \glstableSubOtherWithSep{}{##1}{\glstableSubSep}%
   \glstableSubSymbol{##1}%
   \glstableSubNameSep
   \glstableSubSymbolNameTarget{##1}}%
 \renewcommand{\glstablesubentrywidth}{\glstableotherwidth}
 \renewcommand{\glstableblockheader}{%
   \glstableHeaderFmt\glstableotherheader &
   \glstableHeaderFmt\glstablesymbolheader}%
 \renewcommand{\glstableblockalign}{\glstableothercolalign\glstablesymbolcolalign}%
}
\newcommand{\glstablecaption}[3]{%
 \caption[#1]{#3#2}%
}
\newcommand{\glstablepostnextcaption}{ (\MFUsentencecase{\glsxtrcontinuedname})}
\newcommand{\glstablenextcaption}[2]{%
 \caption[]{#1\glstablepostnextcaption}%
}
\newcommand{\glstablefoot}[1]{}
\newcommand{\glstablelastfoot}[1]{\glstablerowspan{#1}}
\newcommand{\glstablehead}[1]{}
\newcommand{\glstablefirsthead}[1]{\glstablerowspan{#1}}
\newlength\glstablepostpreambleskip
\setlength\glstablepostpreambleskip{5pt}
\newlength\glstableprepostambleskip
\setlength\glstableprepostambleskip{5pt}
\newcommand{\glstablefootstrut}{%
 \rule{0pt}{\dimexpr\baselineskip+\glstableprepostambleskip}%
}
\newcommand{\glstablerowspan}[1]{%
 \multicolumn{\glstabletotalcols}{c}{\parbox{\glstablespanwidth}{#1}}%
}
\newcommand{\glstablespanwidth}{\LTcapwidth}
\newcommand{\glstable@begin}{%
 \PackageError{glossary-table}{table style can only be used with
  \string\printunsrttable}{}%
}
\newcommand{\glstable@filter}[1]{%
  \ifnum\glscurrententrylevel>0\relax
    \printunsrtglossaryskipentry
  \else
    \glstableiffilter{#1}%
    {\printunsrtglossaryskipentry}%
    {%
      \glstable@calclengths{\glstablelengthupdate{#1}}%
    }%
  \fi
}
\newcommand{\glstableiffilter}[3]{#3}
\newlength\glstablenamewidth
\newlength\glstableblockwidth
\newlength\glstabledescwidth
\newlength\glstablesymbolwidth
\newlength\glstableotherwidth
\newcommand{\glstableifmeasuring}[2]{#2}
\newcommand{\glstable@stepentry}[1]{%
 \ifglsentrycounter
  \stepcounter{glossaryentry}%
 \fi
}
\newcommand{\glstable@stepsubentry}[1]{%
 \ifglssubentrycounter
  \stepcounter{glossarysubentry}%
 \fi
}
\newcommand{\glstablemeasureandupdate}[2]{%
  \glsmeasurewidth{\dimen@}{#2}%
  \ifdim\dimen@>#1\relax
    \setlength{#1}{\dimen@}%
  \fi
}
\newcommand{\glstable@ifhaspreamble}[2]{%
 \ifdefempty\glossarypreamble
 {#2}%
 {%
  \ifx\@glstable@defaultpreamble\glossarypreamble
    \ifcsvoid{@glossarypreamble@\currentglossary}{#2}{#1}%
  \else
    #1%
  \fi
 }%
}
\define@key{printglosstable}{type}{\renewcommand{\@glo@type}{#1}}
\define@key{printglosstable}{preamble}{\renewcommand{\glossarypreamble}{#1}}
\define@key{printglosstable}{postamble}{\renewcommand{\glossarypostamble}{#1}}
\newcommand\glstable@init{}
\define@cmdkey{printglosstable}[glstable@]{init}{}
\define@choicekey{printglosstable}{groups}
[\@glstable@groups@val\@glstable@groups@n]
{false,true,noskip,addskip}[true]%
{%
 \ifcase\@glstable@groups@n\relax
  \let\glstable@groupheading\@gobble
  \glsxtr@printgloss@groupsfalse
 \or
  \let\glstable@groupheading\glstablegroupheading
  \glsxtr@printgloss@groupstrue
 \or
  \let\glstable@groupheading\glstablegroupheading
  \glsxtr@printgloss@groupstrue
  \glsnogroupskiptrue
 \or
  \let\glstable@groupheading\glstablegroupheading
  \glsxtr@printgloss@groupstrue
  \glsnogroupskipfalse
 \fi
}
\newcommand{\glstable@groupheading}[1]{}
\newcommand{\glstablegroupheading}[1]{%
 \multicolumn{\glstabletotalcols}{c}{%
   \glsxtrgetgrouptitle{#1}{\glsxtrcurrentgrptitle}%
   \glstableGroupHeaderFmt\glsxtrcurrentgrptitle
 }%
 \glstablePostGroupNewLine
}
\newcommand{\glstablePostGroupNewLine}{\glstablenewline*}
\newcommand{\glstableGroupHeaderFmt}{\glstableHeaderFmt}
\newcommand{\glstable@preentryhook}[1]{%
  \if@glstable@afterheading
  \else
   \advance\glstablecurrentblockindex by 1\relax
   \ifnum\glstablecurrentblockindex<\glstableblockperrowcount
     \appto#1{&}%
   \else
     \appto#1{\glstablenewline}%
   \fi
  \fi
}
\newcommand{\glstablenewline}{\tabularnewline}
\newcommand{\glstable@postentryhook}[1]{%
 \ifnum\glstableblockperrowcount=\glstablecurrentblockindex
   \glstablecurrentblockindex=0\relax
 \fi
 \@glstable@afterheadingfalse
}
\newcommand{\glstable@grouphook}[1]{%
  \if@glstable@afterheading
  \else
    \preto#1{\glstablenewline}%
    \advance\glstablecurrentblockindex by 1\relax
    \ifnum\glstablecurrentblockindex<\glstableblockperrowcount\relax
      \expandafter\glstable@n@to@amps\expandafter
      {\numexpr\glstableblockperrowcount-\glstablecurrentblockindex}%
      {\preto}{#1}%
    \fi
  \fi
  \glstablecurrentblockindex=0\relax
  \@glstable@afterheadingtrue
}
\newcommand{\glstable@finish}[1]{%
  \if@glstable@afterheading
  \else
    \advance\glstablecurrentblockindex by 1\relax
    \ifnum\glstablecurrentblockindex<\glstableblockperrowcount\relax
      \expandafter\glstable@n@to@amps\expandafter
      {\numexpr\glstableblockperrowcount-\glstablecurrentblockindex}%
      {\appto}{#1}%
    \fi
  \fi
}
\let\@glstable@defaultpreamble\glossarypreamble
\newcommand{\@glstable@clearpage}{}
\newcommand{\@glstable@clearpage@iflt}[1]{%
  \par
  \ifdim #1>\dimexr\pagegoal-\pagetotal\relax
   \clearpage
  \fi
}
\define@key{printglosstable}{clearpage}[true]{%
  \ifstrequal{#1}{true}%
  {%
    \renewcommand{\@glstable@clearpage}{\clearpage}%
  }%
  {%
    \ifstrequal{#1}{false}%
    {%
      \renewcommand{\@glstable@clearpage}{}%
    }%
    {%
      \renewcommand{\@glstable@clearpage}{\@glstable@clearpage@iflt{#1}}%
    }%
  }%
}
\newif\if@glstable@afterheading
\NewDocumentCommand\printunsrttable{O{}}{%
 \bgroup
  \def\@glo@type{\glsdefaulttype}%
  \def\glossarytitle{%
   \ifcsdef{@glotype@\@glo@type @title}%
   {\csuse{@glotype@\@glo@type @title}}%
   {\glossaryname}%
  }%
  \def\glossarytoctitle{\glossarytitle}%
  \let\glossarypreamble\@glstable@defaultpreamble
  \glsxtr@printgloss@groupsfalse
  \glsnogroupskiptrue
  \setkeys*{printglosstable}{#1}%
  \ifKV@printglosstable@caption
   \if@glsxtr@floats
    \renewcommand{\glscounter}{table}%
   \fi
  \fi
  \glstable@init
  \let\glstable@calclengths\glstableifpar
  \ifglsnogroupskip
  \else
   \ifundef\glspenaltygroupskip
   {%
     \PackageError{glossary-table}{\string\printunsrttable[nogroupskip=false]
     requires glossary-longbooktabs.sty}%
     {You need to load glossary-longbooktabs.sty in addition to
     loading glossary-table.sty if you want the group skip}%
     \glsnogroupskiptrue
   }%
   {\glspatchLToutput}%
  \fi
  \let\currentglossary\@glo@type
  \protected@edef\glstable@opts{type=\@glo@type,style=table}%
  \ifdefempty\XKV@rm{}{\epreto\glstable@opts{\expandonce\XKV@rm,}}%
  \glstabletotalcols=\numexpr\glstablecolsperblock*\glstableblockperrowcount\relax
  \glstable@calclengths
  {%
    \edef\glstablespanwidth{\dimexpr\linewidth-2\tabcolsep-1pt}%
    \glstableblockwidth=\dimexpr
     (\linewidth-\glstabletotalcols\tabcolsep-\glstabletotalcols\tabcolsep)
      /\glstableblockperrowcount-1pt
      \relax
    \glstableinitlengthupdates
  }%
  \def\glstable@alignment{}%
  \ifKV@printglosstable@rules
    \def\glstable@header{\toprule}%
  \else
    \def\glstable@header{}%
  \fi
  \global\glstablecurrentblockindex=0\relax
  \loop
    \ifnum\glstablecurrentblockindex>0\relax
     \protected@eappto\glstable@alignment{\glstable@blockalignsep}%
    \fi
    \protected@eappto\glstable@alignment{\glstableblockalign}%
    \ifKV@printglosstable@header
     \ifnum\glstablecurrentblockindex>0\relax
      \appto\glstable@header{&}%
     \fi
     \eappto\glstable@header{\expandonce\glstableblockheader}%
    \fi
     \advance\glstablecurrentblockindex by 1\relax
  \ifnum\glstablecurrentblockindex<\glstableblockperrowcount
  \repeat
  \ifKV@printglosstable@header
    \appto\glstable@header{\glstablenewline}%
    \ifKV@printglosstable@rules
      \appto\glstable@header{\midrule}%
    \fi
  \fi
  \protected@edef\glstable@begin{%
    \noexpand\begin{longtable}{\expandonce\glstable@alignment}%
  }%
  \ifKV@printglosstable@caption
    \appto\glstable@begin{%
      \expandafter\glstablecaption\expandafter
        {\glossarytoctitle}{\glossarytitle}%
        {\@@glossaryseclabel}%
      \glstablenewline
    }%
  \fi
  \glstable@ifhaspreamble
  {%
    \eappto\glstable@begin{%
      \noexpand\glstablefirsthead
       {\expandonce\glossarypreamble}%
      \noexpand\glstablenewline[\glstablepostpreambleskip]%
      \expandonce\glstable@header
      \noexpand\endfirsthead
    }%
    \ifKV@printglosstable@caption
      \appto\glstable@begin{%
        \expandafter\glstablenextcaption\expandafter
         {\glossarytoctitle}{\glossarytitle}%
        \glstablenewline
      }%
    \fi
    \ifx\glstablehead\@gobble
    \else
      \eappto\glstable@begin{%
        \noexpand\glstablehead{\expandonce\glossarypreamble}%
        \noexpand\glstablenewline[\glstablepostpreambleskip]%
      }%
    \fi
  }%
  {%
    \eappto\glstable@begin{%
      \expandonce\glstable@header
      \noexpand\endfirsthead
    }%
    \ifKV@printglosstable@caption
      \appto\glstable@begin{%
        \expandafter\glstablenextcaption\expandafter
         {\glossarytoctitle}{\glossarytitle}%
        \glstablenewline
      }%
    \fi
  }%
  \eappto\glstable@begin{%
    \expandonce\glstable@header
    \noexpand\endhead
  }%
  \ifdefvoid\glossarypostamble
  {%
    \ifKV@printglosstable@rules
      \appto\glstable@begin{\bottomrule\endfoot}%
    \fi
  }
  {%
    \ifKV@printglosstable@rules
      \eappto\glstable@begin{%
       \noexpand\bottomrule
       \noexpand\glstablefoot
        {\noexpand\glstablefootstrut\expandonce\glossarypostamble}%
       \noexpand\glstablenewline
       \noexpand\endfoot
       \noexpand\bottomrule
       \noexpand\glstablelastfoot
        {\noexpand\glstablefootstrut\expandonce\glossarypostamble}%
       \noexpand\glstablenewline
       \noexpand\endlastfoot
      }%
    \else
      \eappto\glstable@begin{%
       \noexpand\glstablefoot{\expandonce\glossarypostamble}%
       \noexpand\glstablenewline[\glstableprepostambleskip]%
       \noexpand\endfoot
       \noexpand\glstablelastfoot{\expandonce\glossarypostamble}%
       \noexpand\glstablenewline[\glstableprepostambleskip]%
       \noexpand\endlastfoot
      }%
    \fi
  }%
  \let\printunsrtglossaryentryprocesshook\glstable@filter
  \renewcommand{\printunsrtglossarypreentryprocesshook}{%
    \glstable@preentryhook
  }%
  \renewcommand{\printunsrtglossarypostentryprocesshook}{%
    \glstable@postentryhook
  }%
  \renewcommand{\printunsrtglossarygrouphook}{%
    \glstable@grouphook
  }%
  \renewcommand{\printunsrtglossarypreend}{%
    \glstable@finish
  }%
  \let\glossarypostamble\relax
  \let\glossarypreamble\relax
  \renewcommand{\glossarysection}[2][]{}%
  \glstablecurrentblockindex=0\relax
  \@glstable@afterheadingtrue
  \@glstable@clearpage
  \let\glstable@org@predoglossary\printunsrtglossarypredoglossary
  \renewcommand{\printunsrtglossarypredoglossary}
  {%
    \glstable@calclengths{\glstablefinishlengthupdates}%
    \glstable@org@predoglossary
  }%
  \glsxtrifemptyglossary{\currentglossary}
  {%
    \GlossariesExtraWarning{Glossary `\currentglossary' is empty}%
    \edef\@glsxtr@tmp{\noexpand\setkeys{printgloss}{\expandonce\glstable@opts}}%
    \@glsxtr@tmp
    \glstable@begin% \begin{longtable}{specs}
    \end{longtable}%
  }%
  {%
    \expandafter\printunsrtglossary\expandafter[\glstable@opts]\relax
  }%
 \egroup
}
\newcommand{\glstableiffilterchild}[3]{#3}
\newcommand{\glstable@child}[1]{%
  \glstableiffilterchild{#1}{}%
  {%
    \ifdefempty\glstable@dochildren{}%
    {\appto\glstable@dochildren{\glstableblocksubentrysep}}%
    \appto\glstable@dochildren{\glstableblocksubentry{#1}}%
  }%
}
\newcommand{\glstableChildEntries}[1]{%
  \def\glstable@dochildren{}%
  \GlsXtrIfFieldNonZero*{childcount}{#1}%
  {%
    \glsxtrfieldforlistloop{#1}{childlist}{\glstable@child}%
    \ifdefempty\glstable@dochildren
    {}%
    {%
      \preto\glstable@dochildren{%
        \glstablePreChildren
        \begin{glstablesubentries}%
      }%
      \appto\glstable@dochildren{\end{glstablesubentries}}%
    }%
  }%
  {}%
  \glstable@dochildren
}
\newcommand{\glstable@n@to@amps}[3]{%
 \ifnum#1>0\relax
   \count@=0\relax
   \loop
     \advance\count@ by 1\relax
     #2#3{&}%
   \ifnum\count@<#1
   \repeat
 \fi
}
\newglossarystyle{table}%
{%
  \renewenvironment{theglossary}%
  {%
   \glstable@begin
  }
  {%
    \end{longtable}%
  }%
  \renewcommand*{\glossaryheader}{}%
  \renewcommand*{\glsgroupheading}[1]{\glstable@groupheading{##1}}%
  \renewcommand*{\glssubgroupheading}[4]{}%
  \ifglsnogroupskip
    \renewcommand*{\glsgroupskip}{}%
  \else
    \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}%
  \fi
  \renewcommand{\glossentry}[2]{%
    \glstableblockentry{##1}%
  }%
  \renewcommand{\subglossentry}[3]{}%
}
\endinput
%%
%% End of file `glossary-table.sty'.