%\iffalse
% testidx.dtx generated using makedtx version 1.2 (c) Nicola Talbot
% Command line args:
%   -src "(testidx.sty)\Z=>\1"
%   -src "(testidx-.*.sty)\Z=>\1"
%   -src "(testidx-glossaries.*\.tex)\Z=>\1"
%   -src "(testidx-glossaries.*\.bib)\Z=>\1"
%   -setambles ".*\.bib=>\nopreamble\nopostamble"
%   -doc "testidx-codedoc.tex"
%   -codetitle "Main Package Code"
%   -author "Nicola Talbot"
%   -macrocode ".*\.bib"
%   testidx
% Created on 2019/9/29 13:53
%\fi
%\iffalse
%<*package>
%% \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         \~}
%</package>
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2019 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
\documentclass{nlctdoc}

\iffalse
testidx-codedoc.tex is a stub file used by makedtx to create
testidx.dtx
\fi

\usepackage{metalogo}
\usepackage{fontspec}
\setromanfont{FreeSerif}
\setsansfont{FreeSans}[Scale=MatchLowercase]
\setmonofont{FreeMono}
\usepackage[colorlinks,
            bookmarks,
            hyperindex=false,
            pdfauthor={Nicola L.C. Talbot},
            pdftitle={testidx.sty: Documented code}]{hyperref}

\RecordChanges

\renewcommand*{\main}[1]{\hyperpage{#1}}

\setcounter{IndexColumns}{2}

\CheckSum{10168}

\begin{document}
\DocInput{testidx.dtx}
\end{document}
%</driver>
%\fi
%\MakeShortVerb{"}
%\DeleteShortVerb{\|}
%
% \title{Documented Code For testidx v1.2}
% \author{Nicola L.C. Talbot\\[10pt]
%Dickimaw Books\\
%\url{http://www.dickimaw-books.com/}}
%
% \date{2019-09-29}
% \maketitle
%
%\tableofcontents
%
%\section{Introduction}
%
%This is the documented code for the \styfmt{testidx} package.
%See \texttt{testidx-manual.pdf} for the main user guide.
%
%
%\StopEventually{%
%  \phantomsection
%  \addcontentsline{toc}{section}{Change History}%
%  \raggedright
%  \PrintChanges
%  \PrintIndex
%}
%
%
%
%\section{Main Package Code}
%\iffalse
%    \begin{macrocode}
%<*testidx.sty>
%    \end{macrocode}
%\fi
%\section{Initialisation}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{testidx}[2019/09/29 v1.2 (NLCT)]
%    \end{macrocode}
%To avoid as much conflict as possible, this package loads the
%bare minimum, so I'm not using useful packages like \styfmt{etoolbox} or
%\styfmt{pgffor}. Just load a few necessities:
%    \begin{macrocode}
\RequirePackage{color}
%    \end{macrocode}
%Need to know if we have UTF-8 support:
%    \begin{macrocode}
\RequirePackage{ifxetex}
\RequirePackage{ifluatex}
%    \end{macrocode}
%\begin{macro}{\@tstidx@ifxeorlua}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\@tstidx@ifxelua}[2]{%
  \ifxetex
   #1%
  \else
   \ifluatex
     #1%
   \else
     #2%
   \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@@tstidx@ifutfviii}
%\changes{1.2}{2019-09-29}{renamed from \cs{@tstidx@ifutfviii}}
%    \begin{macrocode}
\newcommand*{\@@tstidx@ifutfviii}[2]{%
 \@tstidx@ifxelua{#1}
 {%
   \ifx\inputencodingname\@tstidx@utfviii#1\else#2\fi
 }%
}
\newcommand*{\@tstidx@utfviii}{utf8}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tstidx@ifutfviii}
%\changes{1.2}{2019-09-29}{now let to \cs{@@tstidx@ifutfviii}}
%    \begin{macrocode}
\let\@tstidx@ifutfviii\@@tstidx@ifutfviii
%    \end{macrocode}
%\end{macro}
%As from 2018, \LaTeX\ now automatically enables UTF-8 support, so provide
%an option to use only ASCII in the test:
%\changes{1.2}{2019-09-29}{added ascii and noascii options}
%    \begin{macrocode}
\DeclareOption{ascii}{\let\@tstidx@ifutfviii\@secondoftwo}
%    \end{macrocode}
%Provide option to counteract this (if document doesn't support
%UTF-8 this won't make a difference):
%    \begin{macrocode}
\DeclareOption{noascii}{\let\@tstidx@ifutfviii\@@tstidx@ifutfviii}
%    \end{macrocode}
%
%\begin{macro}{\tstidxprocessasciisort}
%The first argument is a control sequence in which to store the
%processed sort string.
%    \begin{macrocode}
\newcommand*{\tstidxprocessasciisort}{\tstidxprocessasciisortstrip}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidxStripAccents}
%    \begin{macrocode}
\newcommand*{\testidxStripAccents}{%
  \renewcommand*{\tstidxprocessasciisort}{\tstidxprocessasciisortstrip}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidxNoStripAccents}
%    \begin{macrocode}
\newcommand*{\testidxNoStripAccents}{%
  \renewcommand*{\tstidxprocessasciisort}{\tstidxprocessasciisortnostrip}%
}
%    \end{macrocode}
%\end{macro}
%
%Option to strip accents from sort key (non-UTF-8).
%    \begin{macrocode}
\DeclareOption{stripaccents}{\testidxStripAccents}
%    \end{macrocode}
%
%Leave the accent commands in the sort key (non-UTF-8).
%    \begin{macrocode}
\DeclareOption{nostripaccents}{\testidxNoStripAccents}
%    \end{macrocode}
%
%\begin{macro}{\tstidxquote}
%Quote character.
%    \begin{macrocode}
\newcommand{\tstidxquote}{\string"}
%    \end{macrocode}
%\end{macro}
%This is going to cause a problem for the umlauts if we're not using
%UTF-8, so provide a command to protect the double-quote:
%\begin{macro}{\tstidxumlaut}
%    \begin{macrocode}
\newcommand*{\tstidxumlaut}{%
  \expandafter\@gobble\string\\\tstidxquote\string"}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxsortumlaut}
%    \begin{macrocode}
\newcommand*{\tstidxsortumlaut}{%
  \expandafter\@gobble\string\\\tstidxquote\string"}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxsortumlautstrip}
%    \begin{macrocode}
\newcommand*{\tstidxsortumlautstrip}{\@firstofone}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidxGermanOn}
%Switch German option on.
%    \begin{macrocode}
\newcommand*{\testidxGermanOn}{%
  \let\@tstidx@ifgerman\@firstoftwo
  \renewcommand{\tstidxquote}{+}%
  \renewcommand*{\tstidxumlaut}{\string"}%
  \renewcommand*{\tstidxsortumlautstrip}{\string"}%
  \renewcommand*{\tstidxsortumlaut}{\string"}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidxGermanOff}
%Switch German option off.
%    \begin{macrocode}
\newcommand*{\testidxGermanOff}{%
  \let\@tstidx@ifgerman\@secondoftwo
  \renewcommand{\tstidxquote}{\string"}%
  \renewcommand*{\tstidxumlaut}{%
  \expandafter\@gobble\string\\\tstidxquote\string"}%
  \renewcommand*{\tstidxsortumlautstrip}{\@firstofone}%
  \renewcommand*{\tstidxsortumlaut}{%
    \expandafter\@gobble\string\\\tstidxquote\string"}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidx@ifgerman}
%    \begin{macrocode}
\newcommand*{\@tstidx@ifgerman}[2]{#2}
%    \end{macrocode}
%\end{macro}
%User may want to run \app{makeindex} with the \texttt{-g} switch,
%so provide \pkgopt{german} option that will accommodate this.
%    \begin{macrocode}
\DeclareOption{german}{\testidxGermanOn}
%    \end{macrocode}
%Also allow \pkgopt{ngerman} to do the same:
%    \begin{macrocode}
\DeclareOption{ngerman}{\testidxGermanOn}
%    \end{macrocode}
%Provide an option to counter-act this:
%    \begin{macrocode}
\DeclareOption{nogerman}{\testidxGermanOff}
%    \end{macrocode}
%
%
%\begin{macro}{\tstidxprocessutf}
%How to deal with UTF-8 words.
%    \begin{macrocode}
\@tstidx@ifxelua
{
  \newcommand*{\tstidxprocessutf}{%
    \tstidxprocessutfnosanitize
  }
}
{
  \newcommand*{\tstidxprocessutf}{%
    \tstidxprocessutfsanitize
  }
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidx@ifsanitize}
%    \begin{macrocode}
\newcommand*{\@tstidx@ifsanitize}[2]{#1}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidxSanitizeOn}
%Switch the \pkgopt{sanitize} option on.
%    \begin{macrocode}
\newcommand*{\testidxSanitizeOn}{%
   \let\@tstidx@ifsanitize\@firstoftwo
   \renewcommand*{\tstidxprocessutf}{%
     \tstidxprocessutfsanitize
   }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidxSanitizeOff}
%Switch the \pkgopt{sanitize} option off.
%    \begin{macrocode}
\newcommand*{\testidxSanitizeOff}{%
   \let\@tstidx@ifsanitize\@secondoftwo
   \renewcommand*{\tstidxprocessutf}{%
     \tstidxprocessutfnosanitize
   }%
}
%    \end{macrocode}
%\end{macro}
%Note that as from LaTeX 2019/10/01, UTF-8 characters no longer
%expand as they are written to the indexing file. This means that
%there won't be a difference if the sanitizing is on or off.
%Similarly there's no difference with \XeLaTeX\ and \LuaLaTeX\ since
%they natively support UTF-8 and don't make extended characters
%active anyway.
%
%\begin{macro}{\iftestidxdiglyphs}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newif\iftestidxdiglyphs
\testidxdiglyphsfalse
%    \end{macrocode}
%\end{macro}
%Option to switch on digraph glyphs for the digraph examples:
%    \begin{macrocode}
\DeclareOption{diglyphs}{%
 \@tstidx@ifutfviii{\testidxdiglyphstrue}%
 {%
   \PackageWarning{testidx}{diglyphs option requires UTF-8 support}%
 }
}
%    \end{macrocode}
%Option to switch off digraphs glyphs for the digraph examples (default):
%    \begin{macrocode}
\DeclareOption{nodiglyphs}{\testidxdiglyphsfalse}
%    \end{macrocode}
%
%\begin{macro}{\iftestidxprefix}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newif\iftestidxprefix
\testidxprefixtrue
%    \end{macrocode}
%\end{macro}
%Option to switch on sort prefixes (default):
%    \begin{macrocode}
\DeclareOption{prefix}{\testidxprefixtrue}
%    \end{macrocode}
%Option to switch off prefixes:
%    \begin{macrocode}
\DeclareOption{noprefix}{\testidxprefixfalse}
%    \end{macrocode}
%
%Option to switch on the UTF-8 sanitization (irrespective of engine):
%    \begin{macrocode}
\DeclareOption{sanitize}{\testidxSanitizeOn}
%    \end{macrocode}
%
%Option to switch off the UTF-8 sanitization (irrespective of engine):
%    \begin{macrocode}
\DeclareOption{nosanitize}{\testidxSanitizeOff}
%    \end{macrocode}
%
%Option to show the actual indexing argument.
%\begin{macro}{\iftestidxverbose}
%    \begin{macrocode}
\newif\iftestidxverbose
\testidxverbosefalse
\DeclareOption{verbose}{\testidxverbosetrue}
\DeclareOption{noverbose}{\testidxverbosefalse}
%    \end{macrocode}
%\end{macro}
%
%Option to hide the markers.
%\begin{macro}{\iftestidxshowmarks}
%    \begin{macrocode}
\newif\iftestidxshowmarks
\testidxshowmarkstrue
\DeclareOption{showmarks}{\testidxshowmarkstrue}
\DeclareOption{noshowmarks}{\testidxshowmarksfalse}
\DeclareOption{hidemarks}{\testidxshowmarksfalse}
%    \end{macrocode}
%\end{macro}
%
%Option to skip the test encaps.
%\begin{macro}{\if@tstidx@use@encaps}
%    \begin{macrocode}
\newif\if@tstidx@use@encaps
\@tstidx@use@encapstrue
\DeclareOption{testencaps}{\@tstidx@use@encapstrue}
\DeclareOption{notestencaps}{\@tstidx@use@encapsfalse}
%    \end{macrocode}
%\end{macro}
%
%Process options:
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}
%Find out if various packages have been loaded.
%\begin{macro}{\@tstidx@ifamsmath}
%    \begin{macrocode}
\AtBeginDocument{%
  \@ifpackageloaded{amsmath}%
  {\let\@tstidx@ifamsmath\@firstoftwo}%
  {\let\@tstidx@ifamsmath\@secondoftwo}%
  \@ifpackageloaded{amssymb}%
  {\let\@tstidx@ifamssymb\@firstoftwo}%
  {\let\@tstidx@ifamssymb\@secondoftwo}%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tstidx@ifinputenc}
%    \begin{macrocode}
  \@ifpackageloaded{inputenc}
  {
    \let\@tstidx@if@inputenc\@firstoftwo
  }%
  {%
    \ifxetex
      \let\@tstidx@if@inputenc\@firstoftwo
    \else
      \ifluatex
        \let\@tstidx@if@inputenc\@firstoftwo
      \else
        \let\@tstidx@if@inputenc\@secondoftwo
      \fi
    \fi
  }%
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tstidx@if@notOT@ne}
% Some of the accent commands don't work with the default OT1
% encoding, so provide a convenient test.
%    \begin{macrocode}
  \ifxetex
    \let\@tstidx@if@notOT@ne\@firstoftwo
  \else
    \ifluatex
      \let\@tstidx@if@notOT@ne\@firstoftwo
    \else
      \newcommand*{\@tstidx@OT@ne}{OT1}%
      \edef\@tstidx@enc{\encodingdefault}%
      \ifx\@tstidx@OT@ne\@tstidx@enc
        \let\@tstidx@if@notOT@ne\@secondoftwo
      \else
        \let\@tstidx@if@notOT@ne\@firstoftwo
      \fi
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\section{Markup Commands}
% String is used in case any of these characters have been made
% active.
%\begin{macro}{\tstidxactual}
%Actual character.
%    \begin{macrocode}
\newcommand{\tstidxactual}{\string @}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxlevel}
%Level character.
%    \begin{macrocode}
\newcommand{\tstidxlevel}{\string!}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxencap}
%Encap character.
%    \begin{macrocode}
\newcommand{\tstidxencap}{\string|}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxopenrange}
%Start range character.
%    \begin{macrocode}
\newcommand{\tstidxopenrange}{\string(}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxcloserange}
%End range character.
%    \begin{macrocode}
\newcommand{\tstidxcloserange}{\string)}
%    \end{macrocode}
%\end{macro}
%Some of the examples use words with extended Latin characters.
%Provide a way of simulating the user explicitly writing, for
%example, \verb|\index{\""Angelholm}|.
%\begin{macro}{\tstidxprocessascii}
%The first argument is a control sequence in which to store the
%processed string.
%    \begin{macrocode}
\newcommand*{\tstidxprocessascii}[2]{%
  {%
    \let\"\tstidxumlaut
    \def\'{\string\'}%
    \def\`{\string\`}%
    \def\.{\string\.}%
    \def\={\string\=}%
    \def\^{\string\^}%
    \def\~{\string\~}%
    \def\c{\string\c}%
    \def\r{\string\r}%
    \def\b{\string\b}%
    \def\d{\string\d}%
    \def\H{\string\H}%
    \def\k{\string\k}%
    \def\u{\string\u}%
    \def\v{\string\v}%
    \def\O{\string\O\space}%
    \def\o{\string\o\space}%
    \def\l{\string\l\space}%
    \def\L{\string\L\space}%
    \def\i{\string\i\space}%
    \def\AA{\string\AA\space}%
    \def\aa{\string\aa\space}%
    \def\ae{\string\ae\space}%
    \def\AE{\string\AE\space}%
    \def\oe{\string\oe\space}%
    \def\OE{\string\OE\space}%
    \def\ss{\string\ss\space}%
    \def\SS{\string\SS\space}%
    \def\th{\string\th\space}%
    \def\TH{\string\TH\space}%
    \def\dh{\string\dh\space}%
    \def\DH{\string\DH\space}%
    \def\dj{\string\dj\space}%
    \def\DJ{\string\DJ\space}%
    \def\ng{\string\ng\space}%
    \def\NG{\string\NG\space}%
    \protected@xdef#1{#2}%
  }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxprocessasciisortnostrip}
%    \begin{macrocode}
\newcommand*{\tstidxprocessasciisortnostrip}[2]{%
  {%
    \let\"\tstidxsortumlaut
    \protected@xdef#1{#2}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxprocessasciisortstrip}
%    \begin{macrocode}
\newcommand*{\tstidxprocessasciisortstrip}[2]{%
  {%
    \let\"\tstidxsortumlautstrip
    \let\'\@firstofone
    \let\`\@firstofone
    \let\.\@firstofone
    \let\=\@firstofone
    \let\^\@firstofone
    \let\~\@firstofone
    \let\c\@firstofone
    \let\r\@firstofone
    \let\b\@firstofone
    \let\d\@firstofone
    \let\H\@firstofone
    \let\k\@firstofone
    \let\u\@firstofone
    \let\v\@firstofone
    \def\O{O}%
    \def\o{o}%
    \def\l{l}%
    \def\L{L}%
    \def\i{i}%
    \def\AA{A}%
    \def\aa{a}%
    \def\ae{ae}%
    \def\AE{AE}%
    \def\oe{oe}%
    \def\OE{OE}%
    \def\ss{ss}%
    \def\SS{SS}%
    \def\th{th}%
    \def\TH{TH}%
    \def\dh{dh}%
    \def\DH{DH}%
    \def\dj{dj}%
    \def\DJ{DJ}%
    \def\ng{ng}%
    \def\NG{NG}%
    \protected@xdef#1{#2}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxprocessutfsanitize}
%Sanitize UTF-8 strings.
%    \begin{macrocode}
\newcommand*{\tstidxprocessutfsanitize}[2]{%
  \def#1{#2}%
  \@onelevel@sanitize#1%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxprocessutfnosanitize}
%Don't sanitize UTF-8 strings.
%    \begin{macrocode}
\newcommand*{\tstidxprocessutfnosanitize}[2]{%
  \def#1{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstidxencaptext}
% Wrap text in the command corresponding to the given encap.
%    \begin{macrocode}
\newcommand*{\tstidxencaptext}[2]{%
  \@ifundefined{#1}%
  {%
    \PackageError{testidx}{Encap value `#1' doesn't correspond
    to a known command}{}%
  }%
  {%
    \csname#1\endcsname{#2}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxtext}
%Identify text next to the index command. This will also be wrapped
%around the encap value if supplied.
%    \begin{macrocode}
\newcommand*{\tstidxtext}[1]{\textcolor[gray]{0.3}{#1}}
%    \end{macrocode}
%\end{macro}
%
%Provide three different encap values for testing:
%\begin{macro}{\tstidxencapi}
%    \begin{macrocode}
\newcommand*{\tstidxencapi}[1]{\textcolor{blue}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxencapii}
%    \begin{macrocode}
\newcommand*{\tstidxencapii}[1]{\textcolor{cyan}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxencapiii}
%    \begin{macrocode}
\newcommand*{\tstidxencapiii}[1]{\textcolor{magenta}{#1}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxensuretext}
%Ensure in text mode.
%    \begin{macrocode}
\newcommand*{\tstidxensuretext}[1]{%
 \ifmmode
  \@tstidx@ifamsmath{\text{#1}}{\mbox{#1}}%
 \else
  #1%
 \fi
}
%    \end{macrocode}
%\end{macro}
%Markers to show where the \cs{index} commands are used.
%Preferable to have markers that adjust to font size, and only use
%commands provided by \LaTeX\ kernel to reduce package requirements.
%\begin{macro}{\tstidxmarker}
%No range or cross-reference. I initially used
%\cs{textperiodcentered} for the marker, but some fonts make it a
%bit too spacey for this purpose.
%    \begin{macrocode}
\newcommand*{\tstidxmarker}{%
 \tstidxensuretext{\raisebox{.65ex}{.}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxsubmarker}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxsubmarker}{%
 \tstidxensuretext{\strut\smash{\raisebox{-1.5ex}{\v{}}}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxsubsubmarker}
%Sub-sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxsubsubmarker}{%
 \tstidxensuretext{\strut\makebox[0pt][l]{\smash{\raisebox{-1ex}{\v{}}}}%
 \smash{\raisebox{-1.5ex}{\v{}}}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxopenmarker}
%Start of a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenmarker}{%
  \tstidxensuretext
  {%
   \setlength{\unitlength}{1ex}%
   \begin{picture}(.5,2)
   \put(\@halfwidth\@gobble,0){\line(0,1){2}}
   \put(0,2){\line(1,0){.5}}
   \end{picture}%
   \hspace{\@halfwidth}%
 }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxclosemarker}
%End of a range.
%    \begin{macrocode}
\newcommand*{\tstidxclosemarker}{%
  \tstidxensuretext
  {%
   \setlength{\unitlength}{1ex}%
   \begin{picture}(.5,2)
   \put(\@halfwidth\@gobble,0){\line(1,0){.5}}
   \put(.5,0){\line(0,1){2}}
   \end{picture}%
   \hspace{\@halfwidth}%
 }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxopensubmarker}
%Start of a range for sub-entries.
%    \begin{macrocode}
\newcommand*{\tstidxopensubmarker}{%
 \tstidxensuretext
 {%
   \setlength{\unitlength}{1ex}%
   \begin{picture}(.4,1.6)
   \put(\@halfwidth\@gobble,0){\line(0,1){1.6}}
   \put(0,1.6){\line(1,0){.4}}
   \end{picture}%
   \hspace{\@halfwidth}%
 }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxclosesubmarker}
%End of a range for sub-entries.
%    \begin{macrocode}
\newcommand*{\tstidxclosesubmarker}{%
 \tstidxensuretext
 {%
   \setlength{\unitlength}{1ex}%
   \begin{picture}(.4,1.6)
   \put(\@halfwidth\@gobble,0){\line(1,0){.4}}
   \put(.4,0){\line(0,1){1.6}}
   \end{picture}%
   \hspace{\@halfwidth}%
 }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxopensubsubmarker}
%Start of a range for sub-sub-entries.
%    \begin{macrocode}
\newcommand*{\tstidxopensubsubmarker}{%
 \tstidxensuretext
 {%
   \setlength{\unitlength}{1ex}%
   \begin{picture}(.3,1.2)
   \put(\@halfwidth\@gobble,0){\line(0,1){1.2}}
   \put(0,1.2){\line(1,0){.3}}
   \end{picture}%
   \hspace{\@halfwidth}%
 }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxclosesubsubmarker}
%End of a range for sub-sub-entries.
%    \begin{macrocode}
\newcommand*{\tstidxclosesubsubmarker}{%
 \tstidxensuretext
 {%
   \setlength{\unitlength}{1ex}%
   \begin{picture}(.3,1.2)
   \put(\@halfwidth\@gobble,0){\line(1,0){.3}}
   \put(.3,0){\line(0,1){1.2}}
   \end{picture}%
   \hspace{\@halfwidth}%
 }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxseemarker}
%Cross-reference.
%    \begin{macrocode}
\newcommand*{\tstidxseemarker}{\^{}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxseeref}
%Cross-references are identified with the marker and with a marginal
%note with the term being indexed and the argument of the \qt{see} encap.
%    \begin{macrocode}
\newcommand*{\tstidxseeref}[3]{\tstidxseemarker
 \marginpar{\strut\raggedright\footnotesize
   \normalcolor\tstidxseemarker#1, \csname#2\endcsname{#3}{}}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxsubseemarker}
%Cross-reference.
%    \begin{macrocode}
\newcommand*{\tstidxsubseemarker}{%
 \tstidxensuretext{\makebox[0pt][l]{\tstidxsubmarker}%
 \tstidxseemarker}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxsubseeref}
%Cross-references are identified with the marker and with a marginal
%note with the term being indexed and the argument of the \qt{see} encap.
%    \begin{macrocode}
\newcommand*{\tstidxsubseeref}[4]{\tstidxsubseemarker
 \marginpar{\strut\raggedright\footnotesize
   \normalcolor\tstidxsubseemarker#1\tstidxsubseesep#2, \csname#3\endcsname{#4}{}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxsubseesep}
%Separator used in the above.
%    \begin{macrocode}
\newcommand*{\tstidxsubseesep}{\,$\triangleright$\,}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindex}
% Allow user to change \cs{index} to something else. For example,
% add an optional argument if multiple indexes are present.
%    \begin{macrocode}
\newcommand*{\tstindex}{\index}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tstindex}
%    \begin{macrocode}
\newcommand*{\@tstindex}[1]{%
  \iftestidxverbose
   \def\@tstindex@arg{#1}%
   \@onelevel@sanitize\@tstindex@arg
   \testidxverbosefmt{\@tstindex@arg}%
  \fi
  \tstindex{#1}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\testidxverbosefmt}
%    \begin{macrocode}
\newcommand*{\testidxverbosefmt}[1]{%
  \expandafter\def\expandafter\@tstidx@tmp\expandafter{\tstindex}%
  \@onelevel@sanitize\@tstidx@tmp
  \tstidxensuretext{%
    \discretionary{}{}{}%
    {\footnotesize\texttt{\@tstidx@tmp
     \expandafter\@gobble\string\{#1\expandafter\@gobble\string\}}}%
    \discretionary{}{}{}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxqt}
%Nothing to do with indexing, but just provides semantic markup for
%quotes.
%    \begin{macrocode}
\newcommand*{\tstidxqt}[1]{``#1''}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxdash}
%    \begin{macrocode}
\newcommand*{\tstidxdash}{\,---\,}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxfootnote}
%    \begin{macrocode}
\newcommand*{\tstidxfootnote}{\footnote}
%    \end{macrocode}
%\end{macro}
%
%\section{Convenience Commands}
%These commands are provided for conveniently marking various
%aspects of the dummy text.
%\begin{macro}{\tstidxfmtpost}
%\begin{definition}
%\cs{tstidxfmtpost}\marg{text}\marg{fmt cs}\marg{encap}
%\end{definition}
%Index an entry that needs a formatting command.
%    \begin{macrocode}
\newcommand*{\tstidxfmtpost}[3]{%
  \tstindexpost[#1]{\protect#2{#1}}[#1]{#3}{#2{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxfmtopenpost}
%\begin{definition}
%\cs{tstidxfmtopenpost}\marg{text}\marg{fmt cs}\marg{encap}
%\end{definition}
%Index an entry that needs a formatting command.
%    \begin{macrocode}
\newcommand*{\tstidxfmtopenpost}[3]{%
  \tstindexopenpost[#1]{\protect#2{#1}}{#3}{#2{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxfmtclosepost}
%\begin{definition}
%\cs{tstidxfmtclosepost}\marg{text}\marg{fmt cs}\marg{encap}
%\end{definition}
%Index an entry that needs a formatting command.
%    \begin{macrocode}
\newcommand*{\tstidxfmtclosepost}[3]{%
  \tstindexclosepost[#1]{\protect#2{#1}}{#3}{#2{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxfmtpre}
%\begin{definition}
%\cs{tstidxfmtpre}\marg{text}\marg{fmt cs}\marg{encap}
%\end{definition}
%Index an entry that needs a formatting command.
%    \begin{macrocode}
\newcommand*{\tstidxfmtpre}[3]{%
  \tstindexpre[#1]{\protect#2{#1}}{#3}{#2{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxfmtopenpre}
%\begin{definition}
%\cs{tstidxfmtopenpre}\marg{text}\marg{fmt cs}\marg{encap}
%\end{definition}
%Index an entry that needs a formatting command.
%    \begin{macrocode}
\newcommand*{\tstidxfmtopenpre}[3]{%
  \tstindexopenpre[#1]{\protect#2{#1}}{#3}{#2{#1}}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxfmtclosepre}
%\begin{definition}
%\cs{tstidxfmtclosepre}\marg{text}\marg{fmt cs}\marg{encap}
%\end{definition}
%Index an entry that needs a formatting command.
%    \begin{macrocode}
\newcommand*{\tstidxfmtclosepre}[3]{%
  \tstindexclosepre[#1]{\protect#2{#1}}{#3}{#2{#1}}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutf}
%\begin{definition}
%\cs{tstidxutf}\oarg{label}\marg{display}\marg{ascii}\marg{utf8}\marg{encap}\marg{idx cs}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutf}{%
  \@ifnextchar[{\@tstidxutf}{\@tstidxutf[]}%
}
\def\@tstidxutf[#1]#2#3#4#5#6{%
  \def\@tstidx@text{#2}%
  \@tstidx@ifutfviii
  {%
    \ifx\@tstidx@text\@empty
      \def\@tstidx@text{#4}%
    \fi
    \tstidxprocessutf{\@tstidx@utf}{#4}%
    \protected@edef\@tstidx@doidx{%
      \noexpand#6{\unexpanded\expandafter{\@tstidx@utf}}[#1]{#5}%
        {\@tstidx@text}%
    }%
  }%
  {%
    \ifx\@tstidx@text\@empty
      \def\@tstidx@text{#3}%
    \fi
    \tstidxprocessascii{\@tstidx@ascii}{#3}%
    \tstidxprocessasciisort{\@tstidx@asciisort}{#3}%
    \protected@edef\@tstidx@doidx{%
      \noexpand#6[\unexpanded\expandafter{\@tstidx@asciisort}]%
        {\unexpanded\expandafter{\@tstidx@ascii}}[#1]{#5}%
        {\@tstidx@text}%
    }%
  }%
  \@tstidx@doidx
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxsubutf}
%\begin{definition}
%\cs{tstidxsubutf}\marg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\oarg{label}\marg{sub-utf8}\marg{encap}\marg{idx cs}
%\end{definition}
%First level sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxsubutf}[4]{%
  \@ifnextchar[{\@tstidxsubutf{#1}{#2}{#3}{#4}}%
  {\@tstidxsubutf{#1}{#2}{#3}{#4}[]}%
}
\def\@tstidxsubutf#1#2#3#4[#5]#6#7#8{%
  \def\@tstidx@text{#1}%
  \@tstidx@ifutfviii
  {%
    \ifx\@tstidx@text\@empty
      \def\@tstidx@text{#3}%
    \fi
    \tstidxprocessutf{\@tstidx@utf}{#3}%
    \tstidxprocessutf{\@tstidx@subutf}{#6}%
    \protected@edef\@tstidx@doidx{%
      \noexpand#8%
        {\unexpanded\expandafter{\@tstidx@utf}}%
        {\unexpanded\expandafter{\@tstidx@subutf}}%
        [#5]%
        {#7}%
        {\@tstidx@text}%
    }%
  }%
  {%
    \ifx\@tstidx@text\@empty
      \def\@tstidx@text{#2}%
    \fi
    \tstidxprocessascii{\@tstidx@ascii}{#2}%
    \tstidxprocessasciisort{\@tstidx@asciisort}{#2}%
    \tstidxprocessascii{\@tstidx@subascii}{#4}%
    \tstidxprocessasciisort{\@tstidx@subasciisort}{#4}%
    \protected@edef\@tstidx@doidx{%
      \noexpand#8%
        [\unexpanded\expandafter{\@tstidx@asciisort}]%
        {\unexpanded\expandafter{\@tstidx@ascii}}%
        [\unexpanded\expandafter{\@tstidx@subasciisort}]%
        {\unexpanded\expandafter{\@tstidx@subascii}}%
        [#5]%
        {#7}%
        {\@tstidx@text}%
    }%
  }%
  \@tstidx@doidx
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfpost}
%\begin{definition}
%\cs{tstidxutfpost}\oarg{display}\marg{ascii}\oarg{label}\marg{utf8}\marg{encap}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfpost}[2][]{%
  \@ifnextchar[{\@tstidxutfpost{#1}{#2}}{\@tstidxutfpost{#1}{#2}[]}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidxutfpost}
%    \begin{macrocode}
\def\@tstidxutfpost#1#2[#3]#4#5{%
  \tstidxutf[#3]{#1}{#2}{#4}{#5}{\tstindexpost}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfopenpost}
%\begin{definition}
%\cs{tstidxutfopenpost}\oarg{display}\marg{ascii}\marg{utf8}\marg{encap}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfopenpost}[4][]{%
  \tstidxutf{#1}{#2}{#3}{#4}{\tstindexopenpost}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfclosepost}
%\begin{definition}
%\cs{tstidxutfclosepost}\oarg{display}\marg{ascii}\marg{utf8}\marg{encap}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfclosepost}[4][]{%
  \tstidxutf{#1}{#2}{#3}{#4}{\tstindexclosepost}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfpre}
%\begin{definition}
%\cs{tstidxutfpre}\oarg{display}\marg{ascii}\oarg{label}\marg{utf8}\marg{encap}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfpre}[2][]{%
  \@ifnextchar[{\@tstidxutfpre{#1}{#2}}{\@tstidxutfpre{#1}{#2}[#2]}%
}
\def\@tstidxutfpre#1#2[#3]#4#5{%
  \tstidxutf[#3]{#1}{#2}{#4}{#5}{\tstindexpre}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfopenpre}
%\begin{definition}
%\cs{tstidxutfopenpre}\oarg{display}\marg{ascii}\marg{utf8}\marg{encap}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfopenpre}[4][]{%
  \tstidxutf{#1}{#2}{#3}{#4}{\tstindexopenpre}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfclosepre}
%\begin{definition}
%\cs{tstidxutfclosepre}\oarg{display}\marg{ascii}\marg{utf8}\marg{encap}
%\end{definition}
%Index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfclosepre}[4][]{%
  \tstidxutf{#1}{#2}{#3}{#4}{\tstindexclosepre}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfsubpost}
%\begin{definition}
%\cs{tstidxutfsubpost}\oarg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\oarg{label}\marg{sub-utf8}\marg{encap}
%\end{definition}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxutfsubpost}[4][]{%
 \@ifnextchar[{\@tstidxutfsubpost{#1}{#2}{#3}{#4}}%
 {\@tstidxutfsubpost{#1}{#2}{#3}{#4}[]}%
}
\def\@tstidxutfsubpost#1#2#3#4[#5]#6#7{%
  \tstidxsubutf{#1}{#2}{#3}{#4}[#5]{#6}{#7}{\tstsubindexpost}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfsubopenpost}
%\begin{definition}
%\cs{tstidxutfsubopenpost}\oarg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\marg{sub-utf8}\marg{encap}
%\end{definition}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxutfsubopenpost}[6][]{%
  \tstidxsubutf{#1}{#2}{#3}{#4}{#5}{#6}{\tstsubindexopenpost}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfsubclosepost}
%\begin{definition}
%\cs{tstidxutfsubclosepost}\oarg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\marg{sub-utf8}\marg{encap}
%\end{definition}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxutfsubclosepost}[6][]{%
  \tstidxsubutf{#1}{#2}{#3}{#4}{#5}{#6}{\tstsubindexclosepost}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfsubpre}
%\begin{definition}
%\cs{tstidxutfsubpre}\oarg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\marg{sub-utf8}\marg{encap}
%\end{definition}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxutfsubpre}[6][]{%
  \tstidxsubutf{#1}{#2}{#3}{#4}{#5}{#6}{\tstsubindexpre}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfsubopenpre}
%\begin{definition}
%\cs{tstidxutfsubopenpre}\oarg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\marg{sub-utf8}\marg{encap}
%\end{definition}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxutfsubopenpre}[6][]{%
  \tstidxsubutf{#1}{#2}{#3}{#4}{#5}{#6}{\tstsubindexopenpre}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfsubclosepre}
%\begin{definition}
%\cs{tstidxutfsubclosepre}\oarg{display}\marg{ascii}\marg{utf8}\marg{sub-ascii}\marg{sub-utf8}\marg{encap}
%\end{definition}
%Sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxutfsubclosepre}[6][]{%
  \tstidxsubutf{#1}{#2}{#3}{#4}{#5}{#6}{\tstsubindexclosepre}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcsfmt}
% Display a control sequence.
%    \begin{macrocode}
\newcommand*{\tstidxcsfmt}[1]{\texttt{\char`\\#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcs}
% Display and index a control sequence. The optional argument is the encap
%    \begin{macrocode}
\if@tstidx@use@encaps
 \newcommand*{\tstidxcs}[2][tstidxencapi]{\@tstidxcs{#1}{#2}}
\else
 \newcommand*{\tstidxcs}[2][]{\@tstidxcs{#1}{#2}}
\fi
\newcommand*{\@tstidxcs}[2]{\tstidxfmtpost{#2}{\tstidxcsfmt}{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopencs}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopencs}[2][tstidxencapi]{%
    \tstidxfmtopenpost{#2}{\tstidxcsfmt}{#1}%
  }
\else
  \newcommand*{\tstidxopencs}[2][]{%
    \tstidxfmtopenpost{#2}{\tstidxcsfmt}{#1}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosecs}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxclosecs}[2][tstidxencapi]{%
    \tstidxfmtclosepost{#2}{\tstidxcsfmt}{#1}%
  }
\else
  \newcommand*{\tstidxclosecs}[2][]{%
    \tstidxfmtclosepost{#2}{\tstidxcsfmt}{#1}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxencapcsn}
% Display and index a control sequence name (without the initial
% backslash). The optional argument is the encap
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxencapcsn}[2][tstidxencapi]{%
    \tstindexpost[#2 (#2)]%
    {\texttt{#2} (\protect\tstidxcsfmt{#2})}[#2]{#1}{\texttt{#2}}%
    \tstsubindexpost{encap}[#2]{\texttt{#2}}[encap.#2]{#1}{}%
  }
\else
  \newcommand*{\tstidxencapcsn}[2][]{%
    \tstindexpost[#2 (#2)]%
    {\texttt{#2} (\protect\tstidxcsfmt{#2})}[#2]{#1}{\texttt{#2}}%
    \tstsubindexpost{encap}[#2]{\texttt{#2}}[encap.#2]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopencsn}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopencsn}[2][tstidxencapi]{%
    \tstindexopenpost[#2 (#2)]%
    {\texttt{#2} (\protect\tstidxcsfmt{#2})}{#1}{\texttt{#2}}%
  }
\else
  \newcommand*{\tstidxopencsn}[2][]{%
    \tstindexopenpost[#2 (#2)]%
    {\texttt{#2} (\protect\tstidxcsfmt{#2})}{#1}{\texttt{#2}}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosecsn}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxclosecsn}[2][tstidxencapi]{%
    \tstindexclosepost[#2 (#2)]%
    {\texttt{#2} (\protect\tstidxcsfmt{#2})}{#1}{\texttt{#2}}%
  }
\else
  \newcommand*{\tstidxclosecsn}[2][]{%
    \tstindexclosepost[#2 (#2)]%
    {\texttt{#2} (\protect\tstidxcsfmt{#2})}{#1}{\texttt{#2}}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxenvfmt}
% Display an environment name.
%    \begin{macrocode}
\newcommand*{\tstidxenvfmt}[1]{\texttt{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxenv}
% Display and index an environment name.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxenv}[2][tstidxencapi]{%
    \tstindexpost[#2 environment]%
    {\protect\tstidxenvfmt{#2} environment}[#2environment]{#1}%
    {\tstidxenvfmt{#2}}%
  }
\else
  \newcommand*{\tstidxenv}[2][]{%
    \tstindexpost[#2 environment]%
    {\protect\tstidxenvfmt{#2} environment}[#2environment]{#1}%
    {\tstidxenvfmt{#2}}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenenv}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenenv}[2][tstidxencapi]{%
    \tstindexopenpost[#2 environment]%
    {\protect\tstidxenvfmt{#2} environment}{#1}%
    {\tstidxenvfmt{#2}}%
  }
\else
  \newcommand*{\tstidxopenenv}[2][]{%
    \tstindexopenpost[#2 environment]%
    {\protect\tstidxenvfmt{#2} environment}{#1}%
    {\tstidxenvfmt{#2}}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseenv}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxcloseenv}[2][tstidxencapi]{%
    \tstindexclosepost[#2 environment]%
    {\protect\tstidxenvfmt{#2} environment}{#1}%
    {\tstidxenvfmt{#2}}%
  }
\else
  \newcommand*{\tstidxcloseenv}[2][]{%
    \tstindexclosepost[#2 environment]%
    {\protect\tstidxenvfmt{#2} environment}{#1}%
    {\tstidxenvfmt{#2}}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxappfmt}
% Display an application name.
%    \begin{macrocode}
\newcommand*{\tstidxappfmt}[1]{\texttt{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxapp}
% Display and index an application name.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxapp}[2][tstidxencapi]{%
    \tstidxfmtpost{#2}{\tstidxappfmt}{#1}%
    \tstsubindexpost{applications}[#2]{\protect\tstidxappfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxapp}[2][]{%
    \tstidxfmtpost{#2}{\tstidxappfmt}{#1}%
    \tstsubindexpost{applications}[#2]{\protect\tstidxappfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenapp}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenapp}[2][tstidxencapi]{%
    \tstidxfmtopenpost{#2}{\tstidxappfmt}{#1}%
    \tstsubindexopenpost{applications}[#2]{\protect\tstidxappfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxopenapp}[2][]{%
    \tstidxfmtopenpost{#2}{\tstidxappfmt}{#1}%
    \tstsubindexopenpost{applications}[#2]{\protect\tstidxappfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseapp}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxcloseapp}[2][tstidxencapi]{%
    \tstidxfmtclosepost{#2}{\tstidxappfmt}{#1}%
    \tstsubindexclosepost{applications}[#2]{\protect\tstidxappfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxcloseapp}[2][]{%
    \tstidxfmtclosepost{#2}{\tstidxappfmt}{#1}%
    \tstsubindexclosepost{applications}[#2]{\protect\tstidxappfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxappoptfmt}
% Display an application option.
%    \begin{macrocode}
\newcommand*{\tstidxappoptfmt}[1]{\texttt{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxappopt}
% Display and index an application option.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxappopt}[3][tstidxencapiii]{%
    \tstindexpost[#3 (#2)]%
      {\protect\tstidxappoptfmt{#3} (\protect\tstidxappfmt{#2})}%
      [#3.#2option]{#1}{\tstidxappoptfmt{#3}}%
    \tstsubindexpost[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
    \tstsubsubindexpost{applications}[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
  }
\else
  \newcommand*{\tstidxappopt}[3][]{%
    \tstindexpost[#3 (#2)]%
      {\protect\tstidxappoptfmt{#3} (\protect\tstidxappfmt{#2})}%
      [#3.#2option]{#1}{\tstidxappoptfmt{#3}}%
    \tstsubindexpost[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
    \tstsubsubindexpost{applications}[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenappopt}
% As above but start a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenappopt}[3][tstidxencapiii]{%
    \tstsubindexopenpost[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{\tstidxappoptfmt{#3}}%
    \tstsubsubindexopenpost{applications}[#2]%
      {\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
  }
\else
  \newcommand*{\tstidxopenappopt}[3][]{%
    \tstsubindexopenpost[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{\tstidxappoptfmt{#3}}%
    \tstsubsubindexopenpost{applications}[#2]%
      {\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseappopt}
% As above but end a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxcloseappopt}[3][tstidxencapiii]{%
    \tstsubindexclosepost[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{\tstidxappoptfmt{#3}}%
    \tstsubsubindexclosepost{applications}[#2]%
      {\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
  }
\else
  \newcommand*{\tstidxcloseappopt}[3][]{%
    \tstsubindexclosepost[#2]{\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{\tstidxappoptfmt{#3}}%
    \tstsubsubindexclosepost{applications}[#2]%
      {\protect\tstidxappfmt{#2}}%
      [#3]{\protect\tstidxappoptfmt{#3}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxstyfmt}
% Display a package name.
%    \begin{macrocode}
\newcommand*{\tstidxstyfmt}[1]{\texttt{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexstysee}
%\changes{1.1}{2017-08-11}{new}
%Cross-reference one package with another.
%    \begin{macrocode}
\newcommand*{\tstindexstysee}[3]{%
  \tstindexsee[#1package]{\protect\tstidxstyfmt{#1} package}{#2}%
  [#3package]{\protect\tstidxstyfmt{#3}}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxsty}
% Display and index a package name.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxsty}[2][tstidxencapiii]{%
    \tstindexpost[#2 package]%
     {\protect\tstidxstyfmt{#2} package}[#2package]{#1}{\tstidxstyfmt{#2}}%
    \tstsubindexpost{packages}[#2 package]%
     {\protect\tstidxstyfmt{#2} package}[packages.#2package]{#1}{}%
  }
\else
  \newcommand*{\tstidxsty}[2][]{%
    \tstindexpost[#2 package]%
     {\protect\tstidxstyfmt{#2} package}[#2package]{#1}{\tstidxstyfmt{#2}}%
    \tstsubindexpost{packages}[#2 package]%
     {\protect\tstidxstyfmt{#2} package}[packages.#2package]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopensty}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopensty}[2][tstidxencapiii]{%
    \tstindexopenpost[#2 package]{\protect\tstidxstyfmt{#2} package}[#2package]{#1}%
      {\tstidxstyfmt{#2}}%
    \tstsubindexopenpost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}[packages.#2package]{#1}{}%
  }
\else
  \newcommand*{\tstidxopensty}[2][]{%
    \tstindexopenpost[#2 package]{\protect\tstidxstyfmt{#2} package}[#2package]{#1}%
      {\tstidxstyfmt{#2}}%
    \tstsubindexopenpost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}[packages.#2package]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosesty}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxclosesty}[2][tstidxencapiii]{%
    \tstindexclosepost[#2 package]{\protect\tstidxstyfmt{#2} package}%
     [#2package]{#1}%
     {\tstidxstyfmt{#2}}%
    \tstsubindexclosepost{packages}[#2 package]%
     {\protect\tstidxstyfmt{#2} package}[packages.#2package]{#1}{}%
  }
\else
  \newcommand*{\tstidxclosesty}[2][]{%
    \tstindexclosepost[#2 package]{\protect\tstidxstyfmt{#2} package}%
     [#2package]{#1}%
     {\tstidxstyfmt{#2}}%
    \tstsubindexclosepost{packages}[#2 package]%
     {\protect\tstidxstyfmt{#2} package}[packages.#2package]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxstyoptfmt}
% Display a package option.
%    \begin{macrocode}
\newcommand*{\tstidxstyoptfmt}[1]{\texttt{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxstyopt}
% Display and index a package option.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxstyopt}[3][tstidxencapiii]{%
    \tstsubindexpost[#2 package]{\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{\tstidxstyoptfmt{#3}}%
    \tstsubsubindexpost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{}%
  }
\else
  \newcommand*{\tstidxstyopt}[3][]{%
    \tstsubindexpost[#2 package]{\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{\tstidxstyoptfmt{#3}}%
    \tstsubsubindexpost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenstyopt}
% As above but start a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenstyopt}[3][tstidxencapiii]{%
    \tstsubindexopenpost[#2 package]{\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{\tstidxstyoptfmt{#3}}%
    \tstsubsubindexopenpost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{}%
  }
\else
  \newcommand*{\tstidxopenstyopt}[3][]{%
    \tstsubindexopenpost[#2 package]{\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{\tstidxstyoptfmt{#3}}%
    \tstsubsubindexopenpost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosestyopt}
% As above but end a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxclosestyopt}[3][tstidxencapiii]{%
    \tstsubindexclosepost[#2 package]{\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{\tstidxstyoptfmt{#3}}%
    \tstsubsubindexclosepost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{}%
  }
\else
  \newcommand*{\tstidxclosestyopt}[3][]{%
    \tstsubindexclosepost[#2 package]{\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{\tstidxstyoptfmt{#3}}%
    \tstsubsubindexclosepost{packages}[#2 package]%
      {\protect\tstidxstyfmt{#2} package}%
      [#3]{\protect\tstidxstyoptfmt{#3}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxword}
% Display and index a word.
%    \begin{macrocode}
\newcommand*{\tstidxword}[2][]{%
  \tstindexpost{#2}{#1}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxwordpl}
%\changes{1.1}{2017-08-11}{new}
% Display the plural and index the singular. This just appends
% \qt{s} for convenience. The \sty{testidx-glossaries} package
% uses \cs{glspl} instead.
%    \begin{macrocode}
\newcommand*{\tstidxwordpl}[1][]{\@tstidxwordpl{#1}}
\newcommand*{\@tstidxwordpl}[2]{\tstidxword[#1]{#2}s}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenword}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenword}[2][]{%
  \tstindexopenpost{#2}{#1}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseword}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxcloseword}[2][]{%
  \tstindexclosepost{#2}{#1}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxsubword}
%\begin{definition}
%\cs{tstidxsubword}\oarg{encap}\marg{main-entry}\marg{word}
%\end{definition}
% Display and index a word as a sub-entry.
%    \begin{macrocode}
\newcommand*{\tstidxsubword}[3][]{%
  \tstsubindexpost{#2}{#3}{#1}{#3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnumber}
% Display and index a word.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxnumber}[2][tstidxencapiii]{%
    \tstindexpost{#2}{#1}{#2}%
  }
\else
  \newcommand*{\tstidxnumber}[2][]{%
    \tstindexpost{#2}{#1}{#2}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxphrase}
% Display and index a phrase.
%    \begin{macrocode}
\newcommand*{\tstidxphrase}[2][]{%
  \tstindexpre{#2}{#1}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxphrasepl}
%\changes{1.1}{2017-08-11}{new}
% Display the plural and index the singular of a phrase. This just appends
% \qt{s} for convenience. The \sty{testidx-glossaries} package
% uses \cs{glspl} instead.
%    \begin{macrocode}
\newcommand*{\tstidxphrasepl}[1][]{\@tstidxphrasepl{#1}}
\newcommand*{\@tstidxphrasepl}[2]{\tstidxphrase[#1]{#2}s}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenphrase}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenphrase}[2][]{%
  \tstindexopenpre{#2}{#1}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosephrase}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxclosephrase}[2][]{%
  \tstindexclosepre{#2}{#1}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxartphrase}
%\begin{definition}
%\cs{tstidxartphrase}\oarg{encap}\marg{article}\marg{remainder}
%\end{definition}
% Display and index a phrase that starts with (in)definite
% article.
%    \begin{macrocode}
\newcommand*{\tstidxartphrase}[3][]{%
  \tstindexpost{#3, #2}[#3]{#1}{#2 #3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenartphrase}
%As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenartphrase}[3][]{%
  \tstindexopenpost{#3, #2}[#3]{#1}{#2 #3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseartphrase}
%As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxcloseartphrase}[3][]{%
  \tstindexclosepost{#3, #2}[#3]{#1}{#2 #3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxperson}
% Display and index a person's name.
%    \begin{macrocode}
\newcommand*{\tstidxperson}[3][]{%
  \tstidxutfperson[#1]{#2}{#3}{#2}{#3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenperson}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenperson}[3][]{%
  \tstidxutfopenperson[#1]{#2}{#3}{#2}{#3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseperson}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxcloseperson}[3][]{%
  \tstidxutfcloseperson[#1]{#2}{#3}{#2}{#3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfperson}
%\begin{definition}
%\cs{tstidxutfperson}\oarg{encap}\marg{ascii forename}\marg{ascii
%surname}\oarg{label}\marg{utf8 forname}{utf8 surname}
%\end{definition}
% Display and index a person's name with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfperson}[3][]{%
  \@ifnextchar[{\@tstidxutfperson{#1}{#2}{#3}}%
  {\@tstidxutfperson{#1}{#2}{#3}[#2#3]}%
}
\def\@tstidxutfperson#1#2#3[#4]#5#6{%
  \@tstidx@ifutfviii
  {%
    \tstidxutfpost[#5 #6]{#3, #2}[#4]{#6, #5}{#1}%
  }%
  {%
    \tstidxutfpost[#2 #3]{#3, #2}[#4]{#6, #5}{#1}%
  }%
  \tstidxutfsubpost[\relax]{people}{people}{#3, #2}[people.#4]{#6, #5}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenutfperson}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxutfopenperson}[3][]{%
  \@ifnextchar[{\@tstidxutfopenperson{#1}{#2}{#3}}%
  {\@tstidxutfopenperson{#1}{#2}{#3}[#2#3]}%
}
\def\@tstidxutfopenperson#1#2#3[#4]#5#6{%
  \@tstidx@ifutfviii
  {%
    \tstidxutfopenpost[#5 #6]{#3, #2}[#4]{#6, #5}{#1}%
  }%
  {%
    \tstidxutfopenpost[#2 #3]{#3, #2}[#4]{#6, #5}{#1}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseutfperson}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxutfcloseperson}[3][]{%
  \@ifnextchar[{\@tstidxutfcloseperson{#1}{#2}{#3}}%
  {\@tstidxutfcloseperson{#1}{#2}{#3}[#2#3]}%
}
\def\@tstidxutfcloseperson#1#2#3[#4]#5#6{%
  \@tstidx@ifutfviii
  {%
    \tstidxutfclosepost[#5 #6]{#3, #2}[#4]{#6, #5}{#1}%
  }%
  {%
    \tstidxutfclosepost[#2 #3]{#3, #2}[#4]{#6, #5}{#1}%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxsym}
%\begin{definition}
%\cs{tstidxsym}\oarg{encap}\marg{sort}\oarg{label}\marg{indexed symbol}
%\end{definition}
% Display and index a symbol.
%    \begin{macrocode}
\newcommand*{\tstidxsym}[2][]{%
  \@ifnextchar[{\@tstidxsym{#1}{#2}}{\@tstidxsym{#1}{#2}[#2]}%
}
\def\@tstidxsym#1#2[#3]#4{%
  \tstindexpost[#2]{\protect#4}[#3]{#1}{#4}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopensym}
%\begin{definition}
%\cs{tstidxopensym}\oarg{encap}\marg{sort}\oarg{label}\marg{indexed symbol}
%\end{definition}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopensym}[2][]{%
  \@ifnextchar[{\@tstidxopensym{#1}{#2}}{\@tstidxopensym{#1}{#2}[]}%
}
\def\@tstidxopensym#1#2[#3]#4{%
  \tstindexopenpost[#2]{\protect#4}[#3]{#1}{#4}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosesym}
%\begin{definition}
%\cs{tstidxclosesym}\oarg{encap}\marg{sort}\oarg{label}\marg{indexed symbol}
%\end{definition}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxclosesym}[2][]{%
  \@ifnextchar[{\@tstidxclosesym{#1}{#2}}{\@tstidxclosesym{#1}{#2}[]}%
}
\def\@tstidxclosesym#1#2[#3]#4{%
  \tstindexclosepost[#2]{\protect#4}[#3]{#1}{#4}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxindexmarker}
%    \begin{macrocode}
\newcommand{\tstidxindexmarker}[1]{%
 \iftestidxprefix
   \expandafter\tstidxsym\expandafter
    {\tstidxindexmarkerprefix#1}[#1]{\csname#1\endcsname
     \protect\space (\protect\tstidxcsfmt{#1})}% 
 \else
   \tstidxsym{#1}[#1]{\csname#1\endcsname
     \protect\space (\protect\tstidxcsfmt{#1})}% 
 \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxindexmarkerprefix}
%    \begin{macrocode}
\newcommand*{\tstidxindexmarkerprefix}{<}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxmath}
%\begin{definition}
%\cs{tstidxmath}\oarg{encap}\marg{sort}\oarg{label}\marg{entry}
%\end{definition}
% Display and index something in maths-mode.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxmath}[2][tstidxencapii]{%
    \@ifnextchar[{\@tstidxmath{#1}{#2}}{\@tstidxmath{#1}{#2}[#2]}%
  }
\else
  \newcommand*{\tstidxmath}[2][]{%
    \@ifnextchar[{\@tstidxmath{#1}{#2}}{\@tstidxmath{#1}{#2}[#2]}%
  }
\fi
\def\@tstidxmath#1#2[#3]#4{%
  \tstindexpre[#2]{$#4$}[#3]{#1}{#4}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxmathsym}
%\begin{definition}
%\cs{tstidxmathsym}\oarg{encap}\marg{sort}\oarg{label}\marg{entry}
%\end{definition}
%Inserts a prefix before \meta{sort}.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxmathsym}[2][tstidxencapii]{%
    \@ifnextchar[{\@tstidxmathsym{#1}{#2}}{\@tstidxmathsym{#1}{#2}[#2]}%
  }
\else
  \newcommand*{\tstidxmathsym}[2][]{%
    \@ifnextchar[{\@tstidxmathsym{#1}{#2}}{\@tstidxmathsym{#1}{#2}[#2]}%
  }
\fi
\def\@tstidxmathsym#1#2[#3]#4{%
 \iftestidxprefix
  \expandafter\tstindexpre\expandafter
   [\tstidxmathsymprefix#2]{$#4$}[#3]{#1}{#4}%
 \else
  \tstindexpre[#2]{$#4$}[#3]{#1}{#4}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxmathsymprefix}
%    \begin{macrocode}
\newcommand*{\tstidxmathsymprefix}{>}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfword}
%\begin{definition}
%\cs{tstidxutfword}\oarg{encap}\marg{ascii}\oarg{label}\marg{utf8}
%\end{definition}
% Display and index a word with UTF-8 characters. The \meta{label}
% is needed for \sty{testidx-glossaries}.
%    \begin{macrocode}
\newcommand*{\tstidxutfword}[2][]{%
  \@ifnextchar[{\@tstidxutfword{#1}{#2}}{\@tstidxutfword{#1}{#2}[#2]}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidxutfword}
%    \begin{macrocode}
\def\@tstidxutfword#1#2[#3]#4{%
  \tstidxutfpost{#2}[#3]{#4}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxgphword}
%\begin{definition}
%\cs{tstidxutfword}\oarg{encap}\marg{ascii}\marg{label}\marg{utf8}\marg{utf8
%with digraph}
%\end{definition}
% Display and index a word with UTF-8 characters with alternative
% form that uses a glyph for the digraph.
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxgphword}[2][]{%
  \@ifnextchar[{\@tstidxgphword{#1}{#2}}{\@tstidxgphword{#1}{#2}[#2]}%
}
\def\@tstidxgphword#1#2[#3]#4#5{%
  \iftestidxdiglyphs
    \tstidxutfpost{#2}[#3]{#5}{#1}%
  \else
    \tstidxutfpost{#2}[#3]{#4}{#1}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenutf}
%\begin{definition}
%\cs{tstidxopenutf}\oarg{encap}\marg{sort}\marg{ascii}\marg{utf8}
%\end{definition}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenutf}[4][]{%
  \tstidxutfopenpost{#2}{#3}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseutf}
%\begin{definition}
%\cs{tstidxcloseutf}\oarg{encap}\marg{sort}\marg{ascii}\marg{utf8}
%\end{definition}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxcloseutf}[4][]{%
  \tstidxutfclosepost{#2}{#3}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfphrase}
%\begin{definition}
%\cs{tstidxutfphrase}\oarg{encap}\marg{ascii}\oarg{label}\marg{utf8}
%\end{definition}
% Display and index a phrase with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfphrase}[2][]{%
  \@ifnextchar[{\@tstidxutfphrase{#1}{#2}}{\@tstidxutfphrase{#1}{#2}[#2]}%
}
\def\@tstidxutfphrase#1#2[#3]#4{%
  \tstidxutfpre{#2}[#3]{#4}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenutfphrase}
%\begin{definition}
%\cs{tstidxopenutfphrase}\oarg{encap}\marg{ascii}\marg{utf8}
%\end{definition}
% As above but starts a range.
%    \begin{macrocode}
\newcommand*{\tstidxopenutfphrase}[3][]{%
  \tstidxutfopenpre{#2}{#3}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseutfphrase}
%\begin{definition}
%\cs{tstidxcloseutf}\oarg{encap}\marg{ascii}\marg{utf8}
%\end{definition}
% As above but ends a range.
%    \begin{macrocode}
\newcommand*{\tstidxcloseutfphrase}[3][]{%
  \tstidxutfclosepre{#2}{#3}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxplace}
% Display and index a place name.
%    \begin{macrocode}
\newcommand*{\tstidxplace}[2][]{%
  \tstidxutfplace[#1]{#2}{#2}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfplace}
%\begin{definition}
%\cs{tstidxutfplace}\oarg{encap}\marg{ascii}\oarg{label}\marg{utf8}
%\end{definition}
% Display and index a word with UTF-8 characters.
%    \begin{macrocode}
\newcommand*{\tstidxutfplace}[2][]{%
  \@ifnextchar[{\@tstidxutfplace{#1}{#2}}{\@tstidxutfplace{#1}{#2}[#2]}%
}
\def\@tstidxutfplace#1#2[#3]#4{%
  \tstidxutfpost{#2}[#3]{#4}{#1}%
  \tstidxutfsubpost[\relax]{places}{places}{#2}[places.#3]{#4}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxartplace}
% Display and index a place name that starts with an article.
%    \begin{macrocode}
\newcommand*{\tstidxartplace}[3][]{%
  \tstindexpost{#3, #2}[#3]{#1}{#2 #3}%
  \tstidxutfsubpost[\relax]{places}{places}{#3, #2}[places.#3]{#3, #2}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxbookfmt}
% Display an book title.
%    \begin{macrocode}
\newcommand*{\tstidxbookfmt}[1]{\emph{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxbook}
% Display and index a book title.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxbook}[2][tstidxencapii]{%
    \tstindexpost[#2]{\protect\tstidxbookfmt{#2}}[#2]{#1}{\tstidxbookfmt{#2}}%
    \tstsubindexpost{books}[#2]{\protect\tstidxbookfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxbook}[2][]{%
    \tstindexpost[#2]{\protect\tstidxbookfmt{#2}}[#2]{#1}{\tstidxbookfmt{#2}}%
    \tstsubindexpost{books}[#2]{\protect\tstidxbookfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenbook}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenbook}[2][tstidxencapii]{%
    \tstindexopenpost[#2]{\protect\tstidxbookfmt{#2}}{#1}{\tstidxbookfmt{#2}}%
    \tstsubindexopenpost{books}[#2]{\protect\tstidxbookfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxopenbook}[2][]{%
    \tstindexopenpost[#2]{\protect\tstidxbookfmt{#2}}{#1}{\tstidxbookfmt{#2}}%
    \tstsubindexopenpost{books}[#2]{\protect\tstidxbookfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosebook}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxclosebook}[2][tstidxencapii]{%
    \tstindexclosepost[#2]{\protect\tstidxbookfmt{#2}}{#1}{\tstidxbookfmt{#2}}%
    \tstsubindexclosepost{books}[#2]{\protect\tstidxbookfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxclosebook}[2][]{%
    \tstindexclosepost[#2]{\protect\tstidxbookfmt{#2}}{#1}{\tstidxbookfmt{#2}}%
    \tstsubindexclosepost{books}[#2]{\protect\tstidxbookfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxartbook}
%\begin{definition}
%\cs{tstidxartbook}\oarg{encap}\marg{article}\marg{remainder}
%\end{definition}
% Display and index a book title that starts with (in)definite
% article.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxartbook}[3][tstidxencapii]{%
    \tstindexpost[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[#3]{#1}{\tstidxbookfmt{#2 #3}}%
    \tstsubindexpost{books}[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[books.#3]{#1}{}%
  }
\else
  \newcommand*{\tstidxartbook}[3][]{%
    \tstindexpost[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[#3]{#1}{\tstidxbookfmt{#2 #3}}%
    \tstsubindexpost{books}[#3, #2]{\protect\tstidxbookfmt{#3,
#2}}[books.#3]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenartbook}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenartbook}[3][tstidxencapii]{%
    \tstindexopenpost[#3, #2]{\protect\tstidxbookfmt{#3, #2}}{#1}%
      {\tstidxbookfmt{#2 #3}}%
    \tstsubindexopenpost{books}[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[books.#3]{#1}{}%
  }
\else
  \newcommand*{\tstidxopenartbook}[3][]{%
    \tstindexopenpost[#3, #2]{\protect\tstidxbookfmt{#3, #2}}{#1}%
      {\tstidxbookfmt{#2 #3}}%
    \tstsubindexopenpost{books}[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[books.#3]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcloseartbook}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxcloseartbook}[3][tstidxencapii]{%
    \tstindexclosepost[#3, #2]{\protect\tstidxbookfmt{#3, #2}}{#1}%
      {\tstidxbookfmt{#2 #3}}%
    \tstsubindexclosepost{books}[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[books.#3]{#1}{}%
  }
\else
  \newcommand*{\tstidxcloseartbook}[3][]{%
    \tstindexclosepost[#3, #2]{\protect\tstidxbookfmt{#3, #2}}{#1}%
      {\tstidxbookfmt{#2 #3}}%
    \tstsubindexclosepost{books}[#3, #2]{\protect\tstidxbookfmt{#3, #2}}[books.#3]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxfilmfmt}
% Display an film title.
%    \begin{macrocode}
\newcommand*{\tstidxfilmfmt}[1]{\emph{#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxfilm}
% Display and index a film title.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxfilm}[2][tstidxencapii]{%
    \tstindexpost[#2]{\protect\tstidxfilmfmt{#2}}{#1}{\tstidxfilmfmt{#2}}%
    \tstsubindexpost{films}[#2]{\protect\tstidxfilmfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxfilm}[2][]{%
    \tstindexpost[#2]{\protect\tstidxfilmfmt{#2}}{#1}{\tstidxfilmfmt{#2}}%
    \tstsubindexpost{films}[#2]{\protect\tstidxfilmfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxopenfilm}
%As above but starts a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxopenfilm}[2][tstidxencapii]{%
    \tstindexopenpost[#2]{\protect\tstidxfilmfmt{#2}}{#1}{\tstidxfilmfmt{#2}}%
    \tstsubindexopenpost{films}[#2]{\protect\tstidxfilmfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxopenfilm}[2][]{%
    \tstindexopenpost[#2]{\protect\tstidxfilmfmt{#2}}{#1}{\tstidxfilmfmt{#2}}%
    \tstsubindexopenpost{films}[#2]{\protect\tstidxfilmfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxclosefilm}
%As above but ends a range.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxclosefilm}[2][tstidxencapii]{%
    \tstindexclosepost[#2]{\protect\tstidxfilmfmt{#2}}{#1}{\tstidxfilmfmt{#2}}%
    \tstsubindexclosepost{films}[#2]{\protect\tstidxfilmfmt{#2}}{#1}{}%
  }
\else
  \newcommand*{\tstidxclosefilm}[2][]{%
    \tstindexclosepost[#2]{\protect\tstidxfilmfmt{#2}}{#1}{\tstidxfilmfmt{#2}}%
    \tstsubindexclosepost{films}[#2]{\protect\tstidxfilmfmt{#2}}{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxartfilm}
% As above but the title starts with an article.
%    \begin{macrocode}
\if@tstidx@use@encaps
  \newcommand*{\tstidxartfilm}[3][tstidxencapii]{%
    \tstindexpost[#3, #2]{\protect\tstidxfilmfmt{#3, #2}}[#3]{#1}%
      {\tstidxfilmfmt{#2 #3}}%
    \tstsubindexpost{films}[#3, #2]{\protect\tstidxfilmfmt{#3,
#2}}[films.#3]{#1}{}%
  }
\else
  \newcommand*{\tstidxartfilm}[3][]{%
    \tstindexpost[#3, #2]{\protect\tstidxfilmfmt{#3, #2}}[#3]{#1}%
      {\tstidxfilmfmt{#2 #3}}%
    \tstsubindexpost{films}[#3, #2]{\protect\tstidxfilmfmt{#3, #2}}[films.#3]{#1}{}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\section{Generic Indexing Test Commands}
%\subsection{Top-Level Entries}
%The \cs{expandafter} stuff here is done to help simulate the user directly
%using \cs{index}.
% 
%\begin{macro}{\tstindexpost}
%\begin{definition}
%\cs{tstindexpost}\oarg{sort}\marg{term}\oarg{label}\marg{encap}\marg{display}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstindexpost}[2][]{%
  \@ifnextchar[{\@tstindexpost{#1}{#2}}{\@tstindexpost{#1}{#2}[]}%
}%
\def\@tstindexpost#1#2[#3]#4#5{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \ifx\@tstidx@encap\@empty
   \iftestidxshowmarks
     \tstidxtext{#5\tstidxmarker}%
   \else
     #5%
   \fi
  \else
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{#4}{#5\tstidxmarker}}%
   \else
     #5%
   \fi
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap#4}%
  \fi
  \expandafter\@tstindex\expandafter{\@tstidx@entry}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexopenpost}
%As previous but starts a range.
%    \begin{macrocode}
\newcommand*{\tstindexopenpost}[2][]{%
  \@ifnextchar[{\@tstindexopenpost{#1}{#2}}{\@tstindexopenpost{#1}{#2}[]}}%
\def\@tstindexopenpost#1#2[#3]#4#5{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \ifx\@tstidx@encap\@empty
   \iftestidxshowmarks
     \tstidxtext{#5\tstidxopenmarker}%
   \else
     #5%
   \fi
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange}%
  \else
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{#4}{#5\tstidxopenmarker}}%
   \else
     #5%
   \fi
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange#4}%
  \fi
  \expandafter\@tstindex\expandafter{\@tstidx@entry}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexclosepost}
%As previous but ends a range.
%    \begin{macrocode}
\newcommand*{\tstindexclosepost}[2][]{%
  \@ifnextchar[{\@tstindexclosepost{#1}{#2}}{\@tstindexclosepost{#1}{#2}[]}}%
\def\@tstindexclosepost#1#2[#3]#4#5{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \ifx\@tstidx@encap\@empty
   \iftestidxshowmarks
     \tstidxtext{#5\tstidxclosemarker}%
   \else
     #5%
   \fi
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange}%
  \else
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{#4}{#5\tstidxclosemarker}}%
   \else
     #5%
   \fi
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange#4}%
  \fi
  \expandafter\@tstindex\expandafter{\@tstidx@entry}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexpre}
%\begin{definition}
%\cs{tstindexpre}\oarg{sort}\marg{term}\oarg{label}\marg{encap}\marg{display}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstindexpre}[2][]{%
  \@ifnextchar[{\@tstindexpre{#1}{#2}}{\@tstindexpre{#1}{#2}[]}}%
\def\@tstindexpre#1#2[#3]#4#5{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \ifx\@tstidx@encap\@empty
   \expandafter\@tstindex\expandafter{\@tstidx@entry}%
   \iftestidxshowmarks
     \tstidxtext{\tstidxmarker#5}%
   \else
     #5%
   \fi
  \else
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap#4}%
   \expandafter\@tstindex\expandafter{\@tstidx@entry}%
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{#4}{\tstidxmarker#5}}%
   \else
     #5%
   \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexopenpre}
%As previous but starts a range.
%    \begin{macrocode}
\newcommand*{\tstindexopenpre}[2][]{%
  \@ifnextchar[{\@tstindexopenpre{#1}{#2}}{\@tstindexopenpre{#1}{#2}[]}}%
\def\@tstindexopenpre#1#2[#3]#4#5{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \ifx\@tstidx@encap\@empty
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange}%
   \expandafter\@tstindex\expandafter{\@tstidx@entry}%
   \iftestidxshowmarks
     \tstidxtext{\tstidxopenmarker#5}%
   \else
     #5%
   \fi
  \else
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange#4}%
   \expandafter\@tstindex\expandafter{\@tstidx@entry}%
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{#4}{\tstidxopenmarker#5}}%
   \else
     #5%
   \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexclosepre}
%As previous but ends a range.
%    \begin{macrocode}
\newcommand*{\tstindexclosepre}[2][]{%
  \@ifnextchar[{\@tstindexclosepre{#1}{#2}}{\@tstindexclosepre{#1}{#2}[]}}%
\def\@tstindexclosepre#1#2[#3]#4#5{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \ifx\@tstidx@encap\@empty
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange}%
   \expandafter\@tstindex\expandafter{\@tstidx@entry}%
   \iftestidxshowmarks
     \tstidxtext{\tstidxclosemarker#5}%
   \else
     #5%
   \fi
  \else
   \expandafter\toks@\expandafter{\@tstidx@entry}%
   \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange#4}%
   \expandafter\@tstindex\expandafter{\@tstidx@entry}%
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{#4}{\tstidxclosemarker#5}}%
   \else
     #5%
   \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidxseeencap}
%\changes{1.1}{2017-08-11}{new}
%Allow customization of cross-reference encaps.
%    \begin{macrocode}
\newcommand*{\@tstidxseeencap}[1]{%
 \@ifundefined{tstidx@#1@encapname}{#1}{\csname tstidx@#1@encapname\endcsname}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxSetSeeEncap}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxSetSeeEncap}[1]{%
 \@namedef{tstidx@see@encapname}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxSetSeeAlsoEncap}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxSetSeeAlsoEncap}[1]{%
 \@namedef{tstidx@seealso@encapname}{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstindexsee}
%\begin{definition}
%\cs{tstindexsee}\oarg{sort}\marg{term}\oarg{label}\marg{see
%cs}\oarg{xr-labels}\marg{cross-reference}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstindexsee}[2][]{%
  \@ifnextchar[{\@tstindex@see{#1}{#2}}{\@tstindex@see{#1}{#2}[]}}%
\def\@tstindex@see#1#2[#3]#4{%
  \@ifnextchar[{\@tstindexsee{#1}{#2}{#3}{#4}}{\@tstindexsee{#1}{#2}{#3}{#4}[]}}%
\def\@tstindexsee#1#2#3#4[#5]#6{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@entry{#2}%
  \ifx\@tstidx@sort\@empty
    \@tstidx@ifutfviii
    {%
      \tstidxprocessutf{\@tstidx@entry}{#2}%
    }%
    {%
      \def\@tstidx@sort{#2}%
      \tstidxprocessasciisort{\@tstidx@sort}{#2}%
      \ifx\@tstidx@sort\@tstidx@entry
      \else
        \expandafter\toks@\expandafter{\@tstidx@sort}%
        \edef\@tstidx@entry{\the\toks@\tstidxactual}%
        \expandafter\def\expandafter\@tstidx@entry\expandafter
          {\@tstidx@entry#2}%
      \fi
    }%
  \else
    \@tstidx@ifutfviii
    {%
      \expandafter\tstidxprocessutf\expandafter\@tstidx@sort
        \expandafter{\@tstidx@sort}%
    }%
    {%
      \expandafter\tstidxprocessasciisort\expandafter\@tstidx@sort
        \expandafter{\@tstidx@sort}%
    }%
    \expandafter\toks@\expandafter{\@tstidx@sort}%
    \edef\@tstidx@entry{\the\toks@\tstidxactual}%
    \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \expandafter\toks@\expandafter{\@tstidx@entry}%
  \protected@edef\@tstidx@entry{\the\toks@\tstidxencap
   \@tstidxseeencap{#4}{#6}}%
  \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \iftestidxshowmarks
    \tstidxseeref{#2}{#4}{#6}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstindexutfsee}
%\begin{definition}
%\cs{tstindexutfsee}\oarg{ascii sort}\marg{ascii term}\oarg{utf sort}
%\marg{utf term}\oarg{label}\marg{see cs}\oarg{xr-labels}%
%\marg{ascii cross-reference}\marg{utf cross-reference}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstindexutfsee}[2][]{%
  \@tstindexutfsee{#1}{#2}%
}
\newcommand*{\@tstindexutfsee}[2]{%
  \@ifnextchar[{\@tst@indexutfsee{#1}{#2}}{\@tst@indexutfsee{#1}{#2}[]}%
}
\def\@tst@indexutfsee#1#2[#3]#4{%
  \@ifnextchar[{\@@tst@indexutfsee{#1}{#2}{#3}{#4}}%
  {\@@tst@indexutfsee{#1}{#2}{#3}{#4}[]}%
}
\def\@@tst@indexutfsee#1#2#3#4[#5]#6{%
  \@ifnextchar[{\@@tst@@indexutfsee{#1}{#2}{#3}{#4}{#5}{#6}}%
  {\@@tst@@indexutfsee{#1}{#2}{#3}{#4}{#5}{#6}[]}%
}
\def\@@tst@@indexutfsee#1#2#3#4#5#6[#7]#8#9{%
 \@tstidx@ifutfviii
 {%
   \@tstindexsee{#3}{#4}{#5}{#6}[#7]{#9}%
 }%
 {%
   \@tstindexsee{#1}{#2}{#5}{#6}[#7]{#8}%
 }%
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Sub-Entries}
%One sub-level.
%\begin{macro}{\tstsubindexpost}
%\begin{definition}
%\cs{tstsubindexpost}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubindexpost}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subindexpost
}
\newcommand*{\@tst@subindexpost}[2][]{%
 \@ifnextchar[{\@tstidx@subindexpost{#1}{#2}}{\@tstidx@subindexpost{#1}{#2}[]}}%
\def\@tstidx@subindexpost#1#2[#3]#4#5{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxsubmarker}%
    \else
      #5%
    \fi
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \else
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxsubmarker}}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexopenpost}
%\begin{definition}
%\cs{tstsubindexopenpost}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubindexopenpost}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subindexopenpost
}
\newcommand*{\@tst@subindexopenpost}[2][]{%
 \@ifnextchar[{\@tstidx@subindexopenpost{#1}{#2}}{\@tstidx@subindexopenpost{#1}{#2}[]}}%
\def\@tstidx@subindexopenpost#1#2[#3]#4#5{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxopensubmarker}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \else
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxopensubmarker}}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexclosepost}
%\begin{definition}
%\cs{tstsubindexclosepost}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubindexclosepost}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subindexclosepost
}
\newcommand*{\@tst@subindexclosepost}[2][]{%
 \@ifnextchar[{\@tstidx@subindexclosepost{#1}{#2}}{\@tstidx@subindexclosepost{#1}{#2}[]}}%
\def\@tstidx@subindexclosepost#1#2[#3]#4#5{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxclosesubmarker}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \else
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxclosesubmarker}}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexpre}
%\begin{definition}
%\cs{tstsubindexpre}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubindexpre}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subindexpre
}
\newcommand*{\@tst@subindexpre}[2][]{%
 \@ifnextchar[{\@tstidx@subindexpre{#1}{#2}}{\@tstidx@subindexpre{#1}{#2}[]}}%
\def\@tstidx@subindexpre#1#2[#3]#4#5{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxsubmarker}%
    \else
      #5%
    \fi
  \else
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxsubmarker}}%
    \else
      #5%
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexopenpre}
%\begin{definition}
%\cs{tstsubindexopenpre}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\marg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubindexopenpre}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subindexopenpre
}
\newcommand*{\@tst@subindexopenpre}[2][]{%
 \@ifnextchar[{\@tstidx@subindexopenpre{#1}{#2}}{\@tstidx@subindexopenpre{#1}{#2}[]}}%
\def\@tstidx@subindexopenpre#1#2[#3]#4#5{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxopensubmarker}%
    \else
      #5%
    \fi
  \else
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxopensubmarker}}%
    \else
      #5%
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexclosepre}
%\begin{definition}
%\cs{tstsubindexclosepre}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubindexclosepre}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subindexclosepre
}
\newcommand*{\@tst@subindexclosepre}[2][]{%
 \@ifnextchar[{\@tstidx@subindexclosepre{#1}{#2}}{\@tstidx@subindexclosepre{#1}{#2}[]}}%
\def\@tstidx@subindexclosepre#1#2[#3]#4#5{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxclosesubmarker}%
    \else
      #5%
    \fi
  \else
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxclosesubmarker}}%
    \else
      #5%
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexsubsee}
%\begin{definition}
%\cs{tstindexsubsee}\oarg{main sort}\marg{main term}\oarg{sub sort}
%\marg{sub term}\oarg{label}\marg{cs name}\oarg{xr-labels}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstindexsubsee}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \ifx\@tstidx@sort\@empty
   \def\@tstidx@entry{#2}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \@tstindexsubsee
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tstindexsubsee}
%    \begin{macrocode}
\newcommand*{\@tstindexsubsee}[2][]{%
 \@ifnextchar[{\@tstidx@index@subsee{#1}{#2}}%
  {\@tstidx@index@subsee{#1}{#2}[]}%
}%
\def\@tstidx@index@subsee#1#2[#3]#4{%
 \@ifnextchar[{\@tstidx@indexsubsee{#1}{#2}{#3}{#4}}%
  {\@tstidx@indexsubsee{#1}{#2}{#3}{#4}[]}%
}
\def\@tstidx@indexsubsee#1#2#3#4[#5]#6{%
  \def\@tstidx@subsort{#1}%
  \ifx\@tstidx@subsort\@empty
   \toks@{#2}%
   \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}%
     \tstidxlevel\the\toks@}%
  \else
   \toks@{#1}%
   \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}%
     \tstidxlevel\the\toks@\tstidxactual}%
   \expandafter\def\expandafter\@tstidx@entry\expandafter{\@tstidx@entry#2}%
  \fi
  \expandafter\toks@\expandafter{\@tstidx@entry}%
  \edef\@tstidx@entry{\the\toks@\tstidxencap
     \@tstidxseeencap{#4}{#6}}%
  \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \iftestidxshowmarks
    \tstidxsubseeref{\@tstidx@term}{#2}{#4}{#6}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%
%Two sub-levels.
%\begin{macro}{\tstsubsubindexpost}
%\begin{definition}
%\cs{tstsubsubindexpost}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{sub-sub sort}\marg{sub-sub
%term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubsubindexpost}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subsubindexpost
}
\newcommand*{\@tst@subsubindexpost}[2][]{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \@@tst@subsubindexpost
}
\newcommand*{\@@tst@subsubindexpost}[2][]{%
 \@ifnextchar[{\@@tstidx@subsubindexpost{#1}{#2}}%
 {\@@tstidx@subsubindexpost{#1}{#2}[]}}%
\def\@@tstidx@subsubindexpost#1#2[#3]#4#5{%
  \def\@tstidx@subsubsort{#1}%
  \def\@tstidx@subsubterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@subsubsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxsubsubmarker}%
    \else
      #5%
    \fi
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \else
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxsubsubmarker}}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexopenpost}
%\begin{definition}
%\cs{tstsubsubindexopenpost}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{sub-sub sort}\marg{sub-sub
%term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubsubindexopenpost}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subsubindexopenpost
}
\newcommand*{\@tst@subsubindexopenpost}[2][]{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \@@tst@subsubindexopenpost
}
\newcommand*{\@@tst@subsubindexopenpost}[2][]{%
 \@ifnextchar[{\@@tstidx@subsubindexopenpost{#1}{#2}}%
 {\@@tstidx@subsubindexopenpost{#1}{#2}[]}%
}%

\def\@@tstidx@subsubindexopenpost#1#2[#3]#4#5{%
  \def\@tstidx@subsubsort{#1}%
  \def\@tstidx@subsubterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@subsubsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxopensubmarker}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \else
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxopensubmarker}}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexclosepost}
%\begin{definition}
%\cs{tstsubsubindexclosepost}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{sub-sub sort}\marg{sub-sub
%term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubsubindexclosepost}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subsubindexclosepost
}
\newcommand*{\@tst@subsubindexclosepost}[2][]{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \@@tst@subsubindexclosepost
}
\newcommand*{\@@tst@subsubindexclosepost}[2][]{%
 \@ifnextchar[{\@@tstidx@subsubindexclosepost{#1}{#2}}%
 {\@@tstidx@subsubindexclosepost{#1}{#2}[]}%
}%

\def\@@tstidx@subsubindexclosepost#1#2[#3]#4#5{%
  \def\@tstidx@subsubsort{#1}%
  \def\@tstidx@subsubterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@subsubsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxclosesubmarker}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \else
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxclosesubmarker}}%
    \else
      #5%
    \fi
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexpre}
%\begin{definition}
%\cs{tstsubsubindexpre}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{sub-sub sort}\marg{sub-sub
%term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubsubindexpre}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subsubindexpre
}
\newcommand*{\@tst@subsubindexpre}[2][]{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \@@tst@subsubindexpre
}
\newcommand*{\@@tst@subsubindexpre}[2][]{%
 \@ifnextchar[{\@@tstidx@subsubindexpre{#1}{#2}}%
 {\@@tstidx@subsubindexpre{#1}{#2}[]}%
}%

\def\@@tstidx@subsubindexpre#1#2[#3]#4#5{%
  \def\@tstidx@subsubsort{#1}%
  \def\@tstidx@subsubterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@subsubsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxsubsubmarker}%
    \else
      #5%
    \fi
  \else
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxsubsubmarker}}%
    \else
      #5%
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexopenpre}
%\begin{definition}
%\cs{tstsubsubindexopenpre}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{sub-sub sort}\marg{sub-sub
%term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubsubindexopenpre}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subsubindexopenpre
}
\newcommand*{\@tst@subsubindexopenpre}[2][]{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \@@tst@subsubindexopenpre
}
\newcommand*{\@@tst@subsubindexopenpre}[2][]{%
 \@ifnextchar[{\@@tstidx@subsubindexopenpre{#1}{#2}}%
 {\@@tstidx@subsubindexopenpre{#1}{#2}[]}%
}%
\def\@@tstidx@subsubindexopenpre#1#2[#3]#4#5{%
  \def\@tstidx@subsubsort{#1}%
  \def\@tstidx@subsubterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@subsubsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxopensubmarker}%
    \else
      #5%
    \fi
  \else
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxopenrange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxopensubmarker}}%
    \else
      #5%
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexclosepre}
%\begin{definition}
%\cs{tstsubsubindexclosepre}\oarg{main sort}\marg{main term}\oarg{sub
%sort}\marg{sub term}\oarg{sub-sub sort}\marg{sub-sub
%term}\oarg{label}\marg{encap}\marg{text}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstsubsubindexclosepre}[2][]{%
  \def\@tstidx@sort{#1}%
  \def\@tstidx@term{#2}%
  \@tst@subsubindexclosepre
}
\newcommand*{\@tst@subsubindexclosepre}[2][]{%
  \def\@tstidx@subsort{#1}%
  \def\@tstidx@subterm{#2}%
  \@@tst@subsubindexclosepre
}
\newcommand*{\@@tst@subsubindexclosepre}[2][]{%
 \@ifnextchar[{\@@tstidx@subsubindexclosepre{#1}{#2}}%
 {\@@tstidx@subsubindexclosepre{#1}{#2}[]}%
}%

\def\@@tstidx@subsubindexclosepre#1#2[#3]#4#5{%
  \def\@tstidx@subsubsort{#1}%
  \def\@tstidx@subsubterm{#2}%
  \def\@tstidx@encap{#4}%
  \ifx\@tstidx@sort\@empty
    \let\@tstidx@entry\@tstidx@term
  \else
     \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@sort}\tstidxactual
      \unexpanded\expandafter{\@tstidx@term}}%
  \fi
  \ifx\@tstidx@subsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subterm}}%
  \fi
  \ifx\@tstidx@subsubsort\@empty
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \else
    \edef\@tstidx@entry{\unexpanded\expandafter{\@tstidx@entry}\tstidxlevel
      \unexpanded\expandafter{\@tstidx@subsubsort}\tstidxactual
        \unexpanded\expandafter{\@tstidx@subsubterm}}%
  \fi
  \ifx\@tstidx@encap\@empty
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{#5\tstidxclosesubmarker}%
    \else
      #5%
    \fi
  \else
    \expandafter\toks@\expandafter{\@tstidx@entry}%
    \edef\@tstidx@entry{\the\toks@\tstidxencap\tstidxcloserange#4}%
    \expandafter\@tstindex\expandafter{\@tstidx@entry}%
    \iftestidxshowmarks
      \tstidxtext{\tstidxencaptext{#4}{#5\tstidxclosesubmarker}}%
    \else
      #5%
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\section{Filler Text Generator}
%\begin{macro}{\testidx}
%Provide a command similar to \cs{lipsum} from the \sty{lipsum}
%package. May take a comma-separated list or a range of paragraph
%indices. The starred form suppresses paragraph breaks.
%    \begin{macrocode}
\newcommand*{\testidx}{%
  \@ifstar
  {%
    \def\@testidx@block@sep{\space}%
    \@testidx
  }%
  {%
    \def\@testidx@block@sep{\tstidxdefblocksep}%
    \@testidx
  }%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@testidx}
%    \begin{macrocode}
\newcommand*{\@testidx}[1][1-\tstidxmaxblocks]{%
  \@for\@tidx@block@range:=#1\do{%
    \ifx\@tidx@block@range\@empty
    \else
     \expandafter\@test@idx\@tidx@block@range-\@nil-\@nil\@end@test@idx
    \fi
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxdefblocksep}
% The default separator between blocks is \cs{par}.
%    \begin{macrocode}
\newcommand{\tstidxdefblocksep}{\par}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxprefixblock}
%Prefix for each paragraph. Argument is the paragraph number.
%    \begin{macrocode}
\newcommand*{\tstidxprefixblock}[1]{{\scriptsize\number#1.}\ }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@parctr}
%    \begin{macrocode}
\newcount\@tidx@parctr
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@test@idx}
%    \begin{macrocode}
\def\@test@idx#1-#2-#3\@end@test@idx{%
  \def\@tst@idx@arg{#1}%
  \ifx\@tst@idx@arg\@nnil
   \PackageError{testidx}{Invalid range `\@tidx@block@range'}{}%
  \else
    \def\@tst@idx@arg{#2}%
    \ifx\@tst@idx@arg\@empty
      \PackageError{testidx}{Invalid range `\@tidx@block@range'}{}%
    \else
      \ifx\@tst@idx@arg\@nnil
        \@@test@idx{#1}%
      \else
        \ifnum#2<#1\relax
          \@tidx@parctr=\numexpr#1+1\relax
          \loop
            \advance\@tidx@parctr by -\@ne
            \@@test@idx\@tidx@parctr
          \ifnum\@tidx@parctr>#2
          \repeat
        \else
          \@tidx@parctr=\numexpr#1-1\relax
          \loop
            \advance\@tidx@parctr by \@ne
            \@@test@idx\@tidx@parctr
          \ifnum\@tidx@parctr<#2
          \repeat
        \fi
      \fi
    \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@@test@idx}
%Do paragraph identified by argument.
%    \begin{macrocode}
\newcommand*{\@@test@idx}[1]{%
 \@ifundefined{@tidx@par@\romannumeral#1}%
 {%
   \PackageError{testidx}{No such test block `\number#1'}%
   {Blocks are numbered from 1 to \number\tstidxmaxblocks}%
 }%
 {%
    \tstidxprefixblock{#1}%
    \csname @tidx@par@\romannumeral#1\endcsname
    \@testidx@block@sep
 }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxmaxblocks}
%    \begin{macrocode}
\newcount\tstidxmaxblocks
%    \end{macrocode}
%\end{macro}
%\subsection{Adding Test Paragraphs}
%
%\begin{macro}{\tstidxnewblock}
%    \begin{macrocode}
\newcommand*{\tstidxnewblock}{
  \@ifstar\s@tstidxnewblock\@tstidxnewblock
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\s@tstidxnewblock}
%\begin{definition}
%\cs{tstidxnewblock}*\marg{cs}\marg{block text}
%\end{definition}
%(Starred form.) Define a new block and assign the block's number
% to the control sequence \meta{cs} for reference in another
% block. (Can't use the normal \cs{ref}\slash\cs{label} as the
% reference is more useful to the user if the referred block is
% missing. The undefined ?? indicator isn't much use in this
% context.)
%    \begin{macrocode}
\newcommand{\s@tstidxnewblock}[2]{%
  \@tstidxnewblock{#2}%
  \edef#1{\number\tstidxmaxblocks}%
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tstidxnewblock}
%\begin{definition}
%\cs{tstidxnewblock}\marg{block text}
%\end{definition}
% (Unstarred form.) Define a new block.
%    \begin{macrocode}
\newcommand{\@tstidxnewblock}[1]{%
  \advance\tstidxmaxblocks by \@ne
  \expandafter
    \newcommand\csname @tidx@par@\romannumeral\tstidxmaxblocks\endcsname{#1}%
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Test Paragraphs}
% These are all the predefined test paragraphs.
%\begin{macro}{\@tidx@par@i}
%    \begin{macrocode}
\tstidxnewblock
{%
 This is a~sample block of text designed to test
 \tstidxcs{index}, the
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapii]{layout}
 \else
  \tstidxword{layout}
 \fi
  of the
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapii]{index}
 \else
  \tstidxword{index}
 \fi
 (\tstidxenv{theindex} environment) and any
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapii]{indexing application},
 \else
   \tstidxphrase{indexing application},
 \fi
 such as
 \tstidxapp{makeindex} or
 \tstidxapp{xindy}. This text is just
 \tstidxword{filler} (produced using \tstidxcs{testidx} provided
 by the \tstidxopensty{testidx} package) to 
 pad\tstindexsee{padding}{seealso}{filler} out 
 the document with instances of \tstidxcs{index} interspersed 
 throughout. You can use it, for \tstidxword{example}, to test an indexing
 package, such as \tstidxsty{makeidx} or \tstidxsty{imakeidx}, or to 
 test a \tstidxapp{makeindex} style file or \tstidxapp{xindy} module. 
 You can find out more
 information from the \tstidxsty{testidx} user manual, which
 can be accessed using the \tstidxapp{texdoc} application.
 This block starts a range that is closed in block~\@tidx@close@testidxsty.%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@ii}
%    \begin{macrocode}
\tstidxnewblock
{%
 The \tstidxsty{testidx} package doesn't make any
 modifications to \tstidxcs{index} or \tstidxenv{theindex}. All 
 \tstidxphrase{visual effects} in this \tstidxphrase{dummy text} are produced 
 using markup commands provided solely for this \tstidxword{purpose} that 
 internally use \tstidxcs{index} or, more specifically, internally use
 \tstidxcs{tstindex}, which is defined to use \tstidxcs{index} (so you can 
 redefine \tstidxcs{tstindex} if you have multiple indexes). This package 
 doesn't attempt to \tstidxword{parse} or otherwise \tstidxword{interpret} the
 \tstidxword{argument} of \tstidxcs{index}, nor does it attempt to
 produce a well-designed index. Its purpose is to help you
 \tstidxword{test} your chosen \tstidxword{design}, which is easier to do with a
 relatively small test \tstidxword{document}, than with a large 
 \tstidxword{book}. The \tstidxphrase{dummy text} is intended to produce an 
 \tstidxword{index} that is at least three pages long to allow you
 to test the page headers and footers in a two-sided document.
 You can hide the visual effects with the
 \tstidxstyopt{testidx}{hidemarks} package option.%
 \iftestidxshowmarks
 \else
  \space (It seems you already have this option set.
  Remove it or use \tstidxstyopt{testidx}{showmarks} to show them
  again.)%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@iii}
%\changes{1.2}{2019-09-29}{added lonely sub-item}
%    \begin{macrocode}
\tstidxnewblock
{%
 The actual place where the \tstidxcs{index} command occurs in this 
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{dummy text}
 \else
   \tstidxphrase{dummy text}
 \fi
 is marked with the symbol 
 \tstidxindexmarker{tstidxmarker} if there is no \tstidxword{range} or
 \tstidxphrase{cross-reference}. The 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapi]{word}
 \else
   \tstidxword{word}
 \fi
 or 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapii]{phrase}
 \else
   \tstidxword{phrase}
 \fi
 adjacent to this \tstidxword{marker} is 
 the text being indexed.\tstidxfootnote{The \tstidxcs{index} command may 
 occur before or after the \tstidxword{word} or \tstidxword{phrase} being 
 indexed in this 
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{dummy text},
 \else
   \tstidxphrase{dummy text},
 \fi
 but there's no 
 space between the \tstidxword{marker} and the term being indexed. Always 
 remember not to surround your \tstidxcs{index} usage with spaces. Keep it
 flush against the term being indexed and only have a space on one
 side. Incidentally, this \tstidxword{footnote} text was produced
 using the command \tstidxcs{tstidxfootnote}, which you can
 redefined as required. (It defaults to just \tstidxcs{footnote}.)}  
 A sub-entry is indicated with the symbol
 \tstidxindexmarker{tstidxsubmarker} and a sub-sub-entry is
 indicated with the symbol \tstidxindexmarker{tstidxsubsubmarker}.
 If an \tstidxword{encap} value is provided, both the 
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapiii]{text}
 \else
  \tstidxword{text}
 \fi
 and the 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapii]{marker} 
 \else
   \tstidxword{marker} 
 \fi
 are typeset in the \tstidxword{argument} of the corresponding command. 
 (The text occurring in the document is also typeset within the argument of
 \tstidxcs{tstidxtext}. The default value is to use a dark grey, but since the
 default values for the \tstidxword{predefined} encaps used in this text all 
 change the colour, the dark grey will only apply where the encap hasn't
 been set.) There are three \tstidxword{encap} values used throughout this 
 \tstidxphrase{dummy text} (unless you've used the 
 \tstidxstyopt{testidx}{notestencaps} package option): 
 \if@tstidx@use@encaps
  \tstidxencapcsn[tstidxencapi]{tstidxencapi}, 
 \else
  \tstidxencapcsn{tstidxencapi}, 
 \fi
 \if@tstidx@use@encaps
   \tstidxencapcsn[tstidxencapii]{tstidxencapii}
 \else
   \tstidxencapcsn{tstidxencapii}
 \fi
 and 
 \if@tstidx@use@encaps
   \tstidxencapcsn[tstidxencapiii]{tstidxencapiii}.
 \else
   \tstidxencapcsn{tstidxencapiii}.
 \fi
 (The default values use \tstidxcs{textcolor}, so you might want to use the 
 \tstidxstyopt{hyperref}{hidelinks} option
 if you want to use the \tstidxsty{hyperref} package.) A cross-referenced
 entry (using \tstidxencapcsn{see} or \tstidxencapcsn{seealso}) is identified
 using the \tstidxword{marker}  \tstidxindexmarker{tstidxseemarker} 
 and the cross-referenced information is displayed as 
 a \tstidxphrase{marginal note} by default, with the term being indexed 
 followed by the \tstidxword{cross-reference}.
 For example, 
 \tstidxword{lyuk}\tstindexsee{lyuk}{seealso}{digraph} has 
 the marker \tstidxmarker\ to show that the word \tstidxqt{lyuk} was
 indexed followed by the marker \tstidxseemarker\ to show that 
 a cross-reference to \tstidxword{digraph} has also been indexed
 (with the details shown in the margin).
 A sub-level 
 \tstidxword{cross-reference} is identified with the \tstidxword{marker}
 \tstidxindexmarker{tstidxsubseemarker} and the marginal note
 displays the main term followed by the sub-term (separated by the
 symbol \tstidxsubseesep).  The \tstidxword{marker} used for the start of 
 a range is \tstidxindexmarker{tstidxopenmarker} and the
 \tstidxword{marker} used for the end of 
 a range is \tstidxindexmarker{tstidxclosemarker} 
 unless the entry is a sub-level, in which case the
 \tstidxword{marker} for the start of the range is 
 \tstidxindexmarker{tstidxopensubmarker} 
 and the \tstidxword{marker} used for the end of a range is 
 \tstidxindexmarker{tstidxclosesubmarker}, or for a sub-sub-level
 \tstidxindexmarker{tstidxopensubsubmarker} and 
 \tstidxindexmarker{tstidxclosesubsubmarker}. There are no tests for
 any further sub-levels. Although \tstidxapp{xindy} allows more than
 three levels (\tstidxapp{makeindex} doesn't), it's somewhat
 \tstidxword{excessive} to go below a sub-sub-level. 
 You'll have to add your own tests for anything deeper.
 Watch out for \tstidxsubword{sub-items}{lonely} sub-items.%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@iv}
%    \begin{macrocode}
\tstidxnewblock*{\@tidx@openrangepar}
{%
 Here's an \tstidxword{example} of the start of a \tstidxopenword{range} but
 remember that a range must also have an end, so make sure that 
 \tstidxword{block}~\@tidx@closerangepar\ has been included in this
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{dummy text},
 \else
   \tstidxphrase{dummy text},
 \fi
  which closes this
 \tstidxword{example}.
 \iftestidxverbose
   I see you've used the \tstidxstyopt{testidx}{verbose} package option which 
   shows the \tstidxword{argument} being passed to \tstidxcs{tstindex}. 
   I expect it's caused some \tstidxphrase{overfull lines}.%
 \else
   If you want more detail, you can use the \tstidxstyopt{testidx}{verbose} 
   package option which will show the \tstidxword{argument} being passed to 
   \tstidxcs{tstindex} but be warned that it will
   cause \tstidxphrase{overfull lines}.%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@v}
%    \begin{macrocode}
\tstidxnewblock
{%
 Now that the preliminaries have been dispensed with in the previous
 \tstidxwordpl{paragraph}, we can get on
 to some serious 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapii]{waffle}
 \else
   \tstidxword{waffle}
 \fi
 to act as 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapi]{filler}
 \else
   \tstidxword{filler}
 \fi
 text because this really needs 
 some \tstidxword{padding} in order to get a decent sized
 \tstidxword{index} with lots of locations. I did consider using just
 plain old \tstidxphrase{lorem ipsum} (like the \tstidxsty{lipsum}
 package), but it gets a bit boring after a while, and it's easier to 
 check the indexing has been performed successfully if you can understand 
 the text. Of course, this doesn't help those who don't know any English, but at
 least they're no worse off than they would have been with random
 \tstidxword{gibberish}\tstindexsee{gobbledegook}{see}{gibberish},
 at least, I hope not.  In other words, if I could just \tstidxword{clarify} 
 what I'm trying to say here, in a \tstidxword{confidential} and not too 
 \tstidxword{roundabout} \tstidxword{fashion}\tstidxdash
 \tstidxphrase{between you, me and the gatepost}\tstidxdash is please don't 
 consider this to be an 
 \tstidxword{illustration}\tstindexsee{illustration}{seealso}{example} of 
 my stunning \tstidxword{wit}, \tstidxword{eloquence} and 
 \tstidxphrase{way with words} because I'm shamelessly contravening the 
 \tstidxphrase{creative writing}
 \tstidxword{adage} (or possibly \tstidxword{motto}) of 
 \tstidxphrase{cut to the chase}, remove excessive
 \tstidxword{verbiage} and \tstidxphrase{get to the point}. I shall
 take care to hide this \tstidxword{drivel} from my 
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{creative writing}
 \else
   \tstidxphrase{creative writing}
 \fi
 \tstidxword{tutor} and 
 fellow writers, so 
 \tstidxphrase{keep mum}\tstindexsee{keep mum}{seealso}{confidential} 
 and don't \tstidxword{grass} on me because that just won't be fair,
 and it might \tstidxword{distress} them to a certain extent.
 I shall not be \tstidxword{assailed} by indecision and will
 \tstidxword{aspire} to find the \tstidxphrase{mot juste}.
 Where was I? Oh, yes, \tstidxword{padding}. I'm trying to make this
 \tstidxword{paragraph} quite long, not because I have any pretensions of being
 the next \tstidxperson{James}{Joyce} and competing with 
 \tstidxbook{Ulysses}, but because one of the things
 we need to check for is what happens with paragraphs that span a
 \tstidxphrase{page break}. (If you're feeling particularly daring,
 try out the starred version of \tstidxcs{testidx}, although
 some of the blocks, such as \tstidxword{block}~\@tidx@xdypar, have some 
 sneaky \tstidxword{paragraph} breaks that won't
 be suppressed.) \tstidxsym{TeX}{\TeX}'s asynchronous 
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapii]{output routine}
 \else
   \tstidxphrase{output routine}
 \fi
 can cause things to go a bit 
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{out of whack},
 \else
   \tstidxphrase{out of whack},
 \fi
 so lengthy paragraphs in this 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapii]{example}
 \else
   \tstidxword{example}
 \fi
 document increase the chances of testing for these occurrences. 
 Whether or not this particular \tstidxword{paragraph} 
 actually spans a \tstidxphrase{page break} does, of course, depend on
 various things including your document \tstidxsubword{document}{properties}, 
 such as the \tstidxphrase{page dimensions}, \tstidxphrase{font family} and
 \tstidxphrase{font size}. If it turns out that this 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapi]{paragraph} 
 \else
   \tstidxword{paragraph} 
 \fi
 has spanned a \tstidxphrase{page break}, you might want to check the terms 
 indexed here to make sure they have the correct page numbers listed.
 Something else that you might want to check, while you're at it, is
 what's happened to the \tstindexsee{location list}{seealso}{cross-reference}%
 \tstidxword{location list} for the word
 \if@tstidx@use@encaps
   \tstidxqt{\tstidxword[tstidxencapii]{paragraph}},
 \else
   \tstidxqt{\tstidxword{paragraph}},
 \fi
 as I've used different 
 \tstidxword{encap} values for it in various places in this
 \tstidxword{example} 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapiii]{paragraph}.
 \else
   \tstidxword{paragraph}.
 \fi
 If you are using
 \tstidxapp{makeindex}, you might notice some warnings about 
 \tstidxphrase{multiple encaps}, and the \tstidxphrase{page number}
 may be duplicated in the location list. If you are using 
 \tstidxapp{xindy}, then it will discard duplicate page numbers and
 give preference to the first defined attribute in whatever 
 \tstidxapp{xindy} module you're using. However, be careful if a 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapi]{range} 
 \else
   \tstidxword{range} 
 \fi
 overlaps a different \tstidxword{encap}.
 Remember that there's a difference between an \tstidxword{index} and a
 \tstidxword{concordance}. If you just index pertinent places, there's less
 likelihood of conflicting encaps. This is the end of a 
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapiii]{paragraph}
 \else
   \tstidxword{paragraph}
 \fi
 that was written to deliberately upset \tstidxapp{makeindex}.
 Mean, aren't I?%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@vi}
%    \begin{macrocode}
\tstidxnewblock*{\@tidx@xdypar}
{%
 On the subject of \tstidxapp{xindy}, if you want to use it with
 this \tstidxword{example} document, you'll need to add the 
 \tstidxword{encap} values used in this \tstidxphrase{dummy text}
 as allowed attributes. For example, you may want to create a file
 called, say, \texttt{\jobname.xdy} that contains the following:
%    \end{macrocode}
% Can't use verbatim so fudge it.
%    \begin{macrocode}
 \begin{flushleft}\ttfamily\obeylines
; list of allowed attributes
\par\medskip\par
(define-attributes ((
  \string"tstidxencapi\string"
  \string"tstidxencapii\string"
  \string"tstidxencapiii\string"
)))
\par\medskip\par
; define format to use for locations
\par\medskip\par
(markup-locref :open \string"\string\tstidxencapi\expandafter\@gobble\string\{\string"
 :close \string"\expandafter\@gobble\string\}\string"
 :attr \string"tstidxencapi\string")

(markup-locref :open \string"\string\tstidxencapii\expandafter\@gobble\string\{\string"
 :close \string"\expandafter\@gobble\string\}\string"
 :attr \string"tstidxencapii\string")

(markup-locref :open
\string"\string\tstidxencapiii\expandafter\@gobble\string\{\string"
 :close \string"\expandafter\@gobble\string\}\string"
 :attr \string"tstidxencapiii\string")
 \end{flushleft}
 This sets up allowed encap values and how they should be formatted.
 The ordering of the allowed \tstidxword{attributes} here gives the 
 \tstidxencapcsn{tstidxencapi} encap precedence in the
 event of a \tstidxphrase{multiple encaps} clash, since it's the
 first one in the list. You can then
 run \tstidxapp{xindy} using:
 \begin{flushleft}\ttfamily
xindy -L english -C utf8 -M \jobname.xdy -M texindy -t \jobname.ilg
\jobname.idx
 \end{flushleft}
 You might also want to set the location list
 \tstidxsubword{location list}{page separator}
 and the \tstidxsubword{location list}{range separator}%
 \tstindexsee{range separator}{see}{location list}
 in your \texttt{.xdy} file.  For example:
 \begin{flushleft}\ttfamily
(markup-locref-list :sep \string", \string")\par
(markup-range :sep \string"\string-\string-\string")
 \end{flushleft}
 Check out the difference between using \tstidxapp{xindy} and
 \tstidxapp{makeindex} on this document.
 On the subject of location lists, the word
 \tstidxword{passim} (meaning \tstidxqt{here and there}) is
 sometimes used to tidy up ragged lists. For example,
 the locations \tstidxqt{1, 3, 4, 6, 7} may look neater as
 \tstidxqt{1-7 passim}, which indicates references are scattered (here
 and there) throughout that range.%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@vii}
%    \begin{macrocode}
\tstidxnewblock
{%
 Computer algorithms can sometimes have difficulties with 
 \tstidxword{localisation}. They can be tripped up by
 \tstidxphrase{input encoding} issues and \tstidxwordpl{digraph}
 (such as the Welsh \tstidxgphword{ll}{ll}{ỻ} digraph in 
 \tstidxgphword{llan}{llan}{ỻan},
 the Dutch \tstidxgphword{ij}{ij}{ij} digraph in 
 \tstidxgphword{lijnbus}{lijnbus}{lijnbus} and 
 \tstidxgphword{ijsvrij}{ijsvrij}{ijsvrij}, and the
 \tstidxgphword{dz}{dz}{dz} digraph in the Hungarian
 \tstidxgphword{dz\'eta}[dzeta]{dzéta}{dzéta} and Polish
 \tstidxgphword{dzwon}{dzwon}{dzwon}) 
 or \tstidxwordpl{trigraph} (such as the Hungarian \tstidxword{dzs}
 trigraph in \tstidxutfword{dzs\'oker}[dzsoker]{dzsóker}
 and \tstidxword{dzsungel}\tstindexsee{dzsungel}{seealso}{trigraph}),
 so this \tstidxword{paragraph} is designed to provide some examples for 
 testing various Latin alphabets. If you enable both UTF-8 (either
 with \tstidxsty{inputenc} or using XeLaTeX\slash LuaLaTeX) and
 the \tstidxstyopt{testidx}{digraphs} option, then the examples above
 will use the \tstidxqt{ll}, \tstidxqt{ij} and \tstidxqt{dz} 
 \tstidxwordpl{glyph} (\emph{if supported}) for the \tstidxwordpl{digraph} 
 (but not for \tstidxqt{dzs}, which is a 
 \tstidxword{trigraph}). Remember that you'll also need a font that 
 supports those glyphs. 
 \iftestidxdiglyphs
  (If characters are missing from the above words, then they're not supported.) 
 \fi
 Other digraphs include the Welsh \tstidxword{dd}, \tstidxword{ff},
 and \tstidxword{ng}, the Hungarian \tstidxword{ly} (in \tstidxword{lyuk} 
 mentioned earlier) and the Polish \tstidxword{cz}, but these 
 don't use glyphs in the sort value.
 Now for some more \tstidxword{nonsense} text to pad the index.
 We, the \tstidxutfword{\'elite}[elite]{élite} who discovered the 
 \tstidxutfword{\ae sthetic}[aesthetic]{æsthetic}
 delights of \tstidxsym{TeX}{\TeX}, must not become
 \tstidxutfword{blas\'e}[blase]{blasé} about being the
 \tstidxutfword{prot\'eg\'e}[protege]{protégé}
 of the great \tstidxperson{Donald}{Knuth}.
 It may stagger the 
 \tstidxutfword{client\`ele}[clientele]{clientèle} of 
 \if@tstidx@use@encaps
   \tstidxartphrase[tstidxencapii]{the}{commercial world} 
 \else
   \tstidxartphrase{the}{commercial world} 
 \fi
 to discover our 
 \tstidxutfword{r\'esum\'e}[resumee]{résumé} 
 (after foraging for it in our natty 
 \tstidxutfphrase{attach\'e case}[attachecase]{attaché case})
 while we sample a \tstidxword{vol-au-vent} or \tstidxword{two}
 at the \tstidxutfword{soir\'ee}[soiree]{soirée}
 in the \tstidxutfphrase{pied-\`a-terre}[piedaterre]{pied-à-terre}
 with the delightful \tstidxutfword{ph\oe nix}[phoenix]{phœnix}-%
 themed \tstidxutfword{d\'ecor}[decor]{décor}, \tstidxword{daft}
 \tstidxword{oak} \tstidxphrase{dado rail} and
 \tstidxutfword{f\ae rie}[faerie]{færie}
 \tstidxutfword{fa\c{c}ade}[facade]{façade}
 that has stunned
 many an \tstidxutfword{\ae thereal}[aethereal]{æthereal}
 \tstidxutfword{d\'ebutante}[debutante]{débutante}
 sporting a \tstidxutfphrase{berg\`ere hat}[bergerehat]{bergère hat},
 but it would be \tstidxutfword{na\"ive}[naive]{naïve}
 to fall for such a \tstidxutfword{f\oe tid}[foetid]{fœtid}
 \tstidxutfword{clich\'e}[cliche]{cliché}.
 This \tstidxword{paragraph} is in a state of 
 \tstidxutfword{d\'eshabill\'e}[deshabille]{déshabillé}.
 Like a \tstidxword{sculpture} of \tstidxword{Venus} in a 
 \tstidxutfword{n\'eglig\'ee}[negligee]{négligée}, it's transparently
 obvious that this \tstidxword{paragraph} is provided for the sole purpose of 
 \tstidxword{ogling}\tstindexsee{gawping}{see}{ogling}
 \tstidxphrase{extended Latin characters} and testing
 how \tstidxapp{xindy} and \tstidxapp{makeindex} compare.
 Time for a quick trip to the \tstidxutfword{caf\'e}[cafe]{café}
 for an \tstidxutfword{an\ae mic}[anaemic]{anæmic} 
 \tstidxphrase{cup of tea} (to \tstidxword{recover} from our travels) with
 \tstidxutfperson{Anders Jonas}{\AA ngstr\"om}[AndersJonasAngstrom]%
 {Anders Jonas}{Ångström} (but don't let it scald your
 \tstidxutfword{\oe sophagus}[oesophagus]{œsophagus}) 
 and then off to find a \tstidxword{zoo}
 in \tstidxutfplace{\"Osterg\"otland}[Ostergotland]{Östergötland},
 so we can get to the end of the \tstidxword{alphabet}. (We may even
 see an adventurous \tstidxword{aardvark} or 
 a lucky \tstidxgphword{llama}{llama}{ỻama} or a
 \tstidxword{rhinoceros} eating \tstidxword{rhubarb}.) Perhaps
 then we should go over to 
 \tstidxutfplace{\"Angelholm}[Angelholm]{Ängelholm}
 and head off across the 
 \tstidxutfplace{\O resund}[Oresund]{Øresund} bridge and
 \tstidxword{resume} our search for some more examples.
 We'll go on a \tstidxphrase{whistle-stop tour} around
 \tstidxutfplace{T\r{a}rnby}[Tarnby]{Tårnby},
 \tstidxutfplace{R\o dovre}[Rodovre]{Rødovre},
 \tstidxutfplace{N\ae stved}[Naestved]{Næstved} and
 \tstidxutfplace{\O lstykke-Stenl\o se}[OlstykkeStenlose]{Ølstykke-Stenløse}.
 Afterwards, we'll \tstidxword{fly} to
 \tstidxplace{Poland} (possibly in an \tstidxword{aeroplane}\tstidxdash
 if passengers would like to look out of their \tstidxword{window}, they'll
 see we're passing over 
 \tstidxutfplace{A\ss lar}[Asslar]{Aßlar} and
 \tstidxutfplace{Bad Gottleuba-Berggie\ss h\"ubel}[BadGottleubaBerggiesshubel]{Bad Gottleuba-Berggießhübel})
 and then we'll say
\tstidxqt{\tstidxutfword{cze\'s\'c}[czesc]{cześć}} to
\tstidxutfplace{\L\'od\'z}[Lodz]{Łódź}, and visit
 \@tstidx@if@notOT@ne
 {%
   \tstidxutfplace{\'Swi\k{e}tokrzyskie}[Swietokrzyskie]{Świętokrzyskie}%
   \ifxetex
   \else
     \ifluatex
     \else
       \space(that one will cause a problem for certain font encodings
       because of the \tstidxword{ogonek} and
       will be omitted if you use the default 
       \tstidxsubword{font encoding}{OT1}
       encoding, but not if you use the \tstidxsty{fontenc} 
       package\tstindexstysee{fontenc}{seealso}{inputenc} with, 
       for example, the \tstidxstyopt{fontenc}{T1} option)%
     \fi
   \fi,
 }%
 {%
   [a place with an \tstidxword{ogonek} has been omitted because this document
    is using the default \tstidxsubword{font encoding}{OT1} font 
   encoding\tstidxdash try loading the \tstidxsty{fontenc}
   package\tstindexstysee{fontenc}{seealso}{inputenc} with the 
   \tstidxstyopt{fontenc}{T1} option],
 }%
 \tstidxutfplace{\.Zory}[Zory]{Żory},
 \tstidxutfplace{\.Zelech\'ow}[Zelechow]{Żelechów},
 \tstidxutfplace{\L obez}[Lobez]{Łobez},
 \tstidxutfplace{G\l og\'ow}[Glogow]{Głogów}
 (not to be confused with \tstidxplace{Glasgow}),
 \tstidxutfplace{\'Cmiel\'ow}[Cmielow]{Ćmielów},
 \tstidxutfplace{\'Scinawa}[Scinawa]{Ścinawa}
 and
 \tstidxutfplace{\'Swidnica}[Swidnica]{Świdnica}.
 Then let's \tstidxword{sail} to \tstidxplace{Iceland} (possibly in
 a \tstidxword{ship}) and visit the lakes of
 \tstidxplace{Iceland}, such as 
 \tstidxutfplace{\"Olvesvatn}[Olvesvatn]{Ölvesvatn},
 \tstidxutfplace{\'Ulfsvatn}[Ulfsvatn]{Úlfsvatn},
 \tstidxutfplace{\'Anavatn}[Anavatn]{Ánavatn},
 \tstidxutfplace{M\'asvatn}[Masvatn]{Másvatn},
 \@tstidx@if@notOT@ne
 {%
   \tstidxutfplace{\TH r\'{\i}hyrningsvatn}[Thrihyrningsvatn]{Þríhyrningsvatn}
   (that one starts with a 
    \tstidxutfword{thorn (\th)}[thorn]{thorn (þ)}%
    \tstindexutfsee{\th}{þ}[thornletter]{see}[thorn]{thorn (\th)}{thorn (þ)}),
   \tstidxutfplace{Sigr\'{\i}\dh arsta\dh avatn}[Sigridharstadhavatn]{Sigríðarstaðavatn}
   (that one has an \tstidxutfword{eth (\dh)}[eth]{eth (ð)}%
   \tstindexutfsee{\dh}{ð}[ethletter]{see}[eth]{eth (\dh)}{eth (ð)}%
   \ifxetex
    )%
   \else
     \ifluatex
      )%
     \else
       \tstidxdash those last two will also be omitted if you use the default 
       \tstidxword{OT1} \tstidxword{font encoding})%
     \fi
   \fi,
 }%
 {%
   [a couple of lakes with a \tstidxword{thorn} and an
   \tstidxword{eth} have been omitted because this document is using the
   default \tstidxword{OT1} \tstidxword{font encoding}\tstidxdash try loading 
   \tstidxsty{fontenc} with the \tstidxstyopt{fontenc}{T1} option],
 }%
 \tstidxutfplace{Gr\ae navatn}[Graenavatn]{Grænavatn},
 \tstidxutfplace{\'Arnesl\'on}[Arneslon]{Árneslón}
 and
 \tstidxutfplace{\'Ish\'olsvatn}[Isholsvatn]{Íshólsvatn}.
 If you are using this with \tstidxapp{xindy} and
 \tstidxword{UTF-8}, try this out with a different language option,
 for example \tstidxappopt{xindy}{-L swedish} or 
 \tstidxappopt{xindy}{-L danish} or \tstidxappopt{xindy}{-L german-duden} or 
 \tstidxappopt{xindy}{-L german-din5007} or \tstidxappopt{xindy}{-L polish} or 
 \tstidxappopt{xindy}{-L icelandic}.
 \@tstidx@ifgerman
 {I notice you've use the \tstidxstyopt{testidx}{german} or
  \tstidxstyopt{testidx}{ngerman} package option. This means that if you want
  to use \tstidxapp{makeindex} instead of \tstidxapp{xindy}, you can
  use \tstidxapp{makeindex}'s \tstidxappopt{makeindex}{-g} option.%
 }%
 {%
  If you want to use \tstidxapp{makeindex} instead of
  \tstidxapp{xindy}, then the package option \tstidxstyopt{testidx}{german} or
  \tstidxstyopt{testidx}{ngerman} will allow you to use 
  \tstidxapp{makeindex}'s \tstidxappopt{makeindex}{-g} option.%
 }%
 \@tstidx@ifutfviii
 {%
   \ifxetex
   \else
     \ifluatex
     \else
       \@tidx@sanitizenote
     \fi
   \fi
 }%
 { No UTF-8 support has been detected for this document.\@tidx@stripaccentsnote}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@sanitizenote}
%    \begin{macrocode}
\newcommand{\@tidx@sanitizenote}{%
 \space You currently have the 
 \@tstidx@ifsanitize
 {\tstidxstyopt{testidx}{sanitize} option on.
  This means that the words containing \tstidxword{UTF-8} characters will
  first be sanitized before being passed to \tstidxcs{tstindex}, which 
  will allow you to test how well the \tstidxphrase{indexing application} 
  sorts \tstidxword{UTF-8} characters. If you'd rather test how 
  \tstidxcs{index} writes these characters to the file read by the 
  indexing application, use the \tstidxstyopt{testidx}{nosanitize}
  option instead. This may cause the \tstidxword{UTF-8} characters to be
  written in terms of \tstidxcs{IeC}.%
 }%
 {\tstidxstyopt{testidx}{nosanitize} option on.
  This means that the words containing \tstidxword{UTF-8} characters 
  may be written to the file processed by the 
  \tstidxphrase{indexing application} in terms of
  \tstidxcs{IeC}. This allows you to test how \tstidxcs{index} behaves. 
  If you'd rather test how the indexing application sorts
  \tstidxword{UTF-8} characters, use the \tstidxstyopt{testidx}{sanitize}
  option instead, which will sanitize the \tstidxword{UTF-8} characters
  before passing them to \tstidxcs{tstindex}.%
 }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@stripaccentsnote}
%    \begin{macrocode}
\newcommand{\@tidx@stripaccentsnote}{%
 \space The \tstidxstyopt{testidx}{stripaccents} package option will
  effectively do, for example, 
  \texttt{\string\index\char`\{elite@\string\'elite\char`\}}
   whereas the 
  \tstidxstyopt{testidx}{nostripaccents} package option will
  effectively do, for example, 
  \texttt{\string\index\char`\{\string\'elite\char`\}}.
  These options have no effect in UTF-8 mode.%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@viii}
%    \begin{macrocode}
\tstidxnewblock
{%
  Don't forget there's also a \tstidxphrase{number group}, so let's
  have some numbers. 
  \tstidxartbook{The}{Hitchhiker's Guide to the Galaxy} has
  of course propelled the number \tstidxnumber{42} to stardom, as the
  answer to \tstidxword{life}, the \tstidxword{universe} and
  everything. We usually deal in base~\tstidxnumber{10}, but sometimes
  base~\tstidxnumber{16} is useful to programmers, and computers
  prefer base~\tstidxnumber{2} (and \tstidxnumber{2} is the only
  \tstidxword{even} \tstidxword{prime number}). A \tstidxword{century} in 
  \tstidxword{cricket} means \tstidxnumber{100} runs, and in the
  \tstidxword{calendar} \tstidxnumber{100} years.
  \@tidx@numberlettergroup 
  Whilst we're on the subject of numbers, let's try out some
  equations.
\begin{equation}
\tstidxmath{E}{E} = mc^2
\end{equation}
  \@tstidx@ifamsmath
  {%
   Since this document is using \tstidxsty{amsmath}, let's try out
the \tstidxenv{align} environment:
\begin{align}
\tstidxmath{f(x)}[fx]{f(\protect\vec{x})} &=
 \tstidxmathsym{alpha}{\protect\alpha}
 \tstidxmathsym{sum}{\protect\sum}_i^{\tstidxmath{n}{n}} x_i
+\tstidxmathsym{beta}{\protect\beta} \sum_{i}^n x_i^2
+\tstidxmathsym{gamma}{\protect\gamma}\\
 \frac{\tstidxmathsym{partial}{\protect\partial}f}{\partial x_j} &=
  \alpha + 2\beta x_j
\end{align}
   \@tidx@scriptnote
   If this document hadn't loaded the \tstidxsty{amsmath} package,
we would have had to use the \tstidxenv{eqnarray} environment
instead.
  }%
  {%
   This document doesn't load the \tstidxsty{amsmath} package, so
let's try out the \tstidxenv{eqnarray} environment:
\begin{eqnarray}
\tstidxmath{f(x)}{f(\protect\vec{x})} &=& 
 \tstidxmathsym{alpha}{\protect\alpha}
 \tstidxmathsym{sum}{\protect\sum}_i^{\tstidxmath{n}{n}} x_i
+\tstidxmathsym{beta}{\protect\beta} \sum_{i}^n x_i^2
+\tstidxmathsym{gamma}{\protect\gamma}\\
 \frac{\tstidxmathsym{partial}{\protect\partial}f}{\partial x_j} &=&
  \alpha + 2\beta x_j
\end{eqnarray}
   \@tidx@scriptnote
   If you load the \tstidxsty{amsmath} package, we'll test the 
   \tstidxenv{align} environment instead.
  }%
  Incidentally, that's just a regular partial derivative symbol 
  $\tstidxmathsym{partial}{\protect\partial}$. Not to be confused
  with the spin-weighted partial derivative
  \@tstidx@ifamssymb{$\tstidxmathsym{eth}[spinderiv]{\protect\eth}$,
   which can be displayed here as this document has loaded the 
   \tstidxsty{amssymb} package}
  {[you need the \tstidxsty{amssymb} package for that symbol]}.
 \@tidx@mathslettergroup
 \iftestidxprefix
 I've done something similar with the \tstidxwordpl{marker} where I've used
 \texttt{\tstidxindexmarkerprefix} as the \tstidxword{prefix}.%
 \else
 With the prefixes on I can also do something similar with the 
 \tstidxwordpl{marker} where I'll use
 \texttt{\tstidxindexmarkerprefix} as the \tstidxword{prefix}.%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@scriptnote}
%    \begin{macrocode}
\newcommand{\@tidx@scriptnote}{%
  (Note how the subscripts and superscripts can be affected
  by material inserted between the symbol and the sub- and
  superscripts.)
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@numberlettergroup}
%    \begin{macrocode}
\newcommand*{\@tidx@numberlettergroup}{%
  If you're using \tstidxapp{xindy}, you can provide a numbers group 
  by adding the following to your \texttt{.xdy} module:
\begin{flushleft}\ttfamily
(define-letter-group \string"Numbers\string"\par
   \string:prefixes (\string"0\string" \string"1\string" \string"2\string"
\string"3\string" \string"4\string" \string"5\string"
\string"6\string" \string"7\string" \string"8\string"
\string"9\string")\par
   \string:before \string"A\string")
\end{flushleft}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@mathslettergroup}
%    \begin{macrocode}
\newcommand*{\@tidx@mathslettergroup}{%
 \iftestidxprefix
  Now I've been a bit fancy here and inserted
  \texttt{\tstidxmathsymprefix} in front of
  the sort key so I can get \tstidxapp{xindy} to create a special
  group for the maths symbols.  Here's
 \else
  This document has used the \tstidxstyopt{testidx}{noprefix}
  package option, which has switched of the sort prefixes.
  If you use the \tstidxstyopt{testidx}{prefix} option I can be a
  bit fancy here and insert
  \texttt{\tstidxmathsymprefix} in front of
  the sort key so I can get \tstidxapp{xindy} to create a special
  group for the maths symbols.  When you switch on the prefixes here's
 \fi
the code you can add to your \texttt{.xdy} file to implement it:
\begin{flushleft}\ttfamily
(define-letter-group \string"Maths\string"
   \string:prefixes (\string"\tstidxmathsymprefix\string")
   \string:before \string"Numbers\string")
\end{flushleft}
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@ix}
%    \begin{macrocode}
\tstidxnewblock*{\@tidx@closerangepar}%
{%
%    \end{macrocode}
%This isn't really a UTF-8 word but it needs a different label to
%avoid clashing with \qt{recover}.
%    \begin{macrocode}
 Let's \tstidxutfword{re-cover}[reecover]{re-cover} old ground and 
 talk about ranges again.
 This is the end of the \tstidxcloseword{range}
 \tstidxword{example} from \tstidxword{block}~\@tidx@openrangepar.
 There's not much else to say about this \tstidxword{block} really.
 It's quite boring, isn't it? However, you'll need it if you've
 included block~\@tidx@openrangepar. Unless you're testing for 
 a mis-matched range, of course. That might be quite interesting,
 possibly, but I'm not going to \tstidxphrase{hold my breath}.%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@x}
%    \begin{macrocode}
\tstidxnewblock
{%
  Now this is going to be hard to believe\tstidxdash in fact I'm 
  totally \tstidxword{gobsmacked} and utterly \tstidxword{astounded}
  \tstidxdash but I've discovered that we're still missing some 
  \tstidxphrase{letter groups}, and I've run out of anything 
  \tstidxword{quaint} to say, so I'm going to have to
  \tstidxword{yatter} for a while longer, which will probably make
  you \tstidxword{yawn} and fall \tstidxword{asleep}. 
  What shall we talk about? My \tstidxword{quirky}
  \tstidxword{badinage} is about to \tstidxword{expire}. How about a
  \tstidxword{story}? Here's one I made up for my friend
  \tstidxperson{Paulo}{Cereda} in \tstidxsym{TeX}{\TeX}.SE chat because he likes
  ducks and is the creator of \tstidxapp{arara}.
  So, are you sitting comfortably? Then let's \tstidxword{begin}. By the way,
  before I \tstidxword{forget}, it's called 
  \tstidxbook{Sir Quackalot and the Golden Arara} and is the
  first story in 
  \tstidxartbook{The}{Adventures of Sir Quackalot}.
  It's a \tstidxword{tale} of \tstidxword{adventure} and 
  \tstidxword{derring-do}. The \tstidxword{hero} of the 
  \tstidxword{story} is \tstidxperson{Sir}{Quackalot}, in case you
  can't tell from the \tstidxword{title}.
  \tstidxphrase{Once upon a time}, a long time ago in 
  \tstidxartphrase{a}{far away land}, there lived a
  \tstidxword{knight}. He was \tstidxword{handsome}, he was 
  \tstidxword{bold}, he was \tstidxword{brave}.
  He was\tstidxdash a \tstidxword{duck}. His \tstidxword{name} was 
  \tstidxperson{Sir}{Quackalot}. 
  One day \tstidxperson{the}{Fairy Goose} appeared. 
  \tstidxqt{Brave \tstidxword{knight},} she said. \tstidxqt{A terrible
  \tstidxword{plight} has fallen on 
  the \tstidxword{land}. The evil \tstidxword{OgRe} has stolen 
  \tstidxartphrase{the}{Golden Arara}. Only you can save it.} 
  (That's a \tstidxword{reference} to 
  \tstidxsym{TeX}{\TeX}'s \tstidxphrase{output routine}, if you missed it.)
  \tstidxqt{It will be a \tstidxword{perilous} \tstidxword{quest}, but find 
  \tstidxartphrase{the}{Mighty Helm of Knuth} and
  \tstidxartphrase{the}{Legendary Sword} \tstidxword{xor} to aid you.} (Ask
  \tstidxperson{David}{Carlisle} about the \tstidxword{xor}
  \tstidxword{reference}.)%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@xi}
%    \begin{macrocode}
\tstidxnewblock
{%
 So \tstidxperson{Sir}{Quackalot} set out on his \tstidxword{quest}. 
 (This is the \tstidxword{continuation} from
 the previous \tstidxword{block}, for any \tstidxword{newcomers}
 who have just turned up.) He soon arrived at 
 \tstidxartphrase{the}{Bog of Eternal Glossaries} (that's a
 reference to my \tstidxsty{glossaries} package, and it's also a
 \tstidxword{nod} to \tstidxartplace{the}{Bog of Eternal Stench} in 
 \tstidxfilm{Labyrinth}), in the 
 \tstidxword{centre} (or \tstidxword{center} for those of you
 \tstidxphrase{across the pond}) of which was 
 suspended \tstidxartphrase{the}{Mighty Helm of Knuth}, but 
 \tstidxperson{Sir}{Quackalot} was learned in the \tstidxword{lore} of
 installing \tstidxapp{Perl} and was able to leap upon the \tstidxword{magical}
 \tstidxword{raft} \tstidxapp{makeglossaries} and steer his way through the 
 \tstidxword{external} \tstidxphrasepl{indexing application} and their many 
 arguments.  (That's supposed to be a \tstidxword{pun}, but it's 
 \tstidxphrase{bad form} to explain the \tstidxword{joke}, and it
 wasn't even particularly \tstidxword{witty}.
 Incidentally, \tstidxperson{Joseph}{Wright} makes a
 \tstidxword{cameo} at this point with the 
 \tstidxword{exclamation} \tstidxqt{fetchez la vache!}\ but you'll have to 
 ask \tstidxperson{Paulo}{Cereda} what
 that's all about. It wouldn't surprise me if it had something to
 do with \tstidxphrase{Monty Python}.)%
} 
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@xii}
%    \begin{macrocode}
\tstidxnewblock
{%
 Anyway, where were we? Oh, yes.  He (that's
 \tstidxperson{Sir}{Quackalot} we're talking about, if you've only
 just joined us) snatched up \tstidxartphrase{the}{Mighty Helm of Knuth} and 
 escaped from the \tstidxword{perilous} \tstidxword{bog}. Soon he came to 
 \tstidxartphrase{the}{Dread Vale of the Editors}, guarded
 at either end by the ever-quarrelling 
 \tstidxword{leviathans} \tstidxapp{Emacs} and \tstidxapp{Vi}. 
 As he approached the \tstidxword{vale}, Emacs uttered the 
 \tstidxphrase{magic incantation} that
 sent forth \tstidxartphrase{the}{butterflies of chaos}. 
 (I know \tstidxqt{\tstidxword{doom}} is more appropriate but,
 as is \tstidxphrase{common knowledge}, \tstidxword{chaos} is a 
 \tstidxword{butterfly} \tstidxword{motif}.)%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@xiii}
%    \begin{macrocode}
\tstidxnewblock
{%
But \tstidxperson{Sir}{Quackalot} was protected by 
\tstidxartphrase{the}{Mighty Helm of Knuth} and
raced past into the \tstidxword{vale}, where he found 
\tstidxartphrase{the}{Legendary Sword} \tstidxword{xor} in
the centre of the great \tstidxsty{longtable}. (\tstidxword{Ooh}, I've started a 
\tstidxword{sentence} with a \tstidxword{conjunction}. 
How \tstidxword{naughty} is that?)
With a great \tstidxword{leap} and a \tstidxword{bound}, 
\tstidxperson{Sir}{Quackalot} plucked out the \tstidxword{sword} and
headed for the far end of the \tstidxword{vale}.
Up pounced \tstidxapp{Vi} and belched forth a \tstidxword{myriad}
of \tstidxword{clones} that bore down on
\tstidxperson{Sir}{Quackalot}.  But, brandishing the \tstidxword{sword} 
\tstidxword{xor}, \tstidxperson{Sir}{Quackalot} sliced them down. 
(There's some \tstidxword{repetition} there, but hopefully no one's
noticed. There's even more coming up in the next
\tstidxword{block}.)%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@xiv}
%    \begin{macrocode}
\tstidxnewblock*{\@tidx@close@testidxsty}%
{%
\tstidxperson{Sir}{Quackalot} escaped from 
\tstidxartphrase{the}{Dread Vale of the Editors} and set off
up the path that led to the evil \tstidxword{OgRe}'s \tstidxword{lair}. 
As \tstidxperson{Sir}{Quackalot} approached, there was a fearful 
\tstidxword{roar}, and the \tstidxword{OgRe} pounced on \tstidxperson{Sir}{Quackalot}. 
The brave \tstidxword{knight} raised his powerful \tstidxword{sword} 
\tstidxword{xor} and brought it down on the \tstidxword{OgRe}, destroying him. 
\tstidxperson{Sir}{Quackalot} rescued \tstidxartphrase{the}{Golden Arara} 
and the \tstidxword{land} was once more restored to \tstidxword{peace} and 
\tstidxword{harmony} and 
\tstidxwordpl{paragraph} were able to \tstidxword{span} 
\tstidxphrasepl{page break} without \tstidxword{fear}. 
\tstidxartphrase{The}{End}. Don't miss the next \tstidxword{thrilling} 
\tstidxword{adventure} \tstidxbook{Sir Quackalot and the Hyper Lake of Doom}
where our \tstidxword{seaborne} \tstidxphrase{intrepid hero}%
\tstindexsubsee{hero}{intrepid}[hero.intrepid]{see}{intrepid hero} meets a \tstidxword{quixotic}
\tstidxword{seal} with a \tstidxword{zither} (a \tstidxword{zealous}
\tstidxword{fan} of \tstidxartfilm{The}{Third Man}), a \tstidxword{youthful} 
\tstidxphrase{sea lion} with a \tstidxword{magic}
\tstidxword{yo-yo}, and a \tstidxword{wily} \tstidxword{wombat}
\tstidxword{warrior} with a \tstidxword{laser-guided}
\tstidxphrase{sealant gun}. Can they defeat the
\tstidxword{villainous}, \tstidxword{zany} \tstidxword{zoologist}
sailing a \tstidxword{xebec} across the \tstidxword{sea} bearing canisters of
\tstidxword{xenon}, \tstidxword{xylem} and \tstidxword{xylene}?
Oh, \tstidxword{zounds}! He's \tstidxword{ashore} wearing 
a \tstidxphrase{zoot suit} and smoking a \tstidxword{zucchini} 
whilst playing a \tstidxword{xylophone}. 
As one \tstidxphrase{anonymous reviewer} said, 
it's as \tstidxword{exhilarating} as watching a \tstidxword{yuppie}
eating a \tstidxphrase{yule log} soaked in \tstidxphrase{yoghurt}.
Hmm, \tstidxword{yummy}\tstidxdash or \tstidxword{yuck}, depending
on your tastes. Don't forget to \tstidxword{check} you
have some \tstidxword{chalk} so we can write
\tstidxword{ddisgynedig} and \tstidxword{ddyrchafedig}
in \tstidxplace{Nghaerdydd} (over in \tstidxplace{Nghymru})
because I want a few more words with \tstidxwordpl{digraph},
and then we can take a \tstidxword{ffotograff} of
\tstidxplace{Ffestiniog}.% 
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@xv}
%    \begin{macrocode}
\tstidxnewblock
{%
 Oh, did I tell you about the \tstidxphrase{vice-president} who was
 a \tstidxword{Viking} in a \tstidxword{vignette}? No? Well, I can't
 quite remember the \tstidxword{story} myself, but it had something
 to do with a \tstidxphrase{vice admiral} with a
 \tstidxphrase{Victoria plum} and a \tstidxphrase{viceroy} with
 a \tstidxphrase{Victoria sponge}, or was it 
 \tstidxphrase{vice versa}? The \tstidxphrase{vice chancellor}
 preferred \tstidxword{vichyssoise}.
 For \tstidxphrase{letter ordering} use the \tstidxappopt{makeindex}{-l} option
 with \tstidxapp{makeindex} or the \texttt{ord/letorder} module
 with \tstidxapp{xindy} (\tstidxappopt{xindy}{-M ord/letorder}). 
 If you omit this, the default
 \tstidxphrase{word ordering} is used. The ordering in the
 \tstidxbook{Compact Oxford English Dictionary} (third edition,
 revised) for these words are: vice admiral, vice chancellor, vice-president, 
 \tstidxword{viceregal}, viceroy, vice versa. Quick 
 \tstidxword{quiz}. Can you get \tstidxapp{makeindex} or
 \tstidxapp{xindy} to reproduce that order?%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@xvi}
%    \begin{macrocode}
\tstidxnewblock*{\@tidx@close@testidxsty}%
{%
 This is the final \tstidxword{block} of dummy text
 provided by the \tstidxclosesty{testidx} package. This block
 contains the close of a \tstidxword{range} that was started in block~1.
 Fun, wasn't it?%
}
%    \end{macrocode}
%\end{macro}
%\iffalse
%    \begin{macrocode}
%</testidx.sty>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries.sty>
%    \end{macrocode}
%\fi
%\section{Support for \styfmt{glossaries}}
%This package allows the dummy text to work with the
%\sty{glossaries} (or \sty{glossaries-extra}) package.
%Instead of using \cs{index}, the entries are first defined
%and then used in the dummy text.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{testidx-glossaries}[2019/09/29 v1.2 (NLCT)]
%    \end{macrocode}
%
%\begin{macro}{\tstidx@glossariespkg}
%\changes{1.1}{2017-08-11}{new}
%By default just load \sty{glossaries}.
%    \begin{macrocode}
\newcommand*{\tstidx@glossariespkg}{glossaries}
%    \end{macrocode}
%\end{macro}
% Pass options to \sty{glossaries}, unless \sty{glossaries} has
% already been loaded, in which case use \cs{setupglossaries}
%\begin{macro}{\tstidx@setupglossaries}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\@ifpackageloaded{glossaries}
{%
  \newcommand*{\tstidx@setupglossaries}[1]{\setupglossaries{#1}}%
}%
{%
  \newcommand*{\tstidx@setupglossaries}[1]{%
    \PassOptionsToPackage{#1}{glossaries}%
  }
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@setupglossariesextra}
%\changes{1.1}{2017-08-11}{new}
%For options specific to \sty{glossaries-extra}.
%    \begin{macrocode}
\@ifpackageloaded{glossaries-extra}
{%
  \newcommand*{\tstidx@setupglossariesextra}[1]{\glossariesextrasetup{#1}}%
}%
{%
  \newcommand*{\tstidx@setupglossariesextra}[1]{%
    \PassOptionsToPackage{#1}{glossaries-extra}%
  }
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@usemakegloss}
%    \begin{macrocode}
\newcommand*{\tstidx@usemakegloss}{\PackageError{testidx-glossaries}{You
need to put \string\tstidxmakegloss\MessageBreak in the preamble in order
to use\MessageBreak \string\testidx\space with testidx-glossaries}{}}
%    \end{macrocode}
%\end{macro}
%
%Need to know whether to use \cs{makeglossaries},
%\cs{makenoidxglossaries}, \cs{GlsXtrLoadResources}.
%\begin{macro}{\tstidxmakegloss}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxmakegloss}[1][]{%
 \@tstidx@ifgerman{\GlsSetQuote{+}}{}%
 \tstidxdefaultmakegloss
}
%    \end{macrocode}
%\end{macro}
%Similarly for displaying the glossary.
%\begin{macro}{\tstidxprintglossaries}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxprintglossaries}{\printglossaries}
%    \end{macrocode}
%\end{macro}
%
%Similarly for displaying the glossary.
%\begin{macro}{\tstidxprintglossary}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxprintglossary}{\printglossary}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxtexfiles}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxtexfiles}{testidx-glossaries-samples,\tstidxglyphfile}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxbasebibfiles}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxbasebibfiles}{testidx-glossaries-samples}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxasciibibfiles}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxasciibibfiles}{testidx-glossaries-samples-ascii}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxutfbibfiles}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxutfbibfiles}{testidx-glossaries-samples-utf8}
%    \end{macrocode}
%\end{macro}

%\begin{macro}{\tstidxloadsamples}
%\changes{1.1}{2017-08-11}{new}
%Set up \cs{tstidxmakegloss} to use \cs{makenoidxglossaries}
%(use \TeX\ to sort and collate).
%    \begin{macrocode}
\newcommand*{\tstidxloadsamples}{%
 \@for\tstidxfile:=\tstidxtexfiles\do{\input{\tstidxfile}}%
 \renewcommand*{\tstidx@usemakegloss}{}%
}
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstidxdefaultmakegloss}
%\changes{1.1}{2017-08-11}{new}
%Set up \cs{tstidxmakegloss} to use \cs{makeglossaries}
%(either \app{makeindex} or \app{xindy}).
%    \begin{macrocode}
\newcommand*{\tstidxdefaultmakegloss}{%
 \makeglossaries
 \tstidxloadsamples
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnoidxmakegloss}
%\changes{1.1}{2017-08-11}{new}
%Set up \cs{tstidxmakegloss} to use \cs{makenoidxglossaries}
%(use \TeX\ to sort and collate).
%    \begin{macrocode}
\newcommand*{\tstidxnoidxmakegloss}{%
 \makenoidxglossaries
 \tstidxloadsamples
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxbibmakegloss}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxbibmakegloss}[1]{%
  \def\@tstidx@resourceargs{}%
  \@tstidx@ifutfviii
  {%
    \def\@tstidx@resource@src{\tstidxbasebibfiles,%
      \tstidxutfbibfiles,%
      \tstidxglyphfile-utf8}%
  }%
  {%
    \def\@tstidx@resource@src{\tstidxbasebibfiles,%
      \tstidxasciibibfiles,%
       testidx-glossaries-nodiglyphs}%
  }%
  \if@tstidx@setdescription
    \if@tstidx@useglsseekey
      \def\@tstidx@resourceargs{selection={recorded and deps and see}}%
    \else
      \def\@tstidx@resourceargs{ignore-fields={see,seealso}}%
    \fi
  \else
    \if@tstidx@useglsseekey
      \def\@tstidx@resourceargs{%
        selection={recorded and deps and see},
        ignore-fields={description}}%
    \else
      \def\@tstidx@resourceargs{%
        ignore-fields={description,see,seealso}}%
    \fi
  \fi
  \iftestidxprefix
    \tstidxloadglsresource{src={testidx-glossaries-mathsym},%
      group={Maths},sort={letter-case},\@tstidx@resourceargs}%
    \tstidxloadglsresource{src={testidx-glossaries-markers},%
      group={Markers},sort={letter-case},\@tstidx@resourceargs}%
    \iftstidxnumbergroup
      \tstidxloadglsresource{src={testidx-glossaries-numbers},%
        sort={integer},\@tstidx@resourceargs}%
      \tstidxloadglsresource{src={\@tstidx@resource@src},%
        \@tstidx@resourceargs,#1}%
    \else
      \tstidxloadglsresource{src={testidx-glossaries-numbers,%
         \@tstidx@resource@src},%
        \@tstidx@resourceargs,#1}%
    \fi
  \else
    \iftstidxnumbergroup
      \tstidxloadglsresource{src={testidx-glossaries-numbers},%
        sort={integer},\@tstidx@resourceargs}%
      \tstidxloadglsresource{%
        src={testidx-glossaries-mathsym,%
             testidx-glossaries-markers,%
            \@tstidx@resource@src},%
        \@tstidx@resourceargs,#1}%
    \else
      \tstidxloadglsresource{%
        src={testidx-glossaries-mathsym,%
             testidx-glossaries-markers,%
             testidx-glossaries-numbers,%
            \@tstidx@resource@src},%
        \@tstidx@resourceargs,#1}%
    \fi
  \fi
  \renewcommand*{\tstidx@usemakegloss}{}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxloadglsresource}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand{\tstidxloadglsresource}[1]{%
  \iftestidxverbose
    \PackageInfo{testidx-glossaries}{\string\GlsXtrLoadResources[#1]}%
  \fi
  \GlsXtrLoadResources[#1]%
}
%    \end{macrocode}
%\end{macro}
%
%
%Determine whether to use the "see" (and "seealso") key or \cs{glssee}.
%\begin{macro}{if@tstidx@useglsseekey}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newif\if@tstidx@useglsseekey
\@tstidx@useglsseekeytrue
%    \end{macrocode}
%\end{macro}
%
%    \begin{macrocode}
\DeclareOption{seekey}{\@tstidx@useglsseekeytrue}
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareOption{noseekey}{\@tstidx@useglsseekeyfalse}
%    \end{macrocode}
%
%Determine whether to provide descriptions for the sample entries.
%\begin{macro}{if@tstidx@setdescription}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newif\if@tstidx@setdescription
\@tstidx@setdescriptionfalse
%    \end{macrocode}
%\end{macro}
%
%    \begin{macrocode}
\DeclareOption{desc}{\@tstidx@setdescriptiontrue}
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareOption{nodesc}{\@tstidx@setdescriptionfalse}
%    \end{macrocode}
%
%Load \sty{glossaries-extra}:
%    \begin{macrocode}
\DeclareOption{extra}{\renewcommand*{\tstidx@glossariespkg}{glossaries-extra}}
%    \end{macrocode}
%Don't load \sty{glossaries-extra}:
%    \begin{macrocode}
\DeclareOption{noextra}{\renewcommand*{\tstidx@glossariespkg}{glossaries}}
%    \end{macrocode}
%\begin{macro}{\@testidx@ifusebibgls}
% Determine if the \pkgopt{bib2gls} option was used.
%    \begin{macrocode}
\newcommand*{\@testidx@ifusebibgls}[2]{#2}
%    \end{macrocode}
%\end{macro}
% Use makeindex:
%    \begin{macrocode}
\DeclareOption{makeindex}{%
  \let\@testidx@ifusebibgls\@secondoftwo
  \tstidx@setupglossaries{makeindex}%
  \renewcommand*{\tstidxmakegloss}[1][]{%
    \@tstidx@ifgerman{\GlsSetQuote{+}}{}%
    \tstidxdefaultmakegloss
  }%
  \renewcommand*{\tstidxprintglossaries}{\printglossaries}%
  \renewcommand*{\tstidxprintglossary}{\printglossary}%
}
%    \end{macrocode}
% Use xindy:
%    \begin{macrocode}
\DeclareOption{xindy}{%
  \let\@testidx@ifusebibgls\@secondoftwo
  \tstidx@setupglossaries{xindy}%
  \renewcommand*{\tstidxmakegloss}[1][]{%
    \tstidxdefaultmakegloss
  }%
  \renewcommand*{\tstidxprintglossaries}{\printglossaries}%
  \renewcommand*{\tstidxprintglossary}{\printglossary}%
}
%    \end{macrocode}
% Use TeX:
%    \begin{macrocode}
\DeclareOption{tex}{%
  \let\@testidx@ifusebibgls\@secondoftwo
  \renewcommand*{\tstidxmakegloss}[1][]{%
    \tstidxnoidxmakegloss
  }%
  \renewcommand*{\tstidxprintglossaries}{\printnoidxglossaries}%
  \renewcommand*{\tstidxprintglossary}{\printnoidxglossary}%
}
%    \end{macrocode}
%
% Use bib2gls (requires \sty{glossaries-extra}):
%    \begin{macrocode}
\DeclareOption{bib2gls}{%
  \renewcommand*{\tstidx@glossariespkg}{glossaries-extra}%
  \let\@testidx@ifusebibgls\@firstoftwo
  \tstidx@setupglossariesextra{record}%
  \renewcommand*{\tstidxmakegloss}[1][]{%
    \tstidxbibmakegloss{#1}%
  }%
  \renewcommand*{\tstidxprintglossaries}{\printunsrtglossaries}%
  \renewcommand*{\tstidxprintglossary}{\printunsrtglossary}%
}
%    \end{macrocode}
%Indicate that \cs{tstidxmakegloss} won't be used:
%    \begin{macrocode}
\DeclareOption{manual}{%
 \renewcommand*{\tstidx@usemakegloss}{}%
  \renewcommand*{\tstidxmakegloss}[1][]{%
    \PackageWarning{testidx-glossaries}{\string\tstidxmakegloss\space
     disabled by `manual' package option}%
  }%
  \renewcommand*{\tstidxprintglossaries}{%
    \PackageWarning{testidx-glossaries}{\string\tstidxprintglossaries\space
     disabled by `manual' package option}%
  }%
  \renewcommand*{\tstidxprintglossary}{%
    \PackageWarning{testidx-glossaries}{\string\tstidxprintglossary\space
     disabled by `manual' package option}%
  }%
}
%    \end{macrocode}
%
%\begin{macro}{\newif\iftstidxnumbergroup}
%    \begin{macrocode}
\newif\iftstidxnumbergroup
\tstidxnumbergrouptrue
%    \end{macrocode}
%    \begin{macrocode}
\DeclareOption{noglsnumbers}{\tstidxnumbergroupfalse}
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareOption{glsnumbers}{\tstidxnumbergrouptrue}
%    \end{macrocode}
%Pass remaining options to \sty{testidx}:
%    \begin{macrocode}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{testidx}}
%    \end{macrocode}
%Process options:
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}
%Load required packages.
%    \begin{macrocode}
\RequirePackage{testidx}
%    \end{macrocode}
%Pass options to \sty{glossaries} according to the options 
%passed to \sty{testidx}.
%    \begin{macrocode}
\@tstidx@ifsanitize
 {\tstidx@setupglossaries{sanitizesort=true}}
 {\tstidx@setupglossaries{sanitizesort=false}}
%    \end{macrocode}
%Load \sty{glossaries} (or \sty{glossaries-extra}, which internally
%loads \sty{glossaries}).
%    \begin{macrocode}
\RequirePackage{\tstidx@glossariespkg}
%    \end{macrocode}
%Load \sty{glossary-mcols} so the default glossary style can be set to "mcolindexgroup".
%    \begin{macrocode}
\RequirePackage{glossary-mcols}
%    \end{macrocode}
%Set the default style according to whether or not the entries
%should include descriptions.
%    \begin{macrocode}
\if@tstidx@setdescription
 \setupglossaries{nopostdot=false}
 \setglossarystyle{indexgroup}
\else
 \setupglossaries{nopostdot}
 \setglossarystyle{mcolindexgroup}
\fi
%    \end{macrocode}
%Implement number group setting if \pkgopt{xindy} setting on.
%    \begin{macrocode}
\ifglsxindy
\iftstidxnumbergroup
   \gls@xindy@glsnumberstrue
  \else
   \gls@xindy@glsnumbersfalse
  \fi
\fi
%    \end{macrocode}
% Check if the "seealso" key is available:
%\begin{macro}{\if@tstidx@hasseealsokey}
%    \begin{macrocode}
\newif\if@tstidx@hasseealsokey
\key@ifundefined{glossentry}{seealso}%
{\@tstidx@hasseealsokeyfalse}
{\@tstidx@hasseealsokeytrue}
%    \end{macrocode}
%\end{macro}
%
%Check if verbose mode is on.
%    \begin{macrocode}
\iftestidxverbose
%    \end{macrocode}
%\begin{macro}{\@testidx@writeglsinfo}
%If \pkgopt{verbose} mode is on write entry information to the log file.
%    \begin{macrocode}
 \appto\@newglossaryentryposthook{\@testidx@writeglsinfo}
 \newcommand\@testidx@writeglsinfo{%
   \letcs{\@tstidx@sort}{glo@\glsdetoklabel{\@glo@label}@sort}%
   \@onelevel@sanitize\@tstidx@sort
   \letcs{\@tstidx@name}{glo@\glsdetoklabel{\@glo@label}@name}%
   \@onelevel@sanitize\@tstidx@name
   \letcs{\@tstidx@text}{glo@\glsdetoklabel{\@glo@label}@text}%
   \@onelevel@sanitize\@tstidx@text
   \ifcsdef{glo@\glsdetoklabel{\@glo@label}@parent}%
   {\letcs\@tstidx@parent{glo@\glsdetoklabel{\@glo@label}@parent}}%
   {\def\@tstidx@parent{}}%
   \PackageInfo{testidx-glossaries}{new term label={\@glo@label},
    \MessageBreak
    name={\@tstidx@name},
    \MessageBreak
    sort={\@tstidx@sort},
    \MessageBreak
    text={\@tstidx@text}, 
    \MessageBreak
    parent={\@tstidx@parent},
    \MessageBreak
    see={\@glo@see}%
    \if@tstidx@hasseealsokey
      ,\MessageBreak
      seealso={\@glo@seealso}
    \fi
    \MessageBreak
    }%
 }
%    \end{macrocode}
%\end{macro}
%
%If verbose mode is on, write information if \TeX\ is used to sort
%the entries.
%\begin{macro}{\@glo@sortedinsert}
%    \begin{macrocode}
 \let\tstidx@org@glo@sortedinsert\@glo@sortedinsert
 \renewcommand{\@glo@sortedinsert}[2]{%
   \typeout{#2}%
   \tstidx@org@glo@sortedinsert{#1}{#2}%
 }
%    \end{macrocode}
%\end{macro}
%    \begin{macrocode}
\fi
%    \end{macrocode}
%Write a warning message when \TeX\ is about to sort the entries, so
%the user doesn't think the build process has hung. This is already
%implemented in later versions of \sty{glossaries}, so check for the
%command that issues the message.
%\begin{macro}{\@glo@sortentries}
%    \begin{macrocode}
\ifdef\glosortentrieswarning
{}
{%
  \let\tstidx@org@glo@sortentries\@glo@sortentries
  \renewcommand{\@glo@sortentries}[2]{%
    \typeout{Using TeX to sort entries---this may take a while}%
    \tstidx@org@glo@sortentries{#1}{#2}%
  }
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidx@usemakegloss}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\@tstidx@usemakegloss}{\tstidx@usemakegloss}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxtoidx}
%\changes{1.1}{2017-08-11}{new}
%Restore original indexing definitions.
%    \begin{macrocode}
\newcommand*{\tstidxtoidx}{%
 \renewcommand*{\@tstidx@usemakegloss}{}%
 \let\@tstindex\@tstidx@org@index
 \let\@tstidxwordpl\@tstidx@org@wordpl
 \let\@tstidxphrasepl\@tstidx@org@phrasepl
 \let\@tstidxcs\@tstidx@org@cs
 \let\@tstindexpost\@tstidx@org@indexpost
 \let\@tstindexopenpost\@tstidx@org@indexopenpost
 \let\@tstindexclosepost\@tstidx@org@indexclosepost
 \let\@tstindexpre\@tstidx@org@indexpre
 \let\@tstindexopenpre\@tstidx@org@indexopenpre
 \let\@tstindexclosepre\@tstidx@org@indexclosepre
 \let\@tstindexsee\@tstidx@org@indexsee
 \let\@tstidx@indexsubsee\@tstidx@org@indexsubsee
 \let\@tstidx@subindexpost\@tstidx@org@subindexpost
 \let\@tstidx@subindexopenpost\@tstidx@org@subindexopenpost
 \let\@tstidx@subindexclosepost\@tstidx@org@subindexclosepost
 \let\@tstidx@subindexpre\@tstidx@org@subindexpre
 \let\@tstidx@subindexopenpre\@tstidx@org@subindexopenpre
 \let\@tstidx@subindexclosepre\@tstidx@org@subindexclosepre
 \let\@@tstidx@subsubindexpost\@tstidx@org@subsubindexpost
 \let\@@tstidx@subsubindexopenpost\@tstidx@org@subsubindexopenpost
 \let\@@tstidx@subsubindexclosepost\@tstidx@org@subsubindexclosepost
 \let\@@tstidx@subsubindexpre\@tstidx@org@subsubindexpre
 \let\@@tstidx@subsubindexopenpre\@tstidx@org@subsubindexopenpre
 \let\@@tstidx@subsubindexclosepre\@tstidx@org@subsubindexclosepre
 \let\@tidx@par@i\@tidx@org@par@i
 \let\@tidx@par@ii\@tidx@org@par@ii
 \let\@tidx@par@iii\@tidx@org@par@iii
 \let\@tidx@par@iv\@tidx@org@par@iv
 \let\@tidx@par@vi\@tidx@org@par@vi
 \let\@tidx@mathslettergroup\@tidx@org@mathslettergroup
 \let\@tidx@numberlettergroup\@tidx@org@numberlettergroup
 \let\@tidx@scriptnote\@tidx@org@scriptnote
 \let\@tidx@sanitizenote\@tidx@org@sanitizenote
 \let\@tidx@stripaccentsnote\@tidx@org@stripaccentsnote
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxtogls}
%\changes{1.1}{2017-08-11}{new}
%Switch on glossary definitions.
%    \begin{macrocode}
\newcommand*{\tstidxtogls}{%
 \renewcommand*{\@tstidx@usemakegloss}{\tstidx@usemakegloss}%
 \let\@tstindex\@tstidx@org@index
 \let\@tstidxwordpl\@tstidx@gls@wordpl
 \let\@tstidxphrasepl\@tstidx@gls@phrasepl
 \let\@tstidxcs\@tstidx@gls@cs
 \let\@tstindexpost\@tstidx@gls@indexpost
 \let\@tstindexopenpost\@tstidx@gls@indexopenpost
 \let\@tstindexclosepost\@tstidx@gls@indexclosepost
 \let\@tstindexpre\@tstidx@gls@indexpre
 \let\@tstindexopenpre\@tstidx@gls@indexopenpre
 \let\@tstindexclosepre\@tstidx@gls@indexclosepre
 \let\@tstindexsee\@tstidx@gls@indexsee
 \let\@tstidx@indexsubsee\@tstidx@gls@indexsubsee
 \let\@tstidx@subindexpost\@tstidx@gls@subindexpost
 \let\@tstidx@subindexopenpost\@tstidx@gls@subindexopenpost
 \let\@tstidx@subindexclosepost\@tstidx@gls@subindexclosepost
 \let\@tstidx@subindexpre\@tstidx@gls@subindexpre
 \let\@tstidx@subindexopenpre\@tstidx@gls@subindexopenpre
 \let\@tstidx@subindexclosepre\@tstidx@gls@subindexclosepre
 \let\@@tstidx@subsubindexpost\@tstidx@gls@subsubindexpost
 \let\@@tstidx@subsubindexopenpost\@tstidx@gls@subsubindexopenpost
 \let\@@tstidx@subsubindexclosepost\@tstidx@gls@subsubindexclosepost
 \let\@@tstidx@subsubindexpre\@tstidx@gls@subsubindexpre
 \let\@@tstidx@subsubindexopenpre\@tstidx@gls@subsubindexopenpre
 \let\@@tstidx@subsubindexclosepre\@tstidx@gls@subsubindexclosepre
 \let\@tidx@par@i\@tidx@gls@par@i
 \let\@tidx@par@ii\@tidx@gls@par@ii
 \let\@tidx@par@iii\@tidx@gls@par@iii
 \let\@tidx@par@iv\@tidx@gls@par@iv
 \let\@tidx@par@vi\@tidx@gls@par@vi
 \let\@tidx@mathslettergroup\@tidx@gls@mathslettergroup
 \let\@tidx@numberlettergroup\@tidx@gls@numberlettergroup
 \let\@tidx@scriptnote\@tidx@gls@scriptnote
 \let\@tidx@sanitizenote\@tidx@gls@sanitizenote
 \let\@tidx@stripaccentsnote\@tidx@gls@stripaccentsnote
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\testidx}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\renewcommand*{\testidx}{%
  \@tstidx@usemakegloss
  \@ifstar
  {%
    \def\@testidx@block@sep{\space}%
    \@testidx
  }%
  {%
    \def\@testidx@block@sep{\tstidxdefblocksep}%
    \@testidx
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxglyphfile}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\iftestidxdiglyphs
  \newcommand*{\tstidxglyphfile}{testidx-glossaries-diglyphs}
\else
  \newcommand*{\tstidxglyphfile}{testidx-glossaries-nodiglyphs}
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewentry}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewentry}\marg{label}\marg{category}\marg{key=value list}
%\end{definition}
%Defines a new entry. If the \sty{glossaries-extra} package has been
%loaded, also set the category.
%    \begin{macrocode}
\@ifpackageloaded{glossaries-extra}
{
  \newcommand*{\tstidxnewentry}[3]{\newglossaryentry{#1}{category={#2},#3}}
}
{
  \newcommand*{\tstidxnewentry}[3]{\newglossaryentry{#1}{#3}}
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Indexing Command Modifications}
%
%Modify commands that index, so that they use the defined entries
%instead.
%
%\begin{macro}{\@tstindex}
%\changes{1.1}{2017-08-11}{new}
%Do nothing
%    \begin{macrocode}
\newcommand*{\@tstidx@gls@index}[1]{}
\let\@tstidx@org@index\@tstindex
\let\@tstindex\@tstidx@gls@index
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxwordpl}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\@tstidx@gls@wordpl}[2]{%
 {\def\tstidx@gls{\glspl}\def\tstidx@glsentry{\glsentryplural}%
  \tstidxword[#1]{#2}%
 }%
}
\let\@tstidx@org@wordpl\@tstidxwordpl
\let\@tstidxwordpl\@tstidx@gls@wordpl
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxphrasepl}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\@tstidx@gls@phrasepl}[2]{%
 {\def\tstidx@gls{\glspl}\def\tstidx@glsentry{\glsentryplural}%
  \tstidxphrase[#1]{#2}%
 }%
}
\let\@tstidx@org@phrasepl\@tstidxphrasepl
\let\@tstidxphrasepl\@tstidx@gls@phrasepl
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxcs}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\@tstidx@gls@cs}[2]{%
 \tstidxfmtpost{cs.#2}{\tstidxcsfmt}{#1}%
}
\let\@tstidx@org@cs\@tstidxcs
\let\@tstidxcs\@tstidx@gls@cs
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@gls}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@gls}{\gls}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@glsentry}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@glsentry}{\glsentrytext}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@label}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@label}{\glslabel}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@encap}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@encap}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@range}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@range}{}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@openrange}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@openrange}{(}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@closerange}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@closerange}{)}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@levelmarker}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@levelmarker}[4]{%
  \ifcsdef{glo@#1@level}%
  {%
    \ifcase\csname glo@#1@level\endcsname
     #2\or#3\else#4%
    \fi
  }%
  {%
    #2%
  }%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@post@glstextformat}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@post@glstextformat}[1]{%
 \ifx\@tstidx@encap\@empty
  \iftestidxshowmarks
    \ifx\@tstidx@range\tstidx@openrange
      \tstidxtext{#1%
        \tstidx@levelmarker\@tstidx@label
         \tstidxopenmarker
         \tstidxopensubmarker
         \tstidxopensubsubmarker
      }%
    \else
      \ifx\@tstidx@range\tstidx@closerange
        \tstidxtext{#1%
          \tstidx@levelmarker\@tstidx@label
           \tstidxclosemarker
           \tstidxclosesubmarker
           \tstidxclosesubsubmarker
        }%
      \else
        \tstidxtext{#1%
          \tstidx@levelmarker\@tstidx@label
           \tstidxmarker
           \tstidxsubmarker
           \tstidxsubsubmarker
        }%
      \fi
    \fi
  \else
    #1%
  \fi
 \else
   \iftestidxshowmarks
     \tstidxtext{\tstidxencaptext{\@tstidx@encap}{#1%
      \tstidx@levelmarker\@tstidx@label
       \tstidxmarker
       \tstidxsubmarker
       \tstidxsubsubmarker
     }}%
   \else
     #1%
   \fi
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@pre@glstextformat}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@pre@glstextformat}[1]{%
 \ifx\@tstidx@encap\@empty
  \iftestidxshowmarks
    \ifx\@tstidx@range\tstidx@openrange
      \tstidxtext{%
        \tstidx@levelmarker\@tstidx@label
         \tstidxopenmarker
         \tstidxopensubmarker
         \tstidxopensubsubmarker
        #1}%
    \else
      \ifx\@tstidx@range\tstidx@closerange
        \tstidxtext{%
          \tstidx@levelmarker\@tstidx@label
           \tstidxclosemarker
           \tstidxclosesubmarker
           \tstidxclosesubsubmarker
        #1}%
      \else
        \tstidxtext{%
          \tstidx@levelmarker\@tstidx@label
           \tstidxmarker
           \tstidxsubmarker
           \tstidxsubsubmarker
         #1}%
      \fi
    \fi
  \else
    #1%
  \fi
 \else
  \iftestidxshowmarks
    \tstidxtext{\tstidxencaptext{\@tstidx@encap}{%
      \tstidx@levelmarker\@tstidx@label
       \tstidxmarker
       \tstidxsubmarker
       \tstidxsubsubmarker
    #1}}%
  \else
    #1%
  \fi
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tstidx@zapnonlabel}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\@tstidx@zapnonlabel}[2]{%
 \ifx,#1\@empty\else\ifx'#1\@empty\else\ifx-#1\@empty\else#1\fi\fi\fi
 \ifx#2\@empty
 \else
  \expandafter\@tstidx@zapnonlabel
 \fi
 #2}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@getlabel}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@getlabel}[1]{\@tstidx@zapnonlabel#1\@empty\@empty}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@glspreindex}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@glspreindex}[2][]{%
  \glshyperlink[\glstextformat{}]{#2}\glsadd[#1]{#2}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@glspostindex}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidx@glspostindex}[2][]{%
 \glsadd[#1]{#2}\glshyperlink[\glstextformat{}]{#2}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexpost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexpost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{}%
%    \end{macrocode}
%Commands like \cs{gls} and \cs{glslink} put the indexing before the
%text, so we need to do the display text and then use \cs{glsadd}.
%Unless we have \sty{glossaries-extra} v1.14+, in which case this is
%done automatically through the \texttt{wrgloss} setting.
%    \begin{macrocode}
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \ifx\@tstidx@encap\@empty
     \tstidx@glspostindex{\@tstidx@label}%
    \else
     \tstidx@glspostindex[format={#4}]{\@tstidx@label}%
    \fi
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \ifx\@tstidx@encap\@empty
       \glsadd{\@tstidx@label}%
      \else
       \glsadd[format={#4}]{\@tstidx@label}%
      \fi
    }%
    {%
      \ifx\@tstidx@encap\@empty
       \tstidx@gls[wrgloss=after]{\@tstidx@label}%
      \else
       \tstidx@gls[wrgloss=after,format={#4}]{\@tstidx@label}%
      \fi
    }%
  \fi
  \egroup
}
\let\@tstidx@org@indexpost\@tstindexpost
\let\@tstindexpost\@tstidx@gls@indexpost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexopenpost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexopenpost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{(}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspostindex[format={(#4}]{\@tstidx@label}%
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \glsadd[format={(#4}]{\@tstidx@label}%
    }%
    {%
      \tstidx@gls[wrgloss=after,format={(#4}]{\@tstidx@label}%
    }%
  \fi
  \egroup
}
\let\@tstidx@org@indexopenpost\@tstindexopenpost
\let\@tstindexopenpost\@tstidx@gls@indexopenpost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexclosepost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexclosepost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{)}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspostindex[format={)#4}]{\@tstidx@label}%
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \glsadd[format={)#4}]{\@tstidx@label}%
    }%
    {%
      \tstidx@gls[wrgloss=after,format={)#4}]{\@tstidx@label}%
    }%
  \fi
  \egroup
}
\let\@tstidx@org@indexclosepost\@tstindexclosepost
\let\@tstindexclosepost\@tstidx@gls@indexclosepost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexpre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexpre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \ifx\@tstidx@encap\@empty
     \tstidx@glspreindex{\@tstidx@label}%
    \else
     \tstidx@glspreindex[format={#4}]{\@tstidx@label}%
    \fi
  \else
    \ifx\@tstidx@encap\@empty
     \tstidx@gls{\@tstidx@label}%
    \else
     \tstidx@gls[format={#4}]{\@tstidx@label}%
    \fi
  \fi
  \egroup
}
\let\@tstidx@org@indexpre\@tstindexpre
\let\@tstindexpre\@tstidx@gls@indexpre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexopenpre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexopenpre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{(}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspreindex[format={(#4}]{\@tstidx@label}%
  \else
    \tstidx@gls[format={(#4}]{\@tstidx@label}%
  \fi
  \egroup
}
\let\@tstidx@org@indexopenpre\@tstindexopenpre
\let\@tstindexopenpre\@tstidx@gls@indexopenpre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexclosepre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexclosepre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{)}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspreindex[format={)#4}]{\@tstidx@label}%
  \else
    \tstidx@gls[format={)#4}]{\@tstidx@label}%
  \fi
  \egroup
}
\let\@tstidx@org@indexclosepre\@tstindexclosepre
\let\@tstindexclosepre\@tstidx@gls@indexclosepre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\seealsoname}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\providecommand*\seealsoname{see also}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\seename}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\providecommand*\seename{see}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidx@seealso}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*\tstidx@seealso{seealso}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexsee}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexsee#1#2#3#4[#5]#6{%
  \if@tstidx@useglsseekey
  \else
    \bgroup
    \edef\@tstidx@label{\tstidx@getlabel{#3}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#1}}%
      \ifx\@tstidx@label\@empty
        \edef\@tstidx@label{\tstidx@getlabel{#2}}%
      \fi
    \fi
    \ifx\relax#5\relax
      \def\@tstidx@xrlabel{}%
      \def\@tstidx@xrlabel@sep{}%
      \@for\@tst@idxthis:=#6\do{%
        \edef\@tstidx@xrlabel{\@tstidx@xrlabel\@tstidx@xrlabel@sep
          \expandafter\tstidx@getlabel\expandafter{\@tst@idxthis}}%
        \def\@tstidx@xrlabel@sep{,}%
      }%
    \else
      \def\@tstidx@xrlabel{#5}%
    \fi
    \edef\@tstidx@seetag{#4}%
    \ifx\@tstidx@seetag\tstidx@seealso
     \if@tstidx@hasseealsokey
       \expandafter\glsxtrindexseealso\expandafter\@tstidx@label\expandafter
         {\@tstidx@xrlabel}%
     \else
       \expandafter\glssee\expandafter[\expandafter\seealsoname
         \expandafter]\expandafter\@tstidx@label\expandafter{\@tstidx@xrlabel}%
     \fi
    \else
     \expandafter\glssee\expandafter\@tstidx@label\expandafter
       {\@tstidx@xrlabel}%
    \fi
    \iftestidxshowmarks
      \ifx\relax#5\relax
       \tstidxseeref{#2}{tst#4ref}{#6}%
      \else
       \tstidxseeref{#2}{tst#4ref}{#5}%
      \fi
    \fi
    \egroup
  \fi
}
\let\@tstidx@org@indexsee\@tstindexsee
\let\@tstindexsee\@tstidx@gls@indexsee
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexpost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subindexpost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
        .\@tstidx@label}%
    \else
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
        .\@tstidx@label}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \ifx\@tstidx@encap\@empty
     \tstidx@glspostindex{\@tstidx@label}%
    \else
     \tstidx@glspostindex[format={#4}]{\@tstidx@label}%
    \fi
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \ifx\@tstidx@encap\@empty
       \glsadd{\@tstidx@label}%
      \else
       \glsadd[format={#4}]{\@tstidx@label}%
      \fi
    }%
    {%
      \ifx\@tstidx@encap\@empty
       \tstidx@gls[wrgloss=after]{\@tstidx@label}%
      \else
       \tstidx@gls[wrgloss=after,format={#4}]{\@tstidx@label}%
      \fi
    }%
  \fi
  \egroup
}
\let\@tstidx@org@subindexpost\@tstidx@subindexpost
\let\@tstidx@subindexpost\@tstidx@gls@subindexpost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexopenpost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subindexopenpost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
        .\@tstidx@label}%
    \else
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
        .\@tstidx@label}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{(}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspostindex[format={(#4}]{\@tstidx@label}%
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \glsadd[format={(#4}]{\@tstidx@label}%
    }%
    {%
      \tstidx@gls[wrgloss=after,format={(#4}]{\@tstidx@label}%
    }%
  \fi
  \egroup
}
\let\@tstidx@org@subindexopenpost\@tstidx@subindexopenpost
\let\@tstidx@subindexopenpost\@tstidx@gls@subindexopenpost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexclosepost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subindexclosepost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
        .\@tstidx@label}%
    \else
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
        .\@tstidx@label}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{)}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspostindex[format={)#4}]{\@tstidx@label}%
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \glsadd[format={)#4}]{\@tstidx@label}%
    }%
    {%
     \tstidx@gls[wrgloss=after,format={)#4}]{\@tstidx@label}%
    }%
  \fi
  \egroup
}
\let\@tstidx@org@subindexclosepost\@tstidx@subindexclosepost
\let\@tstidx@subindexclosepost\@tstidx@gls@subindexclosepost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexpre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subindexpre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
        .\@tstidx@label}%
    \else
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
        .\@tstidx@label}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \ifx\@tstidx@encap\@empty
     \tstidx@glspreindex{\@tstidx@label}%
    \else
     \tstidx@glspreindex[format={#4}]{\@tstidx@label}%
    \fi
  \else
    \ifx\@tstidx@encap\@empty
     \tstidx@gls{\@tstidx@label}%
    \else
     \tstidx@gls[format={#4}]{\@tstidx@label}%
    \fi
  \fi
  \egroup
}
\let\@tstidx@org@subindexpre\@tstidx@subindexpre
\let\@tstidx@subindexpre\@tstidx@gls@subindexpre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexopenpre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subindexopenpre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
        .\@tstidx@label}%
    \else
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
        .\@tstidx@label}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{(}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
   \tstidx@glspreindex[format={(#4}]{\@tstidx@label}%
  \else
   \tstidx@gls[format={(#4}]{\@tstidx@label}%
  \fi
  \egroup
}
\let\@tstidx@org@subindexopenpre\@tstidx@subindexopenpre
\let\@tstidx@subindexopenpre\@tstidx@gls@subindexopenpre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubindexclosepre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subindexclosepre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
        .\@tstidx@label}%
    \else
      \edef\@tstidx@label{%
        \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
        .\@tstidx@label}%
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{)}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
   \tstidx@glspreindex[format={)#4}]{\@tstidx@label}%
  \else
   \tstidx@gls[format={)#4}]{\@tstidx@label}%
  \fi
  \egroup
}
\let\@tstidx@org@subindexclosepre\@tstidx@subindexclosepre
\let\@tstidx@subindexclosepre\@tstidx@gls@subindexclosepre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstindexsubsee}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@indexsubsee#1#2#3#4[#5]#6{%
  \if@tstidx@useglsseekey
  \else
    \bgroup
    \edef\@tstidx@label{\tstidx@getlabel{#3}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#1}}%
      \ifx\@tstidx@label\@empty
        \edef\@tstidx@label{\tstidx@getlabel{#2}}%
      \fi
    \fi
    \ifx\relax#5\relax
      \def\@tstidx@xrlabel{}%
      \def\@tstidx@xrlabel@sep{}%
      \@for\@tst@idxthis:=#6\do{%
        \edef\@tstidx@xrlabel{\@tstidx@xrlabel\@tstidx@xrlabel@sep
          \expandafter\tstidx@getlabel\expandafter{\@tst@idxthis}}%
        \def\@tstidx@xrlabel@sep{,}%
      }%
    \else
      \def\@tstidx@xrlabel{#5}%
    \fi
    \edef\@tstidx@seetag{#4}%
    \ifx\@tstidx@seetag\tstidx@seealso
     \if@tstidx@hasseealsokey
       \expandafter\glsxtrindexseealso\expandafter\@tstidx@label\expandafter
         {\@tstidx@xrlabel}%
     \else
       \expandafter\glssee\expandafter[\expandafter\seealsoname
         \expandafter]\expandafter\@tstidx@label\expandafter{\@tstidx@xrlabel}%
     \fi
    \else
     \expandafter\glssee\expandafter\@tstidx@label\expandafter
       {\@tstidx@xrlabel}%
    \fi
    \iftestidxshowmarks
      \protected@edef\tstidx@dosee{\noexpand\tstidxsubseeref
        {\@tstidx@term}{#2}{tst#4ref}{\@tstidx@xrlabel}}%
      \tstidx@dosee
    \fi
    \egroup
  \fi
}
\let\@tstidx@org@indexsubsee\@tstidx@indexsubsee
\let\@tstidx@indexsubsee\@tstidx@gls@indexsubsee
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexpost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subsubindexpost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \else
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \ifx\@tstidx@encap\@empty
     \tstidx@glspostindex{\@tstidx@label}%
    \else
     \tstidx@glspostindex[format={#4}]{\@tstidx@label}%
    \fi
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \ifx\@tstidx@encap\@empty
       \glsadd{\@tstidx@label}%
      \else
       \glsadd[format={#4}]{\@tstidx@label}%
      \fi
    }%
    {%
      \ifx\@tstidx@encap\@empty
       \tstidx@gls[wrgloss=after]{\@tstidx@label}%
      \else
       \tstidx@gls[wrgloss=after,format={#4}]{\@tstidx@label}%
      \fi
    }%
  \fi
  \egroup
}
\let\@tstidx@org@subsubindexpost\@@tstidx@subsubindexpost
\let\@@tstidx@subsubindexpost\@tstidx@gls@subsubindexpost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexopenpost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subsubindexopenpost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \else
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{(}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspostindex[format={(#4}]{\@tstidx@label}%
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \glsadd[format={(#4}]{\@tstidx@label}%
    }%
    {%
      \tstidx@gls[wrgloss=after,format={(#4}]{\@tstidx@label}%
    }%
  \fi
  \egroup
}
\let\@tstidx@org@subsubindexopenpost\@@tstidx@subsubindexopenpost
\let\@@tstidx@subsubindexopenpost\@tstidx@gls@subsubindexopenpost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexclosepost}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subsubindexclosepost#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \else
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{)}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@post@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \tstidx@glspostindex[format={)#4}]{\@tstidx@label}%
  \else
    \@ifundefined{glsxtrinitwrgloss}%
    {%
      \glshyperlink[\glstextformat{\tstidx@glsentry{\@tstidx@label}}]%
       {\@tstidx@label}%
      \glsadd[format={)#4}]{\@tstidx@label}%
    }%
    {%
     \tstidx@gls[wrgloss=after,format={)#4}]{\@tstidx@label}%
    }%
  \fi
  \egroup
}
\let\@tstidx@org@subsubindexclosepost\@@tstidx@subsubindexclosepost
\let\@@tstidx@subsubindexclosepost\@tstidx@gls@subsubindexclosepost
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexpre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subsubindexpre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \else
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
    \ifx\@tstidx@encap\@empty
     \tstidx@glspreindex{\@tstidx@label}%
    \else
     \tstidx@glspreindex[format={#4}]{\@tstidx@label}%
    \fi
  \else
    \ifx\@tstidx@encap\@empty
     \tstidx@gls{\@tstidx@label}%
    \else
     \tstidx@gls[format={#4}]{\@tstidx@label}%
    \fi
  \fi
  \egroup
}
\let\@tstidx@org@subsubindexpre\@@tstidx@subsubindexpre
\let\@@tstidx@subsubindexpre\@tstidx@gls@subsubindexpre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexopenpre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subsubindexopenpre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \else
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{(}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
   \tstidx@glspreindex[format={(#4}]{\@tstidx@label}%
  \else
   \tstidx@gls[format={(#4}]{\@tstidx@label}%
  \fi
  \egroup
}
\let\@tstidx@org@subsubindexopenpre\@@tstidx@subsubindexopenpre
\let\@@tstidx@subsubindexopenpre\@tstidx@gls@subsubindexopenpre
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstsubsubindexclosepre}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\def\@tstidx@gls@subsubindexclosepre#1#2[#3]#4#5{%
  \bgroup
  \edef\@tstidx@label{\tstidx@getlabel{#3}}%
  \ifx\@tstidx@label\@empty
    \edef\@tstidx@label{\tstidx@getlabel{#1}}%
    \ifx\@tstidx@label\@empty
      \edef\@tstidx@label{\tstidx@getlabel{#2}}%
    \fi
    \ifx\@tstidx@sort\empty
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@term}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \else
      \ifx\@tstidx@subsort\empty
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subterm}%
          .\@tstidx@label}%
      \else
        \edef\@tstidx@label{%
          \expandafter\tstidx@getlabel\expandafter{\@tstidx@sort}%
          .\expandafter\tstidx@getlabel\expandafter{\@tstidx@subsort}%
          .\@tstidx@label}%
      \fi
    \fi
  \fi
  \def\@tstidx@encap{#4}%
  \def\@tstidx@range{)}%
  \let\tstidx@org@glstextformat\glstextformat
  \renewcommand\glstextformat[1]{\tstidx@pre@glstextformat
    {\tstidx@org@glstextformat{##1}}}%
  \ifx\relax#5\relax
   \tstidx@glspreindex[format={)#4}]{\@tstidx@label}%
  \else
   \tstidx@gls[format={)#4}]{\@tstidx@label}%
  \fi
  \egroup
}
\let\@tstidx@org@subsubindexclosepre\@@tstidx@subsubindexclosepre
\let\@@tstidx@subsubindexclosepre\@tstidx@gls@subsubindexclosepre
%    \end{macrocode}
%\end{macro}
%
%\subsection{Entry Shortcut Definitions}
%
%Provide commands for defining entries (not used with
%\cs{GlsXtrLoadResources}).
%
%\begin{macro}{\tstidxnewutfentry}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewutfentry}\marg{label}\marg{ascii}\marg{utf8}\marg{name
%fmt}\marg{options}\marg{category}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfentry}[6]{%
  \@tstidx@ifutfviii
  {%
    \tstidxprocessutf{\@tstidx@utf}{#3}%
    \ifx\relax#4\relax
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{#1}{#6}%
        {name={#3},%
         sort={\unexpanded\expandafter{\@tstidx@utf}},%
        description={},#5}}%
    \else
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{#1}{#6}%
        {name={\noexpand#4{#3}},%
         sort={\unexpanded\expandafter{\@tstidx@utf}},%
        description={},#5}}%
    \fi
  }%
  {%
    \tstidxprocessasciisort{\@tstidx@asciisort}{#2}%
    \tstidxprocessasciisortstrip{\@tstidx@asciilabel}{#1}%
    \ifx\relax#4\relax
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{\@tstidx@asciilabel}{#6}%
        {name={#2},%
         sort={\unexpanded\expandafter{\@tstidx@asciisort}},%
        description={},#5}}%
    \else
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{\@tstidx@asciilabel}{#6}%
        {name={\noexpand#4{#2}},%
         sort={\unexpanded\expandafter{\@tstidx@asciisort}},%
        description={},#5}}%
    \fi
  }%
  \@tstidx@doidx
}
%    \end{macrocode}
%\end{macro}
%
%\begin{definition}
%\cs{tstidxnewutfentrytext}\marg{label}\marg{ascii name}\marg{ascii
%text}\marg{utf8 name}\marg{utf8 text}\marg{name
%fmt}\marg{options}\marg{category}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfentrytext}[8]{%
  \@tstidx@ifutfviii
  {%
    \tstidxprocessutf{\@tstidx@utf}{#4}%
    \ifx\relax#6\relax
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{#1}{#8}%
        {name={#4},%
         sort={\unexpanded\expandafter{\@tstidx@utf}},%
         text={#5},%
        description={},#7}}%
    \else
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{#1}{#8}%
        {name={#4},%
         text={\noexpand#6{#5}},%
         sort={\unexpanded\expandafter{\@tstidx@utf}},%
        description={},#7}}%
    \fi
  }%
  {%
    \tstidxprocessasciisort{\@tstidx@asciisort}{#2}%
    \ifx\relax#6\relax
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{#1}{#8}%
        {name={#2},%
         text={#3},%
         sort={\unexpanded\expandafter{\@tstidx@asciisort}},%
        description={},#7}}%
    \else
      \protected@edef\@tstidx@doidx{%
        \noexpand\tstidxnewentry{#1}{#8}%
        {name={\noexpand#6{#2}},%
         text={\noexpand#6{#3}},%
         sort={\unexpanded\expandafter{\@tstidx@asciisort}},%
        description={},#7}}%
    \fi
  }%
  \@tstidx@doidx
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewword}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewword}\oarg{options}\marg{word}\marg{description}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewword}[3][]{%
 \if@tstidx@setdescription
   \tstidxnewentry{\tstidx@getlabel{#2}}{word}{name={#2},description={#3},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2}}{word}{name={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewwordsee}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewwordsee}\oarg{options}\marg{word}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \newcommand*{\tstidxnewwordsee}[4][]{%
    \tstidxnewword[see={#4},#1]{#2}{#3}%
  }
\else
  \newcommand*{\tstidxnewwordsee}[4][]{%
    \tstidxnewword[#1]{#2}{#3}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewwordseealso}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewwordseealso}\oarg{options}\marg{word}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \if@tstidx@hasseealsokey
    \newcommand*{\tstidxnewwordseealso}[4][]{%
      \tstidxnewword[seealso={#4},#1]{#2}{#3}%
    }
  \else
    \newcommand*{\tstidxnewwordseealso}[4][]{%
      \tstidxnewword[see={[\seealsoname]#4},#1]{#2}{#3}%
    }
  \fi
\else
  \newcommand*{\tstidxnewwordseealso}[4][]{%
    \tstidxnewword[#1]{#2}{#3}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewdigraph}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewdigraph}[3][]{%
 \if@tstidx@setdescription
   \tstidxnewentry{\tstidx@getlabel{#2}}{digraph}{name={#2},description={#3},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2}}{digraph}{name={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewtrigraph}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewtrigraph}[3][]{%
 \if@tstidx@setdescription
   \tstidxnewentry{\tstidx@getlabel{#2}}{trigraph}{name={#2},description={#3},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2}}{trigraph}{name={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewsubword}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewsubword}\oarg{options}\marg{parent}\marg{word}\marg{description}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewsubword}[4][]{%
 \if@tstidx@setdescription
   \tstidxnewentry{\tstidx@getlabel{#2.#3}}{word}%
   {parent={\tstidx@getlabel{#2}},name={#3},description={#4},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2.#3}}{word}%
   {parent={\tstidx@getlabel{#2}},name={#3},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewsubwordsee}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewsubwordsee}\oarg{options}\marg{parent}\marg{word}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \newcommand*{\tstidxnewsubwordsee}[5][]{%
    \tstidxnewsubword[see={#5},#1]{#2}{#3}{#4}%
  }
\else
  \newcommand*{\tstidxnewsubwordsee}[5][]{%
    \tstidxnewsubword[#1]{#2}{#3}{#4}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewsubwordseealso}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewsubwordseealso}\oarg{options}\marg{parent}\marg{word}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \if@tstidx@hasseealsokey
    \newcommand*{\tstidxnewsubwordseealso}[5][]{%
      \tstidxnewsubword[seealso={#5},#1]{#2}{#3}{#4}%
    }
  \else
    \newcommand*{\tstidxnewsubwordseealso}[5][]{%
      \tstidxnewsubword[see={[\seealsoname]#5},#1]{#2}{#3}{#4}%
    }
  \fi
\else
  \newcommand*{\tstidxnewsubwordseealso}[5][]{%
    \tstidxnewsubword[#1]{#2}{#3}{#4}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstidxcsfmt}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\renewcommand*{\tstidxcsfmt}[1]{\texttt{\glsbackslash#1}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewcs}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewcs}[3][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{cs.#2}}{cs}%
   {sort={#2},name={\tstidxcsfmt{#2}},description={#3},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{cs.#2}}{cs}%
   {sort={#2},name={\tstidxcsfmt{#2}},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewencapcsn}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewencapcsn}[3][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{#2}}{encapcsn}{sort={#2 (#2)},%
    name={\texttt{#2} (\tstidxcsfmt{#2})},
    text={\texttt{#2}},description={#3},#1}%
   \tstidxnewentry{\tstidx@getlabel{encap.#2}}{encapcsn}{sort={#2},%
    parent={\tstidx@getlabel{encap}},
    name={\texttt{#2}},description={#3}}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2}}{encapcsn}{sort={#2 (#2)},%
    name={\texttt{#2} (\tstidxcsfmt{#2})},
    text={\texttt{#2}},description={},#1}%
   \tstidxnewentry{\tstidx@getlabel{encap.#2}}{encapcsn}{sort={#2},%
    parent={\tstidx@getlabel{encap}},
    name={\texttt{#2}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewenv}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewenv}[3][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{#2environment}}%
   {environment}{sort={#2 environment},%
    name={\tstidxenvfmt{#2} environment},%
    text={\tstidxenvfmt{#2}},description={#3},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2environment}}%
   {environment}{sort={#2 environment},%
    name={\tstidxenvfmt{#2} environment},%
    text={\tstidxenvfmt{#2}},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxnewapp}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewapp}[3][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{#2}}{application}{sort={#2},%
    name={\tstidxappfmt{#2}},description={#3},#1}%
   \tstidxnewentry{applications.\tstidx@getlabel{#2}}{application}{sort={#2},%
    parent={applications},name={\tstidxappfmt{#2}},description={#3}}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2}}{application}{sort={#2},%
    name={\tstidxappfmt{#2}},description={},#1}%
   \tstidxnewentry{applications.\tstidx@getlabel{#2}}{application}{sort={#2},%
    parent={applications},name={\tstidxappfmt{#2}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewappopt}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewappopt}[4][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{#3.#2option}}{applicationoption}%
   {sort={#3 (#2)},%
    name={\tstidxappoptfmt{#3} (\tstidxappfmt{#2})},description={#4},#1}%
   \tstidxnewentry{\tstidx@getlabel{#2.#3}}{applicationoption}%
   {parent={#2},sort={#3},%
    name={\tstidxappoptfmt{#3}},description={#4},#1}%
   \tstidxnewentry{\tstidx@getlabel{applications.#2.#3}}%
   {applicationoption}{sort={#3},%
    parent={\tstidx@getlabel{applications.#2}},name={\tstidxappoptfmt{#3}},%
    description={#4}}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#3.#2option}}{applicationoption}%
   {sort={#3 (#2)},%
    name={\tstidxappoptfmt{#3} (\tstidxappfmt{#2})},description={},#1}%
   \tstidxnewentry{\tstidx@getlabel{#2.#3}}{applicationoption}%
   {parent={#2},sort={#3},%
    name={\tstidxappoptfmt{#3}},description={},#1}%
   \tstidxnewentry{\tstidx@getlabel{applications.#2.#3}}%
   {applicationoption}{sort={#3},%
    parent={\tstidx@getlabel{applications.#2}},name={\tstidxappoptfmt{#3}},%
    description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewsty}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewsty}[3][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{#2package}}{package}{sort={#2 package},%
    name={\tstidxstyfmt{#2} package},%
    text={\tstidxstyfmt{#2}},%
    description={#3},#1}%
   \tstidxnewentry{\tstidx@getlabel{packages.#2package}}{package}{sort={#2},%
    parent={packages},name={\tstidxstyfmt{#2}},%
    text={\tstidxstyfmt{#2}},description={#3}}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2package}}{package}{sort={#2 package},%
    name={\tstidxstyfmt{#2} package},%
    text={\tstidxstyfmt{#2}},%
    description={},#1}%
   \tstidxnewentry{\tstidx@getlabel{packages.#2package}}{package}{sort={#2},%
    parent={packages},name={\tstidxstyfmt{#2}},%
    text={\tstidxstyfmt{#2}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewstyseealso}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \if@tstidx@hasseealsokey
    \newcommand*{\tstidxnewstyseealso}[4][]{%
      \tstidxnewsty[seealso={#4},#1]{#2}{#3}%
    }
  \else
    \newcommand*{\tstidxnewstyseealso}[4][]{%
      \tstidxnewsty[see={[\seealsoname]#4},#1]{#2}{#3}%
    }
  \fi
\else
  \newcommand*{\tstidxnewstyseealso}[4][]{%
    \tstidxnewsty[#1]{#2}{#3}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewstyopt}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewstyopt}[4][]{%
 \if@tstidx@setdescription 
   \tstidxnewentry{\tstidx@getlabel{#2package.#3}}{packageoption}{sort={#3},%
    name={\tstidxstyoptfmt{#3}},%
    parent={\tstidx@getlabel{#2package}},%
    description={#4},#1}%
   \tstidxnewentry{\tstidx@getlabel{packages.#2package.#3}}{packageoption}%
   {sort={#3},%
    parent={\tstidx@getlabel{packages.#2package}},name={\tstidxstyoptfmt{#3}},%
    description={#4}}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2package.#3}}{packageoption}{sort={#3},%
    name={\tstidxstyoptfmt{#3}},%
    parent={\tstidx@getlabel{#2package}},%
    description={},#1}%
   \tstidxnewentry{\tstidx@getlabel{packages.#2package.#3}}{packageoption}%
   {sort={#3},%
    parent={\tstidx@getlabel{packages.#2package}},name={\tstidxstyoptfmt{#3}},%
    description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewnumber}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewnumber}[3][]{%
 \if@tstidx@setdescription 
  \tstidxnewentry{\tstidx@getlabel{#2}}{number}{name={#2},description={#3},#1}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#2}}{number}{name={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewphrase}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewphrase}\oarg{options}\marg{phrase}\marg{description}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewphrase}[3][]{%
 \if@tstidx@setdescription
   \tstidxnewentry{\tstidx@getlabel{#2}}{phrase}{name={#2},description={#3},#1}%
 \else
   \tstidxnewentry{\tstidx@getlabel{#2}}{phrase}{name={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewphrasesee}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewphrasesee}\oarg{options}\marg{phrase}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \newcommand*{\tstidxnewphrasesee}[4][]{%
    \tstidxnewphrase[see={#4},#1]{#2}{#3}%
  }
\else
  \newcommand*{\tstidxnewphrasesee}[4][]{%
    \tstidxnewphrase[#1]{#2}{#3}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewphraseseealso}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewphraseseealso}\oarg{options}\marg{phrase}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \if@tstidx@hasseealsokey
    \newcommand*{\tstidxnewphraseseealso}[4][]{%
      \tstidxnewphrase[seealso={#4},#1]{#2}{#3}%
    }
  \else
    \newcommand*{\tstidxnewphraseseealso}[4][]{%
      \tstidxnewphrase[see={[\seealsoname]#4},#1]{#2}{#3}%
    }
  \fi
\else
  \newcommand*{\tstidxnewphraseseealso}[4][]{%
    \tstidxnewphrase[#1]{#2}{#3}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstidxnewartphrase}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewartphrase}[4][]{%
 \if@tstidx@setdescription
 \tstidxnewentry{\tstidx@getlabel{#3}}{phrase}{name={#3, #2},
   text={#2 #3},description={#4},#1}%
 \else
 \tstidxnewentry{\tstidx@getlabel{#3}}{phrase}{name={#3, #2},
   text={#2 #3},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\tstidxnewsubphrase}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewsubphrase}[4][]{%
 \if@tstidx@setdescription
  \tstidxnewentry{\tstidx@getlabel{#2.#3}}{phrase}%
    {parent={\tstidx@getlabel{#2}},%
    name={#3},description={#4},#1}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#2.#3}}{phrase}%
    {parent={\tstidx@getlabel{#2}},%
    name={#3},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\tstidxnewperson}
%\changes{1.1}{2017-08-11}{new}
%Arguments: first name, surname.
%    \begin{macrocode}
\newcommand*{\tstidxnewperson}[4][]{%
  \tstidxnewutfperson[#1]{#2}{#3}{#2}{#3}{#4}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfperson}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewutfperson}\oarg{options}\marg{ascii first
%name}\marg{ascii surname}\oarg{label}\marg{utf first name}\marg{utf
%surname}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfperson}[3][]{%
  \@ifnextchar[{\@tstidxnewutfperson{#1}{#2}{#3}}%
  {\@tstidxnewutfperson{#1}{#2}{#3}[#2#3]}%
}
\def\@tstidxnewutfperson#1#2#3[#4]#5#6#7{%
 \if@tstidx@setdescription
  \tstidxnewutfentrytext{\tstidx@getlabel{#4}}{#3, #2}{#2 #3}{#6, #5}{#5 #6}%
   {}{description={#7},#1}{person}%
  \tstidxnewutfentrytext{\tstidx@getlabel{people.#4}}{#3, #2}{#2 #3}{#6, #5}%
  {#5 #6}{}{description={#7},parent={people}}{person}%
 \else
  \tstidxnewutfentrytext{\tstidx@getlabel{#4}}{#3, #2}{#2 #3}{#6, #5}{#5 #6}%
   {}{#1}{person}%
  \tstidxnewutfentrytext{\tstidx@getlabel{people.#4}}{#3, #2}{#2 #3}{#6, #5}%
  {#5 #6}{}{parent={people}}{person}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewsym}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewsym}[4][]{%
 \if@tstidx@setdescription 
  \tstidxnewentry{\tstidx@getlabel{#2}}{symbol}%
  {name={#3},sort={#2},description={#4},#1}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#2}}{symbol}%
  {name={#3},sort={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewindexmarker}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewindexmarker}[3][]{%
 \if@tstidx@setdescription 
  \toks@{description={#3},#1}%
 \else
  \toks@{description={},#1}%
 \fi
 \iftestidxprefix
   \protected@edef\@tstidx@dodef{%
    \noexpand\tstidxnewentry{\tstidx@getlabel{#2}}%
    {indexmarker}{%
     name={{}\noexpand\protect\expandonce{\csname#2\endcsname}\noexpand\space
      (\noexpand\tstidxcsfmt{#2})},%
     sort={\tstidxindexmarkerprefix#2},
     \the\toks@}}%
 \else
   \protected@edef\@tstidx@dodef{%
    \noexpand\tstidxnewentry{\tstidx@getlabel{#2}}%
    {indexmarker}{%
     name={{}\noexpand\protect\expandonce{\csname#2\endcsname}\noexpand\space
      (\noexpand\tstidxcsfmt{#2})},%
     sort={#2},
     \the\toks@}}%
 \fi
  \@tstidx@dodef
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewmath}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewmath}\oarg{options}\marg{sort}\oarg{label}\marg{text}\marg{description}
%\end{definition}
%    \begin{macrocode}
\newcommand*{\tstidxnewmath}[2][]{%
  \@ifnextchar[{\@tstidxnewmath{#1}{#2}}{\@tstidxnewmath{#1}{#2}[#2]}%
}
\def\@tstidxnewmath#1#2[#3]#4#5{%
 \if@tstidx@setdescription 
  \tstidxnewentry{\tstidx@getlabel{#3}}{math}%
  {name={$#4$},text={#4},sort={#2},description={#5},#1}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#3}}{math}%
  {name={$#4$},text={#4},sort={#2},description={},#1}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewmathsym}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewmathsym}[2][]{%
  \@ifnextchar[{\@tstidxnewmathsym{#1}{#2}}{\@tstidxnewmathsym{#1}{#2}[#2]}%
}
\def\@tstidxnewmathsym#1#2[#3]#4#5{%
 \iftestidxprefix
  \if@tstidx@setdescription 
    \toks@{name={$#4$},text={#4},description={#5},#1}%
  \else
    \toks@{name={$#4$},text={#4},#1}%
  \fi
  \protected@edef\@tstidx@dodef{%
   \noexpand\tstidxnewentry{\tstidx@getlabel{#3}}{mathsymbol}%
   {sort={\tstidxmathsymprefix#2},description={},\the\toks@}%
  }%
  \@tstidx@dodef
 \else
  \if@tstidx@setdescription 
    \tstidxnewentry{\tstidx@getlabel{#3}}{mathsymbol}{name={$#4$},%
    text={#4},sort={#2},description={#5},#1}%
  \else
    \tstidxnewentry{\tstidx@getlabel{#3}}{mathsymbol}{name={$#4$},%
    text={#4},sort={#2},description={},#1}%
  \fi
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfword}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfword}[5][]{%
 \if@tstidx@setdescription
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}{description={#5},#1}{word}%
 \else
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}{#1}{word}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfwordsee}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewutfwordsee}\oarg{options}\marg{label}\marg{ascii}\marg{utf}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \newcommand*{\tstidxnewutfwordsee}[6][]{%
    \tstidxnewutfword[see={#6},#1]{#2}{#3}{#4}{#5}%
  }
\else
  \newcommand*{\tstidxnewutfwordsee}[6][]{%
    \tstidxnewutfword[#1]{#2}{#3}{#4}{#5}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfwordseealso}
%\changes{1.1}{2017-08-11}{new}
%\begin{definition}
%\cs{tstidxnewutfwordseealso}\oarg{options}\marg{label}\marg{ascii}\marg{utf}\marg{description}\marg{xr-labels}
%\end{definition}
%    \begin{macrocode}
\if@tstidx@useglsseekey
  \if@tstidx@hasseealsokey
    \newcommand*{\tstidxnewutfwordseealso}[6][]{%
      \tstidxnewutfword[seealso={#6},#1]{#2}{#3}{#4}{#5}%
    }
  \else
    \newcommand*{\tstidxnewutfwordseealso}[6][]{%
      \tstidxnewutfword[see={[\seealsoname]#6},#1]{#2}{#3}{#4}{#5}%
    }
  \fi
\else
  \newcommand*{\tstidxnewutfwordseealso}[6][]{%
    \tstidxnewutfword[#1]{#2}{#3}{#4}{#5}%
  }
\fi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfdigraph}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfdigraph}[5][]{%
 \if@tstidx@setdescription
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}{description={#5},#1}{digraph}%
 \else
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}{#1}{digraph}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfphrase}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfphrase}[5][]{%
 \if@tstidx@setdescription
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}%
     {description={#5},#1}{phrase}%
 \else
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}{#1}{phrase}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewplace}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewplace}[3][]{%
 \tstidxnewutfplace[#1]{#2}{#2}{#2}{#3}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewutfplace}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewutfplace}[5][]{%
 \if@tstidx@setdescription
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}%
     {description={#5},#1}{place}%
   \tstidxnewutfentry{\tstidx@getlabel{places.#2}}{#3}{#4}{}%
     {description={#5},parent={places}}{place}%
 \else
   \tstidxnewutfentry{\tstidx@getlabel{#2}}{#3}{#4}{}{#1}{place}%
   \tstidxnewutfentry{\tstidx@getlabel{places.#2}}{#3}{#4}{}%
     {parent={places}}{place}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewartplace}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewartplace}[4][]{%
 \if@tstidx@setdescription
  \tstidxnewentry{\tstidx@getlabel{#3}}{place}{name={#3, #2},%
    text={#2 #3},description={#4},#1}%
  \tstidxnewentry{\tstidx@getlabel{places.#3}}{place}{%
    parent={places},name={#3, #2},%
    text={#2 #3},description={#4}}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#3}}{place}{name={#3, #2},%
    text={#2 #3},description={},#1}%
  \tstidxnewentry{\tstidx@getlabel{places.#3}}{place}{%
    parent={places},name={#3, #2},%
    text={#2 #3},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewbook}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewbook}[3][]{%
 \if@tstidx@setdescription
  \tstidxnewentry{\tstidx@getlabel{#2}}{book}{sort={#2},%
   name={\tstidxbookfmt{#2}},description={#3},#1}%
  \tstidxnewentry{\tstidx@getlabel{books.#2}}{book}{sort={#2},%
   parent={books},name={\tstidxbookfmt{#2}},description={#3}}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#2}}{book}{sort={#2},%
   name={\tstidxbookfmt{#2}},description={},#1}%
  \tstidxnewentry{\tstidx@getlabel{books.#2}}{book}{sort={#2},%
   parent={books},name={\tstidxbookfmt{#2}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewartbook}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewartbook}[4][]{%
 \if@tstidx@setdescription
  \tstidxnewentry{\tstidx@getlabel{#3}}{book}{%
   name={\tstidxbookfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxbookfmt{#2 #3}},description={#4},#1}%
  \tstidxnewentry{\tstidx@getlabel{books.#3}}{book}{%
   parent={books},
   name={\tstidxbookfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxbookfmt{#2 #3}},description={#4}}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#3}}{book}{%
   name={\tstidxbookfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxbookfmt{#2 #3}},description={},#1}%
  \tstidxnewentry{\tstidx@getlabel{books.#3}}{book}{%
   parent={books},
   name={\tstidxbookfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxbookfmt{#2 #3}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewfilm}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewfilm}[3][]{%
 \if@tstidx@setdescription
  \tstidxnewentry{\tstidx@getlabel{#2}}{film}{sort={#2},%
   name={\tstidxfilmfmt{#2}},description={#3},#1}%
  \tstidxnewentry{\tstidx@getlabel{films.#2}}{film}{sort={#2},%
   parent={films},name={\tstidxfilmfmt{#2}},description={#3}}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#2}}{film}{sort={#2},%
   name={\tstidxfilmfmt{#2}},description={},#1}%
  \tstidxnewentry{\tstidx@getlabel{films.#2}}{film}{sort={#2},%
   parent={films},name={\tstidxfilmfmt{#2}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\tstidxnewartfilm}
%\changes{1.1}{2017-08-11}{new}
%    \begin{macrocode}
\newcommand*{\tstidxnewartfilm}[4][]{%
 \if@tstidx@setdescription
  \tstidxnewentry{\tstidx@getlabel{#3}}{film}{%
   name={\tstidxfilmfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxfilmfmt{#2 #3}},description={#4},#1}%
  \tstidxnewentry{\tstidx@getlabel{films.#3}}{film}{%
   parent={films},
   name={\tstidxfilmfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxfilmfmt{#2 #3}},description={#4}}%
 \else
  \tstidxnewentry{\tstidx@getlabel{#3}}{film}{%
   name={\tstidxfilmfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxfilmfmt{#2 #3}},description={},#1}%
  \tstidxnewentry{\tstidx@getlabel{films.#3}}{film}{%
   parent={films},
   name={\tstidxfilmfmt{#3, #2}},
   sort={#3, #2},
   text={\tstidxfilmfmt{#2 #3}},description={}}%
 \fi
}
%    \end{macrocode}
%\end{macro}
%
%\subsection{Dummy Paragraph Redefinition}
%\begin{macro}{\@tidx@par@i}
%\changes{1.1}{2017-08-11}{new}
%Modify the first paragraph.
%    \begin{macrocode}
\newcommand*{\@tidx@gls@par@i}{%
 This is a~sample block of text designed to test indexing with 
 the \expandafter\tstidxsty\expandafter{\tstidx@glossariespkg} package. To test
 only \tstidxcs{index} and \tstidxenv{theindex} environment, just use
 \tstidxsty{testidx} instead of \tstidxsty{testidx-glossaries}.
 Alternatively, use \tstidxcs{tstidxtoidx} to switch back to the
 original \tstidxsty{testidx} behaviour.
 This sample text is provided to help test the
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapii]{layout}
 \else
  \tstidxword{layout}
 \fi
  of the
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapii]{index}
 \else
  \tstidxword{index}
 \fi
 (or
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapii]{glossary}%
 \else
  \tstidxword{glossary}%
 \fi
 ) and the
 \if@tstidx@use@encaps
   \tstidxphrasepl[tstidxencapii]{indexing application},
 \else
   \tstidxphrasepl{indexing application},
 \fi
 such as
 \tstidxapp{makeindex} or
 \tstidxapp{xindy}, that may be used with the 
 \expandafter\tstidxsty\expandafter{\tstidx@glossariespkg} package.
 This \tstidxword{example} text is just
 \tstidxword{filler} (produced using \tstidxcs{testidx} provided
 by the \tstidxopensty{testidx} package) to
 pad\tstindexsee{padding}{seealso}{filler} out
 the document with instances of \tstidxcs{index} interspersed throughout. 
 You can find out more
 information from the \tstidxsty{testidx} user manual, which
 can be accessed using the \tstidxapp{texdoc} application.
}
\let\@tidx@org@par@i\@tidx@par@i
\let\@tidx@par@i\@tidx@gls@par@i
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@ii}
%\changes{1.1}{2017-08-11}{new}
%Modify the second paragraph.
%    \begin{macrocode}
\newcommand*{\@tidx@gls@par@ii}{%
 The \tstidxsty{testidx-glossaries} package uses \tstidxcs{gls} (or
 \tstidxcs{glspl}) unless no text should be displayed when indexing
 occurs (in which case just \tstidxcs{glsadd} is used). This test package
 doesn't make any modifications to 
 \tstidxcs{gls} (or \tstidxcs{glspl}), but there are some minor changes to entry
 definitions and command use to allow this \tstidxphrase{dummy text} to test 
 various cases.  By default \tstidxcs{gls} performs the indexing before the 
 \tstidxphrase{link text} to prevent any unwanted interference caused by the
 \tstidxword{whatsit} introduced by the indexing.
 However, it's possible that you may want the indexing to occur
 after the \tstidxphrase{link text}, even though it creates 
 a~\tstidxword{whatsit}. This \tstidxphrase{dummy text} is designed to use 
 a mixture of pre- and post-indexing to investigate the results (particularly 
 with \tstidxwordpl{phrase} spanning a \tstidxphrase{page break}). 
 The \tstidxsty{glossaries-extra} package (as from 
 version 1.14) provides a~new key \tstidxqt{wrgloss} (for commands
 like \tstidxcs{gls}), which may take the values
 \tstidxqt{before} or \tstidxqt{after}. If this key is available,
 it will be used for the post-indexing \tstidxwordpl{example},
 otherwise the post-indexing will be performed manually using
 \tstidxcs{glsadd} after the \tstidxphrase{link text} (which is displayed using
 \tstidxcs{glshyperlink}). The \tstidxsty{testidx-glossaries} package
 just loads the base \tstidxsty{glossaries} package by default. Use
 the \tstidxstyopt{testidx-glossaries}{extra} package option to also
 load \tstidxsty{glossaries-extra}. The \tstidxphrase{visual effects} in this
 \tstidxphrase{dummy text} are provided to illustrate where the
 indexing occurs. The \tstidxsty{testidx-glossaries} package
 doesn't attempt to produce a well-designed index or glossary. Its
 \tstidxword{purpose} is to help you \tstidxword{test} your chosen
 \tstidxword{design}, which is easier to do with a
 relatively small test \tstidxword{document}, than with a large
 \tstidxword{book}. The \tstidxphrase{dummy text} is intended to produce an
 \tstidxword{index} that is at least three pages long to allow you
 to test the page headers and footers in a two-sided document.
 The \tstidxqt{mcolindexgroup} style is set by default (rather than
 the \tstidxqt{list} style) as that style more closely represents
 the style used in indexes.
 \if@tstidx@setdescription 
  However, since this document has used the 
  \tstidxstyopt{testidx-glossaries}{desc} option,
  the style is instead set to \tstidxqt{indexgroup}.
 \else
  If you use the \tstidxstyopt{testidx-glossaries}{desc} option,
  the style will instead be set to \tstidxqt{indexgroup}.
 \fi
 You can change the style using \tstidxcs{setglossarystyle}.
 By default the \tstidxqt{tree} styles (including
 \tstidxqt{mcolindexgroup}) display the name field in bold in the
 \tstidxword{glossary}. This is governed by the command
 \tstidxcs{glstreenamefmt}, which may be redefined as appropriate.
 You can hide the visual effects with the
 \tstidxstyopt{testidx}{hidemarks} package option.%
 \iftestidxshowmarks
 \else
  \space (It seems you already have this option set.
  Remove it or use \tstidxstyopt{testidx}{showmarks} to show them
  again.)%
 \fi
}
\let\@tidx@org@par@ii\@tidx@par@ii
\let\@tidx@par@ii\@tidx@gls@par@ii
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@par@iii}
%\changes{1.1}{2017-08-11}{new}
%Modify the third paragraph.
%    \begin{macrocode}
\newcommand*{\@tidx@gls@par@iii}{%
 The actual place where the indexing occurs in this
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{dummy text}
 \else
   \tstidxphrase{dummy text}
 \fi
 is marked with the symbol
 \tstidxindexmarker{tstidxmarker} if there is no \tstidxword{range}
or
 \tstidxphrase{cross-reference}. The
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapi]{word}
 \else
   \tstidxword{word}
 \fi
 or
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapii]{phrase}
 \else
   \tstidxword{phrase}
 \fi
 adjacent to this \tstidxword{marker} is
 the text being indexed.\tstidxfootnote{The indexing may
 occur before or after the \tstidxword{word} or \tstidxword{phrase}
 (\tstidxphrase{link text}) being indexed in this
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{dummy text},
 \else
   \tstidxphrase{dummy text},
 \fi
 but there's no
 space between the \tstidxword{marker} and the term being indexed.
 Incidentally, this \tstidxword{footnote} text was produced
 using the command \tstidxcs{tstidxfootnote}, which you can
 redefined as required. (It defaults to just \tstidxcs{footnote}.)}
 A sub-entry is indicated with the symbol
 \tstidxindexmarker{tstidxsubmarker} and a sub-sub-entry is
 indicated with the symbol \tstidxindexmarker{tstidxsubsubmarker}.
 If an \tstidxword{encap} value is provided, both the
 \if@tstidx@use@encaps
  \tstidxword[tstidxencapiii]{text}
 \else
  \tstidxword{text}
 \fi
 and the
 \if@tstidx@use@encaps
   \tstidxword[tstidxencapii]{marker}
 \else
   \tstidxword{marker}
 \fi
 are typeset in the \tstidxword{argument} of the corresponding
command.
 (The text occurring in the document is also typeset within the
argument of
 \tstidxcs{tstidxtext}. The default value is to use a dark grey, but
since the
 default values for the \tstidxword{predefined} encaps used in this
text all
 change the colour, the dark grey will only apply where the encap
hasn't
 been set.) There are three \tstidxword{encap} values used
throughout this
 \tstidxphrase{dummy text} (unless you've used the
 \tstidxstyopt{testidx}{notestencaps} package option):
 \if@tstidx@use@encaps
  \tstidxencapcsn[tstidxencapi]{tstidxencapi},
 \else
  \tstidxencapcsn{tstidxencapi},
 \fi
 \if@tstidx@use@encaps
   \tstidxencapcsn[tstidxencapii]{tstidxencapii}
 \else
   \tstidxencapcsn{tstidxencapii}
 \fi
 and
 \if@tstidx@use@encaps
   \tstidxencapcsn[tstidxencapiii]{tstidxencapiii}.
 \else
   \tstidxencapcsn{tstidxencapiii}.
 \fi
 (The default values use \tstidxcs{textcolor}, so you might want to
use the
 \tstidxstyopt{hyperref}{hidelinks} option
 if you want to use the \tstidxsty{hyperref} package.) 
 If you use the \tstidxstyopt{testidx-glossaries}{noseekey} package option, a
 cross-referenced entry (using \tstidxcs{glssee}\if@tstidx@hasseealsokey
  \ or \tstidxcs{glsxtrindexseealso}\fi) is identified
  using the \tstidxword{marker}  \tstidxindexmarker{tstidxseemarker}
 and the cross-referenced information is displayed as
 a \tstidxphrase{marginal note} by default, with the term being indexed
 followed by the \tstidxword{cross-reference}.
 For example,  
 \tstidxword{lyuk}\tstindexsee{lyuk}{seealso}{digraph} has
 the marker \tstidxmarker\ to show that the word \tstidxqt{lyuk} was
 indexed. If the 
\tstidxstyopt{testidx-glossaries}{noseekey} package option is set,
 this is followed by the marker \tstidxseemarker\ to show that 
 a cross-reference to \tstidxword{digraph} has also been indexed (with the details shown in 
 the margin).
 \if@tstidx@useglsseekey
   This document has used the \tstidxstyopt{testidx-glossaries}{seekey} package option, 
   which means that \tstidxcs{glssee}
   \if@tstidx@hasseealsokey
    and \tstidxcs{glsxtrindexseealso} aren't
   \else
    isn't 
   \fi
   used in the \tstidxphrase{dummy text}.
   Instead the \tstidxqt{see} 
   \if@tstidx@hasseealsokey
    and \tstidxqt{seealso} keys provided in the entry definition were
   \else
    key provided in the entry definition was 
   \fi
   used to perform the \tstidxword{cross-reference} at the time the entry was
   defined, and so no markers or marginal notes are displayed.
 \else
   This document has used the \tstidxstyopt{testidx-glossaries}{noseekey} package option. This option ignores the \tstidxqt{see} 
   \if@tstidx@hasseealsokey
    and \tstidxqt{seealso} keys
   \else
    key
   \fi
   within the entry definitions for testing purposes. If you use the 
   \tstidxstyopt{testidx-glossaries}{seekey} 
   package option instead, the \tstidxqt{see} 
   \if@tstidx@hasseealsokey
     and \tstidxqt{seealso} keys will
     be used when defining the entries with cross-references instead of
     using \tstidxcs{glssee} and \tstidxcs{glsxtrindexseealso}.
   \else
     key will be used when defining the entries with cross-references instead of
     using \tstidxcs{glssee}.
   \fi
   No markers will appear in that case as the
   cross-referencing will be performed when the entry is defined in
   the preamble.
 \fi
 A sub-level \tstidxword{cross-reference} is identified with the 
 \tstidxword{marker} \tstidxindexmarker{tstidxsubseemarker} and the 
 marginal note displays the main term followed by the sub-term (separated by the
 symbol \tstidxsubseesep).  The \tstidxword{marker} used for the start of
 a range is \tstidxindexmarker{tstidxopenmarker} and the
 \tstidxword{marker} used for the end of
 a range is \tstidxindexmarker{tstidxclosemarker}
 unless the entry is a sub-level, in which case the
 \tstidxword{marker} for the start of the range is
 \tstidxindexmarker{tstidxopensubmarker}
 and the \tstidxword{marker} used for the end of a range is
 \tstidxindexmarker{tstidxclosesubmarker}, or for a sub-sub-level
\tstidxindexmarker{tstidxopensubsubmarker} and
 \tstidxindexmarker{tstidxclosesubsubmarker}. There are no tests for
 any further sub-levels. Although \tstidxapp{xindy} allows more than
 three levels (\tstidxapp{makeindex} doesn't), it's somewhat
 \tstidxword{excessive} to go below a sub-sub-level.
 You'll have to add your own tests for anything deeper.
 Watch out for \tstidxsubword{sub-items}{lonely} sub-items.%
}

\let\@tidx@org@par@iii\@tidx@par@iii
\let\@tidx@par@iii\@tidx@gls@par@iii
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tidx@par@iv}
%\changes{1.1}{2017-08-11}{new}
%Modify the fourth paragraph.
%    \begin{macrocode}
\newcommand*{\@tidx@gls@par@iv}{%
 Here's an \tstidxword{example} of the start of a
\tstidxopenword{range} but
 remember that a range must also have an end, so make sure that
 \tstidxword{block}~\@tidx@closerangepar\ has been included in this
 \if@tstidx@use@encaps
   \tstidxphrase[tstidxencapiii]{dummy text},
 \else
   \tstidxphrase{dummy text},
 \fi
  which closes this
 \tstidxword{example}.
 When the \tstidxstyopt{testidx}{verbose} option is used with just
 \tstidxsty{testidx}, the indexing information 
 will show the \tstidxword{argument} being passed to
 \tstidxcs{tstindex} (which will cause \tstidxphrase{overfull lines}).
 Since the \tstidxsty{testidx-glossaries} package doesn't use
 \tstidxcs{tstindex}, the \tstidxstyopt{testidx-glossaries}{verbose} package 
  option will instead write information to the transcript file showing the
 label, name field, sort field, text field, parent field and see field for each
 entry as it's defined. (The parent and see fields may be empty).
 If the \tstidxstyopt{testidx-glossaries}{tex} package option is
 used, the sorting may take a long time (since \TeX\ is being used
 to sort the entries). In this case, the 
 \tstidxstyopt{testidx-glossaries}{verbose} package 
 option will also write information while it's sorting the entries,
 so that you know \TeX\ is still doing something and hasn't got stuck.
 This document has the 
 \iftestidxverbose
  \tstidxstyopt{testidx-glossaries}{verbose} package
 \else
  \tstidxstyopt{testidx-glossaries}{noverbose} package
 \fi
 option set.%
}
\let\@tidx@org@par@iv\@tidx@par@iv
\let\@tidx@par@iv\@tidx@gls@par@iv
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@tidx@par@vi}
%\changes{1.1}{2017-08-11}{new}
%Modify the sixth paragraph.
%    \begin{macrocode}
\newcommand*{\@tidx@gls@par@vi}{%
 On the subject of \tstidxapp{xindy}, if you want to use it with
 this \tstidxword{example} document, you'll need to add the
 \tstidxword{encap} values used in this \tstidxphrase{dummy text}
 as allowed attributes. (Don't forget you'll also need the
 \tstidxstyopt{testidx-glossaries}{xindy} package option when you
 load \tstidxsty{testidx-glossaries}.) With the \tstidxsty{glossaries} package,
 this means using \tstidxcs{GlsAddXdyAttribute} with the 
 encap name as the argument. For example
 \begin{flushleft}\ttfamily
 \string\GlsAddXdyAttribute\expandafter\@gobble\string\{tstidxencapi\expandafter\@gobble\string\}\endgraf
 \string\GlsAddXdyAttribute\expandafter\@gobble\string\{tstidxencapii\expandafter\@gobble\string\}\endgraf
 \string\GlsAddXdyAttribute\expandafter\@gobble\string\{tstidxencapiii\expandafter\@gobble\string\}
 \end{flushleft}
 This sets up allowed encap values and how they should be formatted.
 The ordering of the allowed \tstidxword{attributes} here gives the
 \tstidxencapcsn{tstidxencapi} encap precedence in the
 event of a \tstidxphrase{multiple encaps} clash, since it's the
 first one in the list.
 Check out the difference between using \tstidxapp{xindy} and
 \tstidxapp{makeindex} on this document. Also check the difference
 between using \tstidxapp{makeglossaries} and
 \tstidxapp{makeglossaries-lite} to build this document.
 The \tstidxsubword{location list}{page separator} is given by
 \tstidxcs{delimN}, and the 
 \tstidxsubword{location list}{range separator}%
 \tstindexsee{range separator}{see}{location list} is given by
 \tstidxcs{delimR}.
 On the subject of location lists, the word
 \tstidxword{passim} (meaning \tstidxqt{here and there}) is
 sometimes used to tidy up ragged lists. For example,
 the locations \tstidxqt{1, 3, 4, 6, 7} may look neater as
 \tstidxqt{1-7 passim}, which indicates references are scattered (here
 and there) throughout that range.
 The \tstidxapp{bib2gls} application may be used with the
 \tstidxsty{glossaries-extra} package instead of
 \tstidxapp{makeindex} or \tstidxapp{xindy}. Use the 
 \tstidxstyopt{testidx-glossaries}{bib2gls} package option to set up
 this dummy text to use it. Note that this option doesn't make use
 of the prefix commands \tstidxcs{tstidxindexmarkerprefix} or
 \tstidxcs{tstidxindexmathsymprefix}. The
 \tstidxstyopt{testidx}{prefix} package option will instead alter
 the way the bib files are loaded to produce a similar grouping.%
}
\let\@tidx@org@par@vi\@tidx@par@vi
\let\@tidx@par@vi\@tidx@gls@par@vi
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@sanitizenote}
%    \begin{macrocode}
\newcommand{\@tidx@gls@sanitizenote}{%
 \space You currently have the 
 \@tstidx@ifsanitize
 {\tstidxstyopt{testidx-glossaries}{sanitize} option on.
  This means that the words containing \tstidxword{UTF-8} characters will
  first be sanitized before being passed to \tstidxcs{tstindex}, which 
  will allow you to test how well the \tstidxphrase{indexing application} 
  sorts \tstidxword{UTF-8} characters. If you'd rather test how 
  \tstidxcs{index} writes these characters to the file read by the 
  indexing application, use the \tstidxstyopt{testidx-glossaries}{nosanitize}
  option instead. This may cause the \tstidxword{UTF-8} characters to be
  written in terms of \tstidxcs{IeC}.
 }%
 {\tstidxstyopt{testidx-glossaries}{nosanitize} option on.
  This means that the words containing \tstidxword{UTF-8} characters 
  may be written to the file processed by the 
  \tstidxphrase{indexing application} in terms of
  \tstidxcs{IeC}. This allows you to test how \tstidxcs{index} behaves. 
  If you'd rather test how the indexing application sorts
  \tstidxword{UTF-8} characters, use the
  \tstidxstyopt{testidx-glossaries}{sanitize}
  option instead, which will sanitize the \tstidxword{UTF-8} characters
  before passing them to \tstidxcs{tstindex}.
 }%
 The \tstidxstyopt{testidx-glossaries}{nosanitize} option doesn't
 have an effect when used with the 
 \tstidxstyopt{testidx-glossaries}{bib2gls} package option, since
 the sort value isn't written to an external file.%
}
\let\@tidx@org@sanitizenote\@tidx@sanitizenote
\let\@tidx@sanitizenote\@tidx@gls@sanitizenote
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@stripaccentsnote}
%    \begin{macrocode}
\newcommand{\@tidx@gls@stripaccentsnote}{%
 \space The \tstidxstyopt{testidx-glossaries}{stripaccents} package option will
  effectively do, for example,
  \texttt{sort=\char`\{elite\char`\}, 
  name=\char`\{\string\'elite\char`\}}
  whereas the
  \tstidxstyopt{testidx-glossaries}{nostripaccents} package option will
  effectively do, for example,
  \texttt{sort=\char`\{\string\'elite\char`\}, 
  name=\char`\{\string\'elite\char`\}}. These options have 
  no effect in UTF-8 mode.%
}
\let\@tidx@org@stripaccentsnote\@tidx@stripaccentsnote
\let\@tidx@stripaccentsnote\@tidx@gls@stripaccentsnote
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@scriptnote}
%    \begin{macrocode}
\newcommand*{\@tidx@gls@scriptnote}{%
  (Note how the subscripts and superscripts can be affected
  by material inserted between the symbol and the sub- and
  superscripts. With the \tstidxsty{glossaries} package, this can be
  avoided by using the final optional argument of commands like
  \tstidxcs{gls} to bring the scripts into the 
  \tstidxphrase{link text}, but not if the scripts also include
  \tstidxcs{gls}, as the superscript does here.)
}
\let\@tidx@org@scriptnote\@tidx@scriptnote
\let\@tidx@scriptnote\@tidx@gls@scriptnote
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@numberlettergroup}
%    \begin{macrocode}
\newcommand*{\@tidx@gls@numberlettergroup}{%
  If you're using \tstidxapp{xindy}, the \tstidxqt{glsnumbers}
  letter group (with the title \tstidxqt{\glsnumbersgroupname}) will 
  automatically be added to your \texttt{.xdy}
  file unless you switch off this feature with the
  \tstidxstyopt{testidx-glossaries}{noglsnumbers} package option.
}
\let\@tidx@org@numberlettergroup\@tidx@numberlettergroup
\let\@tidx@numberlettergroup\@tidx@gls@numberlettergroup
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\@tidx@mathslettergroup}
%    \begin{macrocode}
\newcommand*{\@tidx@gls@mathslettergroup}{%
 \@testidx@ifusebibgls
 {%
   Now I've been a bit fancy here and used multiple bib files
   to define the glossary entries. The maths symbols are defined in 
   their own separate bib file.
  \iftestidxprefix
  This document has used the \tstidxstyopt{testidx}{prefix} package
  option, which means that \tstidxcs{tstidxmakegloss} is defined to
  perform separate sorts for each resource block, which enables the
  maths symbols to appear in their own group.
  \else
  This document has used the \tstidxstyopt{testidx}{noprefix} package
  option, which means that \tstidxcs{tstidxmakegloss} is defined to
  sort the maths symbols together with the main entries. If you
  use the \tstidxstyopt{testidx}{prefix} package instead, the maths
  symbols will be sorted separately and placed in their own group.
  \fi
  If you haven't used \tstidxcs{tstidxmakegloss} then the above
  won't apply. If you don't use the
  \tstidxstyopt{testidx-glossaries}{bib2gls} package option, then
  the \tstidxstyopt{testidx}{prefix} package will instead insert
  \texttt{\tstidxmathsymprefix} in front of
  the sort key so I can get \tstidxapp{xindy} to create a special
  group for the maths symbols.  Here's
 }%
 {%
 \iftestidxprefix
  Now I've been a bit fancy here and inserted
  \texttt{\tstidxmathsymprefix} in front of
  the sort key so I can get \tstidxapp{xindy} to create a special
  group for the maths symbols.  Here's
 \else
  This document has used the \tstidxstyopt{testidx}{noprefix}
  package option, which has switched of the sort prefixes.
  If you use the \tstidxstyopt{testidx}{prefix} option I can be a
  bit fancy here and insert
  \texttt{\tstidxmathsymprefix} in front of
  the sort key so I can get \tstidxapp{xindy} to create a special
  group for the maths symbols.  When you switch on the prefixes here's
 \fi
 }%
the code you can add to your document to implement it:
\begin{flushleft}\ttfamily
\string\GlsAddLetterGroup\glsopenbrace Maths\glsclosebrace\glsopenbrace
   \string:prefixes (\string"\tstidxmathsymprefix\string")
   \string:before \string"glsnumbers\string"\glsclosebrace
\end{flushleft}
}
\let\@tidx@org@mathslettergroup\@tidx@mathslettergroup
\let\@tidx@mathslettergroup\@tidx@gls@mathslettergroup
%    \end{macrocode}
%\end{macro}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries.sty>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-diglyphs.tex>
%    \end{macrocode}
%\fi
%This file contains the definitions of words containing glyphs
%representing the digraphs ll, ij and dz.
%    \begin{macrocode}
\tstidxnewutfdigraph{ll}{ll}{ỻ}{a \glshyperlink{digraph} used in
a number of languages. In Welsh, LL is considered a separate letter
from L and may be rendered as a ligature Ỻ}
\tstidxnewutfdigraph{ij}{ij}{ij}{a \glshyperlink{digraph} used in Dutch that's sometimes
considered
a separate letter from I and may be rendered as the ligature IJ}
\tstidxnewutfdigraph{dz}{dz}{dz}{a \glshyperlink{digraph} used in
a number of languages. In Hungarian, Dz is considered a separate
letter
from D and may be rendered as the ligature Dz}
\tstidxnewutfword{llan}{llan}{ỻan}{commonly used placename element in Brittonic
languages (such as Welsh) typically indicating parish church}
\tstidxnewutfword{llama}{llama}{ỻama}{domesticate animal found in the Andes}
\tstidxnewutfword{lijnbus}{lijnbus}{lijnbus}{bus (Dutch)}
\tstidxnewutfword{ijsvrij}{ijsvrij}{ijsvrij}{frost (Dutch)}
\tstidxnewutfword{dzwon}{dzwon}{dzwon}{bell (Polish)}
\tstidxnewutfword{dzeta}{dz\'eta}{dzéta}{the Greek letter zeta
(Hungarian)}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-diglyphs.tex>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-nodiglyphs.tex>
%    \end{macrocode}
%\fi
%This file contains the definitions of words containing 
%the digraphs ll, ij and dz.
%    \begin{macrocode}
\tstidxnewdigraph{ll}{a \glshyperlink{digraph} used in
a number of languages. In Welsh, LL is considered a separate letter
from L and may be rendered as a ligature}
\tstidxnewdigraph{ij}{a \glshyperlink{digraph} used in Dutch that's sometimes considered
a separate letter from I and may be rendered as a ligature}
\tstidxnewdigraph{dz}{a \glshyperlink{digraph} used in
a number of languages. In Hungarian, Dz is considered a separate
letter
from D and may be rendered as a ligature}
\tstidxnewword{llan}{commonly used placename element in Brittonic
languages (such as Welsh) typically indicating parish church}
\tstidxnewword{llama}{domesticate animal found in the Andes}
\tstidxnewword{lijnbus}{bus (Dutch)}
\tstidxnewword{ijsvrij}{frost (Dutch)}
\tstidxnewword{dzwon}{bell (Polish)}

\tstidxnewutfword{dzeta}{dz\'eta}{dzéta}{the Greek letter zeta
(Hungarian)}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-nodiglyphs.tex>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-samples.tex>
%    \end{macrocode}
%\fi
%This file contains the definitions of all the terms except for
%those containing the digraphs ll, ij and dz. There are a few terms
%that aren't actually used in the modified dummy text produced with
%\sty{testidx-glossaries}, but are provided to compare indexed with
%non-indexed entries. First the terms that
%have sub-items need to be defined:
%    \begin{macrocode}
\tstidxnewword{packages}{files provided to adjust the document
design or provide new commands}
\tstidxnewword{books}{written or printed works}
\tstidxnewword{films}{stories recorded by camera}
\tstidxnewword{people}{human individuals (or fictional
anthropomorphisms)}
\tstidxnewword{places}{particular areas or locations}
\tstidxnewword{sub-items}{items that have a parent entry}
\tstidxnewword{applications}{computer programs}
\tstidxnewword{environments}{a marked-up block within the document
that requires special action or formatting}
\tstidxnewword{attributes}{qualities or features that characterise
something}
%    \end{macrocode}
% Now define words.
%    \begin{macrocode}
\tstidxnewword{parse}{divide a sentence into its component parts for
analysis}
\tstidxnewword{interpret}{translate or explain the meaning of}
\tstidxnewword{oak}{large tree that produces acorns}
\tstidxnewword{daft}{silly or foolish}
\tstidxnewword{rhubarb}{thick reddish or green leaf stalks
of a plant from the dock family}
\tstidxnewword{rhinoceros}{a large plant-eating mammal
with one or two horns on its nose}
\tstidxnewword{aardvark}{an African mammal}
\tstidxnewword{check}{make sure something is the case}
\tstidxnewword{chalk}{soft limestone substance made into sticks to
use for writing}
\tstidxnewword{index}{an alphabetical list of names, terms or
subjects with references to where they occur in the document}
\tstidxnewword{phrase}{group of words forming a unit}
\tstidxnewword{glossary}{an alphabetical list of words with
explanations}
\tstidxnewword{layout}{the way something is laid out (for example,
on a page)}
\tstidxnewword{filler}{something used to fill in gaps or increase bulk}
\tstidxnewwordseealso{padding}{something used
to pad out material to make it longer}{filler}
\tstidxnewword{example}{thing used to illustrate something}
\tstidxnewword{purpose}{the reason for doing something}
\tstidxnewword{whatsit}{In \TeX\ terms, a mechanism to allow
extensions to \TeX, including writing to files or providing
special instructions to printing devices. More generally,
a whatsit is an unnamed person or thing}
\tstidxnewword{test}{a means of testing something}
\tstidxnewword{design}{plan or purpose}
\tstidxnewword{document}{a piece of written, printed or electronic
matter that provides information}
\tstidxnewword{book}{written or printed work}
\tstidxnewword{range}{area of variation or scope}
\tstidxnewword{word}{single unit of language which has meaning}
\tstidxnewword{marker}{an identifying symbol}
\tstidxnewword{footnote}{additional information written at the
bottom of a page}
\tstidxnewword{encap}{the format used to encapsulate the location}
\tstidxnewword{text}{written or printed or electronically
represented words}
\tstidxnewword{argument}{parameter passed to a command or
application}
\tstidxnewword{predefined}{already defined}
\tstidxnewword{excessive}{more than normal or desired}
\tstidxnewword{block}{large quantity of things viewed as a unit}
\tstidxnewword{paragraph}{block of writing, beginning on a new line}
\tstidxnewword{waffle}{speak or write vague or trivial information in a lengthy way}
\tstidxnewword{gibberish}{meaningless or hard to comprehend speech
or writing}
\tstidxnewwordsee{gobbledegook}{language that is
difficult to understand}{gibberish}
\tstidxnewword{clarify}{make it easier to understand}
\tstidxnewword{confidential}{private or secret information}
\tstidxnewword{roundabout}{not direct}
\tstidxnewword{fashion}{a way of doing something}
\tstidxnewwordseealso{illustration}{an example to explain something}{example}
\tstidxnewword{wit}{natural talent for saying or writing things in
an amusing or clever way}
\tstidxnewword{eloquence}{fluent or persuasive speech or writing}
\tstidxnewword{adage}{popular saying}
\tstidxnewword{motto}{short sentence of phrase expressing a belief
or aim}
\tstidxnewword{verbiage}{excessively length speech or writing}
\tstidxnewword{drivel}{nonsense}
\tstidxnewword{tutor}{teacher}
\tstidxnewword{grass}{in addition to the plant, also slang for
reporting criminal activity}
\tstidxnewword{distress}{cause anxiety}
\tstidxnewword{concordance}{an alphabetical list of important words
used in a document}
\tstidxnewword{ogling}{staring at someone in a lecherous manner}
\tstidxnewwordsee{gawping}{staring in a rude or stupid manner}{ogling}
\tstidxnewword{passim}{referencing various places in a document}
\tstidxnewword{localisation}{place or position}
\tstidxnewword{digraph}{two letters representing a single sound}
\tstidxnewword{trigraph}{three letters representing a single sound}
\tstidxnewwordseealso{lyuk}{hole (Hungarian)}{digraph}
\tstidxnewwordseealso{dzsungel}{jungle (Hungarian)}{trigraph}
\tstidxnewword{nonsense}{something that doesn't make sense}
\tstidxnewword{vol-au-vent}{small round puff pastry containing
savoury food}
\tstidxnewword{two}{number following one}
\tstidxnewword{sculpture}{artwork made of wood, metal or stone}
\tstidxnewword{Venus}{Roman goddess (or planet named after her)}
\tstidxnewword{zoo}{place containing animals}
\tstidxnewword{alphabet}{ordered set of letters used to form words}
\tstidxnewword{resume}{continue after an interruption}
\tstidxnewword{fly}{travel by air}
\tstidxnewword{aeroplane}{fixed wing flying vehicle}
\tstidxnewword{window}{opening in wall or window to view out or in}
\tstidxnewword{ogonek}{a diacritic hook placed under the lower right
corner of a vowel}
\tstidxnewword{sail}{travel by or navigate a boat}
\tstidxnewword{ship}{large boat}
\tstidxnewword{OT1}{one of the original font encodings provided with
\TeX}
\tstidxnewword{UTF-8}{character encoding that uses 8-bit code units}
\tstidxnewword{life}{existence}
\tstidxnewword{universe}{all existing space and matter}
\tstidxnewword{even}{multiple of two}
\tstidxnewword{century}{period of 100 years or a score of 100 runs}
\tstidxnewword{cricket}{bat and ball game played between two teams
with eleven players on either side}
\tstidxnewword{calendar}{chart or list showing a period of time}
\tstidxnewword{prefix}{word or letter placed at the start of another
word}
\tstidxnewword{gobsmacked}{astonished}
\tstidxnewword{astounded}{shocked or very surprised}
\tstidxnewword{quaint}{old-fashioned or unusual}
\tstidxnewword{yatter}{chatter or talk non-stop}
\tstidxnewword{yawn}{open one's mouth due to tiredness or boredom}
\tstidxnewword{quirky}{peculiar or unexpected habits}
\tstidxnewword{badinage}{witty conversation}
\tstidxnewword{expire}{come to an end}
\tstidxnewword{story}{account or description of imaginary or real
events}
\tstidxnewword{begin}{start something}
\tstidxnewword{forget}{fail to remember something}
\tstidxnewword{tale}{a story}
\tstidxnewword{adventure}{unusual or exciting or daring experience}
\tstidxnewword{derring-do}{heroic action}
\tstidxnewword{hero}{principle male character in a story or a person
admired for their achievements}
\tstidxnewword{title}{name of a document or work, or a name that
describes a position}
\tstidxnewword{knight}{a man raised to military rank after service
as a page or squire, or a man entitled to use \tstidxqt{Sir} before
his name}
\tstidxnewword{handsome}{good-looking}
\tstidxnewword{bold}{confident or brave}
\tstidxnewword{brave}{prepared to face danger or difficulties}
\tstidxnewword{duck}{a waterbird with a blunt bill, short legs and webbed feet}
\tstidxnewword{name}{word or words by which something is known}
\tstidxnewword{plight}{dangerous situation}
\tstidxnewword{land}{area of ground}
\tstidxnewword{OgRe}{an ogre is a man-eating giant or a terrifying
person. The silly capitalisation is just a reference to \TeX's output
routine}
\tstidxnewword{reference}{referring to something}
\tstidxnewword{perilous}{dangerous or full of risk}
\tstidxnewword{quest}{long or difficult search for something}
\tstidxnewword{xor}{\LaTeX3 experimental output routine}
\tstidxnewword{continuation}{state of continuing}
\tstidxnewword{newcomers}{recent arrivals}
\tstidxnewword{nod}{in addition to the action of moving one's head
up and down, also indicates a reference of acknowledgement of
something}
\tstidxnewword{centre}{point in the middle (UK spelling)}
\tstidxnewword{center}{point in the middle (US spelling)}
\tstidxnewword{lore}{tradition or knowledge of a particular subject}
\tstidxnewword{raft}{flat water vessel made from pieces of wood
tied together}
\tstidxnewword{external}{belonging outside of something}
\tstidxnewword{pun}{play on words}
\tstidxnewword{joke}{something said to amuse others}
\tstidxnewword{witty}{having the ability to say clever or
amusing things}
\tstidxnewword{cameo}{small part in a story for a distinguished
actor}
\tstidxnewword{exclamation}{sudden cry}
\tstidxnewword{bog}{area of soft, wet, muddy ground}
\tstidxnewword{leviathans}{very large, powerful thing (such as a sea
monster)}
\tstidxnewword{vale}{valley}
\tstidxnewword{doom}{fate}
\tstidxnewword{chaos}{complete confusion or disorder}
\tstidxnewword{butterfly}{winged insect}
\tstidxnewword{motif}{repeated theme}
\tstidxnewword{sentence}{set of words forming a complete statement,
instruction or question}
\tstidxnewword{conjunction}{word used to connect words or clauses}
\tstidxnewword{naughty}{badly behaved}
\tstidxnewword{leap}{jump far or high across something}
\tstidxnewword{bound}{leaping movement}
\tstidxnewword{sword}{weapon with a long metal blade}
\tstidxnewword{myriad}{countless or a very great number}
\tstidxnewword{clones}{identical copy}
\tstidxnewword{repetition}{something that's been repeated}
\tstidxnewword{lair}{hiding place or den}
\tstidxnewword{roar}{loud, deep sound}
\tstidxnewword{peace}{freedom from war or anxiety}
\tstidxnewword{harmony}{arranged well or peacefully together}
\tstidxnewword{span}{length of time or full extent or extend across
something}
\tstidxnewword{fear}{anxiety about something unpleasant}
\tstidxnewword{thrilling}{exciting}
\tstidxnewword{quixotic}{impractically unselfish and idealist}
\tstidxnewword{sea}{large area of salt water}
\tstidxnewword{seal}{sea-dwelling fish-eating mammal with flippers}
\tstidxnewword{seaborne}{transported or travelling by sea}
\tstidxnewword{zither}{a type of stringed musical instrument}
\tstidxnewword{zealous}{having great enthusiasm for something}
\tstidxnewword{fan}{an admirer of something}
\tstidxnewword{youthful}{seeming young}
\tstidxnewword{magic}{having the apparent power of supernatural or
mysterious forces}
\tstidxnewword{magical}{relating to or using magic}
\tstidxnewword{yo-yo}{a round toy consisting of two discs and a
piece of string}
\tstidxnewword{wily}{using cunning or crafty methods to gain an
advantage}
\tstidxnewword{wombat}{a type of small marsupial}
\tstidxnewword{warrior}{brave or experienced fighter}
\tstidxnewword{laser-guided}{guided by a laser}
\tstidxnewword{villainous}{characteristic of a villain}
\tstidxnewword{zany}{amusingly unconventional}
\tstidxnewword{zoologist}{someone who studies animals}
\tstidxnewword{xebec}{a type of small sailing ship}
\tstidxnewword{xenon}{a type of inert gas}
\tstidxnewword{xylem}{a plant tissue}
\tstidxnewword{xylene}{a type of liquid hydrocarbon}
\tstidxnewword{zounds}{an exclamation}
\tstidxnewword{Ooh}{an exclamation}
\tstidxnewword{zucchini}{a type of long, green summer squash (called
a courgette in British English)}
\tstidxnewword{xylophone}{a type of musical instrument}
\tstidxnewword{exhilarating}{pleasing or energetic}
\tstidxnewword{yuppie}{urban well-paid young middle-class professional}
\tstidxnewword{yoghurt}{thick, liquid food made from milk}
\tstidxnewword{yummy}{delicious}
\tstidxnewword{yuck}{disgusting}
\tstidxnewword{Viking}{a member of Scandinavian seafaring people
between the eighth and eleventh centuries}
\tstidxnewword{vignette}{brief episode}
\tstidxnewword{viceroy}{a person who governs a colony on behalf of
the sovereign}
\tstidxnewword{vichyssoise}{a type of soup}
\tstidxnewword{viceregal}{relating to a viceroy}
\tstidxnewword{quiz}{game or competition}
\tstidxnewword{glyph}{small graphic symbol}
\tstidxnewword{asleep}{in or into a state of sleep}
\tstidxnewword{ashore}{to or on shore or land}
\tstidxnewword{aspire}{to have strong ambitions to be or do something}
\tstidxnewword{assailed}{past tense of assail}
\tstidxnewword{recover}{get well again}
\tstidxnewword[name={re-cover}]{reecover}{to cover again}
%    \end{macrocode}
%Digraphs and trigraph:
%    \begin{macrocode}
\tstidxnewdigraph{cz}{digraph in some languages, such as Polish}
\tstidxnewdigraph{dd}{digraph in some languages, such as Welsh}
\tstidxnewdigraph{ff}{digraph in some languages, such as Welsh}
\tstidxnewdigraph{ng}{digraph in some languages, such as Welsh}
\tstidxnewdigraph{ly}{digraph in some languages, such as Hungarian}
\tstidxnewtrigraph{dzs}{Hungarian \glshyperlink{trigraph} considered a separate letter}
%    \end{macrocode}
%Some words with the Welsh dd diagraph:
%    \begin{macrocode}
\tstidxnewword{ddisgynedig}{descending (Welsh)}
\tstidxnewword{ddyrchafedig}{advanced (Welsh)}
\tstidxnewword{ffotograff}{photo (Welsh)}

%    \end{macrocode}
%Some words with the Hungarian ly and dz diagraphs:
%    \begin{macrocode}
\tstidxnewutfword{dzsoker}{dzs\'oker}{dzsóker}{joker (Hungarian)}
%    \end{macrocode}
%and a Polish cz digraph:
%    \begin{macrocode}
\tstidxnewutfword{czesc}{cze\'s\'c}{cześć}{hello (Polish)}
%    \end{macrocode}
% Now for some English words with accents.
%    \begin{macrocode}
\tstidxnewutfword{elite}{\'elite}{élite}{group of people regarded as
the best of a particular society or organisation}
\tstidxnewutfword{aesthetic}{\ae sthetic}{æsthetic}{concerning
beauty}
\tstidxnewutfword{blase}{blas\'e}{blasé}{unimpressed or indifferent
due to familiarity}
\tstidxnewutfword{protege}{prot\'eg\'e}{protégé}{person guided by an
older more experienced person}
\tstidxnewutfword{clientele}{client\`ele}{clientèle}{all the clients
of a particular business}
\tstidxnewutfword{resumee}{r\'esum\'e}{résumé}{summary of something
or curriculum vitae}
\tstidxnewutfword{soiree}{soir\'ee}{soirée}{an evening social
gathering involving conversation or music}
\tstidxnewutfword{phoenix}{ph\oe nix}{phœnix}{mythical bird that
periodically burned itself and was reborn from the ashes}
\tstidxnewutfword{decor}{d\'ecor}{décor}{the furnishings and
decorations of a room}
\tstidxnewutfword{faerie}{f\ae rie}{færie}{fairyland}
\tstidxnewutfword{facade}{fa\c{c}ade}{façade}{the front face of a
building}
\tstidxnewutfword{aethereal}{\ae thereal}{æthereal}{light, airy or
tenuous}
\tstidxnewutfword{debutante}{d\'ebutante}{débutante}{a young
upper-class woman making her first appearance in society}
\tstidxnewutfword{naive}{na\"{\i}ve}{naïve}{lacking experience or
wisdom}
\tstidxnewutfword{foetid}{f\oe tid}{fœtid}{smelling very unpleasant}
\tstidxnewutfword{cliche}{clich\'e}{cliché}{overused phrase or idea}
\tstidxnewutfword{deshabille}{d\'eshabill\'e}{déshabillé}{the state
of being only partially clothed}
\tstidxnewutfword{negligee}{n\'eglig\'ee}{négligée}{a woman's very
thin dressing gown}
\tstidxnewutfword{cafe}{caf\'e}{café}{small restaurant that sells
light meals}
\tstidxnewutfword{anaemic}{an\ae mic}{anæmic}{suffering from anaemia}

\tstidxnewutfwordsee{thornletter}{\th}{þ}{thorn}{thorn}
\tstidxnewutfwordsee{ethletter}{\dh}{ð}{eth}{eth}
\tstidxnewutfword{thorn}{thorn (\th)}{thorn (þ)}{Old English and
Icelandic runic letter. In English, eventually replaced by the
digraph \tstidxqt{th}}
\tstidxnewutfword{eth}{eth (\dh)}{eth (ð)}{Old English letter eventually
superseded by the digraph \tstidxqt{th}, but still in use in
some other languages}
\tstidxnewutfword{oesophagus}{\oe sophagus}{œsophagus}{part of the
alimentary canal}
%    \end{macrocode}
% Places.
%    \begin{macrocode}
\tstidxnewplace{Poland}{an Eastern European country}
\tstidxnewplace{Glasgow}{a Scottish city}
\tstidxnewplace{Iceland}{a Nordic island nation}
\tstidxnewplace{Nghaerdydd}{Cardiff}
\tstidxnewplace{Nghymru}{Wales}
\tstidxnewplace{Ffestiniog}{a place in Wales}
%    \end{macrocode}
% Places with extended Latin characters.
%    \begin{macrocode}
\tstidxnewutfplace{Ostergotland}{\"Osterg\"otland}{Östergötland}{a
county in Sweden}
\tstidxnewutfplace{Angelholm}{\"Angelholm}{Ängelholm}{a place in
Sweden}
\tstidxnewutfplace{Oresund}{\O resund}{Øresund}{a strait which
separates Denmark and Sweden}
\tstidxnewutfplace{Tarnby}{T\r{a}rnby}{Tårnby}{a town in Denmark}
\tstidxnewutfplace{Rodovre}{R\o dovre}{Rødovre}{a Danish town}
\tstidxnewutfplace{Naestved}{N\ae stved}{Næstved}{a Danish town on
the island of Zealand}
\tstidxnewutfplace{OlstykkeStenlose}{\O lstykke-Stenl\o se}%
{Ølstykke-Stenløse}{a Danish city in North Zealand}
\tstidxnewutfplace{Asslar}{A\ss lar}{Aßlar}{German town}
\tstidxnewutfplace{BadGottleubaBerggiesshubel}%
{Bad Gottleuba-Berggie\ss h\"ubel}{Bad Gottleuba-Berggießhübel}%
{a town in the Free State of Saxony, Germany}
\tstidxnewutfplace{Lodz}{\L\'od\'z}{Łódź}{Polish city}
\tstidxnewutfplace{Swietokrzyskie}{\'Swi\k{e}tokrzyskie}%
{Świętokrzyskie}{Polish province}
\tstidxnewutfplace{Zory}{\.Zory}{Żory}{Polish town and city county}
\tstidxnewutfplace{Zelechow}{\.Zelech\'ow}{Żelechów}%
{Polish town}
\tstidxnewutfplace{Lobez}{\L obez}{Łobez}{Polish town}
\tstidxnewutfplace{Glogow}{G\l og\'ow}{Głogów}{Polish town}
\tstidxnewutfplace{Cmielow}{\'Cmiel\'ow}{Ćmielów}{Polish town}
\tstidxnewutfplace{Scinawa}{\'Scinawa}{Ścinawa}{Polish town}
\tstidxnewutfplace{Swidnica}{\'Swidnica}{Świdnica}{Polish town}
\tstidxnewutfplace{Olvesvatn}{\"Olvesvatn}{Ölvesvatn}{Icelandic lake}
\tstidxnewutfplace{Ulfsvatn}{\'Ulfsvatn}{Úlfsvatn}{Icelandic lake}
\tstidxnewutfplace{Anavatn}{\'Anavatn}{Ánavatn}{Icelandic lake}
\tstidxnewutfplace{Masvatn}{M\'asvatn}{Másvatn}{Icelandic lake}
\tstidxnewutfplace{Thrihyrningsvatn}{\TH r\'{\i}hyrningsvatn}%
{Þríhyrningsvatn}{Icelandic lake}
\tstidxnewutfplace{Sigridharstadhavatn}%
{Sigr\'{\i}\dh arsta\dh avatn}{Sigríðarstaðavatn}%
{Icelandic lagoon}
\tstidxnewutfplace{Graenavatn}{Gr\ae navatn}{Grænavatn}%
{Icelandic lake}
\tstidxnewutfplace{Arneslon}{\'Arnesl\'on}{Árneslón}%
{Icelandic lake}
\tstidxnewutfplace{Isholsvatn}{\'Ish\'olsvatn}{Íshólsvatn}%
{Icelandic lake}
%    \end{macrocode}
%Place starting with an article.
%    \begin{macrocode}
\tstidxnewartplace{the}{Bog of Eternal Stench}{place in the film
\glshyperlink{Labyrinth}}
%    \end{macrocode}
%Phrases.
%    \begin{macrocode}
\tstidxnewphrase{dado rail}{waist-high moulding around the
wall of a room}
\tstidxnewphrase{indexing application}{an application that generates
a document index}
\tstidxnewphrase{visual effects}{use of imagery to create an effect}
\tstidxnewphrase{dummy text}{sample text used for demonstration not
for its content}
\tstidxnewphrase{page break}{the point where document text is broken
across two pages}
\tstidxnewphrase{link text}{for the \glshyperlink{glossariespackage}
package, this refers to the text inserted into the document
through commands like \glshyperlink{cs.gls}}
\tstidxnewphrase{cross-reference}{reference to another part of the
document or to a part of another document}
\tstidxnewphrase{marginal note}{text that's placed in the page
margin}
\tstidxnewphrase{overfull lines}{lines where the text extends into
the margin because of a formatting failure}
\tstidxnewphrase{lorem ipsum}{dummy text}
\tstidxnewphrase{between you, me and the gatepost}{an expression
meaning you're telling someone a secret that shouldn't be passed on
(common in some British dialects)}
\tstidxnewphrase{way with words}{have a particular talent with words}
\tstidxnewphrase{creative writing}{writing typically identified 
by narrative craft, character development and use of literary tropes}
\tstidxnewphrase{cut to the chase}{get to the point}
\tstidxnewphrase{get to the point}{state something directly}
\tstidxnewphraseseealso{keep mum}{be silent about something}{confidential}
\tstidxnewphrase{output routine}{\TeX's method of outputting a page}
\tstidxnewphrase{out of whack}{out of order or not working}
\tstidxnewphrase{page dimensions}{the dimensions of a page (such as
the page width and page height)}
\tstidxnewphrase{font family}{the name of a font}
\tstidxnewphrase{font size}{the size of a font}
\tstidxnewphraseseealso{location list}%
{the list of locations used in an index to indicate where
the term being referenced was used in the document}{crossreference}
\tstidxnewphrasesee{range separator}{the symbol
used between the start and end location to indicate a range}{locationlist}
\tstidxnewphrase{page number}{the number identifying a
particular page}
\tstidxnewphrase{multiple encaps}{a warning issued by
\glshyperlink{makeindex} when the same page number is indexed
with different encap values}
\tstidxnewphrase{input encoding}{the character encoding used
in the document source code}
\tstidxnewphrase{font encoding}{the encoding used by the document
font}
\tstidxnewphrase{extended Latin characters}{Latin characters outside
the basic ASCII set}
\tstidxnewphrase{cup of tea}{an expression indicating what one likes
or is interested in}
\tstidxnewphrase{whistle-stop tour}{a series of short visits to
different places}
\tstidxnewphrase{number group}{a group associated with numbers}
\tstidxnewphrase{prime number}{a number that is only divisible by
itself and 1}
\tstidxnewphrase{hold my breath}{stop breathing temporarily, also
used as an expression to indicate a state of anticipation or
suspense}
\tstidxnewphrase{letter groups}{groups associated with letters}
\tstidxnewphrase{Once upon a time}{an expression commonly used at
the start of fairy tales}
\tstidxnewphrase{across the pond}{colloquial expression indicating
the other side of the Atlantic}
\tstidxnewphrase{bad form}{an offence against accepted behaviour}
\tstidxnewphrase{Monty Python}{a British surreal comedy group}
\tstidxnewphrase{magic incantation}{words used to create a magical
effect}
\tstidxnewphrase{common knowledge}{something widely known}
\tstidxnewphrase{intrepid hero}{a hero known for his boldness
and bravery}
\tstidxnewphrase{sea lion}{a type of large seal}
\tstidxnewphrase{sealant gun}{a device used for applying sealant}
\tstidxnewphrase{zoot suit}{a suit typically having a long loose
jacket and high-waisted trousers}
\tstidxnewphrase{anonymous reviewer}{an unnamed reviewer}
\tstidxnewphrase{yule log}{a large log traditionally burnt on
Christmas Eve or a log-shaped chocolate cake}
\tstidxnewphrase{vice-president}{a president's deputy}
\tstidxnewphrase{vice admiral}{a high rank of naval officer}
\tstidxnewphrase{Victoria plum}{a large, red, dessert plum}
\tstidxnewphrase{Victoria sponge}{a sponge cake consisting of two
layers with jam filling in between}
\tstidxnewphrase{vice versa}{reversing the order of the items just
mentioned}
\tstidxnewphrase{vice chancellor}{a deputy chancellor of a 
British university in charge of its administration}
\tstidxnewphrase{letter ordering}{ordering according to the
individual characters}
\tstidxnewphrase{word ordering}{ordering according to the
language or locale's definition of words}
\tstidxnewphrase{mot juste}{the most appropriate word}
%    \end{macrocode}
%Phrases with extended Latin characters.
%    \begin{macrocode}
\tstidxnewutfphrase{attachecase}{attach\'e case}{attaché case}%
{small, flat briefcase for carrying documents}
\tstidxnewutfphrase{piedaterre}{pied-\`a-terre}{pied-à-terre}%
{small flat or house kept for occasional use}
\tstidxnewutfphrase{bergerehat}{berg\`ere hat}{bergère hat}%
{a type of wide-brimmed straw hat}
%    \end{macrocode}
%Phrases starting with an article.
%    \begin{macrocode}
\tstidxnewartphrase{the}{commercial world}{pertaining to commerce}
\tstidxnewartphrase{a}{far away land}{somewhere that's far away; a
term often used in fairy tales}
\tstidxnewartphrase{the}{Golden Arara}{a made-up item in the dummy
text}
\tstidxnewartphrase{the}{Mighty Helm of Knuth}{a made-up item in the dummy
text}
\tstidxnewartphrase{the}{Legendary Sword}{a made-up item in the dummy
text}
\tstidxnewartphrase{the}{Bog of Eternal Glossaries}{a made-up place in the dummy
text}
\tstidxnewartphrase{the}{Dread Vale of the Editors}{a made-up place in the dummy
text}
\tstidxnewartphrase{the}{butterflies of chaos}{the butterfly effect
is a popular method of describing aspects of chaos theory}
\tstidxnewartphrase{The}{End}{denotes the end of a
story, especially fairy tales}
%    \end{macrocode}
%Sub-entries (terms).
%    \begin{macrocode}
\tstidxnewsubword{sub-items}{lonely}{a sub-item that doesn't have
any siblings}
\tstidxnewsubword{document}{properties}{attributes such as page size}
\tstidxnewsubword{font encoding}{OT1}{one of the original font
encodings supplied with \TeX}
\tstidxnewsubwordsee{hero}{intrepid}{a hero known for his boldness
and bravery}{intrepidhero}
%    \end{macrocode}
%Sub-entries (phrases).
%    \begin{macrocode}
\tstidxnewsubphrase{location list}{page separator}%
{symbol used to separate page references}
\tstidxnewsubphrase{location list}{range separator}%
{symbol used to mark page range references}
%    \end{macrocode}
%People.
%    \begin{macrocode}
\tstidxnewperson{James}{Joyce}{an author}
\tstidxnewperson{Donald}{Knuth}{creator of \TeX}
\tstidxnewperson{Paulo}{Cereda}{creator of \glshyperlink{arara}}
\tstidxnewperson{Sir}{Quackalot}{fictitious character}
\tstidxnewperson{the}{Fairy Goose}{fictitious character}
\tstidxnewperson{David}{Carlisle}{member of the \LaTeX3 team}
\tstidxnewperson{Joseph}{Wright}{member of the \LaTeX3 team}
%    \end{macrocode}
%People (extended Latin characters).
%    \begin{macrocode}
\tstidxnewutfperson{Anders Jonas}{\AA ngstr\"om}%
[AndersJonasAngstrom]{Anders Jonas}{Ångström}%
{Swedish physicist}
%    \end{macrocode}
%Books.
%    \begin{macrocode}
\tstidxnewbook{Ulysses}{a modernist novel by James Joyce}
\tstidxnewbook{Sir Quackalot and the Golden Arara}{a fictitious book}
\tstidxnewbook{Sir Quackalot and the Hyper Lake of Doom}{a fictitious book}
\tstidxnewbook{Compact Oxford English Dictionary}{a dictionary}
%    \end{macrocode}
%Books starting with an article.
%    \begin{macrocode}
\tstidxnewartbook{The}{Hitchhiker's Guide to the Galaxy}{a comedy
series by Douglas Adams, originally created for radio but later
adapted to book, TV and film}
\tstidxnewartbook{The}{Adventures of Sir Quackalot}{a fictitious book}
%    \end{macrocode}
%Films.
%    \begin{macrocode}
\tstidxnewfilm{Labyrinth}{a musical fantasy film}
%    \end{macrocode}
%Films starting with an article.
%    \begin{macrocode}
\tstidxnewartfilm{The}{Third Man}{a British film noir}
%    \end{macrocode}
%Symbols.
%    \begin{macrocode}
\tstidxnewsym{TeX}{\TeX}{a typesetting system created by Donald
Knuth}
%    \end{macrocode}
%Maths.
%    \begin{macrocode}
\tstidxnewmath{f(x)}[fx]{f(\protect\vec{x})}{a function of $x$}
\tstidxnewmath{n}{n}{an integer}
\tstidxnewmath{E}{E}{energy}
%    \end{macrocode}
%Maths symbols.
%    \begin{macrocode}
\tstidxnewmathsym{alpha}{\protect\alpha}{Greek letter alpha}
\tstidxnewmathsym{beta}{\protect\beta}{Greek letter beta}
\tstidxnewmathsym{gamma}{\protect\gamma}{Greek letter gamma}
\tstidxnewmathsym{sum}{\protect\sum}{summation}
\tstidxnewmathsym{partial}{\protect\partial}{partial derivative}
\tstidxnewmathsym{eth}[spinderiv]{\protect\eth}{spin-weighted partial derivative}
%    \end{macrocode}
%Packages.
%    \begin{macrocode}
\tstidxnewsty{testidx}{package that produces dummy text for testing
index styles and indexing applications}
\tstidxnewsty{testidx-glossaries}{package that produces dummy text
for testing glossary styles and indexing applications that integrate
with the \glshyperlink{glossariespackage} or
\glshyperlink{glossariesextrapackage} packages}
\tstidxnewsty{glossaries}{a package for creating glossaries or lists
of terms, symbols or abbreviations}
\tstidxnewsty{glossaries-extra}{an extension to the 
\glshyperlink{glossariespackage} package}
\tstidxnewsty{hyperref}{a package that provides extensive support
for hypertext}
\tstidxnewsty{lipsum}{a package that generates dummy text}
\tstidxnewsty{inputenc}{a package that can be used to identify the document encoding}
\tstidxnewstyseealso{fontenc}{a package that can be used to set the font
encoding}{inputencpackage}
\tstidxnewsty{amsmath}{a package that provides AMS mathematical
facilities}
\tstidxnewsty{amssymb}{a package that provides mathematical
symbols}
\tstidxnewsty{longtable}{a package that allows tables to flow over
page boundaries}
\tstidxnewsty{makeidx}{a package that provides indexing
facilities}
\tstidxnewsty{imakeidx}{a sophisticated package that provides indexing
facilities}
%    \end{macrocode}
%Package options.
%    \begin{macrocode}
\tstidxnewstyopt{testidx-glossaries}{extra}{load the
\glshyperlink{glossariesextrapackage} package}
\tstidxnewstyopt{testidx-glossaries}{noextra}{don't load the
\glshyperlink{glossariesextrapackage} package (only load
\glshyperlink{glossariespackage})}
\tstidxnewstyopt{testidx-glossaries}{noseekey}{don't use the
\tstidxqt{see} key to implement the cross-referencing (use
\glshyperlink{cs.glssee} instead)}
\tstidxnewstyopt{testidx-glossaries}{seekey}{use the
\tstidxqt{see} key to implement the cross-referencing}
\tstidxnewstyopt{testidx-glossaries}{xindy}{set up the
\glshyperlink{glossariespackage} package to use \glshyperlink{xindy}
as the indexing application}
\tstidxnewstyopt{testidx-glossaries}{tex}{set up the
\glshyperlink{glossariespackage} package to use \TeX\ to
sort and collate the entries}
\tstidxnewstyopt{testidx-glossaries}{bib2gls}{set up the
\glshyperlink{glossariesextrapackage} package to use
\glshyperlink{bib2gls} as the indexing application}
\tstidxnewstyopt{testidx-glossaries}{noglsnumbers}{pass
the \tstidxstyoptfmt{glsnumbers=false} option to the
\glshyperlink{glossariespackage} package}
\tstidxnewstyopt{testidx-glossaries}{glsnumbers}{pass
the \tstidxstyoptfmt{glsnumbers=true} option to the
\glshyperlink{glossariespackage} package}
\tstidxnewstyopt{testidx-glossaries}{verbose}{write
information about the test entries in the transcript file}
\tstidxnewstyopt{testidx-glossaries}{noverbose}{don't write
information about the test entries in the transcript file}
\tstidxnewstyopt{testidx-glossaries}{desc}{add descriptions
to the dummy entries}
\tstidxnewstyopt{testidx-glossaries}{sanitize}{sanitize the sort value}
\tstidxnewstyopt{testidx-glossaries}{nosanitize}{don't sanitize the
sort value}
\tstidxnewstyopt{testidxglossaries}{stripaccents}{in ASCII mode, strip accent
commands from the sort value}
\tstidxnewstyopt{testidxglossaries}{nostripaccents}{in ASCII mode, strip accent
commands from the sort value}
\tstidxnewstyopt{testidx}{hidemarks}{hide the marks showing
where the indexing is occurring}
\tstidxnewstyopt{testidx}{showmarks}{mark
where the indexing is occurring}
\tstidxnewstyopt{testidx}{notestencaps}{don't use the
test encaps}
\tstidxnewstyopt{testidx}{verbose}{show the index
commands in the document text}
\tstidxnewstyopt{testidx}{noverbose}{don't show the index
commands in the document text}
\tstidxnewstyopt{testidx}{digraphs}{use glyphs instead of
the two-character digraphs for certain words}
\tstidxnewstyopt{testidx}{german}{change the
\glshyperlink{makeindex} quote character to allow the 
double-quote character to indicate an umlaut}
\tstidxnewstyopt{testidx}{ngerman}{change the
\glshyperlink{makeindex} quote character to allow the 
double-quote character to indicate an umlaut}
\tstidxnewstyopt{testidx}{sanitize}{sanitize the sort value
before passing it to the indexing command}
\tstidxnewstyopt{testidx}{nosanitize}{don't sanitize the sort value
before passing it to the indexing command}
\tstidxnewstyopt{testidx}{stripaccents}{in ASCII mode, strip accent
commands from the sort value}
\tstidxnewstyopt{testidx}{nostripaccents}{in ASCII mode, strip accent
commands from the sort value}
\tstidxnewstyopt{testidx}{prefix}{insert a prefix before the sort
value for certain symbols}
\tstidxnewstyopt{testidx}{noprefix}{don't insert a prefix before the sort
value for certain symbols}
\tstidxnewstyopt{hyperref}{hidelinks}{don't use a visual effect to
show the hyperlinks}
\tstidxnewstyopt{fontenc}{T1}{set the font encoding to T1}
%    \end{macrocode}
%Environments.
%    \begin{macrocode}
\tstidxnewenv{theindex}{environment used to display an index}
\tstidxnewenv{align}{environment provided by the
\glshyperlink{amsmathpackage} package to align equations}
\tstidxnewenv{eqnarray}{environment provided by the \LaTeX\
kernel to align equations}
%    \end{macrocode}
%Applications.
%    \begin{macrocode}
\tstidxnewapp{bib2gls}{an indexing application designed 
to work with the \glshyperlink{glossariesextrapackage} package}
\tstidxnewapp{makeindex}{an indexing application}
\tstidxnewapp{xindy}{a highly-configurable indexing application with
localisation support}
\tstidxnewapp{texdoc}{an application for viewing documentation
installed in a \TeX\ distribution}
\tstidxnewapp{arara}{an automation tool for building documents}
\tstidxnewapp{Perl}{a scripting language}
\tstidxnewapp{makeglossaries}{a Perl script provided with the
\glshyperlink{glossariespackage} package that automatically runs
either \glshyperlink{makeindex} or \glshyperlink{xindy}
according to the document settings}
\tstidxnewapp{makeglossaries-lite}{a light-weight Lua alternative to
\glshyperlink{makeglossaries}}
\tstidxnewapp{Emacs}{a text editor}
\tstidxnewapp{Vi}{a text editor}
%    \end{macrocode}
%Application options.
%    \begin{macrocode}
\tstidxnewappopt{xindy}{-L swedish}{use the Swedish language module}
\tstidxnewappopt{xindy}{-L danish}{use the Danish language module}
\tstidxnewappopt{xindy}{-L polish}{use the Polish language module}
\tstidxnewappopt{xindy}{-L icelandic}{use the Icelandic language module}
\tstidxnewappopt{xindy}{-L german-duden}{use the German language
module with the duden setting}
\tstidxnewappopt{xindy}{-L german-din5007}{use the German language
module with the din5007 setting}
\tstidxnewappopt{xindy}{-M ord/letorder}{use the letter ordering
module}
\tstidxnewappopt{makeindex}{-g}{use the German setting that
recognises the double-quote character as an umlaut command}
\tstidxnewappopt{makeindex}{-l}{use letter ordering}
%    \end{macrocode}
%Index markers.
%    \begin{macrocode}
\tstidxnewindexmarker{tstidxmarker}{indicates where the indexing
command was used for a top-level (level~0) entry}
\tstidxnewindexmarker{tstidxsubmarker}{indicates where the indexing
command was used for a level~1 entry}
\tstidxnewindexmarker{tstidxsubsubmarker}{indicates where the indexing
command was used for a level~2 entry}
\tstidxnewindexmarker{tstidxopenmarker}{indicates where
the start of a range was indexed for a top-level (level~0) entry}
\tstidxnewindexmarker{tstidxclosemarker}{indicates where
the end of a range was indexed for a top-level (level~0) entry}
\tstidxnewindexmarker{tstidxopensubmarker}{indicates where
the start of a range was indexed for a level~1 entry}
\tstidxnewindexmarker{tstidxclosesubmarker}{indicates where
the end of a range was indexed for a level~1 entry}
\tstidxnewindexmarker{tstidxopensubsubmarker}{indicates where
the start of a range was indexed for a level~2 entry}
\tstidxnewindexmarker{tstidxclosesubsubmarker}{indicates where
the end of a range was indexed for a level~2 entry}
\tstidxnewindexmarker{tstidxseemarker}{indicates where the indexing
command was used to cross-reference a top-level (level~0) entry}
\tstidxnewindexmarker{tstidxsubseemarker}{indicates where the indexing
command was used to cross-reference a level~1 entry}
%    \end{macrocode}
%Encaps.
%    \begin{macrocode}
\tstidxnewencapcsn{tstidxencapi}{first test encap}
\tstidxnewencapcsn{tstidxencapii}{second test encap}
\tstidxnewencapcsn{tstidxencapiii}{third test encap}
%    \end{macrocode}
%Control sequences.
%    \begin{macrocode}
\tstidxnewcs{index}{write information to the external index file 
that will be processed by an indexing application (defined by the
\LaTeX\ kernel)}

\tstidxnewcs{testidx}{produce the dummy text (defined in the
\glshyperlink{testidxpackage} package)}

\tstidxnewcs{tstidxtoidx}{switch back to the original definitions
provided by the base \glshyperlink{testidxpackage} package (defined
in the \glshyperlink{testidxglossariespackage} package)}

\tstidxnewcs{gls}{reference a term defined by the
\glshyperlink{glossariespackage} package (displays text and performs
indexing)}

\tstidxnewcs{glspl}{as \glshyperlink{cs.gls} but displays the
plural form}

\tstidxnewcs{glsadd}{indexes a term defined by the
\glshyperlink{glossariespackage} package (but doesn't display any text)}

\tstidxnewcs{glssee}{indexes a cross-referenced term or terms defined by the
\glshyperlink{glossariespackage} package (but doesn't display any text)}

\tstidxnewcs{glsxtrindexseealso}{indexes a \tstidxqt{see also}
cross-referenced term or terms defined by the
\glshyperlink{glossariesextrapackage} package (but doesn't display any text)}

\tstidxnewcs{glshyperlink}{displays the text associated with a
term (with a hyperlink if enabled) but doesn't perform 
any indexing (defined by the \glshyperlink{glossariespackage} package)}

\tstidxnewcs{setglossarystyle}{sets the glossary style
(defined by the \glshyperlink{glossariespackage} package)}

\tstidxnewcs{delimN}{page delimiter used in location lists
(defined by the \glshyperlink{glossariespackage} package)}

\tstidxnewcs{delimR}{page range delimiter used in location lists
(defined by the \glshyperlink{glossariespackage} package)}

\tstidxnewcs{tstidxfootnote}{produces a footnote
(defined by the \glshyperlink{testidxpackage} package)}

\tstidxnewcs{footnote}{produces a footnote
(defined by the \LaTeX\ kernel)}

\tstidxnewcs{tstidxtext}{used to mark the sample text being indexed
(defined by the \glshyperlink{testidxpackage} package)}

\tstidxnewcs{textcolor}{displays the given text in the given colour
(a colour package is required to enable this command)}

\tstidxnewcs{glstreenamefmt}{used to set the font for
the name field in the tree-like glossary styles}

\tstidxnewcs{tstindex}{used to index the sample text
for the base \glshyperlink{testidxpackage} package (not for the
\glshyperlink{testidxglossariespackage} package)}

\tstidxnewcs{GlsAddXdyAttribute}{adds a \glshyperlink{xindy}
attribute (provided by the \glshyperlink{glossariespackage} package)}

\tstidxnewcs{IeC}{used internally by the
\glshyperlink{inputencpackage}
package}

\tstidxnewcs{tstidxindexmarkerprefix}{prefix used in the
sort key for markers if the \tstidxstyoptfmt{prefix}
option is used (but not with the \tstidxstyoptfmt{bib2gls}
option)}

\tstidxnewcs{tstidxindexmathsymprefix}{prefix used in the
sort key for mathematical symbols if the \tstidxstyoptfmt{prefix}
option is used (but not with the \tstidxstyoptfmt{bib2gls}
option)}

\tstidxnewcs{tstidxmakegloss}{command used to load
the files containing the sample glossary definitions
and also use the appropriate command to initialise the indexing,
depending on the package options}
%    \end{macrocode}
%Numbers.
%    \begin{macrocode}
\tstidxnewnumber{42}{forty-two}
\tstidxnewnumber{10}{ten}
\tstidxnewnumber{16}{sixteen}
\tstidxnewnumber{2}{two}
\tstidxnewnumber{100}{one hundred}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-samples.tex>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-diglyphs-utf8.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: UTF-8
%COMMENT

@index{ll,
  name={ỻ},
  category={digraph},
  description={a \glshyperlink{digraph} used in
a number of languages. In Welsh, LL is considered a separate letter
from L and may be rendered as the ligature Ỻ}
}

@index{ij,
  name={ij},
  category={digraph},
  description={a \glshyperlink{digraph} used in Dutch that's sometimes considered
a separate letter from I and may be rendered as the ligature IJ}
}

@index{dz,
  name={dz},
  category={digraph},
  description={a \glshyperlink{digraph} used in
a number of languages. In Hungarian, Dz is considered a separate letter
from D and may be rendered as the ligature Dz}
}

@index{llan,
  name={ỻan},
  category={word},
  description={commonly used placename element in Brittonic
languages (such as Welsh) typically indicating parish church}
}

@index{llama,
  name={ỻama},
  category={word},
  description={domesticate animal found in the Andes}
}

@index{lijnbus,
  name={lijnbus},
  category={word},
  description={bus (Dutch)}
}

@index{ijsvrij,
  name={ijsvrij},
  category={word},
  description={frost (Dutch)}
}

@index{dzwon,
  name={dzwon},
  category={word},
  description={bell (Polish)}
}

@index{dzeta,
  name={dzéta},
  category={word},
  description={the Greek letter zeta (Hungarian)}
}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-diglyphs-utf8.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-markers.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: ASCII
%COMMENT

@symbol{tstidxmarker,
  name={\protect\tstidxmarker\space(\protect\tstidxcsfmt{tstidxmarker})},
  category={indexmarker},
  description={indicates where the indexing command was used for a
top-level (level~0) entry}
}

@symbol{tstidxsubmarker,
  name={\protect\tstidxsubmarker\space(\protect\tstidxcsfmt{tstidxsubmarker})},
  category={indexmarker},
  description={indicates where the indexing
command was used for a level~1 entry}
}

@symbol{tstidxsubsubmarker,
  name={\protect\tstidxsubsubmarker\space(\protect\tstidxcsfmt{tstidxsubsubmarker})},
  category={indexmarker},
  description={indicates where the indexing
command was used for a level~2 entry}
}

@symbol{tstidxopenmarker,
  name={\protect\tstidxopenmarker\space(\protect\tstidxcsfmt{tstidxopenmarker})},
  category={indexmarker},
  description={indicates where
the start of a range was indexed for a top-level (level~0) entry}
}

@symbol{tstidxclosemarker,
  name={\protect\tstidxclosemarker\space(\protect\tstidxcsfmt{tstidxclosemarker})},
  category={indexmarker},
  description={indicates where
the end of a range was indexed for a top-level (level~0) entry}
}

@symbol{tstidxopensubmarker,
  name={\protect\tstidxopensubmarker\space(\protect\tstidxcsfmt{tstidxopensubmarker})},
  category={indexmarker},
  description={indicates where
the start of a range was indexed for a level~1 entry}
}

@symbol{tstidxclosesubmarker,
  name={\protect\tstidxclosesubmarker\space(\protect\tstidxcsfmt{tstidxclosesubmarker})},
  category={indexmarker},
  description={indicates where
the end of a range was indexed for a level~1 entry}
}

@symbol{tstidxopensubsubmarker,
  name={\protect\tstidxopensubsubmarker\space(\protect\tstidxcsfmt{tstidxopensubsubmarker})},
  category={indexmarker},
  description={indicates where
the start of a range was indexed for a level~2 entry}
}

@symbol{tstidxclosesubsubmarker,
  name={\protect\tstidxclosesubsubmarker\space(\protect\tstidxcsfmt{tstidxclosesubsubmarker})},
  category={indexmarker},
  description={indicates where
the end of a range was indexed for a level~2 entry}
}

@symbol{tstidxseemarker,
  name={\protect\tstidxseemarker\space(\protect\tstidxcsfmt{tstidxseemarker})},
  category={indexmarker},
  description={indicates where the indexing
command was used to cross-reference a top-level (level~0) entry}
}

@symbol{tstidxsubseemarker,
  name={\protect\tstidxsubseemarker\space(\protect\tstidxcsfmt{tstidxsubseemarker})},
  category={indexmarker},
  description={indicates where the indexing
command was used to cross-reference a level~1 entry}
}


%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-markers.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-mathsym.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: ASCII
%COMMENT

@symbol{alpha,
  name={$\alpha$},
  text={\alpha},
  category={mathsymbol},
  description={Greek letter alpha}
}

@symbol{beta,
  name={$\beta$},
  text={\beta},
  category={mathsymbol},
  description={Greek letter beta}
}

@symbol{gamma,
  name={$\gamma$},
  text={\gamma},
  category={mathsymbol},
  description={Greek letter gamma}
}

@symbol{sum,
  name={$\sum$},
  text={\sum},
  category={mathsymbol},
  description={summation}
}

@symbol{partial,
  name={$\partial$},
  text={\partial},
  category={mathsymbol},
  description={partial derivative}
}

@symbol{spinderiv,
  name={$\eth$},
  text={\eth},
  category={mathsymbol},
  description={spin-weighted partial derivative}
}

%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-mathsym.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-nodiglyphs-utf8.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: UTF-8
%COMMENT

@index{ll,
  name={ll},
  category={digraph},
  description={a \glshyperlink{digraph} used in
a number of languages. In Welsh, LL is considered a separate letter
from L and may be rendered as a ligature}
}

@index{ij,
  name={ij},
  category={digraph},
  description={a \glshyperlink{digraph} used in Dutch that's sometimes considered
a separate letter from I and may be rendered as a ligature}
}

@index{dz, 
  name={dz},
  category={digraph},
  description={a \glshyperlink{digraph} used in
a number of languages. In Hungarian, Dz is considered a separate
letter
from D and may be rendered as a ligature}
}

@index{llan,
  name={llan},
  category={word},
  description={commonly used placename element in Brittonic
languages (such as Welsh) typically indicating parish church}
}

@index{llama,
  name={llama},
  category={word},
  description={domesticate animal found in the Andes}
}

@index{lijnbus,
  name={lijnbus},
  category={word},
  description={bus (Dutch)}
}

@index{ijsvrij,
  name={ijsvrij},
  category={word},
  description={frost (Dutch)}
}

@index{dzwon,
  name={dzwon},
  category={word},
  description={bell (Polish)}
}

@index{dzeta,
  name={dzéta},
  category={word},
  description={the Greek letter zeta (Hungarian)}
}

%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-nodiglyphs-utf8.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-nodiglyphs.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: ASCII
%COMMENT

@index{ll,
  name={ll},
  category={digraph},
  description={a \glshyperlink{digraph} used in
a number of languages. In Welsh, LL is considered a separate letter
from L and may be rendered as a ligature}
}

@index{ij,
  name={ij},
  category={digraph},
  description={a \glshyperlink{digraph} used in Dutch that's sometimes considered
a separate letter from I and may be rendered as a ligature}
}

@index{dz, 
  name={dz},
  category={digraph},
  description={a \glshyperlink{digraph} used in
a number of languages. In Hungarian, Dz is considered a separate
letter
from D and may be rendered as a ligature}
}

@index{llan,
  name={llan},
  category={word},
  description={commonly used placename element in Brittonic
languages (such as Welsh) typically indicating parish church}
}

@index{llama,
  name={llama},
  category={word},
  description={domesticate animal found in the Andes}
}

@index{lijnbus,
  name={lijnbus},
  category={word},
  description={bus (Dutch)}
}

@index{ijsvrij,
  name={ijsvrij},
  category={word},
  description={frost (Dutch)}
}

@index{dzwon,
  name={dzwon},
  category={word},
  description={bell (Polish)}
}

@index{dzeta,
  name={dz\'eta},
  category={word},
  description={the Greek letter zeta (Hungarian)}
}


%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-nodiglyphs.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-numbers.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: ASCII
%COMMENT

@number{42,
  name={42},
  category={number},
  description={forty-two}
}

@number{10,
  name={10},
  category={number},
  description={ten}
}

@number{16,
  name={16},
  category={number},
  description={sixteen}
}

@number{2,
  name={2},
  category={number},
  description={two}
}

@number{100,
  name={100},
  category={number},
  description={one hundred}
}


%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-numbers.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-samples-ascii.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: ASCII
%COMMENT

@index{dzsoker,
  name={dzs\'oker},
  category={word},
  description={joker (Hungarian)}
}

@index{czesc,
  name={cze\'s\'c},
  category={word},
  description={hello (Polish)}
}

@index{elite,
  name={{\'e}lite},
  category={word},
  description={group of people regarded as
the best of a particular society or organisation}
}

@index{aesthetic,
  name={\ae sthetic},
  category={word},
  description={concerning beauty}
}

@index{oesophagus,
  name={\oe sophagus},
  category={word},
  description={part of the alimentary canal}
}

@index{blase,
  name={blas\'e},
  category={word},
  description={unimpressed or indifferent due to familiarity}
}

@index{protege,
  name={prot\'eg\'e},
  category={word},
  description={person guided by an older more experienced person}
}

@index{clientele,
  name={client\`ele},
  category={word},
  description={all the clients of a particular business}
}

@index{resumee,
  name={r\'esum\'e},
  category={word},
  description={summary of something or curriculum vitae}
}

@index{soiree,
  name={soir\'ee},
  category={word},
  description={an evening social gathering involving conversation or music}
}

@index{phoenix,
  name={ph\oe nix},
  category={word},
  description={mythical bird that periodically burned itself and was reborn from the ashes}
}

@index{decor,
  name={d\'ecor},
  category={word},
  description={the furnishings and decorations of a room}
}

@index{faerie,
  name={f\ae rie},
  category={word},
  description={fairyland}
}

@index{facade,
  name={fa\c{c}ade},
  category={word},
  description={the front face of a building}
}

@index{aethereal,
  name={\ae thereal},
  category={word},
  description={light, airy or tenuous}
}

@index{debutante,
  name={d\'ebutante},
  category={word},
  description={a young upper-class woman making her first appearance in society}
}

@index{naive,
  name={na\"{\i}ve},
  category={word},
  description={lacking experience or wisdom}
}

@index{foetid,
  name={f\oe tid},
  category={word},
  description={smelling very unpleasant}
}

@index{cliche,
  name={clich\'e},
  category={word},
  description={overused phrase or idea}
}

@index{deshabille,
  name={d\'eshabill\'e},
  category={word},
  description={the state of being only partially clothed}
}

@index{negligee,
  name={n\'eglig\'ee},
  category={word},
  description={a woman's very thin dressing gown}
}

@index{cafe,
  name={caf\'e},
  category={word},
  description={small restaurant that sells light meals}
}

@index{anaemic,
  name={an\ae mic},
  category={word},
  description={suffering from anaemia}
}

@index{thornletter,
  name={\th},
  category={word},
  see={thorn},
  description={thorn}
}

@index{thorn,
  name={thorn (\th)},
  category={word},
  description={Old English and Icelandic runic letter. In English, eventually replaced by the
digraph \tstidxqt{th}}
}

@index{ethletter,
  name={\dh},
  category={word},
  see={ethletter},
  description={eth}
}

@index{eth,
  name={eth (\dh)},
  category={word},
  description={Old English letter eventually
superseded by the digraph \tstidxqt{th}, but still in use in
some other languages}
}

@index{Ostergotland,
  name={{\"O}sterg\"otland},
  category={place},
  description={a county in Sweden}
}

@index{places.Ostergotland,
  name={{\"O}sterg\"otland},
  parent={places},
  category={place},
  description={a county in Sweden}
}

@index{Angelholm,
  name={{\"A}ngelholm},
  category={place},
  description={a place in Sweden}
}

@index{places.Angelholm,
  name={{\"A}ngelholm},
  parent={places},
  category={place},
  description={a place in Sweden}
}

@index{Oresund,
  name={\O resund},
  category={place},
  description={a strait which separates Denmark and Sweden}
}

@index{places.Oresund,
  name={\O resund},
  parent={places},
  category={place},
  description={a strait which separates Denmark and Sweden}
}

@index{Tarnby,
  name={T\r{a}rnby},
  category={place},
  description={a town in Denmark}
}

@index{places.Tarnby,
  name={T\r{a}rnby},
  parent={places},
  category={place},
  description={a town in Denmark}
}

@index{Rodovre,
  name={R\o dovre},
  category={place},
  description={a Danish town}
}

@index{places.Rodovre,
  name={R\o dovre},
  parent={places},
  category={place},
  description={a Danish town}
}

@index{Naestved,
  name={N\ae stved},
  category={place},
  description={a Danish town on the island of Zealand}
}

@index{places.Naestved,
  name={N\ae stved},
  parent={places},
  category={place},
  description={a Danish town on the island of Zealand}
}

@index{OlstykkeStenlose,
  name={\O lstykke-Stenl\o se},
  category={place},
  description={a Danish city in North Zealand}
}

@index{places.OlstykkeStenlose,
  name={\O lstykke-Stenl\o se},
  parent={places},
  category={place},
  description={a Danish city in North Zealand}
}

@index{Asslar,
  name={A\ss lar},
  category={place},
  description={German town}
}

@index{places.Asslar,
  name={A\ss lar},
  parent={places},
  category={place},
  description={German town}
}

@index{BadGottleubaBerggiesshubel,
  name={Bad Gottleuba-Berggie\ss h\"ubel},
  category={place},
  description={a town in the Free State of Saxony, Germany}
}

@index{places.BadGottleubaBerggiesshubel,
  name={Bad Gottleuba-Berggie\ss h\"ubel},
  parent={places},
  category={place},
  description={a town in the Free State of Saxony, Germany}
}

@index{Lodz,
  name={\L\'od\'z},
  category={place},
  description={Polish city}
}

@index{places.Lodz,
  name={\L\'od\'z},
  parent={places},
  category={place},
  description={Polish city}
}

@index{Swietokrzyskie,
  name={{\'S}wi\k{e}tokrzyskie},
  category={place},
  description={Polish province}
}

@index{places.Swietokrzyskie,
  name={{\'S}wi\k{e}tokrzyskie},
  parent={places},
  category={place},
  description={Polish province}
}

@index{Zory,
  name={{\.Z}ory},
  category={place},
  description={Polish town and city county}
}

@index{places.Zory,
  name={{\.Z}ory},
  parent={places},
  category={place},
  description={Polish town and city county}
}

@index{Zelechow,
  name={{\.Z}elech\'ow},
  category={place},
  description={Polish town}
}

@index{places.Zelechow,
  name={{\.Z}elech\'ow},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Lobez,
  name={\L obez},
  category={place},
  description={Polish town}
}

@index{places.Lobez,
  name={\L obez},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Glogow,
  name={G\l og\'ow},
  category={place},
  description={Polish town}
}

@index{places.Glogow,
  name={G\l og\'ow},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Cmielow,
  name={{\'C}miel\'ow},
  category={place},
  description={Polish town}
}

@index{places.Cmielow,
  name={{\'C}miel\'ow},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Scinawa,
  name={{\'S}cinawa},
  category={place},
  description={Polish town}
}

@index{places.Scinawa,
  name={{\'S}cinawa},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Swidnica,
  name={{\'S}widnica},
  category={place},
  description={Polish town}
}

@index{places.Swidnica,
  name={{\'S}widnica},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Olvesvatn,
  name={{\"O}lvesvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Olvesvatn,
  name={{\"O}lvesvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Ulfsvatn,
  name={{\'U}lfsvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Ulfsvatn,
  name={{\'U}lfsvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Anavatn,
  name={{\'A}navatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Anavatn,
  name={{\'A}navatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Masvatn,
  name={M\'asvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Masvatn,
  name={M\'asvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Thrihyrningsvatn,
  name={\TH r\'{\i}hyrningsvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Thrihyrningsvatn,
  name={\TH r\'{\i}hyrningsvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Sigridharstadhavatn,
  name={Sigr\'{\i}\dh arsta\dh avatn},
  category={place},
  description={Icelandic lagoon}
}

@index{places.Sigridharstadhavatn,
  name={Sigr\'{\i}\dh arsta\dh avatn},
  parent={places},
  category={place},
  description={Icelandic lagoon}
}

@index{Graenavatn,
  name={Gr\ae navatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Graenavatn,
  name={Gr\ae navatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Arneslon,
  name={{\'A}rnesl\'on},
  category={place},
  description={Icelandic lake}
}

@index{places.Arneslon,
  name={{\'A}rnesl\'on},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Isholsvatn,
  name={{\'I}sh\'olsvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Isholsvatn,
  name={{\'I}sh\'olsvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{attachecase,
  name={attach\'e case},
  category={phrase},
  description={small, flat briefcase for carrying documents}
}

@index{piedaterre,
  name={pied-\`a-terre},
  category={phrase},
  description={small flat or house kept for occasional use}
}

@index{bergerehat,
  name={berg\`ere hat},
  category={phrase},
  description={a type of wide-brimmed straw hat}
}

@index{AndersJonasAngstrom,
  name={\AA ngstr\"om, Anders Jonas},
  text={Anders Jonas \AA ngstr\"om},
  category={person},
  description={Swedish physicist}
}

@index{people.AndersJonasAngstrom,
  name={\AA ngstr\"om, Anders Jonas},
  text={Anders Jonas \AA ngstr\"om},
  parent={people},
  category={person},
  description={Swedish physicist}
}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-samples-ascii.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-samples-utf8.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: UTF-8
%COMMENT

@index{dzsoker,
  name={dzsóker},
  category={word},
  description={joker (Hungarian)}
}

@index{czesc,
  name={cześć},
  category={word},
  description={hello (Polish)}
}

@index{elite,
  name={élite},
  category={word},
  description={group of people regarded as
the best of a particular society or organisation}
}

@index{aesthetic,
  name={æsthetic},
  category={word},
  description={concerning beauty}
}

@index{oesophagus,
  name={œsophagus},
  category={word},
  description={part of the alimentary canal}
}

@index{blase,
  name={blasé},
  category={word},
  description={unimpressed or indifferent due to familiarity}
}

@index{protege,
  name={protégé},
  category={word},
  description={person guided by an older more experienced person}
}

@index{clientele,
  name={clientèle},
  category={word},
  description={all the clients of a particular business}
}

@index{resumee,
  name={résumé},
  category={word},
  description={summary of something or curriculum vitae}
}

@index{soiree,
  name={soirée},
  category={word},
  description={an evening social gathering involving conversation or music}
}

@index{phoenix,
  name={phœnix},
  category={word},
  description={mythical bird that periodically burned itself and was reborn from the ashes}
}

@index{decor,
  name={décor},
  category={word},
  description={the furnishings and decorations of a room}
}

@index{faerie,
  name={færie},
  category={word},
  description={fairyland}
}

@index{facade,
  name={façade},
  category={word},
  description={the front face of a building}
}

@index{aethereal,
  name={æthereal},
  category={word},
  description={light, airy or tenuous}
}

@index{debutante,
  name={débutante},
  category={word},
  description={a young upper-class woman making her first appearance in society}
}

@index{naive,
  name={naïve},
  category={word},
  description={lacking experience or wisdom}
}

@index{foetid,
  name={fœtid},
  category={word},
  description={smelling very unpleasant}
}

@index{cliche,
  name={cliché},
  category={word},
  description={overused phrase or idea}
}

@index{deshabille,
  name={déshabillé},
  category={word},
  description={the state of being only partially clothed}
}

@index{negligee,
  name={négligée},
  category={word},
  description={a woman's very thin dressing gown}
}

@index{cafe,
  name={café},
  category={word},
  description={small restaurant that sells light meals}
}

@index{anaemic,
  name={anæmic},
  category={word},
  description={suffering from anaemia}
}

@index{thornletter,
  name={þ},
  category={word},
  see={thorn},
  description={thorn}
}

@index{thorn,
  name={thorn (þ)},
  category={word},
  description={Old English and Icelandic runic letter. In English, eventually replaced by the
digraph \tstidxqt{th}}
}

@index{ethletter,
  name={ð},
  category={word},
  see={eth},
  description={eth}
}

@index{eth,
  name={eth (ð)},
  category={word},
  description={Old English letter eventually
superseded by the digraph \tstidxqt{th}, but still in use in
some other languages}
}

@index{Ostergotland,
  name={Östergötland},
  category={place},
  description={a county in Sweden}
}

@index{places.Ostergotland,
  name={Östergötland},
  parent={places},
  category={place},
  description={a county in Sweden}
}

@index{Angelholm,
  name={Ängelholm},
  category={place},
  description={a place in Sweden}
}

@index{places.Angelholm,
  name={Ängelholm},
  parent={places},
  category={place},
  description={a place in Sweden}
}

@index{Oresund,
  name={Øresund},
  category={place},
  description={a strait which separates Denmark and Sweden}
}

@index{places.Oresund,
  name={Øresund},
  parent={places},
  category={place},
  description={a strait which separates Denmark and Sweden}
}

@index{Tarnby,
  name={Tårnby},
  category={place},
  description={a town in Denmark}
}

@index{places.Tarnby,
  name={Tårnby},
  parent={places},
  category={place},
  description={a town in Denmark}
}

@index{Rodovre,
  name={Rødovre},
  category={place},
  description={a Danish town}
}

@index{places.Rodovre,
  name={Rødovre},
  parent={places},
  category={place},
  description={a Danish town}
}

@index{Naestved,
  name={Næstved},
  category={place},
  description={a Danish town on the island of Zealand}
}

@index{places.Naestved,
  name={Næstved},
  parent={places},
  category={place},
  description={a Danish town on the island of Zealand}
}

@index{OlstykkeStenlose,
  name={Ølstykke-Stenløse},
  category={place},
  description={a Danish city in North Zealand}
}

@index{places.OlstykkeStenlose,
  name={Ølstykke-Stenløse},
  parent={places},
  category={place},
  description={a Danish city in North Zealand}
}

@index{Asslar,
  name={Aßlar},
  category={place},
  description={German town}
}

@index{places.Asslar,
  name={Aßlar},
  parent={places},
  category={place},
  description={German town}
}

@index{BadGottleubaBerggiesshubel,
  name={Bad Gottleuba-Berggießhübel},
  category={place},
  description={a town in the Free State of Saxony, Germany}
}

@index{places.BadGottleubaBerggiesshubel,
  name={Bad Gottleuba-Berggießhübel},
  parent={places},
  category={place},
  description={a town in the Free State of Saxony, Germany}
}

@index{Lodz,
  name={Łódź},
  category={place},
  description={Polish city}
}

@index{places.Lodz,
  name={Łódź},
  parent={places},
  category={place},
  description={Polish city}
}

@index{Swietokrzyskie,
  name={Świętokrzyskie},
  category={place},
  description={Polish province}
}

@index{places.Swietokrzyskie,
  name={Świętokrzyskie},
  parent={places},
  category={place},
  description={Polish province}
}

@index{Zory,
  name={Żory},
  category={place},
  description={Polish town and city county}
}

@index{places.Zory,
  name={Żory},
  parent={places},
  category={place},
  description={Polish town and city county}
}

@index{Zelechow,
  name={Żelechów},
  category={place},
  description={Polish town}
}

@index{places.Zelechow,
  name={Żelechów},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Lobez,
  name={Łobez},
  category={place},
  description={Polish town}
}

@index{places.Lobez,
  name={Łobez},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Glogow,
  name={Głogów},
  category={place},
  description={Polish town}
}

@index{places.Glogow,
  name={Głogów},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Cmielow,
  name={Ćmielów},
  category={place},
  description={Polish town}
}

@index{places.Cmielow,
  name={Ćmielów},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Scinawa,
  name={Ścinawa},
  category={place},
  description={Polish town}
}

@index{places.Scinawa,
  name={Ścinawa},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Swidnica,
  name={Świdnica},
  category={place},
  description={Polish town}
}

@index{places.Swidnica,
  name={Świdnica},
  parent={places},
  category={place},
  description={Polish town}
}

@index{Olvesvatn,
  name={Ölvesvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Olvesvatn,
  name={Ölvesvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Ulfsvatn,
  name={Úlfsvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Ulfsvatn,
  name={Úlfsvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Anavatn,
  name={Ánavatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Anavatn,
  name={Ánavatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Masvatn,
  name={Másvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Masvatn,
  name={Másvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Thrihyrningsvatn,
  name={Þríhyrningsvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Thrihyrningsvatn,
  name={Þríhyrningsvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Sigridharstadhavatn,
  name={Sigríðarstaðavatn},
  category={place},
  description={Icelandic lagoon}
}

@index{places.Sigridharstadhavatn,
  name={Sigríðarstaðavatn},
  parent={places},
  category={place},
  description={Icelandic lagoon}
}

@index{Graenavatn,
  name={Grænavatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Graenavatn,
  name={Grænavatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Arneslon,
  name={Árneslón},
  category={place},
  description={Icelandic lake}
}

@index{places.Arneslon,
  name={Árneslón},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{Isholsvatn,
  name={Íshólsvatn},
  category={place},
  description={Icelandic lake}
}

@index{places.Isholsvatn,
  name={Íshólsvatn},
  parent={places},
  category={place},
  description={Icelandic lake}
}

@index{attachecase,
  name={attaché case},
  category={phrase},
  description={small, flat briefcase for carrying documents}
}

@index{piedaterre,
  name={pied-à-terre},
  category={phrase},
  description={small flat or house kept for occasional use}
}

@index{bergerehat,
  name={bergère hat},
  category={phrase},
  description={a type of wide-brimmed straw hat}
}

@index{AndersJonasAngstrom,
  name={Ångström, Anders Jonas},
  text={Anders Jonas Ångström},
  category={person},
  description={Swedish physicist}
}

@index{people.AndersJonasAngstrom,
  name={Ångström, Anders Jonas},
  text={Anders Jonas Ångström},
  parent={people},
  category={person},
  description={Swedish physicist}
}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-samples-utf8.bib>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*testidx-glossaries-samples.bib>
%    \end{macrocode}
%\fi
%    \begin{macrocode}
%<<COMMENT
% Encoding: ASCII
%COMMENT

@index{packages,
  category={word},
  description={files provided to adjust the document
  design or provide new commands}
}

@index{books,
  category={word},
  description={written or printed works}
}

@index{films,
  category={word},
  description={stories recorded by camera}
}

@index{people,
  category={word},
  description={human individuals (or fictional
    anthropomorphisms)}
}

@index{places,
  category={word},
  description={particular areas or locations}
}

@index{subitems,
  category={word},
  name={sub-items},
  description={items that have a parent entry}
}

@index{applications,
  category={word},
  description={computer programs}
}

@index{environments,
  category={word},
  description={a marked-up block within the document
that requires special action or formatting}
}

@index{attributes,
  category={word},
  description={qualities or features that characterise something}
}

@index{check,
  category={word},
  description={make sure something is the case}
}

@index{chalk,
  category={word},
  description={soft limestone substance made into sticks to
use for writing}
}

@index{daft,
  category={word},
  description={silly or foolish}
}

@index{parse,
  category={word},
  description={divide a sentence into its component parts for
analysis}
}

@index{interpret,
  category={word},
  description={translate or explain the meaning of}
}

@index{oak,
  category={word},
  description={large tree that produces acorns}
}

@index{rhubarb,
  category={word},
  description={thick reddish or green leaf stalks
of a plant from the dock family}
}

@index{rhinoceros,
  category={word},
  description={a large plant-eating mammal
with one or two horns on its nose}
}

@index{aardvark,
  category={word},
  description={an African mammal}
}

@index{ddisgynedig,
  category={word},
  description={descending (Welsh)}
}

@index{ddyrchafedig,
  category={word},
  description={advanced (Welsh)}
}

@index{ffotograff,
  category={word},
  description={photo (Welsh)}
}

@index{index,
  category={word},
  description={an alphabetical list of names, terms or
   subjects with references to where they occur in the document}
}

@index{phrase,
  category={word},
  description={group of words forming a unit}
}

@index{glossary,
  category={word},
  description={an alphabetical list of words with explanations}
}

@index{layout,
  category={word},
  description={the way something is laid out (for example, on a page)}
}

@index{filler,
  category={word},
  description={something used to fill in gaps or increase bulk}
}

@index{padding,
  category={word},
  description={something used to pad out material to make it
longer},
  seealso={filler}
}

@index{example,
  category={word},
  description={thing used to illustrate something}
}

@index{purpose,
  category={word},
  description={the reason for doing something}
}

@index{whatsit,
  category={word},
  description={In \TeX\ terms, a mechanism to allow
extensions to \TeX, including writing to files or providing
special instructions to printing devices. More generally,
a whatsit is an unnamed person or thing}
}

@index{test,
  category={word},
  description={a means of testing something}
}

@index{design,
  category={word},
  description={plan or purpose}
}

@index{document,
  category={word},
  description={a piece of written, printed or electronic
matter that provides information}
}

@index{book,
  category={word},
  description={written or printed work}
}

@index{range,
  category={word},
  description={area of variation or scope}
}

@index{word,
  category={word},
  description={single unit of language which has meaning}
}

@index{marker,
  category={word},
  description={an identifying symbol}
}

@index{footnote,
  category={word},
  description={additional information written at the bottom of a page}
}

@index{encap,
  category={word},
  description={the format used to encapsulate the location}
}

@index{text,
  category={word},
  description={written or printed or electronically
represented words}
}

@index{argument,
  category={word},
  description={parameter passed to a command or
application}
}

@index{predefined,
  category={word},
  description={already defined}
}

@index{excessive,
  category={word},
  description={more than normal or desired}
}

@index{block,
  category={word},
  description={large quantity of things viewed as a unit}
}

@index{paragraph,
  category={word},
  description={block of writing, beginning on a new line}
}

@index{waffle,
  category={word},
  description={speak or write vague or trivial information in a
lengthy way}
}

@index{gibberish,
  category={word},
  description={meaningless or hard to comprehend speech
or writing}
}

@index{gobbledegook,
  category={word},
  description={language that is difficult to understand},
  see={gibberish}
}

@index{clarify,
  category={word},
  description={make it easier to understand}
}

@index{confidential,
  category={word},
  description={private or secret information}
}

@index{roundabout,
  category={word},
  description={not direct}
}

@index{fashion,
  category={word},
  description={a way of doing something}
}

@index{illustration,
  category={word},
  description={an example to explain something},
  seealso={example}
}

@index{wit,
  category={word},
  description={natural talent for saying or writing things in
an amusing or clever way}
}

@index{eloquence,
  category={word},
  description={fluent or persuasive speech or writing}
}

@index{adage,
  category={word},
  description={popular saying}
}

@index{motto,
  category={word},
  description={short sentence of phrase expressing a belief
or aim}
}

@index{verbiage,
  category={word},
  description={excessively length speech or writing}
}

@index{drivel,
  category={word},
  description={nonsense}
}

@index{tutor,
  category={word},
  description={teacher}
}

@index{grass,
  category={word},
  description={in addition to the plant, also slang for
reporting criminal activity}
}

@index{distress,
  category={word},
  description={cause anxiety}
}

@index{concordance,
  category={word},
  description={an alphabetical list of important words
used in a document}
}

@index{ogling,
  category={word},
  description={staring at someone in a lecherous manner}
}

@index{gawping,
  category={word},
  description={staring in a rude or stupid manner},
  see={ogling}
}

@index{passim,
  category={word},
  description={referencing various places in a document}
}

@index{localisation,
  category={word},
  description={place or position}
}

@index{digraph,
  category={word},
  description={two letters representing a single sound}
}

@index{trigraph,
  category={word},
  description={three letters representing a single sound}
}

@index{lyuk,
  category={word},
  description={hole (Hungarian)},
  seealso={digraph}
}

@index{dzs,
  category={trigraph},
  description={Hungarian \glshyperlink{trigraph} considered a separate letter}
}

@index{cz,
  category={digraph},
  description={digraph in some languages, such as Polish}
}

@index{dd,
  category={digraph},
  description={digraph in some languages, such as Welsh}
}

@index{ff,
  category={digraph},
  description={digraph in some languages, such as Welsh}
}

@index{ng,
  category={digraph},
  description={digraph in some languages, such as Welsh}
}

@index{ly,
  category={digraph},
  description={digraph in some languages, such as Hungarian}
}

@index{dzsungel,
  category={word},
  description={jungle (Hungarian)},
  seealso={trigraph}
}

@index{nonsense,
  category={word},
  description={something that doesn't make sense}
}

@index{volauvent,
  category={word},
  name={vol-au-vent},
  description={small round puff pastry containing savoury food}
}

@index{two,
  category={word},
  description={number following one}
}

@index{sculpture,
  category={word},
  description={artwork made of wood, metal or stone}
}

@index{Venus,
  category={word},
  description={Roman goddess (or planet named after her)}
}

@index{zoo,
  category={word},
  description={place containing animals}
}

@index{alphabet,
  category={word},
  description={ordered set of letters used to form words}
}

@index{resume,
  category={word},
  description={continue after an interruption}
}

@index{fly,
  category={word},
  description={travel by air}
}

@index{aeroplane,
  category={word},
  description={fixed wing flying vehicle}
}

@index{window,
  category={word},
  description={opening in wall or window to view out or in}
}

@index{ogonek,
  category={word},
  description={a diacritic hook placed under the lower right
corner of a vowel}
}

@index{sail,
  category={word},
  description={travel by or navigate a boat}
}

@index{ship,
  category={word},
  description={large boat}
}

@index{OT1,
  category={word},
  description={one of the original font encodings provided with
\TeX}
}

@index{UTF8,
  name={UTF-8},
  category={word},
  description={character encoding that uses 8-bit code units}
}

@index{life,
  category={word},
  description={existence}
}

@index{universe,
  category={word},
  description={all existing space and matter}
}

@index{even,
  category={word},
  description={multiple of two}
}

@index{century,
  category={word},
  description={period of 100 years or a score of 100 runs}
}

@index{cricket,
  category={word},
  description={bat and ball game played between two teams
with eleven players on either side}
}

@index{calendar,
  category={word},
  description={chart or list showing a period of time}
}

@index{prefix,
  category={word},
  description={word or letter placed at the start of another
word}
}

@index{gobsmacked,
  category={word},
  description={astonished}
}

@index{astounded,
  category={word},
  description={shocked or very surprised}
}

@index{quaint,
  category={word},
  description={old-fashioned or unusual}
}

@index{yatter,
  category={word},
  description={chatter or talk non-stop}
}

@index{yawn,
  category={word},
  description={open one's mouth due to tiredness or boredom}
}

@index{quirky,
  category={word},
  description={peculiar or unexpected habits}
}

@index{badinage,
  category={word},
  description={witty conversation}
}

@index{expire,
  category={word},
  description={come to an end}
}

@index{story,
  category={word},
  description={account or description of imaginary or real
events}
}

@index{begin,
  category={word},
  description={start something}
}

@index{forget,
  category={word},
  description={fail to remember something}
}

@index{tale,
  category={word},
  description={a story}
}

@index{adventure,
  category={word},
  description={unusual or exciting or daring experience}
}

@index{derringdo,
  name={derring-do},
  category={word},
  description={heroic action}
}

@index{hero,
  category={word},
  description={principle male character in a story or a person
admired for their achievements}
}

@index{title,
  category={word},
  description={name of a document or work, or a name that
describes a position}
}

@index{knight,
  category={word},
  description={a man raised to military rank after service
as a page or squire, or a man entitled to use \tstidxqt{Sir} before
his name}
}

@index{handsome,
  category={word},
  description={good-looking}
}

@index{bold,
  category={word},
  description={confident or brave}
}

@index{brave,
  category={word},
  description={prepared to face danger or difficulties}
}

@index{duck,
  category={word},
  description={a waterbird with a blunt bill, short legs and webbed
feet}
}

@index{name,
  category={word},
  description={word or words by which something is known}
}

@index{plight,
  category={word},
  description={dangerous situation}
}

@index{land,
  category={word},
  description={area of ground}
}

@index{OgRe,
  category={word},
  description={an ogre is a man-eating giant or a terrifying
person. The silly capitalisation is just a reference to \TeX's
output routine}
}

@index{reference,
  category={word},
  description={referring to something}
}

@index{perilous,
  category={word},
  description={dangerous or full of risk}
}

@index{quest,
  category={word},
  description={long or difficult search for something}
}

@index{xor,
  category={word},
  description={\LaTeX3 experimental output routine}
}

@index{continuation,
  category={word},
  description={state of continuing}
}

@index{newcomers,
  category={word},
  description={recent arrivals}
}

@index{nod,
  category={word},
  description={in addition to the action of moving one's head
up and down, also indicates a reference of acknowledgement of
something}
}

@index{centre,
  category={word},
  description={point in the middle (UK spelling)}
}

@index{center,
  category={word},
  description={point in the middle (US spelling)}
}

@index{lore,
  category={word},
  description={tradition or knowledge of a particular subject}
}

@index{raft,
  category={word},
  description={flat water vessel made from pieces of wood
tied together}
}

@index{external,
  category={word},
  description={belonging outside of something}
}

@index{pun,
  category={word},
  description={play on words}
}

@index{joke,
  category={word},
  description={something said to amuse others}
}

@index{witty,
  category={word},
  description={having the ability to say clever or
amusing things}
}

@index{cameo,
  category={word},
  description={small part in a story for a distinguished
actor}
}

@index{exclamation,
  category={word},
  description={sudden cry}
}

@index{bog,
  category={word},
  description={area of soft, wet, muddy ground}
}

@index{leviathans,
  category={word},
  description={very large, powerful thing (such as a sea
monster)}
}

@index{vale,
  category={word},
  description={valley}
}

@index{doom,
  category={word},
  description={fate}
}

@index{chaos,
  category={word},
  description={complete confusion or disorder}
}

@index{butterfly,
  category={word},
  description={winged insect}
}

@index{motif,
  category={word},
  description={repeated theme}
}

@index{sentence,
  category={word},
  description={set of words forming a complete statement,
instruction or question}
}

@index{conjunction,
  category={word},
  description={word used to connect words or clauses}
}

@index{naughty,
  category={word},
  description={badly behaved}
}

@index{leap,
  category={word},
  description={jump far or high across something}
}

@index{bound,
  category={word},
  description={leaping movement}
}

@index{sword,
  category={word},
  description={weapon with a long metal blade}
}

@index{myriad,
  category={word},
  description={countless or a very great number}
}

@index{clones,
  category={word},
  description={identical copy}
}

@index{repetition,
  category={word},
  description={something that's been repeated}
}

@index{lair,
  category={word},
  description={hiding place or den}
}

@index{roar,
  category={word},
  description={loud, deep sound}
}

@index{peace,
  category={word},
  description={freedom from war or anxiety}
}

@index{harmony,
  category={word},
  description={arranged well or peacefully together}
}

@index{span,
  category={word},
  description={length of time or full extent or extend across
something}
}

@index{fear,
  category={word},
  description={anxiety about something unpleasant}
}

@index{thrilling,
  category={word},
  description={exciting}
}

@index{quixotic,
  category={word},
  description={impractically unselfish and idealist}
}

@index{seal,
  category={word},
  description={sea-dwelling fish-eating mammal with flippers}
}

@index{sea,
  category={word},
  description={large area of salt water}
}

@index{seaborne,
  category={word},
  description={transported or travelling by sea}
}

@index{zither,
  category={word},
  description={a type of stringed musical instrument}
}

@index{zealous,
  category={word},
  description={having great enthusiasm for something}
}

@index{fan,
  category={word},
  description={an admirer of something}
}

@index{youthful,
  category={word},
  description={seeming young}
}

@index{magic,
  category={word},
  description={having the apparent power of supernatural or
mysterious forces}
}

@index{magical,
  category={word},
  description={relating to or using magic}
}

@index{yoyo,
  name={yo-yo},
  category={word},
  description={a round toy consisting of two discs and a
piece of string}
}

@index{wily,
  category={word},
  description={using cunning or crafty methods to gain an
advantage}
}

@index{wombat,
  category={word},
  description={a type of small marsupial}
}

@index{warrior,
  category={word},
  description={brave or experienced fighter}
}

@index{laserguided,
  name={laser-guided},
  category={word},
  description={guided by a laser}
}

@index{villainous,
  category={word},
  description={characteristic of a villain}
}

@index{zany,
  category={word},
  description={amusingly unconventional}
}

@index{zoologist,
  category={word},
  description={someone who studies animals}
}

@index{xebec,
  category={word},
  description={a type of small sailing ship}
}

@index{xenon,
  category={word},
  description={a type of inert gas}
}

@index{xylem,
  category={word},
  description={a plant tissue}
}

@index{xylene,
  category={word},
  description={a type of liquid hydrocarbon}
}

@index{zounds,
  category={word},
  description={an exclamation}
}

@index{Ooh,
  category={word},
  description={an exclamation}
}

@index{zucchini,
  category={word},
  description={a type of long, green summer squash (called
a courgette in British English)}
}

@index{xylophone,
  category={word},
  description={a type of musical instrument}
}

@index{exhilarating,
  category={word},
  description={pleasing or energetic}
}

@index{yuppie,
  category={word},
  description={urban well-paid young middle-class professional}
}

@index{yoghurt,
  category={word},
  description={thick, liquid food made from milk}
}

@index{yummy,
  category={word},
  description={delicious}
}

@index{yuck,
  category={word},
  description={disgusting}
}

@index{Viking,
  category={word},
  description={a member of Scandinavian seafaring people
between the eighth and eleventh centuries}
}

@index{vignette,
  category={word},
  description={brief episode}
}

@index{viceroy,
  category={word},
  description={a person who governs a colony on behalf of
the sovereign}
}

@index{vichyssoise,
  category={word},
  description={a type of soup}
}

@index{viceregal,
  category={word},
  description={relating to a viceroy}
}

@index{quiz,
  category={word},
  description={game or competition}
}

@index{glyph,
  category={word},
  description={small graphic symbol}
}

@index{asleep,
  category={word},
  description={in or into a state of sleep}
}

@index{ashore,
  category={word},
  description={to or on shore or land}
}

@index{aspire,
  category={word},
  description={to have strong ambitions to be or do something}
}

@index{assailed,
  category={word},
  description={past tense of assail}
}

@index{recover,
  category={word},
  description={get well again}
}

@index{reecover,
  name={re-cover},
  category={word},
  description={to cover again}
}

@index{document.properties,
  name={properties},
  parent={document},
  category={word},
  description={attributes such as page size}
}

@index{subitems.lonely,
  name={lonely},
  parent={subitems},
  category={word},
  description={a sub-item that doesn't have any siblings}
}

@index{fontencoding.OT1,
  name={OT1},
  parent={fontencoding},
  category={word},
  description={one of the original font encodings supplied with \TeX}
}

@index{hero.intrepid,
  name={intrepid},
  parent={hero},
  category={word},
  description={a hero known for his boldness and bravery},
  see={intrepidhero}
}
@index{dadorail,
  name={dado rail},
  category={phrase},
  description={waist-high moulding around the wall of a room}
}

@index{indexingapplication,
  name={indexing application},
  category={phrase},
  description={an application that generates a document index}
}

@index{visualeffects,
  name={visual effects},
  category={phrase},
  description={use of imagery to create an effect}
}

@index{dummytext,
  name={dummy text},
  category={phrase},
  description={sample text used for demonstration not
for its content}
}

@index{pagebreak,
  name={page break},
  category={phrase},
  description={the point where document text is broken
across two pages}
}

@index{linktext,
  name={link text},
  category={phrase},
  description={for the \glshyperlink{glossariespackage}
package, this refers to the text inserted into the document
through commands like \glshyperlink{cs.gls}}
}

@index{crossreference,
  name={cross-reference},
  category={phrase},
  description={reference to another part of the
document or to a part of another document}
}

@index{marginalnote,
  name={marginal note},
  category={phrase},
  description={text that's placed in the page margin}
}

@index{overfulllines,
  name={overfull lines},
  category={phrase},
  description={lines where the text extends into
the margin because of a formatting failure}
}

@index{loremipsum,
  name={lorem ipsum},
  category={phrase},
  description={dummy text}
}

@index{betweenyoumeandthegatepost,
  name={between you, me and the gatepost},
  category={phrase},
  description={an expression
meaning you're telling someone a secret that shouldn't be passed on
(common in some British dialects)}
}

@index{waywithwords,
  name={way with words},
  category={phrase},
  description={have a particular talent with words}
}

@index{creativewriting,
  name={creative writing},
  category={phrase},
  description={writing typically identified
by narrative craft, character development and use of literary tropes}
}

@index{cuttothechase,
  name={cut to the chase},
  category={phrase},
  description={get to the point}
}

@index{gettothepoint,
  name={get to the point},
  category={phrase},
  description={state something directly}
}

@index{keepmum,
  name={keep mum},
  category={phrase},
  description={be silent about something},
  seealso={confidential}
}

@index{outputroutine,
  name={output routine},
  category={phrase},
  description={\TeX's method of outputting a page}
}

@index{outofwhack,
  name={out of whack},
  category={phrase},
  description={out of order or not working}
}

@index{pagedimensions,
  name={page dimensions},
  category={phrase},
  description={the dimensions of a page (such as
the page width and page height)}
}

@index{fontfamily,
  name={font family},
  category={phrase},
  description={the name of a font}
}

@index{fontsize,
  name={font size},
  category={phrase},
  description={the size of a font}
}

@index{locationlist,
  name={location list},
  category={phrase},
  description={the list of locations used in an index to indicate
where
the term being referenced was used in the document},
  seealso={crossreference}
}

@index{rangeseparator,
  name={range separator},
  category={phrase},
  description={the symbol
used between the start and end location to indicate a range},
  see={locationlist}
}

@index{pagenumber,
  name={page number},
  category={phrase},
  description={the number identifying a particular page}
}

@index{multipleencaps,
  name={multiple encaps},
  category={phrase},
  description={a warning issued by
\glshyperlink{makeindex} when the same page number is indexed
with different encap values}
}

@index{inputencoding,
  name={input encoding},
  category={phrase},
  description={the character encoding used
in the document source code}
}

@index{fontencoding,
  name={font encoding},
  category={phrase},
  description={the encoding used by the document
font}
}

@index{extendedLatincharacters,
  name={extended Latin characters},
  category={phrase},
  description={Latin characters outside the basic ASCII set}
}

@index{cupoftea,
  name={cup of tea},
  category={phrase},
  description={an expression indicating what one likes
or is interested in}
}

@index{whistlestoptour,
  name={whistle-stop tour},
  category={phrase},
  description={a series of short visits to different places}
}

@index{numbergroup,
  name={number group},
  category={phrase},
  description={a group associated with numbers}
}

@index{primenumber,
  name={prime number},
  category={phrase},
  description={a number that is only divisible by itself and 1}
}

@index{holdmybreath,
  name={hold my breath},
  category={phrase},
  description={stop breathing temporarily, also used as an expression to indicate a state of anticipation or
suspense}
}

@index{lettergroups,
  name={letter groups},
  category={phrase},
  description={groups associated with letters}
}

@index{Onceuponatime,
  name={Once upon a time},
  category={phrase},
  description={an expression commonly used at
the start of fairy tales}
}

@index{acrossthepond,
  name={across the pond},
  category={phrase},
  description={colloquial expression indicating
the other side of the Atlantic}
}

@index{badform,
  name={bad form},
  category={phrase},
  description={an offence against accepted behaviour}
}

@index{MontyPython,
  name={Monty Python},
  category={phrase},
  description={a British surreal comedy group}
}

@index{magicincantation,
  name={magic incantation},
  category={phrase},
  description={words used to create a magical effect}
}

@index{commonknowledge,
  name={common knowledge},
  category={phrase},
  description={something widely known}
}

@index{intrepidhero,
  name={intrepid hero},
  category={phrase},
  description={a hero known for his boldness and bravery}
}

@index{sealion,
  name={sea lion},
  category={phrase},
  description={a type of large seal}
}

@index{sealantgun,
  name={sealant gun},
  category={phrase},
  description={a device used for applying sealant}
}

@index{zootsuit,
  name={zoot suit},
  category={phrase},
  description={a suit typically having a long loose
jacket and high-waisted trousers}
}

@index{anonymousreviewer,
  name={anonymous reviewer},
  category={phrase},
  description={an unnamed reviewer}
}

@index{yulelog,
  name={yule log},
  category={phrase},
  description={a large log traditionally burnt on
Christmas Eve or a log-shaped chocolate cake}
}

@index{vicepresident,
  name={vice-president},
  category={phrase},
  description={a president's deputy}
}

@index{viceadmiral,
  name={vice admiral},
  category={phrase},
  description={a high rank of naval officer}
}

@index{Victoriaplum,
  name={Victoria plum},
  category={phrase},
  description={a large, red, dessert plum}
}

@index{Victoriasponge,
  name={Victoria sponge},
  category={phrase},
  description={a sponge cake consisting of two
layers with jam filling in between}
}

@index{viceversa,
  name={vice versa},
  category={phrase},
  description={reversing the order of the items just mentioned}
}

@index{vicechancellor,
  name={vice chancellor},
  category={phrase},
  description={a deputy chancellor of a
British university in charge of its administration}
}

@index{letterordering,
  name={letter ordering},
  category={phrase},
  description={ordering according to the
individual characters}
}

@index{wordordering,
  name={word ordering},
  category={phrase},
  description={ordering according to the
language or locale's definition of words}
}

@index{commercialworld,
  name={commercial world, the},
  text={the commercial world},
  category={phrase},
  description={pertaining to commerce}
}

@index{farawayland,
  name={far away land, a},
  text={a far away land},
  category={phrase},
  description={somewhere that's far away; a
term often used in fairy tales}
}

@index{GoldenArara,
  name={Golden Arara, the},
  text={the Golden Arara},
  category={phrase},
  description={a made-up item in the dummy text}
}

@index{MightyHelmofKnuth,
  name={Mighty Helm of Knuth, the},
  text={the Mighty Helm of Knuth},
  category={phrase},
  description={a made-up item in the dummy text}
}

@index{LegendarySword,
  name={Legendary Sword, the},
  text={the Legendary Sword},
  category={phrase},
  description={a made-up item in the dummy text}
}

@index{BogofEternalGlossaries,
  name={Bog of Eternal Glossaries, the},
  text={the Bog of Eternal Glossaries},
  category={phrase},
  description={a made-up place in the dummy text}
}

@index{DreadValeoftheEditors,
  name={Dread Vale of the Editors, the},
  text={the Dread Vale of the Editors},
  category={phrase},
  description={a made-up place in the dummy text}
}

@index{butterfliesofchaos,
  name={butterflies of chaos, the},
  text={the butterflies of chaos},
  category={phrase},
  description={the butterfly effect is a popular method of describing aspects of chaos theory}
}

@index{End,
  name={End, The},
  text={The End},
  category={phrase},
  description={denotes the end of a story, especially fairy tales}
}

@index{locationlist.pageseparator,
  name={page separator},
  parent={locationlist},
  category={phrase},
  description={symbol used to separate page references}
}

@index{locationlist.rangeseparator,
  name={range separator},
  parent={locationlist},
  category={phrase},
  description={symbol used to mark page range references}
}

@index{motjuste,
 name={mot juste},
 description={the most appropriate word}
}

@index{Poland,
  name={Poland},
  category={place},
  description={an Eastern European country}
}

@index{places.Poland,
  name={Poland},
  parent={places},
  category={place},
  description={an Eastern European country}
}

@index{Glasgow,
  name={Glasgow},
  category={place},
  description={a Scottish city}
}

@index{places.Glasgow,
  name={Glasgow},
  parent={places},
  category={place},
  description={a Scottish city}
}

@index{Iceland,
  name={Iceland},
  category={place},
  description={a Nordic island nation}
}

@index{places.Iceland,
  name={Iceland},
  parent={places},
  category={place},
  description={a Nordic island nation}
}

@index{Nghaerdydd,
  name={Nghaerdydd},
  category={place},
  description={Cardiff}
}

@index{places.Nghaerdydd,
  name={Nghaerdydd},
  parent={places},
  category={place},
  description={Cardiff}
}

@index{Nghymru,
  name={Nghymru},
  category={place},
  description={Wales}
}

@index{places.Nghymru,
  name={Nghymru},
  parent={places},
  category={place},
  description={Wales}
}

@index{Ffestiniog,
  name={Ffestiniog},
  category={place},
  description={a place in Wales}
}

@index{places.Ffestiniog,
  name={Ffestiniog},
  parent={places},
  category={place},
  description={a place in Wales}
}

@index{BogofEternalStench,
  name={Bog of Eternal Stench, the},
  text={the Bog of Eternal Stench},
  category={place},
  description={place in the film \glshyperlink{Labyrinth}}
}

@index{places.BogofEternalStench,
  name={Bog of Eternal Stench, the},
  text={the Bog of Eternal Stench},
  parent={places},
  category={place},
  description={place in the film \glshyperlink{Labyrinth}}
}

@index{JamesJoyce,
  name={Joyce, James},
  text={James Joyce},
  category={person},
  description={an author}
}

@index{people.JamesJoyce,
  name={Joyce, James},
  text={James Joyce},
  parent={people},
  category={person},
  description={an author}
}

@index{DonaldKnuth,
  name={Knuth, Donald},
  text={Donald Knuth},
  category={person},
  description={creator of \TeX}
}

@index{people.DonaldKnuth,
  name={Knuth, Donald},
  text={Donald Knuth},
  parent={people},
  category={person},
  description={creator of \TeX}
}

@index{PauloCereda,
  name={Cereda, Paulo},
  text={Paulo Cereda},
  category={person},
  description={creator of \glshyperlink{arara}}
}

@index{people.PauloCereda,
  name={Cereda, Paulo},
  text={Paulo Cereda},
  parent={people},
  category={person},
  description={creator of \glshyperlink{arara}}
}

@index{SirQuackalot,
  name={Quackalot, Sir},
  text={Sir Quackalot},
  category={person},
  description={fictitious character}
}

@index{people.SirQuackalot,
  name={Quackalot, Sir},
  text={Sir Quackalot},
  parent={people},
  category={person},
  description={fictitious character}
}

@index{theFairyGoose,
  name={Fairy Goose, the},
  text={the Fairy Goose},
  category={person},
  description={fictitious character}
}

@index{people.theFairyGoose,
  name={Fairy Goose, the},
  text={the Fairy Goose},
  parent={people},
  category={person},
  description={fictitious character}
}

@index{DavidCarlisle,
  name={Carlisle, David},
  text={David Carlisle},
  category={person},
  description={member of the \LaTeX3 team}
}

@index{people.DavidCarlisle,
  name={Carlisle, David},
  text={David Carlisle},
  parent={people},
  category={person},
  description={member of the \LaTeX3 team}
}

@index{JosephWright,
  name={Wright, Joseph},
  text={Joseph Wright},
  category={person},
  description={member of the \LaTeX3 team}
}

@index{people.JosephWright,
  name={Wright, Joseph},
  text={Joseph Wright},
  parent={people},
  category={person},
  description={member of the \LaTeX3 team}
}

@index{Ulysses,
  name={\tstidxbookfmt{Ulysses}},
  category={book},
  description={a modernist novel by James Joyce}
}

@index{books.Ulysses,
  name={\tstidxbookfmt{Ulysses}},
  parent={books},
  category={book},
  description={a modernist novel by James Joyce}
}

@index{SirQuackalotandtheGoldenArara,
  name={\tstidxbookfmt{Sir Quackalot and the Golden Arara}},
  category={book},
  description={a fictitious book}
}

@index{books.SirQuackalotandtheGoldenArara,
  name={\tstidxbookfmt{Sir Quackalot and the Golden Arara}},
  parent={books},
  category={book},
  description={a fictitious book}
}

@index{SirQuackalotandtheHyperLakeofDoom,
  name={\tstidxbookfmt{Sir Quackalot and the Hyper Lake of Doom}},
  category={book},
  description={a fictitious book}
}

@index{books.SirQuackalotandtheHyperLakeofDoom,
  name={\tstidxbookfmt{Sir Quackalot and the Hyper Lake of Doom}},
  parent={books},
  category={book},
  description={a fictitious book}
}

@index{CompactOxfordEnglishDictionary,
  name={\tstidxbookfmt{Compact Oxford English Dictionary}},
  category={book},
  description={a dictionary}
}

@index{books.CompactOxfordEnglishDictionary,
  name={\tstidxbookfmt{Compact Oxford English Dictionary}},
  parent={books},
  category={book},
  description={a dictionary}
}

@index{HitchhikersGuidetotheGalaxy,
  name={\tstidxbookfmt{Hitchhiker's Guide to the Galaxy, the}},
  text={\tstidxbookfmt{the Hitchhiker's Guide to the Galaxy}},
  category={book},
  description={a comedy series by Douglas Adams, originally created for radio but later
adapted to book, TV and film}
}

@index{books.HitchhikersGuidetotheGalaxy,
  name={\tstidxbookfmt{Hitchhiker's Guide to the Galaxy, the}},
  text={\tstidxbookfmt{the Hitchhiker's Guide to the Galaxy}},
  parent={books},
  category={book},
  description={a comedy series by Douglas Adams, originally created for radio but later
adapted to book, TV and film}
}

@index{AdventuresofSirQuackalot,
  name={\tstidxbookfmt{Adventures of Sir Quackalot, the}},
  text={\tstidxbookfmt{the Adventures of Sir Quackalot}},
  category={book},
  description={a fictitious book}
}

@index{books.AdventuresofSirQuackalot,
  name={\tstidxbookfmt{Adventures of Sir Quackalot, the}},
  text={\tstidxbookfmt{the Adventures of Sir Quackalot}},
  parent={books},
  category={book},
  description={a fictitious book}
}

@index{Labyrinth,
  name={\tstidxfilmfmt{Labyrinth}},
  category={film},
  description={a musical fantasy film}
}

@index{films.Labyrinth,
  name={\tstidxfilmfmt{Labyrinth}},
  parent={films},
  category={film},
  description={a musical fantasy film}
}

@index{ThirdMan,
  name={\tstidxfilmfmt{Third Man, The}},
  text={\tstidxfilmfmt{The Third Man}},
  category={film},
  description={a British film noir}
}

@index{films.ThirdMan,
  name={\tstidxfilmfmt{Third Man, The}},
  text={\tstidxfilmfmt{The Third Man}},
  parent={films},
  category={film},
  description={a British film noir}
}

@index{TeX,
  name={\TeX},
  category={symbol},
  description={a typesetting system created by Donald Knuth}
}

@index{fx,
  name={$f(\vec{x})$},
  text={f(\vec{x})},
  category={math},
  description={a function of $x$}
}

@index{n,
  name={$n$},
  text={n},
  category={math},
  description={an integer}
}

@index{E,
  name={$E$},
  text={E},
  category={math},
  description={energy}
}

@index{testidxpackage,
  name={\tstidxstyfmt{testidx} package},
  text={\tstidxstyfmt{testidx}},
  category={package},
  description={package that produces dummy text for testing
index styles and indexing applications}
}

@index{packages.testidxpackage,
  name={\tstidxstyfmt{testidx}},
  parent={packages},
  category={package},
  description={package that produces dummy text for testing
index styles and indexing applications}
}

@index{testidxglossariespackage,
  name={\tstidxstyfmt{testidx-glossaries} package},
  text={\tstidxstyfmt{testidx-glossaries}},
  category={package},
  description={package that produces dummy text
for testing glossary styles and indexing applications that integrate
with the \glshyperlink{glossariespackage} or
\glshyperlink{glossariesextrapackage} packages}
}

@index{packages.testidxglossariespackage,
  name={\tstidxstyfmt{testidx-glossaries}},
  parent={packages},
  category={package},
  description={package that produces dummy text
for testing glossary styles and indexing applications that integrate
with the \glshyperlink{glossariespackage} or
\glshyperlink{glossariesextrapackage} packages}
}

@index{glossariespackage,
  name={\tstidxstyfmt{glossaries} package},
  text={\tstidxstyfmt{glossaries}},
  category={package},
  description={a package for creating glossaries or lists
of terms, symbols or abbreviations}
}

@index{packages.glossariespackage,
  name={\tstidxstyfmt{glossaries}},
  parent={packages},
  category={package},
  description={a package for creating glossaries or lists
of terms, symbols or abbreviations}
}

@index{glossariesextrapackage,
  name={\tstidxstyfmt{glossaries-extra} package},
  text={\tstidxstyfmt{glossaries-extra}},
  category={package},
  description={an extension to the \glshyperlink{glossariespackage} package}
}

@index{packages.glossariesextrapackage,
  name={\tstidxstyfmt{glossaries-extra}},
  parent={packages},
  category={package},
  description={an extension to the \glshyperlink{glossariespackage} package}
}

@index{hyperrefpackage,
  name={\tstidxstyfmt{hyperref} package},
  text={\tstidxstyfmt{hyperref}},
  category={package},
  description={a package that provides extensive support for hypertext}
}

@index{packages.hyperrefpackage,
  name={\tstidxstyfmt{hyperref}},
  parent={packages},
  category={package},
  description={a package that provides extensive support for hypertext}
}

@index{lipsumpackage,
  name={\tstidxstyfmt{lipsum} package},
  text={\tstidxstyfmt{lipsum}},
  category={package},
  description={a package that generates dummy text}
}

@index{packages.lipsumpackage,
  name={\tstidxstyfmt{lipsum}},
  parent={packages},
  category={package},
  description={a package that generates dummy text}
}

@index{inputencpackage,
  name={\tstidxstyfmt{inputenc} package},
  text={\tstidxstyfmt{inputenc}},
  category={package},
  description={a package that can be used to identify the document
encoding}
}

@index{packages.inputencpackage,
  name={\tstidxstyfmt{inputenc}},
  parent={packages},
  category={package},
  description={a package that can be used to identify the document
encoding}
}

@index{fontencpackage,
  name={\tstidxstyfmt{fontenc} package},
  text={\tstidxstyfmt{fontenc}},
  category={package},
  description={a package that can be used to set the font
encoding},
  seealso={inputencpackage}
}

@index{packages.fontencpackage,
  name={\tstidxstyfmt{fontenc}},
  parent={packages},
  category={package},
  description={a package that can be used to set the font encoding}
}

@index{amsmathpackage,
  name={\tstidxstyfmt{amsmath} package},
  text={\tstidxstyfmt{amsmath}},
  category={package},
  description={a package that provides AMS mathematical
facilities}
}

@index{packages.amsmathpackage,
  name={\tstidxstyfmt{amsmath}},
  parent={packages},
  category={package},
  description={a package that provides AMS mathematical
facilities}
}

@index{amssymbpackage,
  name={\tstidxstyfmt{amssymb} package},
  text={\tstidxstyfmt{amssymb}},
  category={package},
  description={a package that provides mathematical
symbols}
}

@index{packages.amssymbpackage,
  name={\tstidxstyfmt{amssymb}},
  parent={packages},
  category={package},
  description={a package that provides mathematical
symbols}
}

@index{longtablepackage,
  name={\tstidxstyfmt{longtable} package},
  text={\tstidxstyfmt{longtable}},
  category={package},
  description={a package that allows tables to flow over
page boundaries}
}

@index{packages.longtablepackage,
  name={\tstidxstyfmt{longtable}},
  parent={packages},
  category={package},
  description={a package that allows tables to flow over
page boundaries}
}

@index{testidxglossariespackage.extra,
  name={\tstidxstyoptfmt{extra}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={load the \glshyperlink{glossariesextrapackage} package}
}

@index{packages.testidxglossariespackage.extra,
  name={\tstidxstyoptfmt{extra}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={load the \glshyperlink{glossariesextrapackage} package}
}

@index{testidxglossariespackage.noextra,
  name={\tstidxstyoptfmt{noextra}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={don't load the \glshyperlink{glossariesextrapackage}
package  (only load \glshyperlink{glossariespackage})}
}

@index{packages.testidxglossariespackage.noextra,
  name={\tstidxstyoptfmt{noextra}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={don't load the \glshyperlink{glossariesextrapackage}
package (only load \glshyperlink{glossariespackage})}
}

@index{testidxglossariespackage.noseekey,
  name={\tstidxstyoptfmt{noseekey}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={don't use the \tstidxqt{see} key to implement the cross-referencing (use
\glshyperlink{cs.glssee} instead)}
}

@index{packages.testidxglossariespackage.noseekey,
  name={\tstidxstyoptfmt{noseekey}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={don't use the \tstidxqt{see} key to implement the cross-referencing (use
\glshyperlink{cs.glssee} instead)}
}

@index{testidxglossariespackage.seekey,
  name={\tstidxstyoptfmt{seekey}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={use the \tstidxqt{see} key to implement the cross-referencing}
}

@index{packages.testidxglossariespackage.seekey,
  name={\tstidxstyoptfmt{seekey}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={use the \tstidxqt{see} key to implement the cross-referencing}
}

@index{testidxglossariespackage.xindy,
  name={\tstidxstyoptfmt{xindy}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={set up the \glshyperlink{glossariespackage} package to use \glshyperlink{xindy}
as the indexing application}
}

@index{packages.testidxglossariespackage.xindy,
  name={\tstidxstyoptfmt{xindy}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={set up the \glshyperlink{glossariespackage} package to use \glshyperlink{xindy}
as the indexing application}
}

@index{testidxglossariespackage.tex,
  name={\tstidxstyoptfmt{tex}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={set up the \glshyperlink{glossariespackage} package to use \TeX\ to
sort and collate the entries}
}

@index{packages.testidxglossariespackage.tex,
  name={\tstidxstyoptfmt{tex}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={set up the \glshyperlink{glossariespackage} package to use \TeX\ to
sort and collate the entries}
}

@index{testidxglossariespackage.bib2gls,
  name={\tstidxstyoptfmt{bib2gls}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={set up the \glshyperlink{glossariesextrapackage} package to use
\glshyperlink{bib2gls} as the indexing application}
}

@index{packages.testidxglossariespackage.bib2gls,
  name={\tstidxstyoptfmt{bib2gls}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={set up the \glshyperlink{glossariesextrapackage} package to use
\glshyperlink{bib2gls} as the indexing application}
}

@index{testidxglossariespackage.noglsnumbers,
  name={\tstidxstyoptfmt{noglsnumbers}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={pass the \tstidxstyoptfmt{glsnumbers=false} option to the
\glshyperlink{glossariespackage} package}
}

@index{packages.testidxglossariespackage.noglsnumbers,
  name={\tstidxstyoptfmt{noglsnumbers}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={pass the \tstidxstyoptfmt{glsnumbers=false} option to the
\glshyperlink{glossariespackage} package}
}

@index{testidxglossariespackage.glsnumbers,
  name={\tstidxstyoptfmt{glsnumbers}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={pass the \tstidxstyoptfmt{glsnumbers=true} option to the
\glshyperlink{glossariespackage} package}
}

@index{packages.testidxglossariespackage.glsnumbers,
  name={\tstidxstyoptfmt{glsnumbers}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={pass the \tstidxstyoptfmt{glsnumbers=true} option to the
\glshyperlink{glossariespackage} package}
}

@index{testidxglossariespackage.verbose,
  name={\tstidxstyoptfmt{verbose}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={write information about the test entries in the transcript file}
}

@index{packages.testidxglossariespackage.verbose,
  name={\tstidxstyoptfmt{verbose}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={write information about the test entries in the transcript file}
}

@index{testidxglossariespackage.noverbose,
  name={\tstidxstyoptfmt{noverbose}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={don't write information about the test entries in the transcript file}
}

@index{packages.testidxglossariespackage.noverbose,
  name={\tstidxstyoptfmt{noverbose}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={don't write information about the test entries in the transcript file}
}

@index{testidxglossariespackage.desc,
  name={\tstidxstyoptfmt{desc}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={add descriptions to the dummy entries}
}

@index{packages.testidxglossariespackage.desc,
  name={\tstidxstyoptfmt{desc}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={add descriptions to the dummy entries}
}

@index{testidxpackage.hidemarks,
  name={\tstidxstyoptfmt{hidemarks}},
  parent={testidxpackage},
  category={packageoption},
  description={hide the marks showing where the indexing is occurring}
}

@index{packages.testidxpackage.hidemarks,
  name={\tstidxstyoptfmt{hidemarks}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={hide the marks showing where the indexing is occurring}
}

@index{testidxpackage.showmarks,
  name={\tstidxstyoptfmt{showmarks}},
  parent={testidxpackage},
  category={packageoption},
  description={mark where the indexing is occurring}
}

@index{packages.testidxpackage.showmarks,
  name={\tstidxstyoptfmt{showmarks}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={mark where the indexing is occurring}
}

@index{testidxpackage.notestencaps,
  name={\tstidxstyoptfmt{notestencaps}},
  parent={testidxpackage},
  category={packageoption},
  description={don't use the test encaps}
}

@index{packages.testidxpackage.notestencaps,
  name={\tstidxstyoptfmt{notestencaps}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={don't use the test encaps}
}

@index{testidxpackage.verbose,
  name={\tstidxstyoptfmt{verbose}},
  parent={testidxpackage},
  category={packageoption},
  description={show the index commands in the document text}
}

@index{packages.testidxpackage.verbose,
  name={\tstidxstyoptfmt{verbose}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={show the index commands in the document text}
}

@index{testidxpackage.noverbose,
  name={\tstidxstyoptfmt{noverbose}},
  parent={testidxpackage},
  category={packageoption},
  description={don't show the index commands in the document text}
}

@index{packages.testidxpackage.noverbose,
  name={\tstidxstyoptfmt{noverbose}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={don't show the index commands in the document text}
}

@index{testidxpackage.digraphs,
  name={\tstidxstyoptfmt{digraphs}},
  parent={testidxpackage},
  category={packageoption},
  description={use glyphs instead of the two-character digraphs for certain words}
}

@index{packages.testidxpackage.digraphs,
  name={\tstidxstyoptfmt{digraphs}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={use glyphs instead of the two-character digraphs for certain words}
}

@index{testidxpackage.german,
  name={\tstidxstyoptfmt{german}},
  parent={testidxpackage},
  category={packageoption},
  description={change the \glshyperlink{makeindex} quote character to allow the
double-quote character to indicate an umlaut}
}

@index{packages.testidxpackage.german,
  name={\tstidxstyoptfmt{german}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={change the \glshyperlink{makeindex} quote character to allow the
double-quote character to indicate an umlaut}
}

@index{testidxpackage.ngerman,
  name={\tstidxstyoptfmt{ngerman}},
  parent={testidxpackage},
  category={packageoption},
  description={change the \glshyperlink{makeindex} quote character to allow the
double-quote character to indicate an umlaut}
}

@index{packages.testidxpackage.ngerman,
  name={\tstidxstyoptfmt{ngerman}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={change the \glshyperlink{makeindex} quote character to allow the
double-quote character to indicate an umlaut}
}

@index{testidxpackage.sanitize,
  name={\tstidxstyoptfmt{sanitize}},
  parent={testidxpackage},
  category={packageoption},
  description={sanitize the sort value before passing it to the indexing command}
}

@index{packages.testidxpackage.sanitize,
  name={\tstidxstyoptfmt{sanitize}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={sanitize the sort value before passing it to the indexing command}
}

@index{testidxglossariespackage.sanitize,
  name={\tstidxstyoptfmt{sanitize}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={sanitize the sort value}
}

@index{packages.testidxglossariespackage.sanitize,
  name={\tstidxstyoptfmt{sanitize}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={sanitize the sort value}
}

@index{testidxpackage.nosanitize,
  name={\tstidxstyoptfmt{nosanitize}},
  parent={testidxpackage},
  category={packageoption},
  description={don't sanitize the sort value before passing it to the indexing command}
}

@index{packages.testidxpackage.nosanitize,
  name={\tstidxstyoptfmt{nosanitize}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={don't sanitize the sort value before passing it to the indexing command}
}

@index{testidxglossariespackage.nosanitize,
  name={\tstidxstyoptfmt{nosanitize}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={don't sanitize the sort value}
}

@index{packages.testidxglossariespackage.nosanitize,
  name={\tstidxstyoptfmt{nosanitize}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={don't sanitize the sort value}
}

@index{testidxpackage.prefix,
  name={\tstidxstyoptfmt{prefix}},
  parent={testidxpackage},
  category={packageoption},
  description={insert a prefix before the sort value for certain symbols}
}

@index{packages.testidxpackage.prefix,
  name={\tstidxstyoptfmt{prefix}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={insert a prefix before the sort value for certain symbols}
}

@index{testidxpackage.noprefix,
  name={\tstidxstyoptfmt{noprefix}},
  parent={testidxpackage},
  category={packageoption},
  description={don't insert a prefix before the sort value for certain symbols}
}

@index{packages.testidxpackage.noprefix,
  name={\tstidxstyoptfmt{noprefix}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={don't insert a prefix before the sort value for certain symbols}
}

@index{testidxpackage.nostripaccents,
  name={\tstidxstyoptfmt{nostripaccents}},
  parent={testidxpackage},
  category={packageoption},
  description={don't strip accent commands from the sort value in
ASCII mode}
}

@index{packages.testidxpackage.nostripaccents,
  name={\tstidxstyoptfmt{nostripaccents}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={don't strip accent commands from the sort value in
ASCII mode}
}

@index{testidxpackage.stripaccents,
  name={\tstidxstyoptfmt{stripaccents}},
  parent={testidxpackage},
  category={packageoption},
  description={strip accent commands from the sort value in
ASCII mode}
}

@index{packages.testidxpackage.stripaccents,
  name={\tstidxstyoptfmt{stripaccents}},
  parent={packages.testidxpackage},
  category={packageoption},
  description={strip accent commands from the sort value in
ASCII mode}
}

@index{testidxglossariespackage.nostripaccents,
  name={\tstidxstyoptfmt{nostripaccents}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={don't strip accent commands from the sort value in
ASCII mode}
}

@index{packages.testidxglossariespackage.nostripaccents,
  name={\tstidxstyoptfmt{nostripaccents}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={don't strip accent commands from the sort value in
ASCII mode}
}

@index{testidxglossariespackage.stripaccents,
  name={\tstidxstyoptfmt{stripaccents}},
  parent={testidxglossariespackage},
  category={packageoption},
  description={strip accent commands from the sort value in
ASCII mode}
}

@index{packages.testidxglossariespackage.stripaccents,
  name={\tstidxstyoptfmt{stripaccents}},
  parent={packages.testidxglossariespackage},
  category={packageoption},
  description={strip accent commands from the sort value in
ASCII mode}
}

@index{hyperrefpackage.hidelinks,
  name={\tstidxstyoptfmt{hidelinks}},
  parent={hyperrefpackage},
  category={packageoption},
  description={don't use a visual effect to show the hyperlinks}
}

@index{packages.hyperrefpackage.hidelinks,
  name={\tstidxstyoptfmt{hidelinks}},
  parent={packages.hyperrefpackage},
  category={packageoption},
  description={don't use a visual effect to show the hyperlinks}
}

@index{fontencpackage.T1,
  name={\tstidxstyoptfmt{T1}},
  parent={fontencpackage},
  category={packageoption},
  description={set the font encoding to T1}
}

@index{packages.fontencpackage.T1,
  name={\tstidxstyoptfmt{T1}},
  parent={packages.fontencpackage},
  category={packageoption},
  description={set the font encoding to T1}
}

@index{theindexenvironment,
  name={\tstidxenvfmt{theindex} environment},
  text={\tstidxenvfmt{theindex}},
  category={environment},
  description={environment used to display an index}
}

@index{alignenvironment,
  name={\tstidxenvfmt{align} environment},
  text={\tstidxenvfmt{align}},
  category={environment},
  description={environment provided by the
\glshyperlink{amsmathpackage} package to align equations}
}

@index{eqnarrayenvironment,
  name={\tstidxenvfmt{eqnarray} environment},
  text={\tstidxenvfmt{eqnarray}},
  category={environment},
  description={environment provided by the \LaTeX\ kernel to align equations}
}

@index{bib2gls,
  name={\tstidxappfmt{bib2gls}},
  category={application},
  description={an indexing application designed
to work with the \glshyperlink{glossariesextrapackage} package}
}

@index{applications.bib2gls,
  name={\tstidxappfmt{bib2gls}},
  parent={applications},
  category={application},
  description={an indexing application designed
to work with the \glshyperlink{glossariesextrapackage} package}
}

@index{makeindex,
  name={\tstidxappfmt{makeindex}},
  category={application},
  description={an indexing application}
}

@index{applications.makeindex,
  name={\tstidxappfmt{makeindex}},
  parent={applications},
  category={application},
  description={an indexing application}
}

@index{xindy,
  name={\tstidxappfmt{xindy}},
  category={application},
  description={a highly-configurable indexing application with
localisation support}
}

@index{applications.xindy,
  name={\tstidxappfmt{xindy}},
  parent={applications},
  category={application},
  description={a highly-configurable indexing application with
localisation support}
}

@index{texdoc,
  name={\tstidxappfmt{texdoc}},
  category={application},
  description={an application for viewing documentation
installed in a \TeX\ distribution}
}

@index{applications.texdoc,
  name={\tstidxappfmt{texdoc}},
  parent={applications},
  category={application},
  description={an application for viewing documentation
installed in a \TeX\ distribution}
}

@index{arara,
  name={\tstidxappfmt{arara}},
  category={application},
  description={an automation tool for building documents}
}

@index{applications.arara,
  name={\tstidxappfmt{arara}},
  parent={applications},
  category={application},
  description={an automation tool for building documents}
}

@index{Perl,
  name={\tstidxappfmt{Perl}},
  category={application},
  description={a scripting language}
}

@index{applications.Perl,
  name={\tstidxappfmt{Perl}},
  parent={applications},
  category={application},
  description={a scripting language}
}

@index{makeglossaries,
  name={\tstidxappfmt{makeglossaries}},
  category={application},
  description={a Perl script provided with the
\glshyperlink{glossariespackage} package that automatically runs
either \glshyperlink{makeindex} or \glshyperlink{xindy}
according to the document settings}
}

@index{applications.makeglossaries,
  name={\tstidxappfmt{makeglossaries}},
  parent={applications},
  category={application},
  description={a Perl script provided with the
\glshyperlink{glossariespackage} package that automatically runs
either \glshyperlink{makeindex} or \glshyperlink{xindy}
according to the document settings}
}

@index{makeglossarieslite,
  name={\tstidxappfmt{makeglossaries-lite}},
  category={application},
  description={a light-weight Lua alternative to \glshyperlink{makeglossaries}}
}

@index{applications.makeglossarieslite,
  name={\tstidxappfmt{makeglossaries-lite}},
  parent={applications},
  category={application},
  description={a light-weight Lua alternative to \glshyperlink{makeglossaries}}
}

@index{Emacs,
  name={\tstidxappfmt{Emacs}},
  category={application},
  description={a text editor}
}

@index{applications.Emacs,
  name={\tstidxappfmt{Emacs}},
  parent={applications},
  category={application},
  description={a text editor}
}

@index{Vi,
  name={\tstidxappfmt{Vi}},
  category={application},
  description={a text editor}
}

@index{applications.Vi,
  name={\tstidxappfmt{Vi}},
  parent={applications},
  category={application},
  description={a text editor}
}

@index{xindy.Lswedish,
  name={\tstidxappoptfmt{-L swedish}},
  parent={xindy},
  category={applicationoption},
  description={use the Swedish language module}
}

@index{applications.xindy.Lswedish,
  name={\tstidxappoptfmt{-L swedish}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the Swedish language module}
}

@index{Lswedish.xindyoption,
  name={\tstidxappoptfmt{-L swedish} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the Swedish language module}
}

@index{xindy.Ldanish,
  name={\tstidxappoptfmt{-L danish}},
  parent={xindy},
  category={applicationoption},
  description={use the Danish language module}
}

@index{applications.xindy.Ldanish,
  name={\tstidxappoptfmt{-L danish}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the Danish language module}
}

@index{Ldanish.xindyoption,
  name={\tstidxappoptfmt{-L danish} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the Danish language module}
}

@index{xindy.Lpolish,
  name={\tstidxappoptfmt{-L polish}},
  parent={xindy},
  category={applicationoption},
  description={use the Polish language module}
}

@index{applications.xindy.Lpolish,
  name={\tstidxappoptfmt{-L polish}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the Polish language module}
}

@index{Lpolish.xindyoption,
  name={\tstidxappoptfmt{-L polish} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the Polish language module}
}

@index{xindy.Licelandic,
  name={\tstidxappoptfmt{-L icelandic}},
  parent={xindy},
  category={applicationoption},
  description={use the Icelandic language module}
}

@index{applications.xindy.Licelandic,
  name={\tstidxappoptfmt{-L icelandic}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the Icelandic language module}
}

@index{Licelandic.xindyoption,
  name={\tstidxappoptfmt{-L icelandic} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the Icelandic language module}
}

@index{xindy.Lgermanduden,
  name={\tstidxappoptfmt{-L german-duden}},
  parent={xindy},
  category={applicationoption},
  description={use the German language module with the duden setting}
}

@index{applications.xindy.Lgermanduden,
  name={\tstidxappoptfmt{-L german-duden}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the German language module with the duden setting}
}

@index{Lgermanduden.xindyoption,
  name={\tstidxappoptfmt{-L german-duden} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the German language module with the duden setting}
}

@index{xindy.Lgermandin5007,
  name={\tstidxappoptfmt{-L german-din5007}},
  parent={xindy},
  category={applicationoption},
  description={use the German language module with the din5007 setting}
}

@index{applications.xindy.Lgermandin5007,
  name={\tstidxappoptfmt{-L german-din5007}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the German language module with the din5007 setting}
}

@index{Lgermandin5007.xindyoption,
  name={\tstidxappoptfmt{-L german-din5007} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the German language module with the din5007 setting}
}

@index{xindy.Mord/letorder,
  name={\tstidxappoptfmt{-M ord/letorder}},
  parent={xindy},
  category={applicationoption},
  description={use the letter ordering module}
}

@index{applications.xindy.Mord/letorder,
  name={\tstidxappoptfmt{-M ord/letorder}},
  parent={applications.xindy},
  category={applicationoption},
  description={use the letter ordering module}
}

@index{Mord/letorder.xindyoption,
  name={\tstidxappoptfmt{-M ord/letorder} (\tstidxappfmt{xindy})},
  category={applicationoption},
  description={use the letter ordering module}
}

@index{makeindex.g,
  name={\tstidxappoptfmt{-g}},
  parent={makeindex},
  category={applicationoption},
  description={use the German setting that
recognises the double-quote character as an umlaut command}
}

@index{applications.makeindex.g,
  name={\tstidxappoptfmt{-g}},
  parent={applications.makeindex},
  category={applicationoption},
  description={use the German setting that
recognises the double-quote character as an umlaut command}
}

@index{g.makeindexoption,
  name={\tstidxappoptfmt{-g} (\tstidxappfmt{makeindex})},
  category={applicationoption},
  description={use the German setting that
recognises the double-quote character as an umlaut command}
}

@index{makeindex.l,
  name={\tstidxappoptfmt{-l}},
  parent={makeindex},
  category={applicationoption},
  description={use letter ordering}
}

@index{applications.makeindex.l,
  name={\tstidxappoptfmt{-l}},
  parent={applications.makeindex},
  category={applicationoption},
  description={use letter ordering}
}

@index{l.makeindexoption,
  name={\tstidxappoptfmt{-l} (\tstidxappfmt{makeindex})},
  category={applicationoption},
  description={use letter ordering}
}

@index{tstidxencapi,
  name={\texttt{tstidxencapi} (\tstidxcsfmt{tstidxencapi})},
  text={\texttt{tstidxencapi}},
  category={encapcsn},
  description={first test encap}
}

@index{encap.tstidxencapi,
  name={\texttt{tstidxencapi}},
  parent={encap},
  category={encapcsn},
  description={first test encap}
}

@index{tstidxencapii,
  name={\texttt{tstidxencapii} (\tstidxcsfmt{tstidxencapii})},
  text={\texttt{tstidxencapii}},
  category={encapcsn},
  description={second test encap}
}

@index{encap.tstidxencapii,
  name={\texttt{tstidxencapii}},
  parent={encap},
  category={encapcsn},
  description={second test encap}
}

@index{tstidxencapiii,
  name={\texttt{tstidxencapiii} (\tstidxcsfmt{tstidxencapiii})},
  text={\texttt{tstidxencapiii}},
  category={encapcsn},
  description={third test encap}
}

@index{encap.tstidxencapiii,
  name={\texttt{tstidxencapiii}},
  parent={encap},
  category={encapcsn},
  description={third test encap}
}

@index{cs.index,
  name={\tstidxcsfmt{index}},
  category={cs},
  description={write information to the external index file
that will be processed by an indexing application (defined by the
\LaTeX\ kernel)}
}

@index{cs.testidx,
  name={\tstidxcsfmt{testidx}},
  category={cs},
  description={produce the dummy text (defined in the
\glshyperlink{testidxpackage} package)}
}

@index{cs.tstidxtoidx,
  name={\tstidxcsfmt{tstidxtoidx}},
  category={cs},
  description={switch back to the original definitions
provided by the base \glshyperlink{testidxpackage} package (defined
in the \glshyperlink{testidxglossariespackage} package)}
}

@index{cs.gls,
  name={\tstidxcsfmt{gls}},
  category={cs},
  description={reference a term defined by the
\glshyperlink{glossariespackage} package (displays text and performs
indexing)}
}

@index{cs.glspl,
  name={\tstidxcsfmt{glspl}},
  category={cs},
  description={as \glshyperlink{cs.gls} but displays the
plural form}
}

@index{cs.glsadd,
  name={\tstidxcsfmt{glsadd}},
  category={cs},
  description={indexes a term defined by the
\glshyperlink{glossariespackage} package (but doesn't display any
text)}
}

@index{cs.glssee,
  name={\tstidxcsfmt{glssee}},
  category={cs},
  description={indexes a cross-referenced term or terms defined by the
\glshyperlink{glossariespackage} package (but doesn't display any
text)}
}

@index{cs.glsxtrindexseealso,
  name={\tstidxcsfmt{glsxtrindexseealso}},
  category={cs},
  description={indexes a \tstidxqt{see also} cross-referenced term
or terms
defined by the
\glshyperlink{glossariesextrapackage} package (but doesn't display
any text)}
}

@index{cs.glshyperlink,
  name={\tstidxcsfmt{glshyperlink}},
  category={cs},
  description={displays the text associated with a
term (with a hyperlink if enabled) but doesn't perform
any indexing (defined by the \glshyperlink{glossariespackage}
package)}
}

@index{cs.setglossarystyle,
  name={\tstidxcsfmt{setglossarystyle}},
  category={cs},
  description={sets the glossary style
(defined by the \glshyperlink{glossariespackage} package)}
}

@index{cs.tstidxfootnote,
  name={\tstidxcsfmt{tstidxfootnote}},
  category={cs},
  description={produces a footnote
(defined by the \glshyperlink{testidxpackage} package)}
}

@index{cs.footnote,
  name={\tstidxcsfmt{footnote}},
  category={cs},
  description={produces a footnote
(defined by the \LaTeX\ kernel)}
}

@index{cs.tstidxtext,
  name={\tstidxcsfmt{tstidxtext}},
  category={cs},
  description={used to mark the sample text being indexed
(defined by the \glshyperlink{testidxpackage} package)}
}

@index{cs.textcolor,
  name={\tstidxcsfmt{textcolor}},
  category={cs},
  description={displays the given text in the given colour
(a colour package is required to enable this command)}
}

@index{cs.glstreenamefmt,
  name={\tstidxcsfmt{glstreenamefmt}},
  category={cs},
  description={used to set the font for
the name field in the tree-like glossary styles}
}

@index{cs.tstindex,
  name={\tstidxcsfmt{tstindex}},
  category={cs},
  description={used to index the sample text
for the base \glshyperlink{testidxpackage} package (not for the
\glshyperlink{testidxglossariespackage} package)}
}

@index{cs.GlsAddXdyAttribute,
  name={\tstidxcsfmt{GlsAddXdyAttribute}},
  category={cs},
  description={adds a \glshyperlink{xindy}
attribute (provided by the \glshyperlink{glossariespackage} package)}
}

@index{cs.delimN,
  name={\tstidxcsfmt{delimN}},
  category={cs},
  description={page number separator used in the
\glshyperlink{locationlist} (provided by the \glshyperlink{glossariespackage} package)}
}

@index{cs.delimR,
  name={\tstidxcsfmt{delimR}},
  category={cs},
  description={page range separator used in the
\glshyperlink{locationlist} (provided by the \glshyperlink{glossariespackage} package)}
}

@index{cs.IeC,
  name={\tstidxcsfmt{IeC}},
  category={cs},
  description={used internally by the \glshyperlink{inputencpackage}
package}
}

@index{cs.tstidxindexmarkerprefix,
  name={\tstidxcsfmt{tstidxindexmarkerprefix}},
  category={cs},
  description={prefix used in the
sort key for markers if the \tstidxstyoptfmt{prefix}
option is used (but not with the \tstidxstyoptfmt{bib2gls}
option)}
}

@index{cs.tstidxindexmathsymprefix,
  name={\tstidxcsfmt{tstidxindexmathsymprefix}},
  category={cs},
  description={prefix used in the
sort key for mathematical symbols if the \tstidxstyoptfmt{prefix}
option is used (but not with the \tstidxstyoptfmt{bib2gls}
option)}
}

@index{cs.tstidxmakegloss,
  name={\tstidxcsfmt{tstidxmakegloss}},
  category={cs},
  description={command used to load
the files containing the sample glossary definitions
and also use the appropriate command to initialise the indexing,
depending on the package options}
}

%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</testidx-glossaries-samples.bib>
%    \end{macrocode}
%\fi
%\Finale
\endinput