texlive[51008] trunk: bib2gls (10apr19)

commits+karl at tug.org commits+karl at tug.org
Sun May 5 20:06:25 CEST 2019


Revision: 51008
          http://tug.org/svn/texlive?view=revision&revision=51008
Author:   karl
Date:     2019-05-05 20:06:25 +0200 (Sun, 05 May 2019)
Log Message:
-----------
bib2gls (10apr19)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/bib2gls/convertgls2bib.sh
    trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES
    trunk/Master/texmf-dist/doc/support/bib2gls/README.md
    trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls-begin.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.1
    trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/convertgls2bib.1
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/miscsymbols.bib
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-authors.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-bacteria.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-chemical.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-citations.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-constants.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-markuplanguages.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-maths.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-media.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-msymbols.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi1.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi2.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-people.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.tex
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units1.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units2.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units3.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-usergroups.pdf
    trunk/Master/texmf-dist/scripts/bib2gls/bib2gls.jar
    trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.jar
    trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.sh
    trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml
    trunk/Master/texmf-dist/scripts/bib2gls/texparserlib.jar
    trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex
    trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib
    trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-src.zip
    trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.bib
    trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.pod
    trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.tex
    trunk/Master/texmf-dist/source/support/bib2gls/src/gls2bib-src.zip
    trunk/Master/texmf-dist/source/support/bib2gls/src/texparser-src.zip

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.tex
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/topics.bib

Modified: trunk/Build/source/texk/texlive/linked_scripts/bib2gls/convertgls2bib.sh
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/bib2gls/convertgls2bib.sh	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Build/source/texk/texlive/linked_scripts/bib2gls/convertgls2bib.sh	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,12 +1,15 @@
 #!/bin/sh
+# Adapted from tlcockpit.sh to ensure the script works with cygwin
 
-kernel=`uname -s`
-if test "${kernel#*CYGWIN}" != "$kernel"
-then
- jarpath=`cygpath -w $(kpsewhich --progname=convertgls2bib --format=texmfscripts convertgls2bib.jar)`
-else
- jarpath=`kpsewhich --progname=convertgls2bib --format=texmfscripts convertgls2bib.jar`
+scriptname=`basename "$0" .sh`
+jar="$scriptname.jar"
+jarpath=`kpsewhich --progname="$scriptname" --format=texmfscripts "$jar"`
+
+kernel=`uname -s 2>/dev/null`
+if echo "$kernel" | grep CYGWIN >/dev/null; then
+  CYGWIN_ROOT=`cygpath -w /`
+  export CYGWIN_ROOT
+  jarpath=`cygpath -w "$jarpath"`
 fi
 
-java -jar "$jarpath" "$@"
-
+exec java -jar "$jarpath" "$@"

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,14 +1,60 @@
+v1.9 (2019-04-09):
+
+  * manual:
+
+    - added section "Logical Divisions: type vs group vs parent"
+
+  * new resource option:
+
+     compact-ranges
+     progenitor-type
+     adopted-parent-field
+     unknown-entry-alias
+     save-original-entrytype
+     field-case-change
+     no-case-change-cs
+     encapsulate-fields
+     encapsulate-fields*
+     interpret-fields
+     replicate-missing-field-action
+     entry-sort-fallback
+
+  * new entry types:
+
+     @progenitor
+     @spawnindex
+     @spawnindexplural
+     @spawnentry
+     @spawnsymbol
+     @spawnnumber
+     @spawnabbreviation
+     @spawnacronym
+
+  * New command line options:
+
+     --warn-non-bib-fields
+     --no-warn-non-bib-fields
+     --warn-unknown-entry-types
+     --no-warn-unknown-entry-types
+
+  * The `type` option (and similar options that assign the `type`
+    field) now accepts the special setting "same as parent".
+
+  * The `group` option no longer requires the --group switch.
+    
+  * The `match` and `not-match` options now accept `original entrytype`.
+
 v1.8 (2018-11-30):
 
   * new resource options:
 
-       --save-primary-locations
-       --primary-location-formats
-       --long-case-change
-       --dual-long-case-change
-       --word-boundaries
-       --sort-label-list
-       --dependency-fields
+     save-primary-locations
+     primary-location-formats
+     long-case-change
+     dual-long-case-change
+     word-boundaries
+     sort-label-list
+     dependency-fields
 
   * added support for the new glossaries-extra package option
     record=nameref (introduced to glossaries-extra v1.37).

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/README.md	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/README.md	2019-05-05 18:06:25 UTC (rev 51008)
@@ -9,12 +9,19 @@
 
 # Licence
 
-Copyright (C) 2017-2018 Nicola L. C. Talbot (www.dickimaw-books.com)
+Copyright (C) 2017-2019 Nicola L. C. Talbot (www.dickimaw-books.com)
 License GPLv3+: GNU GPL version 3 or later
 http://gnu.org/licenses/gpl.html
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.
 
+# Requirements
+
+  - Java Runtime Environment (at least Java 8).
+
+  - TeX distribution that includes `glossaries-extra.sty` 
+    and dependent packages (such as `glossaries.sty`).
+
 # Summary
 
 This application may be used to extract glossary information
@@ -130,6 +137,7 @@
  - *TEXMF*`/scripts/bib2gls/convertgls2bib.sh` (Unix-like systems
    only.)
  - *TEXMF*`/doc/support/bib2gls/bib2gls.pdf` (User manual.)
+ - *TEXMF*`/doc/support/bib2gls/bib2gls-begin.pdf` (Introductory Guide.)
  - *TEXMF*`/doc/support/bib2gls/examples/` (example files)
 
 Note that `texparserlib.jar` isn't an application. It's

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls-begin.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.1
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.1	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.1	2019-05-05 18:06:25 UTC (rev 51008)
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "BIB2GLS 1"
-.TH BIB2GLS 1 "2018-08-25" "perl v5.28.0" "bib2gls"
+.TH BIB2GLS 1 "2019-03-31" "perl v5.28.1" "bib2gls"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -211,6 +211,20 @@
 .IP "\fB\-\-no\-cite\-as\-record\fR" 4
 .IX Item "--no-cite-as-record"
 Don't check for instances of \fB\ecitation\fR in the \fB.aux\fR file (default).
+.IP "\fB\-\-warn\-non\-bib\-fields\fR" 4
+.IX Item "--warn-non-bib-fields"
+Warn if internal non-bib fields are found in the .bib file.
+.IP "\fB\-\-no\-warn\-non\-bib\-fields\fR" 4
+.IX Item "--no-warn-non-bib-fields"
+Don't warn if internal non-bib fields are found in the .bib file.
+The use of these internal fields can cause unexpected results, so
+only use this option if you have taken appropriate precautions.
+.IP "\fB\-\-warn\-unknown\-entry\-types\fR" 4
+.IX Item "--warn-unknown-entry-types"
+Warn if any unknown entry types are found in the .bib file.
+.IP "\fB\-\-no\-warn\-unknown\-entry\-types\fR" 4
+.IX Item "--no-warn-unknown-entry-types"
+Don't warn if any unknown entry types are found in the .bib file.
 .IP "\fB\-\-merge\-wrglossary\-records\fR" 4
 .IX Item "--merge-wrglossary-records"
 Merge an entry's \fBwrglossary\fR records for the same page locations.

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/convertgls2bib.1
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/convertgls2bib.1	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/convertgls2bib.1	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -54,16 +54,20 @@
 .\" Avoid warning from groff about undefined register 'F'.
 .de IX
 ..
-.if !\nF .nr F 0
-.if \nF>0 \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+.    if \nF \{\
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
-.    if !\nF==2 \{\
-.        nr % 0
-.        nr F 2
+.        if !\nF==2 \{\
+.            nr % 0
+.            nr F 2
+.        \}
 .    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -129,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CONVERTGLS2BIB 1"
-.TH CONVERTGLS2BIB 1 "2018-03-04" "perl v5.26.1" "convertgls2bib"
+.TH CONVERTGLS2BIB 1 "2018-03-04" "perl v5.28.1" "convertgls2bib"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/miscsymbols.bib
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/examples/miscsymbols.bib	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/examples/miscsymbols.bib	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,5 +1,5 @@
 % This file is public domain. See the "Examples" chapter
-% in the bib2gls user manual for a more detailed icondescription
+% in the bib2gls user manual for a more detailed description
 % of this file.
 
 % Encoding: UTF-8

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-authors.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-bacteria.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-chemical.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-citations.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-constants.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-markuplanguages.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-maths.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-media.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-msymbols.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-people.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.tex	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.tex	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,7 +1,8 @@
 % This file is public domain. See the "Examples" chapter
 % in the bib2gls user manual for a more detailed description
 % of this file.
-
+% Compare this file with sample-textsymbols2.tex which uses
+% a hierarchical approach.
 \documentclass[a4paper]{article}
 
 \usepackage[T1]{fontenc}
@@ -18,7 +19,7 @@
 \usepackage[record,% using bib2gls
  nostyles,% don't load default styles
  postdot,% append a dot after descriptions
- stylemods={tree},% load glossary-mcols.sty and patch
+ stylemods={tree},% load glossary-tree.sty and patch
  style=alttreegroup]{glossaries-extra}
 
 \GlsXtrLoadResources[

Added: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf	2019-05-05 18:06:25 UTC (rev 51008)

Property changes on: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.tex	2019-05-05 18:06:25 UTC (rev 51008)
@@ -0,0 +1,41 @@
+% This file is public domain. See the "Examples" chapter
+% in the bib2gls user manual for a more detailed description
+% of this file.
+
+\documentclass[a4paper]{article}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{etoolbox}
+\usepackage{marvosym}
+
+% package conflict, need to undefine conflicting commands
+\undef\Sun
+\undef\Lightning
+
+\usepackage[weather]{ifsym}
+
+\usepackage[record,% using bib2gls
+ nostyles,% don't load default styles
+ postdot,% append a dot after descriptions
+ stylemods={tree,topic},% load glossary-tree.sty and glossary-topic.sty
+ style=topic]{glossaries-extra}
+
+\GlsXtrLoadResources[
+  src={topics,miscsymbols},
+% make @icon behave like @symbol:
+  entry-type-aliases={icon=symbol},
+  field-aliases={
+   identifier=parent,
+   icon=name,
+   icondescription=description
+  },
+  symbol-sort-fallback={description},
+  set-widest,
+  selection=all
+]
+
+\begin{document}
+\printunsrtglossaries
+\end{document}
+


Property changes on: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-usergroups.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/support/bib2gls/examples/topics.bib
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/examples/topics.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/examples/topics.bib	2019-05-05 18:06:25 UTC (rev 51008)
@@ -0,0 +1,9 @@
+% This file is public domain. See the "Examples" chapter
+% in the bib2gls user manual for a more detailed description
+% of this file.
+
+% Encoding: UTF-8
+
+ at index{information}
+ at indexplural{mediacontrol,text={media control}}
+ at indexplural{weather,text={weather symbol}}


Property changes on: trunk/Master/texmf-dist/doc/support/bib2gls/examples/topics.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/bib2gls/bib2gls.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.sh
===================================================================
--- trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.sh	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.sh	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,12 +1,15 @@
 #!/bin/sh
+# Adapted from tlcockpit.sh to ensure the script works with cygwin
 
-kernel=`uname -s`
-if test "${kernel#*CYGWIN}" != "$kernel"
-then
- jarpath=`cygpath -w $(kpsewhich --progname=convertgls2bib --format=texmfscripts convertgls2bib.jar)`
-else
- jarpath=`kpsewhich --progname=convertgls2bib --format=texmfscripts convertgls2bib.jar`
+scriptname=`basename "$0" .sh`
+jar="$scriptname.jar"
+jarpath=`kpsewhich --progname="$scriptname" --format=texmfscripts "$jar"`
+
+kernel=`uname -s 2>/dev/null`
+if echo "$kernel" | grep CYGWIN >/dev/null; then
+  CYGWIN_ROOT=`cygpath -w /`
+  export CYGWIN_ROOT
+  jarpath=`cygpath -w "$jarpath"`
 fi
 
-java -jar "$jarpath" "$@"
-
+exec java -jar "$jarpath" "$@"

Modified: trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml
===================================================================
--- trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml	2019-05-05 18:06:25 UTC (rev 51008)
@@ -49,6 +49,14 @@
 <entry key="syntax.no.force.cross.resource.refs">{0}
 			Don''t force cross-resource referencing mode on 
 			(default).</entry>
+<entry key="syntax.warn.non.bib.fields">{0}
+			Warn if internal non-bib fields are found in .bib file.</entry>
+<entry key="syntax.no.warn.non.bib.fields">{0}
+			Don''t warn if internal non-bib fields are found in .bib file.</entry>
+<entry key="syntax.warn.unknown.entry.types">{0}
+			Warn if unknown entry types are found in .bib file.</entry>
+<entry key="syntax.no-warn.unknown.entry.types">{0}
+			Don''t warn if unknown entry types are found in .bib file.</entry>
 
 <entry key="syntax.merge.nameref.on">{0} <rule>
 			Rule for merging locations with record=nameref
@@ -207,6 +215,9 @@
 <entry key="message.dual.indexabbrv.mappings">Dual index-abbreviation mappings:</entry>
 <entry key="message.process.result">Processed returned: {0}</entry>
 <entry key="message.truncated">Truncating according to limit={0}.</entry>
+<entry key="message.entry.already.added">Entry ''{0}'' has already been added, ignoring.
+(Original entry: @{1}{2}. This entry: @{3}{4})</entry>
+<entry key="message.entry.lost.field">Entry ''{0}'' has lost its ''{1}'' field.</entry>
 
 <entry key="message.log.file">Transcript written to {0}.</entry>
 <entry key="message.written">{0} written to {1}.</entry>
@@ -280,6 +291,7 @@
 <entry key="message.list.known.packages.info">Support may be quite limited in some cases.</entry>
 <entry key="message.created.missing.parent">Created missing parent ''{0}'' for entry ''{1}''</entry>
 <entry key="message.found_entry_in_resource">Found entry ''{0}'' in resource set: {1}</entry>
+<entry key="message.spawning">Spawning ''{0}'' (from ''{1}'')</entry>
 
 <entry key="tag.page">Page</entry>
 <entry key="tag.pages">Pages</entry>
@@ -305,8 +317,10 @@
 <entry key="warning.cant.parse.file">Can''t parse {0}
 {1}</entry>
 <entry key="warning.ignoring.unknown.entry.type">Ignoring unknown entry type: {0}</entry>
+<entry key="warning.private.entry.type">Private entry type ''{0}'' found. Did you mean ''{1}''?</entry>
 <entry key="warning.ignoring.unknown.encoding">Ignoring unknown encoding: {0}</entry>
 <entry key="warning.ignoring.unknown.field">Ignoring unknown field: {0}</entry>
+<entry key="warning.non_bib_field">Found internal non bib-field ''{0}'' in ''{1}.bib'' file for entry ''{2}''. Unexpected results may occur.</entry>
 <entry key="warning.entry.already.defined">Entry {0} is being defined in {1} but it has already been defined in a previous .glstex file.</entry>
 <entry key="warning.can.find.arg">Can''t detect argument for: \{0}</entry>
 <entry key="warning.no.default.sort">Can''t determine sort value for: {0}
@@ -400,6 +414,7 @@
 {0}</entry>
 <entry key="error.invalid.sort.value">Invalid sort method ''{0}'' given in option: {1}</entry>
 <entry key="error.invalid.opt.value">Invalid ''{0}'' value: {1}</entry>
+<entry key="error.invalid.opt.intorbool.value">Invalid ''{0}'' value: {1} (number or boolean required)</entry>
 <entry key="error.invalid.opt.int.value">Invalid ''{0}'' value: {1} (number required)</entry>
 <entry key="error.invalid.opt.minint.value">Invalid ''{0}'' value: {1} (can''t be less than {2,number})</entry>
 <entry key="error.invalid.choice.value">Invalid ''{0}'' value: {1} (allowed values: {2})</entry>
@@ -454,11 +469,39 @@
 Use {1} {0} instead.</entry>
 <entry key="error.create.missing.parent.failed">Attempt to create missing parent ''{0}'' for entry ''{1}'' caused a problem:
 {2}</entry>
+<entry key="error.option.requires.interpreter">Interpreter needed for setting {0}</entry>
 
 <!--
     The following messages are used by convertgls2bib
 -->
 
+<entry key="gls2bib.missing.encoding.value">Missing <encoding> after {0}</entry>
+<entry key="gls2bib.missing.arg.value">Missing <value> after {0}</entry>
+<entry key="gls2bib.unknown.arg">Unknown option: {0}
+Use {1} for help.</entry>
+<entry key="gls2bib.toomany.arg">Too many arguments.
+Use {0} for help.</entry>
+<entry key="gls2bib.missing.tex.arg">Missing <tex file>.
+Syntax: {0}
+Use {1} for help.</entry>
+<entry key="gls2bib.missing.bib.arg">Missing <bib file>
+Syntax: {0}
+Use {1} for help.</entry>
+<entry key="gls2bib.syntax">{0} [<options>] <tex file> <bib file></entry>
+
+<entry key="gls2bib.syntax.options">Options:</entry>
+<entry key="gls2bib.syntax.version">{0} (or {1})	Display version information</entry>
+<entry key="gls2bib.syntax.help">{0} (or {1})		Display help</entry>
+<entry key="gls2bib.syntax.texenc">{0} <encoding>	.tex file encoding</entry>
+<entry key="gls2bib.syntax.bibenc">{0} <encoding>	.bib file encoding</entry>
+<entry key="gls2bib.syntax.ignore-sort">{0} 		Ignore sort field (default)</entry>
+<entry key="gls2bib.syntax.no-ignore-sort">{0} 	Don''t ignore sort field</entry>
+<entry key="gls2bib.syntax.space-sub">{0} <value>	Substitute spaces in labels with <value></entry>
+<entry key="gls2bib.syntax.locale">{0} <lang tag>	Use language resource file given by <lang tag> for messages.</entry>
+<entry key="gls2bib.syntax.silent">{0}		Suppress messages.</entry>
+<entry key="gls2bib.syntax.verbose">{0}		Normal messages.</entry>
+<entry key="gls2bib.syntax.debug">{0}		Debug mode.</entry>
+
 <entry key="gls2bib.override.newdualentry">Overriding default definition of \newdualentry with custom 
 definition. (Change \newcommand to \providecommand if you want 
 \newdualentry[options]'{'label'}{'short'}{'long'}{'description'}'
@@ -580,6 +623,7 @@
 <entry key="datatool.header.doesnt_exist">Header ''{0}'' doesn''t exist.</entry>
 <entry key="datatool.row.not.found">Row index ''{0}'' doesn''t exist.</entry>
 <entry key="datatool.loaddb.message">Database ''{0}'' loaded from ''{1}'' (column count={2}, row count={3}).</entry>
+<entry key="datatool.index.outofrange">List index ''{0}'' out of range.</entry>
 
 <!--  ifthen messages -->
 

Modified: trunk/Master/texmf-dist/scripts/bib2gls/texparserlib.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex	2019-05-05 18:06:25 UTC (rev 51008)
@@ -18,6 +18,7 @@
 \usepackage{hologo}
 \usepackage{pifont}
 \usepackage{graphicx}
+\usepackage{tcolorbox}
 \usepackage{datetime2}
 \usepackage{siunitx}
 \usepackage[version=4]{mhchem}
@@ -78,10 +79,17 @@
 
 \newcommand*{\csref}{\gls}
 
+\newcommand{\texparserdefnote}{}
+
 \GlsXtrLoadResources[
  src={bib2gls},
  max-loc-diff=3,
- entry-type-aliases={dualindexentry=index},
+ entry-type-aliases={
+  exampleentry=entry,
+  examplesymbol=symbol,
+  exampleabbreviation=abbreviation
+ },
+ unknown-entry-alias={index},
  field-aliases={note=user2},
  symbol-sort-fallback={name},
  break-at={none},
@@ -208,21 +216,33 @@
 
 \makeatletter
 \newcommand{\code}[1]{\texorpdfstring{{\ttfamily\obeyspaces #1}}{#1}}
-\newenvironment{codeenv}
- {%
-   \renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{noindex}}%
+\newcommand{\setupcodeenvfmts}{%
    \def\cmd{\char`\\}%
-   \def\comment##1{\textcolor{comment}{\%\ ##1}}%
+   \def\comment##1{\mbox{\textcolor{comment}{\idx{commentchar}\ ##1}}}%
    \renewcommand*{\styfmt}[1]{##1}%
    \renewcommand*{\counterfmt}[1]{##1}%
    \renewcommand*{\catattrfmt}[1]{\textcolor{attribute}{##1}}%
    \renewcommand*{\abbrstylefmt}[1]{\textcolor{style}{##1}}%
    \renewcommand*{\csfmtfont}[1]{\textcolor{cs}{##1}}%
+}
+\newenvironment{codeenv}
+ {%
+   \renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{noindex}}%
+   \setupcodeenvfmts
     \begin{flushleft}\textcolor{lightgray}{\hrulefill}\par\nopagebreak
      \medskip\nopagebreak
      \ttfamily\obeylines\frenchspacing\@vobeyspaces}
  {\nopagebreak\textcolor{lightgray}{\hrulefill}%
   \end{flushleft}\ignorespacesafterend}
+
+\newenvironment{codeenv*}
+ {%
+   \setupcodeenvfmts
+   \begin{flushleft}\ttfamily\obeylines\frenchspacing\@vobeyspaces
+   \parindent\z@\parfillskip\@flushglue\parskip\z at skip
+ }
+ {\end{flushleft}\ignorespacesafterend}
+
 \makeatother
 
 \newcommand{\primary}{\emph}
@@ -255,7 +275,7 @@
 }
 
 \newcommand*{\abbrstyle}[2][]{%
-  \texorpdfstring{\idx[#1]{#2}}{#2}%
+  \texorpdfstring{\idx[#1]{abbrstyle.#2}}{#2}%
 }
 
 \newcommand*{\glostyle}[1]{%
@@ -263,7 +283,7 @@
 }
 
 \newcommand*{\catattr}[1]{%
-  \texorpdfstring{\idx{#1}}{#1}%
+  \texorpdfstring{\idx{catattr.#1}}{#1}%
 }
 
 \newcommand*{\counter}[1]{%
@@ -373,24 +393,7 @@
   \ignorespacesafterend
 }
 
-\newenvironment{important}{%
-  \setlength{\fboxrule}{4pt}%
-  \setlength\borderedboxwidth{\linewidth}%
-  \addtolength\borderedboxwidth{-2\fboxsep}%
-  \addtolength\borderedboxwidth{-2\fboxrule}%
-  \begin{lrbox}{\borderedboxcontents}%
-    \begin{minipage}{\borderedboxwidth}%
-    \raggedright
-    \setlength\parindent{1em}%
-    \noindent\ignorespaces
-}%
-{%
-    \end{minipage}%
-  \end{lrbox}%
-  \par\vskip10pt\noindent
-  \fcolorbox{red}{white}{\usebox{\borderedboxcontents}}\par\vskip10pt
-  \noindent\ignorespacesafterend
-}
+\newtcolorbox{important}{colback=red!5!white,colframe=red}
 
 \newcommand*{\sectionref}[1]{section~\ref{#1}}
 \newcommand*{\Sectionref}[1]{Section~\ref{#1}}
@@ -457,6 +460,7 @@
 package~\cite{glossaries-extra})
 and the \isty{glossaries} user manual
 (distributed with the \sty{glossaries} package~\cite{glossaries}).
+See also the gallery~\cite{gallery} for examples.
 
 The \sty{glossaries} package is the \emph{base} package. The 
 \sty{glossaries-extra} package internally loads the \sty{glossaries} package 
@@ -535,9 +539,20 @@
 are described in the \sty{glossaries-extra} manual. The \bibgls\
 user manual summarises all keys (fields) in \sectionref{sec:fields}.
 
+The term \qt{field} not only includes the keys that may be used with
+\gls{newglossaryentry} but also internal labels (which may or may
+not have a corresponding key) that are used to store information.
+Note that there are some fields that may be used in the document
+that are considered internal fields by \bibgls\ because the field
+value is typically set as a by-product of the way that \bibgls\
+works. If these fields are set manually then you may get unexpected
+results as this can break \bibgls's normal operation.
+
 \begin{important}
 If the field value contains commas or equal signs the value must be grouped
 to hide those characters from the \meta{key}\dequals\meta{value} parser.
+When using \bibgls, the field value must be delimited according to
+the \ext{bib} file format.
 \end{important}
 
 The two main keys are \field{name} and \field{description}. The
@@ -850,8 +865,8 @@
 \nosecformatdef{glsifcategory}
 This checks if the \field{category} field for the entry given by
 \meta{label} is set to \meta{category}, but doesn't perform any
-expansion. It generates an error if the entry doesn't exist (or
-warning with \styopt[warn]{undefaction}).
+expansion of \meta{category}. It generates an error if the entry
+doesn't exist (or warning with \styopt[warn]{undefaction}).
 
 The category allows you to apply certain types of formatting, such
 as the \idx{postlinkhook} (\sectionref{sec:postlinkhooks}).
@@ -921,7 +936,7 @@
 user keys:
 \field{user1}\glsaddeach{field.user2,field.user3,field.user4,field.user5}, 
 \ldots, \field{user6}. The value of the
-first field can be obtained with:
+first field (\field{user1}) can be obtained with:
 \nosecformatdef{glsuseri}
 (which behaves like \gls{glssymbol}) or with:
 \nosecformatdef{glsentryuseri}
@@ -929,7 +944,7 @@
 \glsaddeach{glsuserii,glsuseriii,glsuseriv,glsuserv,%
 glsentryuserii,glsentryuseriii,glsentryuseriv,glsentryuserv}%
 The other fields are similarly obtained using \idx{lowercase} Roman
-numerals, so the sixth field can be obtained with:
+numerals, so value of the sixth field (\field{user6}) can be obtained with:
 \nosecformatdef{glsuservi}
 (which behaves like \gls{glssymbol}) or with:
 \nosecformatdef{glsentryuservi}
@@ -1443,7 +1458,7 @@
 \end{codeenv}
 In this case, \csfmt{test} is expandable. Its definition doesn't
 contain anything complicated. The \ext{toc} file (which is input by
-\csfmt{tableofcontents}) contains the line:
+\csfmt{tableofcontents}\glsadd{toc}) contains the line:
 \begin{codeenv}
 \cmd{contentsline} \marg{section}\marg{\cmd{numberline} \marg{1}some sample text}\marg{1}
 \end{codeenv}
@@ -1519,7 +1534,7 @@
 \gls{section}\marg{\gls{Gls}\marg{duck}\gls{protect}\gls{footnote}\marg{\gls{glsentrydesc}\marg{duck}}}
 \end{codeenv}
 In this case, it's unlikely that you'd want the footnote to appear
-in the table of contents, so it would be better to use the optional
+in the \gls{toc}, so it would be better to use the optional
 argument:
 \begin{codeenv}
 \gls{section}\oarg{Duck}\marg{\gls{Gls}\marg{duck}\gls{footnote}\marg{\gls{glsentrydesc}\marg{duck}}}\correct
@@ -1580,9 +1595,9 @@
 
 \begin{important}
 The examples in this section are used to illustrate the differences
-between \idx{robust}, \idx{fragile} and \idx{expandable} commands.
+between \idx{fragile}, \idx{robust} and \idx{expandable} commands.
 In general, it's better not to use commands like \gls{gls} in
-headings or captions (see \sectionref{sec:headings}) and using
+headings or captions (see \sectionref{sec:headings}). Using
 commands like \gls{gls} in field values can be problematic (see
 \sectionref{sec:nested}).
 \end{important}
@@ -1635,7 +1650,7 @@
 Since it's not possible to programmatically define entries with
 \bibgls, the expansion is automatically switched off as \bibgls\
 writes \gls{glsnoexpandfields} to the \ext{glstex} file (although
-you can switch this feature off with \longarg{expand-fields}).
+you can disable this feature with \longarg{expand-fields}).
 
 The reason why \gls{footnote} didn't cause a problem in the
 \field{description} field \emph{when the entry was defined} is that, by
@@ -1687,10 +1702,10 @@
 the name of the style. If the optional argument is omitted,
 \code{abbreviation} is assumed. The \sty{glossaries-extra} package
 automatically sets the default styles:
-\begin{codeenv}
+\begin{codeenv*}
 \gls{setabbreviationstyle}\marg{\abbrstyle{long-short}}
 \gls{setabbreviationstyle}\oarg{acronym}\marg{\abbrstyle{short-nolong}}
-\end{codeenv}
+\end{codeenv*}
 This means that if you don't explicitly set the style then any
 abbreviation defined with \gls{newacronym} will use the
 \abbrstyle{short-nolong} style (unless you change the category in
@@ -1893,7 +1908,8 @@
 \gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{\gls{glsxtrword}\marg{Secure}\gls{glsxtrwordsep}
 \gls{glsxtrword}\marg{Sockets}\gls{glsxtrwordsep}\gls{glsxtrword}\marg{Layer}}
 \end{codeenv}
-This is typically used with the \code{-hyphen} abbreviation styles.
+This is typically used with the \code{-hyphen} abbreviation styles,
+such as \abbrstyle{long-hyphen-short-hyphen}.
 If the final optional \meta{insert} argument of commands like
 \gls{gls} starts with a hyphen, \gls{glsxtrwordsep} is locally
 changed to a hyphen.
@@ -1904,7 +1920,7 @@
 \strut
 \cmd{usepackage}\marg{glossaries-extra}
 \strut
-\gls{setabbreviationstyle}\marg{\gls[noindex=false]{long-hyphen-short-hyphen}}
+\gls{setabbreviationstyle}\marg{\abbrstyle[noindex=false]{long-hyphen-short-hyphen}}
 \strut
 \gls{glssetcategoryattribute}\marg{abbreviation}\marg{\catattr{markwords}}\marg{true}
 \strut
@@ -2126,7 +2142,7 @@
 \gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{discardperiod}}\marg{true}
 \gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{retainfirstuseperiod}}\marg{true}
 \strut
-\gls{setabbreviationstyle}\oarg{initialism}\marg{\gls[noindex=false]{short-long}}
+\gls{setabbreviationstyle}\oarg{initialism}\marg{\abbrstyle[noindex=false]{short-long}}
 \strut
 \gls{newabbreviation}\oarg{\field{category}=initialism}
  \marg{gp}\marg{GP}\marg{General Practitioner}
@@ -2784,7 +2800,7 @@
 \begin{codeenv}
 \gls{printunsrtglossary}\oarg{\printglossopt[Nomenclature]{title}}
 \end{codeenv}
-The title used in the table of contents is assumed to be the same,
+The title used in the \gls{toc} is assumed to be the same,
 but you can change it with \printglossopt{toctitle}. For example:
 \begin{codeenv}
 \gls{printunsrtglossary}\oarg{
@@ -2934,6 +2950,16 @@
 \subsection{Groups and Locations}
 \label{sec:group}
 
+\begin{important}
+The \field{group} and \field{location} fields are considered
+internal fields by \bibgls. They may be referenced within the
+document, but they should not be assigned in the \ext{bib} file.
+\bibgls\ assigns these fields according to the resource options and
+command line switches. Explicitly assigning them can cause
+unexpected results. See also \sectionref{sec:logicaldivisions} of
+the \bibgls\ manual.
+\end{important}
+
 The \field{group} key isn't defined by default, but if it is defined
 then \gls{printunsrtglossary} will use the \field{group} field
 instead of trying to determine the group from the first character of
@@ -3931,7 +3957,7 @@
 
 The above example uses the \catattr{glossname} attribute to convert the first
 letter of the \field{name} to \idx{uppercase}. Unfortunately this can't be
-applied to the PDF bookmark or table of contents. A solution to this
+applied to the PDF bookmark or \gls{toc}. A solution to this
 would be to explicitly set the \field{name} with the first letter as
 an \idx{uppercase} character and the \field{text} field in
 \idx{lowercase}. For example:
@@ -4646,7 +4672,7 @@
 \gls{section}) and of captions (\gls{caption}) are
 \pidxpl{moving-argument}. The text is not only displayed at the
 point in the document where the command occurs, but may also be
-copied to the table of contents or list of figures etc.
+copied to the \gls{toc} or list of figures etc.
 Additionally, depending on the page style, the section argument may
 also be reproduced in the page header. This repeated use of the same
 material can cause complications, in particular it can prematurely
@@ -4698,7 +4724,7 @@
 Reference \gls{gls}\marg{html}.
 \cmd{end}\marg{document}
 \end{codeenv}
-On the first \LaTeX\ run, the table of contents is empty as the
+On the first \LaTeX\ run, the \gls{toc} is empty as the
 associated \ext{toc} file didn't exist at the start. The chapter title
 appears as \qt{A chapter about hypertext markup language
 (\textsc{html})}, which shows the \idx{firstuse} of
@@ -4707,10 +4733,10 @@
 \begin{codeenv}
 \cmd{contentsline} \marg{chapter}\marg{\cmd{numberline} \marg{1}A chapter about \gls{gls} \marg{html}}\marg{3}
 \end{codeenv}
-This means that on the next \LaTeX\ run, the table of contents now
-includes \code{\gls{gls}\marg{html}}. Since the table of contents
+This means that on the next \LaTeX\ run, the \gls{toc} now
+includes \code{\gls{gls}\marg{html}}. Since the \gls{toc}
 occurs at the start of the document, this is now the \idx{firstuse}
-of \code{html}, so the full form is shown in the table of contents,
+of \code{html}, so the full form is shown in the \gls{toc},
 but the chapter title is now \qt{A chapter about \textsc{html}}, which shows
 the subsequent use.
 
@@ -4746,7 +4772,7 @@
 \cmd{lipsum} \comment{dummy text}
 \cmd{end}\marg{document}
 \end{codeenv}
-This now shows the long form in the table of contents and the
+This now shows the long form in the \gls{toc} and the
 chapter title. Since \gls{glsfmtlong} doesn't affect the
 \idx{firstuseflag}, the reference after the chapter title now shows
 the \idx{firstuse} full form. There's no longer an error with the
@@ -4762,7 +4788,7 @@
 \end{codeenv}
 This now makes the page header too long, but remember that you can
 use the optional argument of sectioning commands to provide a
-shorter form for both the page heading and table of contents:
+shorter form for both the page heading and \gls{toc}:
 \begin{codeenv}
 \gls{chapter}\oarg{A chapter about \gls{glsfmtshort}\marg{html}}\marg{A chapter about 
 \gls{glsfmtlong}\marg{html}}
@@ -4772,7 +4798,7 @@
 to display the short form in small capitals. The combination of
 italic and small capitals isn't supported with the default fonts and
 results in a font substitution. There's a similar problem in the 
-table of contents which displays the chapter title in bold. There's 
+\gls{toc} which displays the chapter title in bold. There's 
 a warning at the end of the transcript:
 \begin{verbatim}
 Some font shapes were not available, defaults substituted.
@@ -4793,17 +4819,17 @@
 \end{codeenv}
 This uses:
 \nosecformatdef{glsxtrifinmark}
-which expands to \meta{true} in headings and the table of contents,
+which expands to \meta{true} in headings and the \gls{toc},
 otherwise it expands to \meta{false}. This use of
 \gls{MakeTextUppercase} replaces the need for the \catattr{headuc}
 attribute. Both \catattr{headuc} and the above redefinition of
 \gls{glsabbrvscfont} will cause the abbreviation to appear in
-\idx{uppercase} in the table of contents. If you don't want this,
-you can defer making these modifications until after the table of
-contents. Alternatively, use:
+\idx{uppercase} in the \gls{toc}. If you don't want this,
+you can defer making these modifications until after the 
+\gls{toc}. Alternatively, use:
 \nosecformatdef{glsxtrRevertTocMarks}
-which makes \gls{glsxtrifinmark} expand to \meta{false} in the table
-of contents.  For example:
+which makes \gls{glsxtrifinmark} expand to \meta{false} in the 
+\gls{toc}.  For example:
 \begin{codeenv}
 \cmd{documentclass}\marg{book}
 \strut

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib	2019-05-05 18:06:25 UTC (rev 51008)
@@ -117,7 +117,7 @@
   author = {Nicola Talbot},
   title = {{Dickimaw Books} Gallery},
   note = {\url{https://www.dickimaw-books.com/gallery/}},
-  year = 2018
+  year = 2019
 }
 
 @misc{glossarystylesgallery,
@@ -124,7 +124,7 @@
   author = {Nicola Talbot},
   title = {Gallery (All Styles Provided by \sty{glossaries})},
   note = {\url{https://www.dickimaw-books.com/gallery/glossaries-styles/}},
-  year = 2018
+  year = 2019
 }
 
 @misc{buildglossaries,

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls-src.zip
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.bib
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.bib	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.bib	2019-05-05 18:06:25 UTC (rev 51008)
@@ -1,8 +1,52 @@
 % Encoding: UTF-8
 
+% Custom entry types will need aliasing.
+%
+% @bibglscommand       -> \bibgls... command provided by bib2gls
+% @glscommand          -> command provided by glossaries.sty,
+%                        glossaries-extra.sty or supplemental glossary packages.
+% @mainglscommand      -> glossary-related command with formal syntax described
+%                        in the main matter.
+% @abbrvstylecommand   -> command used by abbreviation styles.
+% @glostylecommand     -> command used by glossary styles.
+% @resourceoption      -> \GlsXtrLoadResources option
+% @command             -> command provided by kernel or other package
+% @examplecommand      -> custom command defined in the examples
+% @fileformat          -> file format
+% @application         -> application
+% @package             -> package
+% @specialchar         -> special character
+% @environment         -> environment
+% @glsenvironment      -> environment provided by glossaries.sty
+% @abbreviationstyle   -> abbreviation style
+% @glossarystyle       -> glossary style
+% @categoryattribute   -> category attribute
+% @counter             -> counter
+% @labelprefix         -> label prefix
+% @packageoption       -> package option
+% @field               -> field
+% @entrytype           -> entry type
+% @switch              -> command line switch
+% @xmltag              -> tag in XML language resource file
+% @unicodecategory     -> Unicode category
+% @texmfcnf            -> texmf.cnf setting
+% @file                -> file
+% @samplefile          -> sample file
+% @printglossoption    -> \printunsrtglossary option
+% @glslinkoption       -> \glslink option
+% @glsaddoption        -> \glsadd option
+% @exampleentry        -> example entry
+% @examplesymbol       -> example symbol
+% @exampleindex        -> example term
+% @exampleabbreviation -> example abbreviation
+% @topic               -> topic
+
 @preamble{"\providecommand{\dhyphen}{-}
-\providecommand{\csfmt}[1]{\texttt{\glsbackslash #1}}%
-\providecommand{\derivfn}[1]{f'(#1)}"}
+\providecommand{\csfmt}[1]{\texttt{\glsbackslash #1}}
+\providecommand{\derivfn}[1]{f'(#1)}
+\providecommand{\rangestartmark}{\symbol{40}}
+\providecommand{\rangeendmark}{\symbol{41}}
+\providecommand{\abbrvword}[1]{\textup{#1}}"}
 
 @abbreviation{IETF,
  short = {IETF},
@@ -30,7 +74,7 @@
 }
 
 @abbreviation{SIunit,
- short = {SI unit},
+ short = {SI \abbrvword{unit}},
  long = {International System of Units},
  longplural = {International System of Units},
  category={common}
@@ -53,236 +97,637 @@
   long = {encapsulating command}
 }
 
- at dualindexentry{bibglsnewentry,
+ at abbreviation{toc,
+  short = {TOC},
+  long = {table of contents}
+}
+
+ at topic{definingterms,
+  name={defining terms}
+}
+
+ at topic{formattingcommands,
+  name={formatting commands},
+  text={formatting command}
+}
+
+ at topic{abbreviationcommands,
+  name={abbreviation commands (general)},
+  text={abbreviation command},
+  seealso={abbreviationstyles}
+}
+
+ at topic{glossarystylecommands,
+  name={glossary style commands (general)},
+  text={glossary style command},
+  seealso={glossarystyle}
+}
+
+ at topic{separatorcommands,
+  name={separator commands}
+}
+
+ at topic{crossrefcommands,
+  name={cross-referencing commands}
+}
+
+ at topic{loclistcommands,
+  name={location list commands (records)}
+}
+
+ at topic{fixedtextcommands,
+  name={fixed text commands}
+}
+
+ at topic{fieldrefcommands,
+  name={field reference commands}
+}
+
+ at topic{entryrefcommands,
+  name={entry reference commands}
+}
+
+ at topic{glossrefs,
+  name={glossary lists (\fieldfmt{type})}
+}
+
+ at topic{standalonestyles,
+  name={standalone styles}
+}
+
+ at topic{providingcommands,
+  name={defining or redefining commands}
+}
+
+ at topic{linkcommands,
+  name={hyperlink-capable commands or targets}
+}
+
+ at topic{supplementalrefs,
+  name={supplemental document references}
+}
+
+ at topic{assigncommands,
+  name={assignment commands},
+  text={assignment command}
+}
+
+ at topic{groupcommands,
+  name={glossary group commands}
+}
+
+ at topic{charcommands,
+  name={character or symbol commands}
+}
+
+ at topic{casecommands,
+  name={case-changing commands},
+  text={case-changing command}
+}
+
+ at topic{internalcommands,
+  name={internal commands}
+}
+
+ at topic{auxcommands,
+  name={auxiliary file commands},
+  text={auxiliary file command}
+}
+
+ at topic{capheadcommands,
+  name={caption or heading commands},
+  text={caption or heading command}
+}
+
+ at topic{listcommands,
+  name={list commands (internal or comma-separated)},
+  text={list command}
+}
+
+ at topic{collationsubrules,
+  name={collation sub-rules}
+}
+
+ at topic{catattrcommands,
+  name={categories and attributes}
+}
+
+ at topic{regex,
+  name={regular expressions},
+  text={regular expression},
+}
+
+ at topic{access-support,
+  name={accessibility support}
+}
+
+ at topic{conditionals,
+  name={conditionals and boolean values},
+  text={conditional},
+  plural={conditionals}
+}
+ at indexplural{booleanvals,
+  text={boolean value},
+  alias={conditionals}
+}
+
+ at topic{debugging,
+  name={debugging commands},
+  text={debugging command}
+}
+
+ at topic{shortcutcommands,
+  name={shortcut commands},
+  text={shortcut command}
+}
+
+ at topic{hooks,name={hooks},text={hook}}
+ at topic{loops,name={loops},text={loop}}
+ at index{iteration,see={loops}}
+ at indexplural{handler,seealso={loops}}
+ at topic{indexing}
+
+ at bibglscommand{bibglsnewentry,
   name={\csfmt{bib\-gls\-new\-entry}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{entry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewsymbol,
+ at bibglscommand{bibglsnewsymbol,
   name={\csfmt{bib\-gls\-new\-symbol}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{symbol}},
+  topics={definingterms},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnewnumber,
+ at bibglscommand{bibglsnewnumber,
   name={\csfmt{bib\-gls\-new\-number}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{number}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewindex,
+ at bibglscommand{bibglsnewindex,
   name={\csfmt{bib\-gls\-new\-index}},
   user1={\margm{label}\margm{options}},
   description={defines terms provided with \atentry{index}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewindexplural,
+ at bibglscommand{bibglsnewindexplural,
   name={\csfmt{bib\-gls\-new\-index\-plural}},
   user1={\margm{label}\margm{options}\margm{name}},
   description={defines terms provided with \atentry{index}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewabbreviation,
+ at bibglscommand{bibglsnewabbreviation,
   name={\csfmt{bib\-gls\-new\-abbreviation}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}},
   description={defines terms provided with \atentry{abbreviation}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewacronym,
+ at bibglscommand{bibglsnewacronym,
   name={\csfmt{bib\-gls\-new\-acronym}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}},
   description={defines terms provided with \atentry{acronym}},
+  topics={definingterms},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualentry,
+ at bibglscommand{bibglsnewdualentry,
   name={\csfmt{bib\-gls\-new\-dual\-entry}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{dualentry}},
+  topics={definingterms},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexentry,
+ at bibglscommand{bibglsnewdualindexentry,
   name={\csfmt{bib\-gls\-new\-dual\-index\-entry}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines primary terms provided with
 \atentry{dualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexentrysecondary,
+ at bibglscommand{bibglsnewdualindexentrysecondary,
   name={\csfmt{bib\-gls\-new\-dual\-index\-entry\-secondary}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines secondary terms provided with
 \atentry{dualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexsymbol,
+ at bibglscommand{bibglsnewdualindexsymbol,
   name={\csfmt{bib\-gls\-new\-dual\-index\-symbol}},
   user1={\margm{label}\margm{options}\margm{name}\margm{symbol}\margm{description}},
   description={defines primary terms provided with
 \atentry{dualindexsymbol}},
+  topics={definingterms},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexsymbolsecondary,
+ at bibglscommand{bibglsnewdualindexsymbolsecondary,
   name={\csfmt{bib\-gls\-new\-dual\-index\-symbol\-secondary}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines secondary terms provided with
 \atentry{dualindexsymbol}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexnumber,
+ at bibglscommand{bibglsnewdualindexnumber,
   name={\csfmt{bib\-gls\-new\-dual\-index\-number}},
   user1={\margm{label}\margm{options}\margm{name}\margm{symbol}\margm{description}},
   description={defines primary terms provided with
 \atentry{dualindexnumber}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexnumbersecondary,
+ at bibglscommand{bibglsnewdualindexnumbersecondary,
   name={\csfmt{bib\-gls\-new\-dual\-index\-number\-secondary}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines secondary terms provided with
 \atentry{dualindexnumber}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexabbreviation,
+ at bibglscommand{bibglsnewdualindexabbreviation,
   name={\csfmt{bib\-gls\-new\-dual\-index\-abbre\-via\-tion}},
   user1={\margm{label}\margm{dual-label}\margm{options}\margm{name}\margm{short}\margm{long}\margm{description}},
   description={defines primary terms provided with
 \atentry{dualindexabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualindexabbreviationsecondary,
+ at bibglscommand{bibglsnewdualindexabbreviationsecondary,
   name={\csfmt{bib\-gls\-new\-dual\-index\-abbre\-via\-tion\-sec\-ond\-ary}},
   user1={\margm{label}\margm{options}\margm{name}\margm{short}\margm{long}\margm{description}},
   description={defines secondary terms provided with
 \atentry{dualindexabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualabbreviationentry,
+ at bibglscommand{bibglsnewdualabbreviationentry,
   name={\csfmt{bib\-gls\-new\-dual\-abbre\-via\-tion\-entry}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
   description={defines primary terms provided with
 \atentry{dualabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualabbreviationentrysecondary,
+ at bibglscommand{bibglsnewdualabbreviationentrysecondary,
   name={\csfmt{bib\-gls\-new\-dual\-abbre\-via\-tion\-entry\-sec\-ond\-ary}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
   description={defines secondary terms provided with
 \atentry{dualabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualentryabbreviation,
+ at bibglscommand{bibglsnewdualentryabbreviation,
   name={\csfmt{bib\-gls\-new\-dual\-entry\-abbre\-via\-tion}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
   description={defines primary terms provided with (deprecated)
 \atentry{dualentryabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualentryabbreviationsecondary,
+ at bibglscommand{bibglsnewdualentryabbreviationsecondary,
   name={\csfmt{bib\-gls\-new\-dual\-entry\-abbre\-via\-tion\-sec\-ond\-ary}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
   description={defines secondary terms provided with (deprecated)
 \atentry{dualentryabbreviation}},
+  topics={definingterms},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualsymbol,
+ at bibglscommand{bibglsnewdualsymbol,
   name={\csfmt{bib\-gls\-new\-dual\-symbol}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{dualsymbol}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualnumber,
+ at bibglscommand{bibglsnewdualnumber,
   name={\csfmt{bib\-gls\-new\-dual\-number}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{dualnumber}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualabbreviation,
+ at bibglscommand{bibglsnewdualabbreviation,
   name={\csfmt{bib\-gls\-new\-dual\-abbre\-via\-tion}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}},
   description={defines terms provided with
 \atentry{dualabbreviation}},
+  topics={definingterms},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnewdualacronym,
+ at bibglscommand{bibglsnewdualacronym,
   name={\csfmt{bib\-gls\-new\-dual\-acronym}},
   user1={\margm{label}\margm{options}\margm{short}\margm{long}},
   description={defines terms provided with \atentry{dualacronym}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewtertiaryindexabbreviationentry,
+ at bibglscommand{bibglsnewtertiaryindexabbreviationentry,
   name={\csfmt{bib\-gls\-new\-tert\-iary\-index\-abbre\-via\-tion\-entry}},
   user1={\margm{label}\margm{dual-label}\margm{options}\margm{name}\margm{short}\margm{long}\margm{description}},
   description={defines primary terms provided with
 \atentry{tertiaryindexabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewtertiaryindexabbreviationentrysecondary,
+ at bibglscommand{bibglsnewtertiaryindexabbreviationentrysecondary,
   name={\csfmt{bib\-gls\-new\-tert\-iary\-index\-abbre\-via\-tion\-entry\-sec\-ond\-ary}},
   user1={\margm{label}\margm{tertiary-label}\margm{options}\margm{tertiary-opts}\margm{primary-name}\margm{short}\margm{long}\margm{description}},
   description={defines secondary and tertiary terms provided with
 \atentry{tertiaryindexabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewbibtexentry,
+ at bibglscommand{bibglsnewbibtexentry,
   name={\csfmt{bib\-gls\-new\-bib\-tex\-entry}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with \atentry{bibtexentry}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsnewcontributor,
+ at bibglscommand{bibglsnewcontributor,
   name={\csfmt{bib\-gls\-new\-con\-trib\-u\-tor}},
   user1={\margm{label}\margm{options}\margm{name}\margm{description}},
   description={defines terms provided with
    \atentry{contributor}},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{bibglsuselongfont,
+ at bibglscommand{bibglsnewprogenitor,
+  name={\csfmt{bib\-gls\-new\-progenitor}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{progenitor}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnindex,
+  name={\csfmt{bib\-gls\-new\-spawn\-index}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnindex}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawndualindexentry,
+  name={\csfmt{bib\-gls\-new\-spawn\-dual\-index\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawndualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawndualindexentrysecondary,
+  name={\csfmt{bib\-gls\-new\-spawn\-dual\-index\-entry\-secondary}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines secondary terms provided with \atentry{spawndualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedindex,
+  name={\csfmt{bib\-gls\-new\-spawned\-index}},
+  user1={\margm{label}\margm{options}},
+  description={defines terms spawned from \atentry{progenitor}
+   or \atentry{spawnindex}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnindexplural,
+  name={\csfmt{bib\-gls\-new\-spawn\-index\-plural}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnindexplural}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedindexplural,
+  name={\csfmt{bib\-gls\-new\-spawned\-index\-plural}},
+  user1={\margm{label}\margm{options}\margm{name}},
+  description={defines terms spawned from \atentry{spawnindexplural}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnentry,
+  name={\csfmt{bib\-gls\-new\-spawn\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedentry,
+  name={\csfmt{bib\-gls\-new\-spawned\-entry}},
+  user1={\margm{label}\margm{options}},
+  description={defines terms spawned from \atentry{spawnentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnabbreviation,
+  name={\csfmt{bib\-gls\-new\-spawn\-abbreviation}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{spawnabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedabbreviation,
+  name={\csfmt{bib\-gls\-new\-spawned\-abbreviation}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms spawned from \atentry{spawnabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnacronym,
+  name={\csfmt{bib\-gls\-new\-spawn\-acronym}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{spawnacronym}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedacronym,
+  name={\csfmt{bib\-gls\-new\-spawned\-acronym}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms spawned from \atentry{spawnacronym}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnsymbol,
+  name={\csfmt{bib\-gls\-new\-spawn\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnsymbol}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedsymbol,
+  name={\csfmt{bib\-gls\-new\-spawned\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms spawned from \atentry{spawnsymbol}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnnumber,
+  name={\csfmt{bib\-gls\-new\-spawn\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnednumber,
+  name={\csfmt{bib\-gls\-new\-spawned\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms spawned from \atentry{spawnnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsuselongfont,
   name={\csfmt{bib\-gls\-use\-long\-font}},
   user1={\margm{text}\margm{category}},
   description={ensures that the given text is formatted according to
     the given category's long format},
+  note={\bibgls},
+  topics={definingterms},
   category={command}
 }
 
- at index{glsuselongfont,
+ at glscommand{glsuselongfont,
   name={\csfmt{gls\-use\-long\-font}},
   user1={\margm{text}\margm{category}},
   description={applies the formatting command used for the long
    form for the abbreviation style associated with the given category},
   note={\styfmt{glossaries-extra} v1.21+},
+  topics={formattingcommands,abbreviationcommands},
   category={command}
 }
 
- at index{GlsXtrAutoAddOnFormat,
+ at glscommand{ifglsxtrinsertinside,
+  name={\csfmt{if\-gls\-xtr\-insert\-inside}},
+  description={switch that determines whether or not inserted text
+  (provided in the final optional argument of commands like \cs{gls})
+  is inside or outside of the font changing commands in the predefined
+  abbreviation styles. The default is \optfmt{false}},
+  topics={abbreviationcommands,conditionals},
+  note={\styfmt{glossaries-extra} v1.02+},
+  category={command}
+}
+
+ at glscommand{glsxtrinsertinsidefalse,
+  name={\csfmt{gls\-xtr\-insert\-inside\-false}},
+  description={sets the \cs{ifglsxtrinsertinside} switch to \optfmt{false}},
+  topics={abbreviationcommands,conditionals},
+  note={\styfmt{glossaries-extra} v1.02+},
+  category={command}
+}
+
+ at glscommand{glsxtrinsertinsidetrue,
+  name={\csfmt{gls\-xtr\-insert\-inside\-true}},
+  description={sets the \cs{ifglsxtrinsertinside} switch to \optfmt{true}},
+  topics={abbreviationcommands,conditionals},
+  note={\styfmt{glossaries-extra} v1.02+},
+  category={command}
+}
+
+ at glscommand{glsxtrfullsep,
+  name={\csfmt{gls\-xtr\-full\-sep}},
+  user1={\margm{label}},
+  description={the separator used in the full format for the
+  parenthetical abbreviation styles or for inline parenthetical
+  styles. This just does a space by default},
+  topics={formattingcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{GlsXtrAutoAddOnFormat,
   name={\csfmt{GlsXtrAutoAddOnFormat}},
   user1={\oargm{label}\margm{format list}\margm{glsadd options}},
   description={makes commands like \cs{gls} and \cs{glslink}
@@ -292,453 +737,584 @@
    comma-separated elements of \meta{format list}. The format isn't automatically
    applied to the \cs{glsadd} options},
   note={\styfmt{glossaries-extra} v1.37+},
+  topics={hooks,indexing},
   category={command}
 }
 
- at dualindexentry{bibglsuseabbrvfont,
+ at bibglscommand{bibglsuseabbrvfont,
   name={\csfmt{bib\-gls\-use\-abbrv\-font}},
   user1={\margm{text}\margm{category}},
   description={ensures that the given text is formatted according to
     the given category's short format},
+  note={\bibgls},
+  topics={formattingcommands,abbreviationcommands},
   category={command}
 }
 
- at index{glsuseabbrvfont,
+ at glscommand{glsuseabbrvfont,
   name={\csfmt{gls\-use\-abbrv\-font}},
   user1={\margm{text}\margm{category}},
   description={applies the formatting command used for the short
    form for the abbreviation style associated with the given category},
   note={\styfmt{glossaries-extra} v1.21+},
+  topics={formattingcommands,abbreviationcommands},
   category={command}
 }
 
- at dualindexentry{bibglsseesep,
+ at bibglscommand{bibglsseesep,
   name={\csfmt{bib\-gls\-see\-sep}},
   user1={},
   description={separator between \field{see} 
    cross-references and location list},
+  note={\bibgls},
+  topics={glossarystylecommands,separatorcommands,crossrefcommands,loclistcommands},
   category={command}
 }
 
- at dualindexentry{bibglsaliassep,
+ at bibglscommand{bibglsaliassep,
   name={\csfmt{bib\-gls\-alias\-sep}},
   user1={},
   description={separator between \field{alias} 
    cross-reference and location list},
+  note={\bibgls},
+  topics={glossarystylecommands,separatorcommands,crossrefcommands,loclistcommands},
   category={command}
 }
- at dualindexentry{bibglsseealsosep,
+
+ at bibglscommand{bibglsseealsosep,
   name={\csfmt{bib\-gls\-see\-also\-sep}},
   user1={},
   description={separator between \field{seealso} 
    cross-references and location list},
+  note={\bibgls},
+  topics={glossarystylecommands,separatorcommands,crossrefcommands,loclistcommands},
   category={command}
 }
 
- at dualindexentry{bibglspassim,
+ at bibglscommand{bibglscompact,
+  name={\csfmt{bib\-gls\-compact}},
+  user1={\margm{pattern}\margm{part1}\margm{part2}},
+  description={compaction used on the end range location},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglspassim,
   name={\csfmt{bib\-gls\-passim}},
   user1={},
   description={passim range suffix},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
   category={command}
 }
 
- at dualindexentry{bibglspassimname,
+ at bibglscommand{bibglspassimname,
   name={\csfmt{bib\-gls\-passim\-name}},
   user1={},
   description={name used by passim range suffix},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands,fixedtextcommands},
   category={command}
 }
 
- at dualindexentry{bibglsusesee,
+ at bibglscommand{bibglsusesee,
   name={\csfmt{bib\-gls\-use\-see}},
   user1={\margm{label}},
-  description={display cross-reference list for given entry},
+  description={display \field{see} cross-reference list for given entry},
+  note={\bibgls},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
   category={command}
 }
 
- at dualindexentry{bibglsusealias,
+ at bibglscommand{bibglsusealias,
   name={\csfmt{bib\-gls\-use\-alias}},
   user1={\margm{label}},
-  description={display cross-reference list for given entry},
+  description={display the \field{alias} cross-reference for given entry},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  note={\bibgls},
   category={command}
 }
- at dualindexentry{bibglsuseseealso,
+
+ at bibglscommand{bibglsuseseealso,
   name={\csfmt{bib\-gls\-use\-see\-also}},
   user1={\margm{label}},
-  description={display cross-reference list for given entry},
+  description={display the \field{seealso} cross-reference list for given entry},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdelimN,
+ at bibglscommand{bibglsdelimN,
   name={\csfmt{bib\-gls\-delimN}},
   user1={},
-  description={delimit individual locations (except last)},
+  description={separator for individual locations (except last)},
   seealso={bibglslastDelimN},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
   category={command}
 }
 
- at dualindexentry{bibglslastDelimN,
+ at bibglscommand{bibglslastDelimN,
   name={\csfmt{bib\-gls\-last\-DelimN}},
   user1={},
-  description={delimit last location},
+  description={separator before the last location (where there is
+    more than one location)},
   seealso={bibglsdelimN},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsrange,
+ at bibglscommand{bibglsrange,
   name={\csfmt{bib\-gls\-range}},
   user1={\marg{\meta{start}\cs{delimR} \meta{end}}},
   description={Explicit range format},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
   category={command}
 }
 
- at dualindexentry{bibglsinterloper,
+ at bibglscommand{bibglsinterloper,
   name={\csfmt{bib\-gls\-inter\-loper}},
   user1={\margm{location}},
   description={interloper location format},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
   category={command}
 }
 
- at dualindexentry{bibglspostlocprefix,
+ at bibglscommand{bibglspostlocprefix,
   name={\csfmt{bib\-gls\-post\-loc\-prefix}},
   user1={},
   description={location list post prefix},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
   category={command}
 }
 
- at dualindexentry{bibglslocprefix,
+ at bibglscommand{bibglslocprefix,
   name={\csfmt{bib\-gls\-loc\-prefix}},
   user1={\margm{n}},
   description={location list prefix},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsprimary,
+ at bibglscommand{bibglsprimary,
   name={\csfmt{bib\-gls\-primary}},
   user1={\margm{n}\margm{locations}},
   description={location list encapsulator used in the
 \field{primarylocations} field},
+  topics={loclistcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglspagename,
+ at bibglscommand{bibglspagename,
   name={\csfmt{bib\-gls\-page\-name}},
   user1={},
   description={name used for single page},
+  topics={glossarystylecommands,loclistcommands,fixedtextcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglspagesname,
+ at bibglscommand{bibglspagesname,
   name={\csfmt{bib\-gls\-pages\-name}},
   user1={},
   description={name used for multiple pages},
+  topics={glossarystylecommands,loclistcommands,fixedtextcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglslocsuffix,
+ at bibglscommand{bibglslocsuffix,
   name={\csfmt{bib\-gls\-loc\-suffix}},
   user1={\margm{n}},
   description={location list suffix},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglshyperlink,
+ at bibglscommand{bibglshyperlink,
   name={\csfmt{bib\-gls\-hyper\-link}},
   user1={\margm{text}\margm{label}},
   description={displays \meta{text} with a hyperlink to the entry
    given by \meta{label}, if supported},
+  topics={linkcommands,fieldrefcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglslocationgroup,
+ at bibglscommand{bibglslocationgroup,
   name={\csfmt{bib\-gls\-location\-group}},
   user1={\margm{n}\margm{counter}\margm{list}},
   description={location group encapsulator},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglslocationgroupsep,
+ at bibglscommand{bibglslocationgroupsep,
   name={\csfmt{bib\-gls\-location\-group\-sep}},
   user1={},
   description={location group separator},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssupplemental,
+ at bibglscommand{bibglssupplemental,
   name={\csfmt{bib\-gls\-supple\-mental}},
   user1={\margm{n}\margm{list}},
   description={supplemental list encapsulator},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs},
   category={command}
 }
 
- at dualindexentry{bibglssupplementalsep,
+ at bibglscommand{bibglssupplementalsep,
   name={\csfmt{bib\-gls\-supple\-mental\-sep}},
   user1={},
   description={separator between main and supplementary locations},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs,separatorcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssupplementalsublist,
+ at bibglscommand{bibglssupplementalsublist,
   name={\csfmt{bib\-gls\-supple\-mental\-sub\-list}},
   user1={\margm{n}\margm{external document}\margm{list}},
   description={supplemental sub-list encapsulator},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssupplementalsubsep,
+ at bibglscommand{bibglssupplementalsubsep,
   name={\csfmt{bib\-gls\-supple\-mental\-sub\-sep}},
   user1={},
   description={separator between supplementary sub-lists},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs,separatorcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{glsgroupheading,
+ at mainglscommand{glsgroupheading,
   name={\csfmt{gls\-group\-heading}},
   user1={\margm{label}},
   description={formats the heading for the group identified by the
 given label},
+  topics={glossarystylecommands,formattingcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{bibglssetlastgrouptitle,
+ at bibglscommand{bibglssetlastgrouptitle,
   name={\csfmt{bib\-gls\-set\-last\-group\-title}},
   user1={\margm{cs}\margm{specs}},
   description={sets the last group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetlettergrouptitle,
+ at bibglscommand{bibglssetlettergrouptitle,
   name={\csfmt{bib\-gls\-set\-letter\-group\-title}},
   user1={\marg{\margm{title}\margm{letter}\margm{id}\margm{type}}},
   description={sets the letter group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{glsxtrsetgrouptitle,
+ at mainglscommand{glsxtrsetgrouptitle,
   name={\csfmt{gls\-xtr\-set\-group\-title}},
   user1={\margm{group label}\margm{group title}},
   description={globally sets the title for the group identified by the given label},
+  topics={glossarystylecommands,assigncommands,groupcommands},
   note={\styfmt{glossaries-extra} v1.14+},
   category={command}
 }
 
- at dualindexentry{glsxtrlocalsetgrouptitle,
+ at glscommand{glsxtrlocalsetgrouptitle,
   name={\csfmt{gls\-xtr\-local\-set\-group\-title}},
   user1={\margm{group label}\margm{group title}},
   description={locally sets the title for the group identified by the given label},
+  topics={glossarystylecommands,assigncommands,groupcommands},
   note={\styfmt{glossaries-extra} v1.24+},
   category={command}
 }
 
- at dualindexentry{bibglslettergroup,
+ at bibglscommand{bibglslettergroup,
   name={\csfmt{bib\-gls\-letter\-group}},
   user1={\margm{title}\margm{letter}\margm{id}\margm{type}},
   description={expands to the letter group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglslettergrouptitle,
+ at bibglscommand{bibglslettergrouptitle,
   name={\csfmt{bib\-gls\-letter\-group\-title}},
   user1={\margm{title}\margm{letter}\margm{id}\margm{type}},
   description={expands to the letter group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetothergrouptitle,
+ at bibglscommand{bibglssetothergrouptitle,
   name={\csfmt{bib\-gls\-set\-other\-group\-title}},
   user1={\marg{\margm{character}\margm{id}\margm{type}}},
   description={sets the non-letter group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsothergroup,
+ at bibglscommand{bibglsothergroup,
   name={\csfmt{bib\-gls\-other\-group}},
   user1={\margm{character}\margm{id}\margm{type}},
   description={expands to the non-letter group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsothergrouptitle,
+ at bibglscommand{bibglsothergrouptitle,
   name={\csfmt{bib\-gls\-other\-group\-title}},
   user1={\margm{character}\margm{id}\margm{type}},
   description={expands to the non-letter group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetemptygrouptitle,
+ at bibglscommand{bibglssetemptygrouptitle,
   name={\csfmt{bib\-gls\-set\-empty\-group\-title}},
   user1={\marg{\margm{type}}},
   description={sets the empty group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsemptygroup,
+ at bibglscommand{bibglsemptygroup,
   name={\csfmt{bib\-gls\-empty\-group}},
   user1={\margm{type}},
   description={expands to the empty group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsemptygrouptitle,
+ at bibglscommand{bibglsemptygrouptitle,
   name={\csfmt{bib\-gls\-empty\-group\-title}},
   user1={\margm{type}},
   description={expands to the empty group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetunicodegrouptitle,
+ at bibglscommand{bibglssetunicodegrouptitle,
   name={\csfmt{bib\-gls\-set\-unicode\-group\-title}},
   user1={\marg{\margm{label}\margm{character}\margm{id}\margm{type}}},
   description={sets the Unicode script, category or character code
 title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsunicodegroup,
+ at bibglscommand{bibglsunicodegroup,
   name={\csfmt{bib\-gls\-unicode\-group}},
   user1={\margm{label}\margm{character}\margm{id}\margm{type}},
   description={expands to the Unicode script or category label or
 character code},
+  note={\bibgls},
+  topics={glossarystylecommands,groupcommands},
   category={command}
 }
 
- at dualindexentry{bibglsunicodegrouptitle,
+ at bibglscommand{bibglsunicodegrouptitle,
   name={\csfmt{bib\-gls\-unicode\-group\-title}},
   user1={\margm{label}\margm{character}\margm{id}\margm{type}},
   description={expands to the Unicode script or category label or
 character code},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetnumbergrouptitle,
+ at bibglscommand{bibglssetnumbergrouptitle,
   name={\csfmt{bib\-gls\-set\-number\-group\-title}},
   user1={\marg{\margm{value}\margm{id}\margm{type}}},
   description={sets the number group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnumbergroup,
+ at bibglscommand{bibglsnumbergroup,
   name={\csfmt{bib\-gls\-number\-group}},
   user1={\margm{value}\margm{id}\margm{type}},
   description={expands to the number group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsnumbergrouptitle,
+ at bibglscommand{bibglsnumbergrouptitle,
   name={\csfmt{bib\-gls\-number\-group\-title}},
   user1={\margm{value}\margm{id}\margm{type}},
   description={expands to the number group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetdatetimegrouptitle,
+ at bibglscommand{bibglssetdatetimegrouptitle,
   name={\csfmt{bib\-gls\-set\-date\-time\-group\-title}},
   user1={\marg{\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}}},
   description={sets the date-time group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdatetimegroup,
+ at bibglscommand{bibglsdatetimegroup,
   name={\csfmt{bib\-gls\-date\-time\-group}},
   user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
   description={expands to the date-time group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdatetimegrouptitle,
+ at bibglscommand{bibglsdatetimegrouptitle,
   name={\csfmt{bib\-gls\-date\-time\-group\-title}},
   user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
   description={expands to the date-time group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetdategrouptitle,
+ at bibglscommand{bibglssetdategrouptitle,
   name={\csfmt{bib\-gls\-set\-date\-group\-title}},
   user1={\marg{\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}}},
   description={sets the date (no time) group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdategroup,
+ at bibglscommand{bibglsdategroup,
   name={\csfmt{bib\-gls\-date\-group}},
   user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}},
   description={expands to the date group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdategrouptitle,
+ at bibglscommand{bibglsdategrouptitle,
   name={\csfmt{bib\-gls\-date\-group\-title}},
   user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}},
   description={expands to the date group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssettimegrouptitle,
+ at bibglscommand{bibglssettimegrouptitle,
   name={\csfmt{bib\-gls\-set\-time\-group\-title}},
   user1={\marg{\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}}},
   description={sets the time (no date) group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglstimegroup,
+ at bibglscommand{bibglstimegroup,
   name={\csfmt{bib\-gls\-time\-group}},
   user1={\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
   description={expands to the time group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglstimegrouptitle,
+ at bibglscommand{bibglstimegrouptitle,
   name={\csfmt{bib\-gls\-time\-group\-title}},
   user1={\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
   description={expands to the time group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglshypergroup,
+ at bibglscommand{bibglshypergroup,
   name={\csfmt{bib\-gls\-hyper\-group}},
   user1={\margm{type}\margm{group\dhyphen id}},
   description={creates group navigation information},
+  topics={glossarystylecommands,groupcommands,linkcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsflattenedhomograph,
+ at bibglscommand{bibglsflattenedhomograph,
   name={\csfmt{bib\-gls\-flattened\-homograph}},
   user1={\margm{name}\margm{parent label}},
   description={expands to the flattened entry's new name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsflattenedchildpresort,
+ at bibglscommand{bibglsflattenedchildpresort,
   name={\csfmt{bib\-gls\-flattened\-child\-pre\-sort}},
   user1={\margm{child name}\margm{parent name}},
   description={expands to the pre-sort flattened child entry's new name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsflattenedchildpostsort,
+ at bibglscommand{bibglsflattenedchildpostsort,
   name={\csfmt{bib\-gls\-flattened\-child\-post\-sort}},
   user1={\margm{parent name}\margm{child name}},
   description={expands to the post-sort flattened child entry's new
 name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglssetwidest,
+ at bibglscommand{bibglssetwidest,
   name={\csfmt{bib\-gls\-set\-widest}},
   user1={\margm{level}\margm{name}},
   description={sets the widest name},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetwidestfortype,
+ at bibglscommand{bibglssetwidestfortype,
   name={\csfmt{bib\-gls\-set\-widest\-for\-type}},
   user1={\margm{type}\margm{level}\margm{name}},
   description={sets the widest name for the given glossary type},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetwidesttoplevelfallback,
+ at bibglscommand{bibglssetwidesttoplevelfallback,
   name={\csfmt{bib\-gls\-set\-widest\-top\-level\-fallback}},
   user1={\margm{glossary list}},
   description={fallback used instead of \csref{bibglssetwidest}
@@ -746,10 +1322,12 @@
    where there are only top level entries,
    where \meta{glossary list} is a comma-separated list
    of glossary labels},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetwidestfallback,
+ at bibglscommand{bibglssetwidestfallback,
   name={\csfmt{bib\-gls\-set\-widest\-fallback}},
   user1={\margm{glossary list}},
   description={fallback used instead of \csref{bibglssetwidest}
@@ -756,278 +1334,336 @@
    in the event that \bibgls\ can't determine the widest name,
    where \meta{glossary list} is a comma-separated list
    of glossary labels},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetwidestfortypefallback,
+ at bibglscommand{bibglssetwidestfortypefallback,
   name={\csfmt{bib\-gls\-set\-widest\-for\-type\-fallback}},
   user1={\margm{type}},
   description={fallback used instead of \csref{bibglssetwidestfortype}
    in the event that \bibgls\ can't determine the widest name},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglssetwidesttoplevelfortypefallback,
+ at bibglscommand{bibglssetwidesttoplevelfortypefallback,
   name={\csfmt{bib\-gls\-set\-widest\-top\-level\-for\-type\-fallback}},
   user1={\margm{type}},
   description={fallback used instead of \csref{bibglssetwidestfortype}
    in the event that \bibgls\ can't determine the widest name
    where there are only top-level entries},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
   category={command}
 }
 
 
- at dualindexentry{bibglscontributorlist,
+ at bibglscommand{bibglscontributorlist,
   name={\csfmt{bib\-gls\-contributor\-list}},
   user1={\margm{list}\margm{number}},
   description={used to markup a list of names from a field 
    that was converted from \BibTeX's contributor syntax},
+  topics={formattingcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglscontributor,
+ at bibglscommand{bibglscontributor,
   name={\csfmt{bib\-gls\-contributor}},
   user1={\margm{forenames}\margm{von-part}\margm{surname}\margm{suffix}},
   description={used to markup a contributor's name that was converted from
    \BibTeX's contributor syntax},
+  topics={formattingcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsdate,
+ at bibglscommand{bibglsdate,
   name={\csfmt{bib\-gls\-date}},
   user1={\margm{year}\margm{month}\margm{day-of-month}\margm{day-of-week}\margm{day-of-year}\margm{era}\margm{original}},
   description={used to markup a date converted from a field value},
+  topics={formattingcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdatetime,
+ at bibglscommand{bibglsdatetime,
   name={\csfmt{bib\-gls\-date\-time}},
   user1={\margm{year}\margm{month}\margm{day-of-month}\margm{day-of-week}\margm{day-of-year}\margm{era}\margm{hour}\margm{minute}\margm{second}\margm{millisec}\margm{dst}\margm{zone}\margm{original}},
   description={used to markup a date-time instance converted from a field value},
+  topics={formattingcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdatetimeremainder,
+ at bibglscommand{bibglsdatetimeremainder,
   name={\csfmt{bib\-gls\-date\-time\-remainder}},
   user1={\margm{millisec}\margm{dst}\margm{zone}\margm{original}},
   description={used internally to pick up the final four arguments of
    \csref{bibglsdatetime}},
+  topics={formattingcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglstime,
+ at bibglscommand{bibglstime,
   name={\csfmt{bib\-gls\-time}},
   user1={\margm{hour}\margm{minute}\margm{second}\margm{millisec}\margm{dst}\margm{zone}\margm{original}},
   description={used to markup a time converted from a field value},
+  topics={formattingcommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglshashchar,
+ at bibglscommand{bibglshashchar,
   name={\csfmt{bib\-gls\-hash\-char}},
   user1={},
   description={expands to a literal hash character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsunderscorechar,
+ at bibglscommand{bibglsunderscorechar,
   name={\csfmt{bib\-gls\-under\-score\-char}},
   user1={},
   description={expands to a literal underscore character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsdollarchar,
+ at bibglscommand{bibglsdollarchar,
   name={\csfmt{bib\-gls\-dollar\-char}},
   user1={},
   description={expands to a literal dollar character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsampersandchar,
+ at bibglscommand{bibglsampersandchar,
   name={\csfmt{bib\-gls\-amper\-sand\-char}},
   user1={},
   description={expands to a literal ampersand character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglscircumchar,
+ at bibglscommand{bibglscircumchar,
   name={\csfmt{bib\-gls\-circum\-char}},
   user1={},
   description={expands to a literal circumflex character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglshrefchar,
+ at bibglscommand{bibglshrefchar,
   name={\csfmt{bib\-gls\-href\-char}},
   user1={\margm{hex}\margm{char}},
   description={expands to a literal percent character followed by
 \meta{hex}},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglshrefunicode,
+ at bibglscommand{bibglshrefunicode,
   name={\csfmt{bib\-gls\-href\-unicode}},
   user1={\margm{hex}\margm{char}},
   description={expands to \meta{char} by default},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsprimaryprefixlabel,
+ at bibglscommand{bibglsprimaryprefixlabel,
   name={\csfmt{bib\-gls\-primary\-prefix\-label}},
   user1={\margm{prefix}},
   description={hook provided to pick up the primary prefix, if
    required},
+  topics={hooks},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsdualprefixlabel,
+ at bibglscommand{bibglsdualprefixlabel,
   name={\csfmt{bib\-gls\-dual\-prefix\-label}},
   user1={\margm{prefix}},
   description={hook provided to pick up the dual prefix, if
    required},
+  topics={hooks},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglstertiaryprefixlabel,
+ at bibglscommand{bibglstertiaryprefixlabel,
   name={\csfmt{bib\-gls\-tertiary\-prefix\-label}},
   user1={\margm{prefix}},
   description={hook provided to pick up the tertiary prefix, if
    required},
+  topics={hooks},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsexternalprefixlabel,
+ at bibglscommand{bibglsexternalprefixlabel,
   name={\csfmt{bib\-gls\-external\-prefix\-label}},
   user1={\margm{n}\margm{prefix}},
   description={hook provided to pick up the \meta{n}th external prefix, if
    required},
+  topics={hooks},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{bibglsuppercase,
+ at bibglscommand{bibglsuppercase,
   name={\csfmt{bib\-gls\-upper\-case}},
   user1={\margm{text}},
   description={converts \meta{text} to \idx{uppercase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglslowercase,
+ at bibglscommand{bibglslowercase,
   name={\csfmt{bib\-gls\-lower\-case}},
   user1={\margm{text}},
   description={converts \meta{text} to \idx{lowercase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglstitlecase,
+ at bibglscommand{bibglstitlecase,
   name={\csfmt{bib\-gls\-title\-case}},
   user1={\margm{text}},
   description={converts \meta{text} to \idx{titlecase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
   category={command}
 }
 
- at dualindexentry{bibglsfirstuc,
+ at bibglscommand{bibglsfirstuc,
   name={\csfmt{bib\-gls\-first\-uc}},
   user1={\margm{text}},
   description={converts the first letter of \meta{text} to \idx{uppercase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls},
   category={command}
 }
 
- at dualindexentry{glsexpandfields,
+ at mainglscommand{glsexpandfields,
   name={\csfmt{gls\-expand\-fields}},
   user1={},
   description={switches on field expansion},
+  topics={assigncommands,definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{glsnoexpandfields,
+ at mainglscommand{glsnoexpandfields,
   name={\csfmt{gls\-no\-expand\-fields}},
   user1={},
   description={switches off field expansion},
+  topics={assigncommands,definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{glssetexpandfield,
+ at mainglscommand{glssetexpandfield,
   name={\csfmt{gls\-set\-expand\-field}},
   user1={\margm{field}},
   description={switches on field expansion for the given field},
+  topics={assigncommands,definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{glssetnoexpandfield,
+ at mainglscommand{glssetnoexpandfield,
   name={\csfmt{gls\-set\-no\-expand\-field}},
   user1={\margm{field}},
   description={switches off field expansion for the given field},
+  topics={assigncommands,definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{newglossaryentry,
+ at mainglscommand{newglossaryentry,
   name={\csfmt{new\-glossary\-entry}},
   user1={\margm{label}\margm{\keyvallist}},
   description={defines a new glossary entry},
+  topics={definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{longnewglossaryentry,
+ at mainglscommand{longnewglossaryentry,
   name={\csfmt{long\-new\-glossary\-entry}},
   user1={\margm{label}\margm{\keyvallist}\margm{description}},
   description={defines a new glossary entry and appends
    \csfmt{leavemode}\csfmt{unskip}\cs{nopostdesc} at the end of
 \meta{description}},
+  topics={definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{longnewglossaryentry*,
+ at glscommand{longnewglossaryentry*,
   name={\csfmt{long\-new\-glossary\-entry*}},
   user1={\margm{label}\margm{\keyvallist}\margm{description}},
   description={defines a new glossary entry without appending any
 extra code to the end of \meta{description}},
+  topics={definingterms},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at dualindexentry{provideglossaryentry,
+ at mainglscommand{provideglossaryentry,
   name={\csfmt{provide\-glossary\-entry}},
   user1={\margm{label}\margm{\keyvallist}},
   description={defines a new glossary entry if one doesn't
     already exist with the given label},
+  topics={definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{longprovideglossaryentry,
+ at mainglscommand{longprovideglossaryentry,
   name={\csfmt{long\-provide\-glossary\-entry}},
   user1={\margm{label}\margm{\keyvallist}\margm{description}},
   description={defines a new glossary entry if one doesn't
     already exist with the given label},
+  topics={definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{newterm,
+ at mainglscommand{newterm,
   name={\csfmt{new\-term}},
   user1={\oargm{\keyvallist}\margm{label}},
   description={defines a new glossary entry where the
    \field{description} field defaults to empty},
-  note={the \styfmt{glossaries}'s \styopt{index} package
-option},
+  topics={definingterms},
+  note={\styfmt{glossaries}'s \styopt{index} package option},
   category={command}
 }
 
- at dualindexentry{newabbreviation,
+ at mainglscommand{newabbreviation,
   name={\csfmt{new\-abbre\-vi\-a\-tion}},
   user1={\oargm{\keyvallist}\margm{label}\margm{short}\margm{long}},
   description={defines a new abbreviation},
+  topics={definingterms},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at dualindexentry{newacronym,
+ at mainglscommand{newacronym,
   name={\csfmt{new\-acronym}},
   user1={\oargm{\keyvallist}\margm{label}\margm{short}\margm{long}},
   description={defines a new abbreviation. The
@@ -1034,118 +1670,133 @@
     \styfmt{glossaries-extra} package redefines this to use
     \csref{newabbreviation} with the \field{category} set to 
     \code{acronym}},
+  topics={definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{glsxtrnewsymbol,
+ at mainglscommand{glsxtrnewsymbol,
   name={\csfmt{gls\-xtr\-new\-symbol}},
   user1={\oargm{\keyvallist}\margm{label}\margm{symbol}},
   description={defines a new symbol},
+  topics={definingterms},
   note={\styfmt{glossaries-extra} \styopt{symbols}},
   category={command}
 }
 
- at dualindexentry{glsxtrnewnumber,
+ at mainglscommand{glsxtrnewnumber,
   name={\csfmt{gls\-xtr\-new\-number}},
   user1={\oargm{\keyvallist}\margm{label}},
   description={defines a new number},
+  topics={definingterms},
   note={\styfmt{glossaries-extra} \styopt{numbers}},
   category={command}
 }
 
- at dualindexentry{newdualentry,
+ at mainglscommand{newdualentry,
   name={\csfmt{new\-dual\-entry}},
   user1={\oargm{\keyvallist}\margm{label}\margm{short}\margm{long}\margm{description}},
   description={example given in \styfmt{glossaries} user manual},
+  topics={definingterms},
   category={command}
 }
 
- at dualindexentry{@gls at hypergroup,
+ at mainglscommand{@gls at hypergroup,
   name={\csfmt{@gls at hypergroup}},
   user1={\margm{type}\margm{group id}},
   description={command written to the \ext{aux} file that identifies that the given group was used in the
    glossary on the previous run},
+  topics={groupcommands,internalcommands,auxcommands},
   note={\styfmt{glossary-hypernav}},
   category={command}
 }
 
- at dualindexentry{glsxtr at resource,
+ at mainglscommand{glsxtr at resource,
   name={\csfmt{glsxtr at resource}},
   user1={\margm{options}\margm{filename}},
   description={this internal command is written to the \ext{aux}
 file by \csref{glsxtrresourcefile}
    to provide \bibgls\ with the resource information},
+  topics={internalcommands,auxcommands},
   note={\styfmt{glossaries-extra} v1.08+},
   category={command}
 }
 
- at dualindexentry{glsxtr at wrglossarylocation,
+ at mainglscommand{glsxtr at wrglossarylocation,
   name={\csfmt{gls\-xtr\- at wr\-glossary\-location}},
   user1={\margm{n}\margm{page}},
   description={This command simply expands to \meta{n}, the value of
 the \counter{wrglossary} counter for the given page},
+  topics={internalcommands,loclistcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.29+},
   category={command}
 }
 
- at dualindexentry{GlsXtrIndexCounterLink,
+ at mainglscommand{GlsXtrIndexCounterLink,
   name={\csfmt{Gls\-Xtr\-Index\-Counter\-Link}},
   user1={\margm{text}\margm{label}},
   description={Creates a hyperlink to the \counter{wrglossary}
 location obtained from the \field{indexcounter} field},
+  topics={linkcommands,loclistcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.29+},
   category={command}
 }
 
- at dualindexentry{GlsXtrDualBackLink,
+ at mainglscommand{GlsXtrDualBackLink,
   name={\csfmt{Gls\-Xtr\-Dual\-Back\-Link}},
   user1={\margm{text}\margm{label}},
   description={Creates a hyperlink to the dual entry whose label is
    obtained from the field given by \csref{GlsXtrDualField}},
+  topics={linkcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.30+},
   category={command}
 }
 
- at dualindexentry{GlsXtrDualField,
+ at mainglscommand{GlsXtrDualField,
   name={\csfmt{Gls\-Xtr\-Dual\-Field}},
   user1={},
   description={The field used to store the dual label. This defaults 
    to \field{dual} but will need to be redefined if a different
    value is given by \csopt{dual-field}},
+  topics={fieldrefcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.30+},
   category={command}
 }
 
- at dualindexentry{glsxtrfmt,
+ at mainglscommand{glsxtrfmt,
   name={\csfmt{gls\-xtr\-fmt}},
   user1={\oargm{options}\margm{label}\margm{text}},
   description={formats the given text according to the formatting 
    command identified by the value of the field obtained 
    from \cs{GlsXtrFmtField}},
+  topics={fieldrefcommands,linkcommands,formattingcommands},
   note={\styfmt{glossaries-extra} v1.12+},
+  seealso={glsxtrfmtdisplay},
   category={command}
 }
 
- at dualindexentry{glsxtrfmt*,
+ at mainglscommand{glsxtrfmt*,
   name={\csfmt{gls\-xtr\-fmt*}},
   user1={\oargm{options}\margm{label}\margm{text}\oargm{insert}},
   description={like \csref{glsxtrfmt} but inserts extra
    material into the link text but outside of the formatting command},
+  topics={fieldrefcommands,linkcommands,formattingcommands},
+  seealso={glsxtrfmtdisplay},
   note={\styfmt{glossaries-extra} v1.23+},
   category={command}
 }
 
- at dualindexentry{glsxtrentryfmt,
+ at mainglscommand{glsxtrentryfmt,
   name={\csfmt{gls\-xtr\-entry\-fmt}},
   user1={\margm{label}\margm{text}},
   description={alternative to \csref{glsxtrfmt} for use in
     section headings},
+  topics={fieldrefcommands,formattingcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{glsxtrfmtdisplay,
+ at glscommand{glsxtrfmtdisplay,
   name={\csfmt{gls\-xtr\-fmt\-display}},
   user1={\margm{cs-name}\margm{text}\margm{insert}},
   description={used by \csref{glsxtrfmt} to format the given
@@ -1153,15 +1804,17 @@
 identified by \cs{GlsXtrFmtField} and \meta{insert} is empty for the
 unstarred \csref{glsxtrfmt} and the final optional argument of the
 starred version \csref{glsxtrfmt*}},
+  topics={formattingcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at dualindexentry{glsxtrresourcefile,
+ at mainglscommand{glsxtrresourcefile,
   name={\csfmt{gls\-xtr\-resource\-file}},
   user1={\oargm{options}\margm{filename}},
   description={input the \ext{glstex} file created by \bibgls\ and
    write resource instructions to the \ext{aux} file},
+  topics={indexing},
   note={\styfmt{glossaries-extra} v1.08+},
   seealso={resourceoptions,GlsXtrLoadResources},
   category={command}
@@ -1173,7 +1826,7 @@
   text={resource option}
 }
 
- at dualindexentry{opt.charset,
+ at resourceoption{opt.charset,
    name={\csoptfmt{charset}},
    user1={\meta{encoding-name}},
    category={resourceoption},
@@ -1180,7 +1833,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.interpret-preamble,
+ at resourceoption{opt.interpret-preamble,
    name={\csoptfmt{interpret\dhyphen preamble}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1187,7 +1840,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.interpret-label-fields,
+ at resourceoption{opt.interpret-label-fields,
    name={\csoptfmt{interpret\dhyphen label\dhyphen fields}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1194,7 +1847,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.primary-dual-dependency,
+ at resourceoption{opt.primary-dual-dependency,
    name={\csoptfmt{primary\dhyphen dual\dhyphen dependency}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1201,7 +1854,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.strip-missing-parents,
+ at resourceoption{opt.strip-missing-parents,
    name={\csoptfmt{strip\dhyphen missing\dhyphen parents}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1208,7 +1861,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.missing-parents,
+ at resourceoption{opt.missing-parents,
    name={\csoptfmt{missing\dhyphen parents}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1215,7 +1868,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.missing-parent-category,
+ at resourceoption{opt.missing-parent-category,
    name={\csoptfmt{missing\dhyphen parent\dhyphen category}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1222,7 +1875,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.copy-alias-to-see,
+ at resourceoption{opt.copy-alias-to-see,
    name={\csoptfmt{copy\dhyphen alias\dhyphen to\dhyphen see}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1229,7 +1882,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.write-preamble,
+ at resourceoption{opt.write-preamble,
    name={\csoptfmt{write\dhyphen preamble}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1236,7 +1889,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.set-widest,
+ at resourceoption{opt.set-widest,
    name={\csoptfmt{set\dhyphen widest}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1243,7 +1896,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.duplicate-label-suffix,
+ at resourceoption{opt.duplicate-label-suffix,
    name={\csoptfmt{duplicate\dhyphen label\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1250,7 +1903,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.entry-type-aliases,
+ at resourceoption{opt.entry-type-aliases,
    name={\csoptfmt{entry\dhyphen type\dhyphen aliases}},
    user1={\meta{\keyvallist}},
    category={resourceoption},
@@ -1257,7 +1910,14 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.field-aliases,
+ at resourceoption{opt.unknown-entry-alias,
+   name={\csoptfmt{unknown\dhyphen entry\dhyphen alias}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.field-aliases,
    name={\csoptfmt{field\dhyphen aliases}},
    user1={\meta{\keyvallist}},
    category={resourceoption},
@@ -1264,7 +1924,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.replicate-fields,
+ at resourceoption{opt.replicate-fields,
    name={\csoptfmt{replicate\dhyphen fields}},
    user1={\meta{\keyvallist}},
    category={resourceoption},
@@ -1271,7 +1931,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.replicate-override,
+ at resourceoption{opt.replicate-override,
    name={\csoptfmt{replicate\dhyphen override}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -1278,7 +1938,14 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.labelify,
+ at resourceoption{opt.replicate-missing-field-action,
+   name={\csoptfmt{replicate\dhyphen missing\dhyphen field\dhyphen action}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.labelify,
    name={\csoptfmt{labelify}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1285,7 +1952,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.labelify-list,
+ at resourceoption{opt.labelify-list,
    name={\csoptfmt{labelify\dhyphen list}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1292,7 +1959,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dependency-fields,
+ at resourceoption{opt.dependency-fields,
    name={\csoptfmt{dependency\dhyphen fields}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1299,7 +1966,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.labelify-replace,
+ at resourceoption{opt.labelify-replace,
    name={\csoptfmt{labelify\dhyphen replace}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1306,7 +1973,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-replace,
+ at resourceoption{opt.sort-replace,
    name={\csoptfmt{sort\dhyphen replace}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1313,7 +1980,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-replace,
+ at resourceoption{opt.dual-sort-replace,
    name={\csoptfmt{dual\dhyphen sort\dhyphen replace}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1320,7 +1987,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-replace,
+ at resourceoption{opt.secondary-sort-replace,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen replace}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1327,7 +1994,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.action,
+ at resourceoption{opt.action,
    name={\csoptfmt{action}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1334,7 +2001,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.copy-action-group-field,
+ at resourceoption{opt.copy-action-group-field,
    name={\csoptfmt{copy\dhyphen action\dhyphen group\dhyphen field}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1341,7 +2008,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.src,
+ at resourceoption{opt.src,
    name={\csoptfmt{src}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1348,7 +2015,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.selection,
+ at resourceoption{opt.selection,
    name={\csoptfmt{selection}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1355,7 +2022,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.match,
+ at resourceoption{opt.match,
    name={\csoptfmt{match}},
    user1={\meta{\keyvallist}},
    category={resourceoption},
@@ -1362,7 +2029,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.match-op,
+ at resourceoption{opt.match-op,
    name={\csoptfmt{match\dhyphen op}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1369,7 +2036,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.match-action,
+ at resourceoption{opt.match-action,
    name={\csoptfmt{match\dhyphen action}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1376,7 +2043,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.not-match,
+ at resourceoption{opt.not-match,
    name={\csoptfmt{not\dhyphen match}},
    user1={\meta{\keyvallist}},
    category={resourceoption},
@@ -1383,7 +2050,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.limit,
+ at resourceoption{opt.limit,
    name={\csoptfmt{limit}},
    user1={\meta{number}},
    category={resourceoption},
@@ -1390,7 +2057,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.flatten,
+ at resourceoption{opt.flatten,
    name={\csoptfmt{flatten}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1397,7 +2064,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.flatten-lonely,
+ at resourceoption{opt.flatten-lonely,
    name={\csoptfmt{flatten\dhyphen lonely}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1404,7 +2071,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.flatten-lonely-rule,
+ at resourceoption{opt.flatten-lonely-rule,
    name={\csoptfmt{flatten\dhyphen lonely\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1411,7 +2078,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.master,
+ at resourceoption{opt.master,
    name={\csoptfmt{master}},
    user1={\meta{name}},
    category={resourceoption},
@@ -1418,7 +2085,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.master-resources,
+ at resourceoption{opt.master-resources,
    name={\csoptfmt{master\dhyphen resources}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1425,7 +2092,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.ignore-fields,
+ at resourceoption{opt.ignore-fields,
    name={\csoptfmt{ignore\dhyphen fields}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1432,7 +2099,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-time-fields,
+ at resourceoption{opt.date-time-fields,
    name={\csoptfmt{date\dhyphen time\dhyphen fields}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1439,7 +2106,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-fields,
+ at resourceoption{opt.date-fields,
    name={\csoptfmt{date\dhyphen fields}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1446,7 +2113,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.time-fields,
+ at resourceoption{opt.time-fields,
    name={\csoptfmt{time\dhyphen fields}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1453,7 +2120,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-time-field-format,
+ at resourceoption{opt.date-time-field-format,
    name={\csoptfmt{date\dhyphen time\dhyphen field\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1460,7 +2127,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-date-time-field-format,
+ at resourceoption{opt.dual-date-time-field-format,
    name={\csoptfmt{dual\dhyphen date\dhyphen time\dhyphen field\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1467,7 +2134,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-field-format,
+ at resourceoption{opt.date-field-format,
    name={\csoptfmt{date\dhyphen field\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1474,7 +2141,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-date-field-format,
+ at resourceoption{opt.dual-date-field-format,
    name={\csoptfmt{dual\dhyphen date\dhyphen field\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1481,7 +2148,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.time-field-format,
+ at resourceoption{opt.time-field-format,
    name={\csoptfmt{time\dhyphen field\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1488,7 +2155,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-time-field-format,
+ at resourceoption{opt.dual-time-field-format,
    name={\csoptfmt{dual\dhyphen time\dhyphen field\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1495,7 +2162,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-time-field-locale,
+ at resourceoption{opt.date-time-field-locale,
    name={\csoptfmt{date\dhyphen time\dhyphen field\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1502,7 +2169,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-date-time-field-locale,
+ at resourceoption{opt.dual-date-time-field-locale,
    name={\csoptfmt{dual\dhyphen date\dhyphen time\dhyphen
 field\dhyphen locale}},
    user1={\meta{value}},
@@ -1510,7 +2177,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-field-locale,
+ at resourceoption{opt.date-field-locale,
    name={\csoptfmt{date\dhyphen field\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1517,7 +2184,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-date-field-locale,
+ at resourceoption{opt.dual-date-field-locale,
    name={\csoptfmt{dual\dhyphen date\dhyphen field\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1524,7 +2191,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.time-field-locale,
+ at resourceoption{opt.time-field-locale,
    name={\csoptfmt{time\dhyphen field\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1531,7 +2198,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-time-field-locale,
+ at resourceoption{opt.dual-time-field-locale,
    name={\csoptfmt{date\dhyphen time\dhyphen field\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1538,7 +2205,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.bibtex-contributor-fields,
+ at resourceoption{opt.bibtex-contributor-fields,
    name={\csoptfmt{bibtex\dhyphen contributor\dhyphen fields}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1545,7 +2212,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.contributor-order,
+ at resourceoption{opt.contributor-order,
    name={\csoptfmt{contributor\dhyphen order}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1552,7 +2219,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.category,
+ at resourceoption{opt.category,
    name={\csoptfmt{category}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1559,7 +2226,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.type,
+ at resourceoption{opt.type,
    name={\csoptfmt{type}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1566,7 +2233,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.counter,
+ at resourceoption{opt.counter,
    name={\csoptfmt{counter}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1573,7 +2240,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.label-prefix,
+ at resourceoption{opt.label-prefix,
    name={\csoptfmt{label\dhyphen prefix}},
    user1={\meta{tag}},
    category={resourceoption},
@@ -1580,7 +2247,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.cs-label-prefix,
+ at resourceoption{opt.cs-label-prefix,
    name={\csoptfmt{cs\dhyphen label\dhyphen prefix}},
    user1={\meta{tag}},
    category={resourceoption},
@@ -1587,7 +2254,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.record-label-prefix,
+ at resourceoption{opt.record-label-prefix,
    name={\csoptfmt{record\dhyphen label\dhyphen prefix}},
    user1={\meta{tag}},
    category={resourceoption},
@@ -1594,7 +2261,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.ext-prefixes,
+ at resourceoption{opt.ext-prefixes,
    name={\csoptfmt{ext\dhyphen prefixes}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1601,7 +2268,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.save-original-id,
+ at resourceoption{opt.save-original-id,
    name={\csoptfmt{save\dhyphen original\dhyphen id}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1608,7 +2275,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.short-case-change,
+ at resourceoption{opt.short-case-change,
    name={\csoptfmt{short\dhyphen case\dhyphen change}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1615,7 +2282,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.long-case-change,
+ at resourceoption{opt.long-case-change,
    name={\csoptfmt{long\dhyphen case\dhyphen change}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1622,7 +2289,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.name-case-change,
+ at resourceoption{opt.name-case-change,
    name={\csoptfmt{name\dhyphen case\dhyphen change}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1629,7 +2296,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.description-case-change,
+ at resourceoption{opt.description-case-change,
    name={\csoptfmt{description\dhyphen case\dhyphen change}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1636,7 +2303,14 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.word-boundaries,
+ at resourceoption{opt.field-case-change,
+   name={\csoptfmt{field\dhyphen case\dhyphen change}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.word-boundaries,
    name={\csoptfmt{word\dhyphen boundaries}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1643,7 +2317,35 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.post-description-dot,
+ at resourceoption{opt.no-case-change-cs,
+   name={\csoptfmt{no\dhyphen case\dhyphen change\dhyphen cs}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.encapsulate-fields,
+   name={\csoptfmt{encapsulate\dhyphen fields}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.encapsulate-fields*,
+   name={\csoptfmt{encapsulate\dhyphen fields*}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.interpret-fields,
+   name={\csoptfmt{interpret\dhyphen fields}},
+   user1={\margm{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.post-description-dot,
    name={\csoptfmt{post\dhyphen description\dhyphen dot}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1650,7 +2352,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.strip-trailing-nopost,
+ at resourceoption{opt.strip-trailing-nopost,
    name={\csoptfmt{strip\dhyphen trailing\dhyphen nopost}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1657,7 +2359,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.check-end-punctuation,
+ at resourceoption{opt.check-end-punctuation,
    name={\csoptfmt{check\dhyphen end\dhyphen punctuation}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1664,7 +2366,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-label-list,
+ at resourceoption{opt.sort-label-list,
    name={\csoptfmt{sort\dhyphen label\dhyphen list}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1671,7 +2373,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.group,
+ at resourceoption{opt.group,
    name={\csoptfmt{group}},
    user1={\meta{label}},
    category={resourceoption},
@@ -1678,7 +2380,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.group-formation,
+ at resourceoption{opt.group-formation,
    name={\csoptfmt{group\dhyphen formation}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1685,7 +2387,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-group-formation,
+ at resourceoption{opt.secondary-group-formation,
    name={\csoptfmt{secondary\dhyphen group\dhyphen formation}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1692,7 +2394,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-group-formation,
+ at resourceoption{opt.dual-group-formation,
    name={\csoptfmt{dual\dhyphen group\dhyphen formation}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1699,7 +2401,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.save-child-count,
+ at resourceoption{opt.save-child-count,
    name={\csoptfmt{save\dhyphen child\dhyphen count}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1706,7 +2408,14 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.short-plural-suffix,
+ at resourceoption{opt.save-original-entrytype,
+   name={\csoptfmt{save\dhyphen original\dhyphen entrytype}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.short-plural-suffix,
    name={\csoptfmt{short\dhyphen plural\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1713,7 +2422,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-short-plural-suffix,
+ at resourceoption{opt.dual-short-plural-suffix,
    name={\csoptfmt{dual\dhyphen short\dhyphen plural\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1720,7 +2429,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.save-locations,
+ at resourceoption{opt.save-locations,
    name={\csoptfmt{save\dhyphen locations}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1727,7 +2436,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.save-loclist,
+ at resourceoption{opt.save-loclist,
    name={\csoptfmt{save\dhyphen loclist}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1734,7 +2443,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.save-primary-locations,
+ at resourceoption{opt.save-primary-locations,
    name={\csoptfmt{save\dhyphen primary\dhyphen locations}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1741,7 +2450,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.primary-location-formats,
+ at resourceoption{opt.primary-location-formats,
    name={\csoptfmt{primary\dhyphen location\dhyphen formats}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1748,7 +2457,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.min-loc-range,
+ at resourceoption{opt.min-loc-range,
    name={\csoptfmt{min\dhyphen loc\dhyphen range}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1755,7 +2464,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.max-loc-diff,
+ at resourceoption{opt.max-loc-diff,
    name={\csoptfmt{max\dhyphen loc\dhyphen diff}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1762,7 +2471,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.suffixF,
+ at resourceoption{opt.suffixF,
    name={\csoptfmt{suffixF}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1769,7 +2478,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.suffixFF,
+ at resourceoption{opt.suffixFF,
    name={\csoptfmt{suffixFF}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1776,7 +2485,14 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.see,
+ at resourceoption{opt.compact-ranges,
+   name={\csoptfmt{compact-ranges}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.see,
    name={\csoptfmt{see}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1783,7 +2499,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.seealso,
+ at resourceoption{opt.seealso,
    name={\csoptfmt{seealso}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1790,7 +2506,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.alias,
+ at resourceoption{opt.alias,
    name={\csoptfmt{alias}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1797,7 +2513,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.alias-loc,
+ at resourceoption{opt.alias-loc,
    name={\csoptfmt{alias\dhyphen loc}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1804,7 +2520,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.loc-prefix,
+ at resourceoption{opt.loc-prefix,
    name={\csoptfmt{loc\dhyphen prefix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1811,7 +2527,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.loc-suffix,
+ at resourceoption{opt.loc-suffix,
    name={\csoptfmt{loc\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1818,7 +2534,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.loc-counters,
+ at resourceoption{opt.loc-counters,
    name={\csoptfmt{loc\dhyphen counters}},
    user1={\meta{list}},
    category={resourceoption},
@@ -1825,7 +2541,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.save-index-counter,
+ at resourceoption{opt.save-index-counter,
    name={\csoptfmt{save\dhyphen index\dhyphen counter}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1832,7 +2548,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.supplemental-locations,
+ at resourceoption{opt.supplemental-locations,
    name={\csoptfmt{supplemental\dhyphen locations}},
    user1={\meta{basename}},
    category={resourceoption},
@@ -1839,7 +2555,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.supplemental-selection,
+ at resourceoption{opt.supplemental-selection,
    name={\csoptfmt{supplemental\dhyphen selection}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1846,7 +2562,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.supplemental-category,
+ at resourceoption{opt.supplemental-category,
    name={\csoptfmt{supplemental\dhyphen category}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1853,7 +2569,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort,
+ at resourceoption{opt.sort,
    name={\csoptfmt{sort}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1860,7 +2576,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.shuffle,
+ at resourceoption{opt.shuffle,
    name={\csoptfmt{shuffle}},
    user1={\meta{seed}},
    category={resourceoption},
@@ -1867,7 +2583,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-field,
+ at resourceoption{opt.sort-field,
    name={\csoptfmt{sort\dhyphen field}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1874,7 +2590,14 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.symbol-sort-fallback,
+ at resourceoption{opt.entry-sort-fallback,
+   name={\csoptfmt{entry\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.symbol-sort-fallback,
    name={\csoptfmt{symbol\dhyphen sort\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1881,7 +2604,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.abbreviation-sort-fallback,
+ at resourceoption{opt.abbreviation-sort-fallback,
    name={\csoptfmt{abbreviation\dhyphen sort\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1888,7 +2611,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.abbreviation-name-fallback,
+ at resourceoption{opt.abbreviation-name-fallback,
    name={\csoptfmt{abbreviation\dhyphen name\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1895,7 +2618,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.bibtexentry-sort-fallback,
+ at resourceoption{opt.bibtexentry-sort-fallback,
    name={\csoptfmt{bibtexentry\dhyphen sort\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1902,7 +2625,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.trim-sort,
+ at resourceoption{opt.trim-sort,
    name={\csoptfmt{trim\dhyphen sort}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -1909,7 +2632,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.missing-sort-fallback,
+ at resourceoption{opt.missing-sort-fallback,
    name={\csoptfmt{missing\dhyphen sort\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1916,7 +2639,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-missing-sort-fallback,
+ at resourceoption{opt.dual-missing-sort-fallback,
    name={\csoptfmt{dual\dhyphen missing\dhyphen sort\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1923,7 +2646,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-missing-sort-fallback,
+ at resourceoption{opt.secondary-missing-sort-fallback,
    name={\csoptfmt{secondary\dhyphen missing\dhyphen sort\dhyphen fallback}},
    user1={\meta{field}},
    category={resourceoption},
@@ -1930,7 +2653,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-rule,
+ at resourceoption{opt.sort-rule,
    name={\csoptfmt{sort\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1937,7 +2660,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.break-at,
+ at resourceoption{opt.break-at,
    name={\csoptfmt{break\dhyphen at}},
    user1={\meta{option}},
    category={resourceoption},
@@ -1944,7 +2667,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.break-marker,
+ at resourceoption{opt.break-marker,
    name={\csoptfmt{break\dhyphen marker}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -1951,7 +2674,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.identical-sort-action,
+ at resourceoption{opt.identical-sort-action,
    name={\csoptfmt{identical\dhyphen sort\dhyphen action}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1958,7 +2681,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-identical-sort-action,
+ at resourceoption{opt.dual-identical-sort-action,
    name={\csoptfmt{dual\dhyphen identical\dhyphen sort\dhyphen action}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1965,7 +2688,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-identical-sort-action,
+ at resourceoption{opt.secondary-identical-sort-action,
    name={\csoptfmt{secondary\dhyphen identical\dhyphen sort\dhyphen action}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1972,7 +2695,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-suffix,
+ at resourceoption{opt.sort-suffix,
    name={\csoptfmt{sort\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1979,7 +2702,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-suffix-marker,
+ at resourceoption{opt.sort-suffix-marker,
    name={\csoptfmt{sort\dhyphen suffix\dhyphen marker}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1986,7 +2709,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.strength,
+ at resourceoption{opt.strength,
    name={\csoptfmt{strength}},
    user1={\meta{value}},
    category={resourceoption},
@@ -1993,7 +2716,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.decomposition,
+ at resourceoption{opt.decomposition,
    name={\csoptfmt{decomposition}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2000,7 +2723,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.letter-number-rule,
+ at resourceoption{opt.letter-number-rule,
    name={\csoptfmt{letter\dhyphen number\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2007,7 +2730,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.letter-number-punc-rule,
+ at resourceoption{opt.letter-number-punc-rule,
    name={\csoptfmt{letter\dhyphen number\dhyphen punc\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2014,7 +2737,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.numeric-sort-pattern,
+ at resourceoption{opt.numeric-sort-pattern,
    name={\csoptfmt{numeric\dhyphen sort\dhyphen pattern}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2021,7 +2744,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.numeric-locale,
+ at resourceoption{opt.numeric-locale,
    name={\csoptfmt{numeric\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2028,7 +2751,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-sort-locale,
+ at resourceoption{opt.date-sort-locale,
    name={\csoptfmt{date\dhyphen sort\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2035,7 +2758,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.date-sort-format,
+ at resourceoption{opt.date-sort-format,
    name={\csoptfmt{date\dhyphen sort\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2042,7 +2765,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.trigger-type,
+ at resourceoption{opt.trigger-type,
    name={\csoptfmt{trigger\dhyphen type}},
    user1={\meta{type}},
    category={resourceoption},
@@ -2049,7 +2772,28 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary,
+ at resourceoption{opt.progenitor-type,
+   name={\csoptfmt{progenitor\dhyphen type}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.progeny-type,
+   name={\csoptfmt{progeny\dhyphen type}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.adopted-parent-field,
+   name={\csoptfmt{adopted\dhyphen parent\dhyphen field}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary,
    name={\csoptfmt{secondary}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2056,7 +2800,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-trim-sort,
+ at resourceoption{opt.secondary-trim-sort,
    name={\csoptfmt{secondary\dhyphen trim\dhyphen sort}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -2063,7 +2807,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-rule,
+ at resourceoption{opt.secondary-sort-rule,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2070,7 +2814,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-break-at,
+ at resourceoption{opt.secondary-break-at,
    name={\csoptfmt{secondary\dhyphen break\dhyphen at}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2077,7 +2821,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-break-marker,
+ at resourceoption{opt.secondary-break-marker,
    name={\csoptfmt{secondary\dhyphen break\dhyphen marker}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2084,7 +2828,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-suffix,
+ at resourceoption{opt.secondary-sort-suffix,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2091,7 +2835,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-suffix-marker,
+ at resourceoption{opt.secondary-sort-suffix-marker,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen suffix\dhyphen
 marker}},
    user1={\meta{value}},
@@ -2099,7 +2843,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-strength,
+ at resourceoption{opt.secondary-strength,
    name={\csoptfmt{secondary\dhyphen strength}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2106,7 +2850,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-decomposition,
+ at resourceoption{opt.secondary-decomposition,
    name={\csoptfmt{secondary\dhyphen decomposition}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2113,7 +2857,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-letter-number-rule,
+ at resourceoption{opt.secondary-letter-number-rule,
    name={\csoptfmt{secondary\dhyphen letter\dhyphen number\dhyphen
 rule}},
    user1={\meta{value}},
@@ -2121,7 +2865,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-letter-number-punc-rule,
+ at resourceoption{opt.secondary-letter-number-punc-rule,
    name={\csoptfmt{secondary\dhyphen letter\dhyphen number\dhyphen
 punc\dhyphen rule}},
    user1={\meta{value}},
@@ -2129,7 +2873,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-numeric-sort-pattern,
+ at resourceoption{opt.secondary-numeric-sort-pattern,
    name={\csoptfmt{secondary\dhyphen numeric\dhyphen sort\dhyphen
 pattern}},
    user1={\meta{value}},
@@ -2137,7 +2881,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-numeric-locale,
+ at resourceoption{opt.secondary-numeric-locale,
    name={\csoptfmt{secondary\dhyphen numeric\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2144,7 +2888,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-date-sort-locale,
+ at resourceoption{opt.secondary-date-sort-locale,
    name={\csoptfmt{secondary\dhyphen date\dhyphen sort\dhyphen
 locale}},
    user1={\meta{value}},
@@ -2152,7 +2896,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-date-sort-format,
+ at resourceoption{opt.secondary-date-sort-format,
    name={\csoptfmt{secondary\dhyphen date\dhyphen sort\dhyphen
 format}},
    user1={\meta{value}},
@@ -2160,7 +2904,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-prefix,
+ at resourceoption{opt.dual-prefix,
    name={\csoptfmt{dual\dhyphen prefix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2167,7 +2911,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.combine-dual-locations,
+ at resourceoption{opt.combine-dual-locations,
    name={\csoptfmt{combine\dhyphen dual\dhyphen locations}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2174,7 +2918,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-type,
+ at resourceoption{opt.dual-type,
    name={\csoptfmt{dual\dhyphen type}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2181,7 +2925,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-category,
+ at resourceoption{opt.dual-category,
    name={\csoptfmt{dual\dhyphen category}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2188,7 +2932,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-counter,
+ at resourceoption{opt.dual-counter,
    name={\csoptfmt{dual\dhyphen counter}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2195,7 +2939,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-short-case-change,
+ at resourceoption{opt.dual-short-case-change,
    name={\csoptfmt{dual\dhyphen short\dhyphen case\dhyphen change}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2202,7 +2946,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-long-case-change,
+ at resourceoption{opt.dual-long-case-change,
    name={\csoptfmt{dual\dhyphen long\dhyphen case\dhyphen change}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2209,7 +2953,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-field,
+ at resourceoption{opt.dual-field,
    name={\csoptfmt{dual\dhyphen field}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2216,7 +2960,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort,
+ at resourceoption{opt.dual-sort,
    name={\csoptfmt{dual\dhyphen sort}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2223,7 +2967,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-field,
+ at resourceoption{opt.dual-sort-field,
    name={\csoptfmt{dual\dhyphen sort\dhyphen field}},
    user1={\meta{field}},
    category={resourceoption},
@@ -2230,7 +2974,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-trim-sort,
+ at resourceoption{opt.dual-trim-sort,
    name={\csoptfmt{dual\dhyphen trim\dhyphen sort}},
    user1={\meta{boolean}},
    category={resourceoption},
@@ -2237,7 +2981,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-rule,
+ at resourceoption{opt.dual-sort-rule,
    name={\csoptfmt{dual\dhyphen sort\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2244,7 +2988,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-break-at,
+ at resourceoption{opt.dual-break-at,
    name={\csoptfmt{dual\dhyphen break\dhyphen at}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2251,7 +2995,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-break-marker,
+ at resourceoption{opt.dual-break-marker,
    name={\csoptfmt{dual\dhyphen break\dhyphen marker}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2258,7 +3002,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-suffix,
+ at resourceoption{opt.dual-sort-suffix,
    name={\csoptfmt{dual\dhyphen sort\dhyphen suffix}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2265,7 +3009,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-suffix-marker,
+ at resourceoption{opt.dual-sort-suffix-marker,
    name={\csoptfmt{dual\dhyphen sort\dhyphen suffix\dhyphen marker}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2272,7 +3016,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-strength,
+ at resourceoption{opt.dual-strength,
    name={\csoptfmt{dual\dhyphen strength}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2279,7 +3023,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-decomposition,
+ at resourceoption{opt.dual-decomposition,
    name={\csoptfmt{dual\dhyphen decomposition}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2286,7 +3030,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-letter-number-rule,
+ at resourceoption{opt.dual-letter-number-rule,
    name={\csoptfmt{dual\dhyphen letter\dhyphen number\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2293,7 +3037,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-letter-number-punc-rule,
+ at resourceoption{opt.dual-letter-number-punc-rule,
    name={\csoptfmt{dual\dhyphen letter\dhyphen number\dhyphen punc\dhyphen rule}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2300,7 +3044,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-numeric-sort-pattern,
+ at resourceoption{opt.dual-numeric-sort-pattern,
    name={\csoptfmt{dual\dhyphen numeric\dhyphen sort\dhyphen
 pattern}},
    user1={\meta{value}},
@@ -2308,7 +3052,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-numeric-locale,
+ at resourceoption{opt.dual-numeric-locale,
    name={\csoptfmt{dual\dhyphen numeric\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2315,7 +3059,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-date-sort-locale,
+ at resourceoption{opt.dual-date-sort-locale,
    name={\csoptfmt{dual\dhyphen date\dhyphen sort\dhyphen locale}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2322,7 +3066,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-date-sort-format,
+ at resourceoption{opt.dual-date-sort-format,
    name={\csoptfmt{dual\dhyphen date\dhyphen sort\dhyphen format}},
    user1={\meta{value}},
    category={resourceoption},
@@ -2329,7 +3073,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-entry-map,
+ at resourceoption{opt.dual-entry-map,
    name={\csoptfmt{dual\dhyphen entry\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2336,7 +3080,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-abbrv-map,
+ at resourceoption{opt.dual-abbrv-map,
    name={\csoptfmt{dual\dhyphen abbrv\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2343,7 +3087,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-abbrventry-map,
+ at resourceoption{opt.dual-abbrventry-map,
    name={\csoptfmt{dual\dhyphen abbrventry\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2350,7 +3094,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-symbol-map,
+ at resourceoption{opt.dual-symbol-map,
    name={\csoptfmt{dual\dhyphen symbol\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2357,7 +3101,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-indexentry-map,
+ at resourceoption{opt.dual-indexentry-map,
    name={\csoptfmt{dual\dhyphen indexentry\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2364,7 +3108,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-indexsymbol-map,
+ at resourceoption{opt.dual-indexsymbol-map,
    name={\csoptfmt{dual\dhyphen indexsymbol\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2371,7 +3115,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-indexabbrv-map,
+ at resourceoption{opt.dual-indexabbrv-map,
    name={\csoptfmt{dual\dhyphen indexabbrv\dhyphen map}},
    user1={\marg{\margm{list1},\margm{list2}}},
    category={resourceoption},
@@ -2378,7 +3122,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-entry-backlink,
+ at resourceoption{opt.dual-entry-backlink,
    name={\csoptfmt{dual\dhyphen entry\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2385,7 +3129,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-abbrv-backlink,
+ at resourceoption{opt.dual-abbrv-backlink,
    name={\csoptfmt{dual\dhyphen abbrv\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2392,7 +3136,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-entryabbrv-backlink,
+ at resourceoption{opt.dual-entryabbrv-backlink,
    name={\csoptfmt{dual\dhyphen entryabbrv\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2399,7 +3143,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-abbrventry-backlink,
+ at resourceoption{opt.dual-abbrventry-backlink,
    name={\csoptfmt{dual\dhyphen abbrventry\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2406,7 +3150,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-symbol-backlink,
+ at resourceoption{opt.dual-symbol-backlink,
    name={\csoptfmt{dual\dhyphen symbol\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2413,7 +3157,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-indexentry-backlink,
+ at resourceoption{opt.dual-indexentry-backlink,
    name={\csoptfmt{dual\dhyphen indexentry\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2420,7 +3164,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-indexsymbol-backlink,
+ at resourceoption{opt.dual-indexsymbol-backlink,
    name={\csoptfmt{dual\dhyphen indexsymbol\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2427,7 +3171,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-indexabbrv-backlink,
+ at resourceoption{opt.dual-indexabbrv-backlink,
    name={\csoptfmt{dual\dhyphen indexabbrv\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2434,7 +3178,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-backlink,
+ at resourceoption{opt.dual-backlink,
    name={\csoptfmt{dual\dhyphen backlink}},
    user1={\margm{boolean}},
    category={resourceoption},
@@ -2441,7 +3185,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.tertiary-prefix,
+ at resourceoption{opt.tertiary-prefix,
    name={\csoptfmt{tertiary\dhyphen prefix}},
    user1={\margm{value}},
    category={resourceoption},
@@ -2448,7 +3192,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.tertiary-type,
+ at resourceoption{opt.tertiary-type,
    name={\csoptfmt{tertiary\dhyphen type}},
    user1={\margm{value}},
    category={resourceoption},
@@ -2455,7 +3199,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.tertiary-category,
+ at resourceoption{opt.tertiary-category,
    name={\csoptfmt{tertiary\dhyphen category}},
    user1={\margm{value}},
    category={resourceoption},
@@ -2462,7 +3206,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-number-pad,
+ at resourceoption{opt.sort-number-pad,
    name={\csoptfmt{sort\dhyphen number\dhyphen pad}},
    user1={\meta{number}},
    category={resourceoption},
@@ -2469,7 +3213,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-number-pad,
+ at resourceoption{opt.dual-sort-number-pad,
    name={\csoptfmt{dual\dhyphen sort\dhyphen number\dhyphen pad}},
    user1={\meta{number}},
    category={resourceoption},
@@ -2476,7 +3220,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-number-pad,
+ at resourceoption{opt.secondary-sort-number-pad,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen number\dhyphen pad}},
    user1={\meta{number}},
    category={resourceoption},
@@ -2483,7 +3227,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-pad-plus,
+ at resourceoption{opt.sort-pad-plus,
    name={\csoptfmt{sort\dhyphen pad\dhyphen plus}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2490,7 +3234,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-pad-plus,
+ at resourceoption{opt.dual-sort-pad-plus,
    name={\csoptfmt{dual\dhyphen sort\dhyphen pad\dhyphen plus}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2497,7 +3241,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-pad-plus,
+ at resourceoption{opt.secondary-sort-pad-plus,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen pad\dhyphen plus}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2504,7 +3248,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.sort-pad-minus,
+ at resourceoption{opt.sort-pad-minus,
    name={\csoptfmt{sort\dhyphen pad\dhyphen minus}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2511,7 +3255,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.dual-sort-pad-minus,
+ at resourceoption{opt.dual-sort-pad-minus,
    name={\csoptfmt{dual\dhyphen sort\dhyphen pad\dhyphen minus}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2518,7 +3262,7 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{opt.secondary-sort-pad-minus,
+ at resourceoption{opt.secondary-sort-pad-minus,
    name={\csoptfmt{secondary\dhyphen sort\dhyphen pad\dhyphen minus}},
    user1={\meta{marker}},
    category={resourceoption},
@@ -2525,25 +3269,27 @@
    parent={resourceoptions}
 }
 
- at dualindexentry{GlsXtrLoadResources,
+ at mainglscommand{GlsXtrLoadResources,
   name={\csfmt{Gls\-Xtr\-Load\-Resources}},
   user1={\oargm{options}},
   description={a shortcut command that uses \csref{glsxtrresourcefile}},
+  topics={indexing,shortcutcommands},
   note={\styfmt{glossaries-extra} v1.11+},
   seealso={resourceoptions,glsxtrresourcefile},
   category={command}
 }
 
- at dualindexentry{glsxtrcopytoglossary,
+ at mainglscommand{glsxtrcopytoglossary,
   name={\csfmt{gls\-xtr\-copy\-to\-glossary}},
   user1={\margm{label}\margm{type}},
   description={copies the entry given by \meta{label} to the
 glossary given by \meta{type}},
+  topics={assigncommands,definingterms},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at dualindexentry{glsxtrnewglslike,
+ at mainglscommand{glsxtrnewglslike,
   name={\csfmt{gls\-xtr\-new\-gls\-like}},
   user1={\oargm{options}\margm{prefix}\margm{gls-like
 cs}\margm{glspl-like cs}\margm{Gls-like
@@ -2550,80 +3296,88 @@
 cs}\margm{Glspl-like cs}},
   description={defines commands to behave like \ics{gls}, \ics{glspl},
    \ics{Gls} and \ics{Glspl} with the given label prefix},
+  topics={entryrefcommands,providingcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   seealso={glsxtrnewgls},
   category={command}
 }
 
- at dualindexentry{glsxtrnewgls,
+ at mainglscommand{glsxtrnewgls,
   name={\csfmt{gls\-xtr\-new\-gls}},
   user1={\oargm{options}\margm{prefix}\margm{cs}},
   description={defines the command \meta{cs} to behave like 
   \ics{gls} with the given label prefix},
+  topics={entryrefcommands,providingcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   seealso={gls},
   category={command}
 }
 
- at dualindexentry{glsnoidxdisplayloc,
+ at mainglscommand{glsnoidxdisplayloc,
   name={\csfmt{gls\-no\-idx\-display\-loc}},
   user1={\margm{prefix}\margm{counter}\margm{format}\margm{location}},
   description={used to display a regular location in the
-  \field{location} field},
+  \field{location} field (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands},
   note={\styfmt{glossaries} v4.04+},
   category={command}
 }
 
- at dualindexentry{glsxtrdisplaylocnameref,
+ at mainglscommand{glsxtrdisplaylocnameref,
   name={\csfmt{gls\-xtr\-display\-loc\-name\-ref}},
   user1={\margm{prefix}\margm{counter}\margm{format}\margm{location}\margm{title}\margm{href}\margm{hcounter}\margm{file}},
   description={used to display a \code{nameref} location in the
-  \field{location} field},
+  \field{location} field (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   category={command}
 }
 
- at dualindexentry{glsxtrdisplaysupploc,
+ at mainglscommand{glsxtrdisplaysupploc,
   name={\csfmt{gls\-xtr\-display\-supp\-loc}},
   user1={\margm{prefix}\margm{counter}\margm{format}\margm{src}\margm{location}},
   description={used to display an external location in the
-   supplementary list},
+   supplementary list (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands,supplementalrefs},
   note={\styfmt{glossaries-extra-bib2gls} v1.36+},
   category={command}
 }
 
- at dualindexentry{glsxtrmultisupplocation,
+ at mainglscommand{glsxtrmultisupplocation,
   name={\csfmt{gls\-xtr\-multi\-supp\-location}},
   user1={\margm{location}\margm{src}\margm{format}},
   description={used by \csref{glsxtrdisplaysupploc} to format the
-  external location},
+  external location (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands,formattingcommands,supplementalrefs},
   note={\styfmt{glossaries-extra-bib2gls} v1.36+},
   category={command}
 }
 
- at index{glsxtrsupplocationurl,
+ at glscommand{glsxtrsupplocationurl,
   name={\csfmt{gls\-xtr\-supp\-loc\-a\-tion\-url}},
   description={set by \cs{glsxtrsupphypernumber}
   and \csref{glsxtrmultisupplocation} to the
    URL of the supplemental document for use by
     \cs{glshypernumber}},
+  topics={loclistcommands,supplementalrefs},
   note={\styfmt{glossaries-extra} v1.14+},
   seealso={glshypernumber,glsxtrsupphypernumber,glsxtrmultisupplocation,glsxtrlocationhyperlink},
   category={command}
 }
 
- at index{glsxtrlocationhyperlink,
+ at glscommand{glsxtrlocationhyperlink,
   name={\csfmt{gls\-xtr\-loc\-a\-tion\-hyper\-link}},
   user1={\margm{counter}\margm{prefix}\margm{location}},
   description={used to create the location hyperlink,
    this tests if an internal or external link is required
    depending on the definition of \cs{glsxtrsupplocationurl}},
+  topics={loclistcommands,linkcommands,supplementalrefs},
   note={\styfmt{glossaries-extra} v1.14+},
   seealso={glsxtrsupphypernumber,glsxtrsupplocationurl},
   category={command}
 }
 
- at index{glsxtrsupphypernumber,
+ at glscommand{glsxtrsupphypernumber,
   name={\csfmt{gls\-xtr\-supp\-hyper\-num\-ber}},
   user1={\margm{location}},
   description={uses \cs{glshypernumber} to create a hyperlink
@@ -2630,147 +3384,163 @@
    to the given location (if hyperlinks are supported) but
    first checks the \catattr{externallocation} attribute to determine
    if an external link is required},
+  topics={loclistcommands,linkcommands,supplementalrefs},
   note={\styfmt{glossaries-extra} v1.14+},
   seealso={glsxtrlocationhyperlink,glsxtrsupplocationurl},
   category={command}
 }
 
- at dualindexentry{glsxtr at record,
+ at mainglscommand{glsxtr at record,
   name={\csfmt{glsxtr at record}},
   user1={\margm{label}\margm{prefix}\margm{counter}\margm{format}\margm{location}},
   description={this command is written to the \ext{aux} file each
    time an entry is indexed to provide \bibgls\ with the record information},
+  topics={internalcommands,auxcommands,indexing},
   note={\styfmt{glossaries-extra} v1.08+},
   category={command}
 }
 
- at dualindexentry{glsxtr at record@nameref,
+ at mainglscommand{glsxtr at record@nameref,
   name={\csfmt{glsxtr at record@name\-ref}},
   user1={\margm{label}\margm{prefix}\margm{counter}\margm{format}\margm{location}\margm{title}\margm{href}\margm{hcounter}},
   description={used instead of \csref{glsxtr at record} when the
    \styopt[nameref]{record} option is used},
+  topics={internalcommands,auxcommands,indexing},
   note={\styfmt{glossaries-extra} v1.37+},
   category={command}
 }
 
- at dualindexentry{glsxtrfieldlistadd,
+ at mainglscommand{glsxtrfieldlistadd,
   name={\csfmt{gls\-xtr\-field\-list\-add}},
   user1={\margm{label}\margm{field}\margm{item}},
   description={adds the given item to the given field that contains
    an \styfmt{etoolbox} internal list},
+  topics={listcommands,assigncommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   seealso={glsxtrfieldifinlist,glsxtrfieldforlistloop,glsxtrfielddolistloop},
   category={command}
 }
 
- at index{glsxtrfieldifinlist,
+ at glscommand{glsxtrfieldifinlist,
   name={\csfmt{gls\-xtr\-field\-if\-in\-list}},
   user1={\margm{label}\margm{field}\margm{item}\margm{true}\margm{false}},
   description={tests if the given item is in the given field that contains
    an \styfmt{etoolbox} internal list},
+  topics={listcommands,conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   seealso={glsxtrfieldxifinlist,glsxtrfieldlistadd,glsxtrfieldforlistloop,glsxtrfielddolistloop},
   category={command}
 }
 
- at index{glsxtrfieldxifinlist,
+ at glscommand{glsxtrfieldxifinlist,
   name={\csfmt{gls\-xtr\-field\-x\-if\-in\-list}},
   user1={\margm{label}\margm{field}\margm{item}\margm{true}\margm{false}},
   description={tests if the expansion of the given item is in the given field that contains
    an \styfmt{etoolbox} internal list},
+  topics={listcommands,conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   seealso={glsxtrfieldifinlist},
   category={command}
 }
 
- at index{glsxtrcontrolrules,
+ at glscommand{glsxtrcontrolrules,
   name={\csfmt{gls\-xtr\-control\-rules}},
   user1={},
   description={collation sub-rule for control characters usually
 placed at the start of a rule in the \qt{ignored characters} section
 (although there typically won't be any control codes in sort fields)},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrspacerules,
+ at glscommand{glsxtrspacerules,
   name={\csfmt{gls\-xtr\-space\-rules}},
   user1={},
   description={collation sub-rule for space characters},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrnonprintablerules,
+ at glscommand{glsxtrnonprintablerules,
   name={\csfmt{gls\-xtr\-non\-printable\-rules}},
   user1={},
   description={collation sub-rule for non-printable characters},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrcombiningdiacriticrules,
+ at glscommand{glsxtrcombiningdiacriticrules,
   name={\csfmt{gls\-xtr\-combining\-diacritic\-rules}},
   user1={},
   description={collation sub-rule for combining diacritic characters},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrhyphenrules,
+ at glscommand{glsxtrhyphenrules,
   name={\csfmt{gls\-xtr\-hyphen\-rules}},
   user1={},
   description={collation sub-rule for hyphen characters},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrgeneralpuncrules,
+ at glscommand{glsxtrgeneralpuncrules,
   name={\csfmt{gls\-xtr\-general\-punc\-rules}},
   user1={},
   description={collation sub-rule for general punctuation characters},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrdigitrules,
+ at glscommand{glsxtrdigitrules,
   name={\csfmt{gls\-xtr\-digit\-rules}},
   user1={},
   description={collation sub-rule for digits from the basic Latin
 set (0, \ldots, 9) as well as their subscript and superscript variants},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrfractionrules,
+ at glscommand{glsxtrfractionrules,
   name={\csfmt{gls\-xtr\-fraction\-rules}},
   user1={},
   description={collation sub-rule for vulgar fraction characters},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrMathItalicGreekIrules,
+ at glscommand{glsxtrMathItalicGreekIrules,
   name={\csfmt{gls\-xtr\-Math\-Italic\-Greek\-I\-rules}},
   user1={},
   description={collation sub-rule for math-Greek characters
 (includes upright digamma between epsilon and zeta)},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinIrules,
+ at glscommand{glsxtrGeneralLatinIrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-I\-rules}},
   user1={},
   description={collation sub-rule for Latin characters
 (basic Latin set plus subscript and superscript Latin
 characters)},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   seealso={glsxtrGeneralLatinIIrules,glsxtrGeneralLatinIIIrules,glsxtrGeneralLatinIVrules,glsxtrGeneralLatinVrules,glsxtrGeneralLatinVIrules,glsxtrGeneralLatinVIIrules,glsxtrGeneralLatinVIIIrules},
   category={command}
 }
 
- at index{glsxtrGeneralLatinIIrules,
+ at glscommand{glsxtrGeneralLatinIIrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-II\-rules}},
   user1={},
   description={collation sub-rule for Latin characters
@@ -2777,11 +3547,12 @@
 (as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
 and E/e
 and \ss\ treated as \qt{ss})},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinIIIrules,
+ at glscommand{glsxtrGeneralLatinIIIrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-III\-rules}},
   user1={},
   description={collation sub-rule for Latin characters
@@ -2788,11 +3559,12 @@
 (as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
 and E/e
 and \ss\ treated as \qt{sz})},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinIVrules,
+ at glscommand{glsxtrGeneralLatinIVrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-IV\-rules}},
   user1={},
   description={collation sub-rule for Latin characters
@@ -2800,11 +3572,12 @@
 and E/e
 and \AE/\ae\ treated as AE/ae, \OE/\oe\ treated
 as OE/oe, \TH/\th\ treated as TH/th and \ss\ treated as \qt{ss})},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinVrules,
+ at glscommand{glsxtrGeneralLatinVrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-V\-rules}},
   user1={},
   description={collation sub-rule for Latin characters
@@ -2811,11 +3584,12 @@
 (as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
 and E/e
 and \TH/\th\ treated as TH/th and \ss\ treated as \qt{ss})},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinVIrules,
+ at glscommand{glsxtrGeneralLatinVIrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-VI\-rules}},
   user1={},
   description={collation sub-rule for Latin characters
@@ -2822,110 +3596,173 @@
 (as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
 and E/e
 and \TH/\th\ treated as TH/th and \ss\ treated as \qt{sz})},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinVIIrules,
+ at glscommand{glsxtrGeneralLatinVIIrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-VII\-rules}},
   user1={},
-  description={collation sub-rule for Latin characters
-(as \cs{glsxtrGeneralLatinIrules} but includes \AE/\ae\ between A/a
+  description={collation sub-rule for Latin characters:
+as \cs{glsxtrGeneralLatinIrules} but includes \AE/\ae\ between A/a
 and B/b,
 \DH/\dh\ between D/d and E/e, \insularG/\insularg\ (insular G) as
 G/g, \OE/\oe\
 between O/o and P/p, \longs\ (long S)
-equivalent to S/s, \TH/\th\ between T/t and U/u and \char"01F7/\char"01BF\
+equivalent to S/s, \TH/\th\ between T/t and U/u and \Wynn/\wynn\
 (wynn) as W/w},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrGeneralLatinVIIIrules,
+ at glscommand{glsxtrGeneralLatinVIIIrules,
   name={\csfmt{gls\-xtr\-General\-Latin\-VIII\-rules}},
   user1={},
-  description={collation sub-rule for Latin characters
-(as \cs{glsxtrGeneralLatinIrules} but includes \AE/\ae\ treated as
+  description={collation sub-rule for Latin characters:
+as \cs{glsxtrGeneralLatinIrules} but includes \AE/\ae\ treated as
 A/a, \OE/\oe\ treated as OE/oe, \TH/\th\ treated as TH/th, \ss\
 treated as \qt{ss}, \DH/\dh\ treated as D/d, \O/\o\ treated as O/o
 and \L/\l\ treated as L/l},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrLatinAA,
+ at glscommand{glsxtrLatinAA,
   name={\csfmt{gls\-xtr\-Latin\-AA}},
   user1={},
   description={collation sub-rule for \AA/\aa},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{glsxtrLatinOslash,
+ at glscommand{glsxtrLatinOslash,
   name={\csfmt{gls\-xtr\-Latin\-O\-slash}},
   user1={},
   description={collation sub-rule for \O/\o},
+  topics={collationsubrules},
   note={\styfmt{glossaries-extra-bib2gls} v1.27+},
   category={command}
 }
 
- at index{alpha,
+ at command{alpha,
   name={\csfmt{alpha}},
   user1={},
   description={Greek letter alpha $\alpha$},
-  note={kernel command (maths mode)},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{pi,
+ at command{pi,
   name={\csfmt{pi}},
   user1={},
   description={Greek letter pi $\pi$},
-  note={kernel command (maths mode)},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{omicron,
+ at command{sigma,
+  name={\csfmt{sigma}},
+  user1={},
+  description={Greek letter sigma $\sigma$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at glscommand{omicron,
   name={\csfmt{omicron}},
   user1={},
   description={Greek letter omicron $\omicron$},
-  note={\styfmt{glossaries-extra-bib2gls}},
+  topics={charcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote},
   category={command}
 }
 
- at index{Alpha,
+ at glscommand{Alpha,
   name={\csfmt{Alpha}},
   user1={},
   description={Greek letter alpha $\Alpha$},
-  note={\styfmt{glossaries-extra-bib2gls}},
+  topics={charcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote},
   category={command}
 }
 
- at index{approx,
+ at command{approx,
   name={\csfmt{approx}},
   user1={},
   description={approximate symbol $\approx$},
-  note={kernel command (maths mode)},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{surd,
+ at command{surd,
   name={\csfmt{surd}},
   user1={},
   description={surd symbol $\surd$},
-  note={kernel command (maths mode)},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{triangleright,
+ at command{triangleright,
   name={\csfmt{triangle\-right}},
   user1={},
   description={right-pointing triangle $\triangleright$},
-  note={kernel command (maths mode)},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{textstyle,
+ at command{vert,
+  name={\csfmt{vert}},
+  user1={},
+  description={vertical bar delimiter $\vert$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{Vert,
+  name={\csfmt{Vert}},
+  user1={},
+  description={double vertical bar delimiter $\Vert$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{lvert,
+  name={\csfmt{lvert}},
+  user1={},
+  description={left vertical bar delimiter $\lvert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{rvert,
+  name={\csfmt{rvert}},
+  user1={},
+  description={right vertical bar delimiter $\rvert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{lVert,
+  name={\csfmt{lVert}},
+  user1={},
+  description={left double vertical bar delimiter $\lVert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{rVert,
+  name={\csfmt{rVert}},
+  user1={},
+  description={right double vertical bar delimiter $\rVert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{textstyle,
   name={\csfmt{text\-style}},
   user1={},
   description={switch to in-line maths style (vertically compact)},
@@ -2933,7 +3770,7 @@
   category={command}
 }
 
- at index{displaystyle,
+ at command{displaystyle,
   name={\csfmt{display\-style}},
   user1={},
   description={switch to display maths style},
@@ -2941,7 +3778,7 @@
   category={command}
 }
 
- at dualindexentry{bigoperatornamefmt,
+ at examplecommand{bigoperatornamefmt,
   name={\csfmt{big\-operator\-name\-fmt}},
   user1={\margm{text}},
   description={example command},
@@ -2948,7 +3785,7 @@
   category={command}
 }
 
- at dualindexentry{nary,
+ at examplecommand{nary,
   name={\csfmt{nary}},
   user1={\margm{text}},
   description={example command},
@@ -2955,7 +3792,7 @@
   category={command}
 }
 
- at dualindexentry{strong,
+ at examplecommand{strong,
   name={\csfmt{strong}},
   user1={\margm{text}},
   description={example command},
@@ -2962,7 +3799,7 @@
   category={command}
 }
 
- at dualindexentry{parenswap,
+ at examplecommand{parenswap,
   name={\csfmt{parenswap}},
   user1={\margm{text1}\margm{text2}},
   description={example command},
@@ -2969,7 +3806,7 @@
   category={command}
 }
 
- at dualindexentry{sortop,
+ at examplecommand{sortop,
   name={\csfmt{sortop}},
   user1={\margm{text1}\margm{text2}},
   description={example command},
@@ -2976,7 +3813,7 @@
   category={command}
 }
 
- at dualindexentry{sortname,
+ at examplecommand{sortname,
   name={\csfmt{sortname}},
   user1={\margm{first name(s)}\margm{surname}},
   description={example command},
@@ -2983,7 +3820,7 @@
   category={command}
 }
 
- at dualindexentry{sortvonname,
+ at examplecommand{sortvonname,
   name={\csfmt{sort\-von\-name}},
   user1={\margm{first name(s)}\margm{von}\margm{surname}},
   description={example command},
@@ -2990,7 +3827,7 @@
   category={command}
 }
 
- at dualindexentry{sortart,
+ at examplecommand{sortart,
   name={\csfmt{sortart}},
   user1={\margm{article}\margm{text}},
   description={example command},
@@ -2997,7 +3834,7 @@
   category={command}
 }
 
- at dualindexentry{sortmediacreator,
+ at examplecommand{sortmediacreator,
   name={\csfmt{sort\-media\-creator}},
   user1={\margm{first name(s)}\margm{surname}},
   description={example command},
@@ -3004,7 +3841,7 @@
   category={command}
 }
 
- at dualindexentry{setfmt,
+ at examplecommand{setfmt,
   name={\csfmt{setfmt}},
   user1={\margm{symbol}},
   description={example command},
@@ -3011,7 +3848,7 @@
   category={command}
 }
 
- at dualindexentry{setcontentsfmt,
+ at examplecommand{setcontentsfmt,
   name={\csfmt{setcontentsfmt}},
   user1={\margm{contents}},
   description={example command},
@@ -3018,7 +3855,7 @@
   category={command}
 }
 
- at dualindexentry{setmembershipfmt,
+ at examplecommand{setmembershipfmt,
   name={\csfmt{setmembershipfmt}},
   user1={\margm{variable(s)}\margm{condition}},
   description={example command},
@@ -3025,7 +3862,7 @@
   category={command}
 }
 
- at dualindexentry{setmembershiponeargfmt,
+ at examplecommand{setmembershiponeargfmt,
   name={\csfmt{setmembershiponeargfmt}},
   user1={\marg{\margm{variable(s)}\margm{condition}}},
   description={example command},
@@ -3032,7 +3869,7 @@
   category={command}
 }
 
- at dualindexentry{setcardfmt,
+ at examplecommand{setcardfmt,
   name={\csfmt{setcardfmt}},
   user1={\margm{maths}},
   description={example command},
@@ -3039,7 +3876,7 @@
   category={command}
 }
 
- at dualindexentry{numspacefmt,
+ at examplecommand{numspacefmt,
   name={\csfmt{numspacefmt}},
   user1={\margm{symbol}},
   description={example command},
@@ -3046,7 +3883,7 @@
   category={command}
 }
 
- at dualindexentry{transposefmt,
+ at examplecommand{transposefmt,
   name={\csfmt{transposefmt}},
   user1={\margm{maths}},
   description={example command},
@@ -3053,7 +3890,7 @@
   category={command}
 }
 
- at dualindexentry{invfmt,
+ at examplecommand{invfmt,
   name={\csfmt{invfmt}},
   user1={\margm{maths}},
   description={example command},
@@ -3060,7 +3897,7 @@
   category={command}
 }
 
- at dualindexentry{vecfmt,
+ at examplecommand{vecfmt,
   name={\csfmt{vecfmt}},
   user1={\margm{symbol}},
   description={example command},
@@ -3067,7 +3904,7 @@
   category={command}
 }
 
- at dualindexentry{mtxfmt,
+ at examplecommand{mtxfmt,
   name={\csfmt{mtxfmt}},
   user1={\margm{symbol}},
   description={example command},
@@ -3079,79 +3916,79 @@
   text={file format}
 }
 
- at index{ext.tex,
+ at fileformat{ext.tex,
   name={\extfmt{tex}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.bib,
+ at fileformat{ext.bib,
   name={\extfmt{bib}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.aux,
+ at fileformat{ext.aux,
   name={\extfmt{aux}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.out,
+ at fileformat{ext.out,
   name={\extfmt{out}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.sh,
+ at fileformat{ext.sh,
   name={\extfmt{sh}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.bat,
+ at fileformat{ext.bat,
   name={\extfmt{bat}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.jar,
+ at fileformat{ext.jar,
   name={\extfmt{jar}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.glg,
+ at fileformat{ext.glg,
   name={\extfmt{glg}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.log,
+ at fileformat{ext.log,
   name={\extfmt{log}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.toc,
+ at fileformat{ext.toc,
   name={\extfmt{toc}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.glstex,
+ at fileformat{ext.glstex,
   name={\extfmt{glstex}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.gls,
+ at fileformat{ext.gls,
   name={\extfmt{gls}},
   category={fileformat},
   parent={fileformats}
 }
 
- at index{ext.bbl,
+ at fileformat{ext.bbl,
   name={\extfmt{bbl}},
   category={fileformat},
   parent={fileformats}
@@ -3162,55 +3999,55 @@
   text={applications}
 }
 
- at index{bibtex,
+ at application{bibtex,
   name={\appfmt{bibtex}},
   category={application},
   parent={applications}
 }
 
- at index{biber,
+ at application{biber,
   name={\appfmt{biber}},
   category={application},
   parent={applications}
 }
 
- at index{makeindex,
+ at application{makeindex,
   name={\appfmt{make\-index}},
   category={application},
   parent={applications}
 }
 
- at index{xindy,
+ at application{xindy,
   name={\appfmt{xindy}},
   category={application},
   parent={applications}
 }
 
- at index{makeglossaries,
+ at application{makeglossaries,
   name={\appfmt{make\-glos\-saries}},
   category={application},
   parent={applications}
 }
 
- at index{makeglossaries-lite,
+ at application{makeglossaries-lite,
   name={\appfmt{make\-glos\-saries\dhyphen lite}},
   category={application},
   parent={applications}
 }
 
- at index{kpsewhich,
+ at application{kpsewhich,
   name={\appfmt{kpsewhich}},
   category={application},
   parent={applications}
 }
 
- at index{arara,
+ at application{arara,
   name={\appfmt{arara}},
   category={application},
   parent={applications}
 }
 
- at index{convertgls2bib,
+ at application{convertgls2bib,
   name={\appfmt{convert\-gls2bib}},
   category={application},
   parent={applications}
@@ -3221,505 +4058,530 @@
    text={package}
 }
 
- at index{glossaries,
+ at package{glossaries,
   name={\styfmt{glossaries}},
   category={package},
   parent={packages}
 }
 
- at index{glossaries-extra,
+ at package{glossaries-extra,
   name={\styfmt{glossaries-extra}},
   category={package},
   parent={packages}
 }
 
- at index{pifont,
+ at package{pifont,
   name={\styfmt{pifont}},
   category={package},
   parent={packages}
 }
 
- at index{upgreek,
+ at package{upgreek,
   name={\styfmt{upgreek}},
   category={package},
   parent={packages}
 }
 
- at index{xspace,
+ at package{xspace,
   name={\styfmt{xspace}},
   category={package},
   parent={packages}
 }
 
- at index{fourier,
+ at package{fourier,
   name={\styfmt{fourier}},
   category={package},
   parent={packages}
 }
 
- at index{lipsum,
+ at package{lipsum,
   name={\styfmt{lipsum}},
   category={package},
   parent={packages}
 }
 
- at index{natbib,
+ at package{natbib,
   name={\styfmt{natbib}},
   category={package},
   parent={packages}
 }
 
- at index{textcomp,
+ at package{textcomp,
   name={\styfmt{textcomp}},
   category={package},
   parent={packages}
 }
 
- at index{MnSymbol,
+ at package{MnSymbol,
   name={\styfmt{MnSymbol}},
   category={package},
   parent={packages}
 }
 
- at index{wasysym,
+ at package{wasysym,
   name={\styfmt{wasysym}},
   category={package},
   parent={packages}
 }
 
- at index{amssymb,
+ at package{amssymb,
   name={\styfmt{amssymb}},
   category={package},
   parent={packages}
 }
 
- at index{stix,
+ at package{stix,
   name={\styfmt{stix}},
   category={package},
   parent={packages}
 }
 
- at index{mhchem,
+ at package{mhchem,
   name={\styfmt{mhchem}},
   category={package},
   parent={packages}
 }
 
- at index{bpchem,
+ at package{bpchem,
   name={\styfmt{bpchem}},
   category={package},
   parent={packages}
 }
 
- at index{siunitx,
+ at package{siunitx,
   name={\styfmt{siunitx}},
   category={package},
   parent={packages}
 }
 
- at index{tipa,
+ at package{tipa,
   name={\styfmt{tipa}},
   category={package},
   parent={packages}
 }
 
- at index{mfirstuc,
+ at package{mfirstuc,
   name={\styfmt{mfirstuc}},
   category={package},
   parent={packages}
 }
 
- at index{mfirstuc-english,
+ at package{mfirstuc-english,
   name={\styfmt{mfirstuc-english}},
   category={package},
   parent={packages}
 }
 
- at index{hyperref,
+ at package{hyperref,
   name={\styfmt{hyperref}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-hypernav,
+ at package{glossary-hypernav,
   name={\styfmt{glossary\dhyphen hypernav}},
   category={package},
   parent={packages}
 }
 
- at index{glossaries-prefix,
+ at package{glossaries-prefix,
   name={\styfmt{glossaries\dhyphen prefix}},
   category={package},
   parent={packages}
 }
 
- at index{glossaries-accsupp,
+ at package{glossaries-accsupp,
   name={\styfmt{glossaries\dhyphen accsupp}},
   category={package},
   parent={packages}
 }
 
- at index{glossaries-extra-stylemods,
+ at package{glossaries-extra-stylemods,
   name={\styfmt{glossaries\dhyphen extra\dhyphen stylemods}},
   category={package},
   parent={packages}
 }
 
- at index{glossaries-extra-bib2gls,
+ at package{glossaries-extra-bib2gls,
   name={\styfmt{glossaries\dhyphen extra\dhyphen bib2gls}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-list,
+ at package{glossary-list,
   name={\styfmt{glossary\dhyphen list}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-tree,
+ at package{glossary-tree,
   name={\styfmt{glossary\dhyphen tree}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-mcols,
+ at package{glossary-topic,
+  name={\styfmt{glossary\dhyphen topic}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-mcols,
   name={\styfmt{glossary\dhyphen mcols}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-long,
+ at package{glossary-long,
   name={\styfmt{glossary\dhyphen long}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-longbooktabs,
+ at package{glossary-super,
+  name={\styfmt{glossary\dhyphen super}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-longbooktabs,
   name={\styfmt{glossary\dhyphen longbooktabs}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-bookindex,
+ at package{glossary-bookindex,
   name={\styfmt{glossary\dhyphen bookindex}},
   category={package},
   parent={packages}
 }
 
- at index{glossary-longextra,
+ at package{glossary-longextra,
   name={\styfmt{glossary\dhyphen longextra}},
   category={package},
   parent={packages}
 }
 
- at index{booktabs,
+ at package{booktabs,
   name={\styfmt{booktabs}},
   category={package},
   parent={packages}
 }
 
- at index{color,
+ at package{color,
   name={\styfmt{color}},
   category={package},
   parent={packages}
 }
 
- at index{graphics,
+ at package{graphics,
   name={\styfmt{graphics}},
   category={package},
   parent={packages}
 }
 
- at index{graphicx,
+ at package{graphicx,
   name={\styfmt{graphicx}},
   category={package},
   parent={packages}
 }
 
- at index{ifthen,
+ at package{ifthen,
   name={\styfmt{ifthen}},
   category={package},
   parent={packages}
 }
 
- at index{probsoln,
+ at package{probsoln,
   name={\styfmt{probsoln}},
   category={package},
   parent={packages}
 }
 
- at index{shortvrb,
+ at package{shortvrb,
   name={\styfmt{shortvrb}},
   category={package},
   parent={packages}
 }
 
- at index{jmlrutils,
+ at package{jmlrutils,
   name={\styfmt{jmlrutils}},
   category={package},
   parent={packages}
 }
 
- at index{inputenc,
+ at package{inputenc,
   name={\styfmt{inputenc}},
   category={package},
   parent={packages}
 }
 
- at index{fontenc,
+ at package{fontenc,
   name={\styfmt{fontenc}},
   category={package},
   parent={packages}
 }
 
- at index{slantsc,
+ at package{slantsc,
   name={\styfmt{slantsc}},
   category={package},
   parent={packages}
 }
 
- at index{babel,
+ at package{relsize,
+  name={\styfmt{relsize}},
+  category={package},
+  parent={packages}
+}
+
+ at package{babel,
   name={\styfmt{babel}},
   category={package},
   parent={packages}
 }
 
- at index{polyglossia,
+ at package{polyglossia,
   name={\styfmt{polyglossia}},
   category={package},
   parent={packages}
 }
 
- at index{fontspec,
+ at package{fontspec,
   name={\styfmt{fontspec}},
   category={package},
   parent={packages}
 }
 
- at index{amsmath,
+ at package{amsmath,
   name={\styfmt{amsmath}},
   category={package},
   parent={packages}
 }
 
- at index{textcase,
+ at package{textcase,
   name={\styfmt{textcase}},
   category={package},
   parent={packages}
 }
 
- at index{datetime2,
+ at package{datetime2,
   name={\styfmt{datetime2}},
   category={package},
   parent={packages}
 }
 
- at index{datatool-base,
+ at package{datatool-base,
   name={\styfmt{datatool\dhyphen base}},
   category={package},
   parent={packages}
 }
 
- at index{datatool,
+ at package{datatool,
   name={\styfmt{datatool}},
   category={package},
   parent={packages}
 }
 
- at index{etoolbox,
+ at package{etoolbox,
   name={\styfmt{etoolbox}},
   category={package},
   parent={packages}
 }
 
- at index{soul,
+ at package{soul,
   name={\styfmt{soul}},
   category={package},
   parent={packages}
 }
 
- at index{xcolor,
+ at package{xcolor,
   name={\styfmt{xcolor}},
   category={package},
   parent={packages}
 }
 
- at index{tracklang,
+ at package{tracklang,
   name={\styfmt{tracklang}},
   category={package},
   parent={packages}
 }
 
- at index{accsupp,
+ at package{accsupp,
   name={\styfmt{accsupp}},
   category={package},
   parent={packages}
 }
 
- at index{stringconcat,
+ at symbol{stringconcat,
   name={\code{\#} (string concatenation)},
   text={\code{\#}}
 }
 
- at index{atchar,
+ at symbol{atchar,
   name={\code{@} (bib entry identifier)},
   text={\code{@}}
 }
 
- at index{param,
+ at specialchar{param,
   name={\code{\#} (parameter)},
   text={\code{\#}}
 }
 
- at index{hashchar,
+ at symbol{hashchar,
   name={\code{\#} (literal)},
   text={\code{\#}}
 }
 
- at index{cs.hash,
+ at command{cs.hash,
   name={\csfmt{\#}},
   description={produces the hash symbol \#},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{colsep,
+ at specialchar{colsep,
   name={\code{\&} (alignment)},
   text={\code{\&}}
 }
 
- at index{ampchar,
+ at symbol{ampchar,
   name={\code{\&} (literal)},
   text={\code{\&}}
 }
 
- at index{cs.amp,
+ at command{cs.amp,
   name={\csfmt{\&}},
   description={produces the ampersand symbol \&},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{bgroupchar,
-  name={\code{\{} (begin group)},
-  text={\code{\{}}
+ at specialchar{bgroupchar,
+  name={\code{\glsopenbrace} (begin group)},
+  text={\code{\glsopenbrace}}
 }
 
- at index{openbracechar,
-  name={\code{\{} (literal)},
-  text={\code{\{}}
+ at symbol{openbracechar,
+  name={\code{\glsopenbrace} (literal)},
+  text={\code{\glsopenbrace}}
 }
 
- at index{cs.openbrace,
-  name={\csfmt{\{}},
-  description={produces the open brace symbol \{},
-  note={kernel command},
+ at command{cs.openbrace,
+  name={\csfmt{\glsopenbrace}},
+  description={produces the open brace symbol \glsopenbrace},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{egroupchar,
-  name={\code{\}} (end group)},
-  text={\code{\}}}
+ at specialchar{egroupchar,
+  name={\code{\glsclosebrace} (end group)},
+  text={\code{\glsclosebrace}}
 }
 
- at index{closebracechar,
-  name={\code{\}} (literal)},
-  text={\code{\}}}
+ at symbol{closebracechar,
+  name={\code{\glsclosebrace} (literal)},
+  text={\code{\glsclosebrace}}
 }
 
- at index{cs.closebrace,
-  name={\csfmt{\}}},
-  description={produces the close brace symbol \}},
-  note={kernel command},
+ at command{cs.closebrace,
+  name={\csfmt{\glsclosebrace}},
+  description={produces the close brace symbol \glsclosebrace},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{commentchar,
+ at specialchar{commentchar,
   name={\code{\%} (comment)},
   text={\code{\%}}
 }
 
- at index{percentchar,
+ at symbol{percentchar,
   name={\code{\%} (literal)},
   text={\code{\%}}
 }
 
- at index{cs.percent,
+ at command{cs.percent,
   name={\csfmt{\%}},
   description={produces the percent symbol \%},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{sbchar,
+ at specialchar{sbchar,
   name={\code{\_} (subscript)},
   text={\code{\_}}
 }
 
- at index{underscorechar,
+ at symbol{underscorechar,
   name={\code{\_} (literal)},
   text={\code{\_}}
 }
 
- at index{cs.underscore,
+ at command{cs.underscore,
   name={\csfmt{\_}},
   description={produces the underscore symbol \_},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{spchar,
+ at specialchar{spchar,
   name={\code{\char`\^} (superscript)},
   text={\code{\char`\^}}
 }
 
- at index{circumchar,
+ at symbol{circumchar,
   name={\code{\char`\^} (literal)},
   text={\code{\char`\^}}
 }
 
- at index{cs.circum,
+ at command{cs.circum,
   name={\csfmt{\char`\^}},
   user1={\margm{character}},
   description={puts a circumflex accent over \meta{character}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{mshiftchar,
+ at specialchar{mshiftchar,
   name={\code{\$} (maths shift)},
   text={\code{\$}}
 }
 
- at index{dollarchar,
+ at symbol{dollarchar,
   name={\code{\$} (literal)},
   text={\code{\$}}
 }
 
- at index{cs.dollar,
+ at command{cs.dollar,
   name={\csfmt{\$}},
-  description={produces the dollar symbol \_},
-  note={kernel command},
+  description={produces the dollar symbol \$},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{escchar,
+ at specialchar{escchar,
   name={\code{\glsbackslash} (escape)},
   text={\code{\glsbackslash}}
 }
 
- at index{backslashchar,
+ at symbol{backslashchar,
   name={\code{\glsbackslash} (literal)},
   text={\code{\glsbackslash}}
 }
 
- at index{cs.backslash,
-  name={\csfmt{\glsbackslash}}
+ at command{cs.backslash,
+  name={\csfmt{\glsbackslash}},
+  user1={\oargm{len}},
+  description={starts a new row in a tabular or array context
+with an extra vertical space of length \meta{len} above it
+(starred form prohibits a page break)},
+  note={kernel command\texparserdefnote},
+  category={command}
 }
 
- at index{tabularnewline,
+ at command{tabularnewline,
   name={\csfmt{tabular\-new\-line}},
+  user1={\oargm{len}},
   description={tabular version of \idx{cs.backslash} (avoids conflict
 with forced line breaks in paragraph column formats)},
   note={kernel command},
@@ -3726,129 +4588,133 @@
   category={command}
 }
 
- at index{nbspchar,
+ at specialchar{nbspchar,
   name={\code{\glstildechar} (non-breakable space)},
   text={\code{\glstildechar}}
 }
 
- at index{tildechar,
+ at symbol{tildechar,
   name={\code{\glstildechar} (literal)},
   text={\code{\glstildechar}}
 }
 
- at index{doublequotechardelim,
+ at symbol{doublequotechardelim,
   name = {\code{"} (delimiter)},
   text = {\code{"}}
 }
 
- at index{doublequotecharhex,
+ at symbol{doublequotecharhex,
   name = {\code{"} (hexadecimal identifier)},
   text = {\code{"}}
 }
 
- at index{doublequoteactivechar,
+ at specialchar{doublequoteactivechar,
   name = {\code{"} (active)},
   text = {\code{"}}
 }
 
- at index{doublequotechar,
+ at symbol{doublequotechar,
   name = {\code{"} (literal)},
   text = {\code{"}}
 }
 
- at index{openrange,
-  name = {\code{(} (start range)},
-  text = {\code{(}}
+ at symbol{openrange,
+  name = {\code{\rangestartmark} (start range)},
+  text = {\code{\rangestartmark}}
 }
 
- at index{closerange,
-  name = {\code{)} (end range)},
-  text = {\code{)}}
+ at symbol{closerange,
+  name = {\code{\rangeendmark} (end range)},
+  text = {\code{\rangeendmark}}
 }
 
- at index{cs.tilde,
+ at command{cs.tilde,
   name={\csfmt{\glstildechar}},
   user1={\margm{character}},
   description={puts tilde accent over \meta{character}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{comma,
+ at command{comma,
   name={\csfmt{,}},
   description={thin space},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{vec,
+ at command{vec,
   name={\csfmt{vec}},
   user1={\margm{character}},
   description={puts right arrow accent over \meta{character}},
-  note={kernel command (maths mode)},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{zeroormore,
+ at symbol{zeroormore,
   name={\code{*} (regular expression, zero or more)},
   text={\code{*}}
 }
 
- at index{matchanydot,
+ at symbol{matchanydot,
   name={\code{.}\ (regular expression, match any)},
   text={\code{.}}
 }
 
- at index{periodchar,
+ at symbol{periodchar,
   name={\code{.}\ (end of sentence)},
   text={\code{.}},
   alias={full-stop}
 }
 
- at index{cs.period,
-  name={\csfmt{.}}
+ at command{cs.period,
+  name={\csfmt{.}},
+  user1={\margm{character}},
+  description={puts a dot accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
 }
 
- at index{cs.space,
+ at command{cs.space,
   name={\csfmt{\textvisiblespace}},
   description={produces an inter-word space},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{space,
+ at command{space,
   name={\csfmt{space}},
   description={produces a space},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{aposchar,
+ at symbol{aposchar,
   name={\code{'} (apostrophe)},
   text={\code{'}},
   alias={apostrophe}
 }
 
- at index{def,
+ at command{def,
   name={\csfmt{def}},
   user1={\margm{cs}\meta{syntax}\margm{definition}},
   description={defines the control sequence \meta{cs}, without checking if the command
    already exists},
-  note={\TeX\ primitive},
+  note={\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{edef,
+ at command{edef,
   name={\csfmt{edef}},
   user1={\margm{cs}\meta{syntax}\margm{definition}},
   description={defines the control sequence \meta{cs} to the full
 expansion of \meta{definition}, without checking if the command
    already exists},
-  note={\TeX\ primitive},
+  note={\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{ifstrempty,
+ at command{ifstrempty,
   name={\csfmt{if\-str\-empty}},
   user1={\margm{string}\margm{true}\margm{false}},
   description={tests if \meta{string} is empty},
@@ -3856,7 +4722,7 @@
   category={command}
 }
 
- at index{ifstrequal,
+ at command{ifstrequal,
   name={\csfmt{if\-str\-equal}},
   user1={\margm{string1}\margm{string2}\margm{true}\margm{false}},
   description={tests if \meta{string1} equals \meta{string2}},
@@ -3864,35 +4730,63 @@
   category={command}
 }
 
- at index{undef,
+ at command{ifcsstring,
+  name={\csfmt{if\-cs\-string}},
+  user1={\margm{cs-name}\margm{string}\margm{true}\margm{false}},
+  description={tests if the replacement text of the command
+  given by the control sequence name \meta{cs-name} equals \meta{string}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifdefstrequal,
+  name={\csfmt{if\-def\-str\-equal}},
+  user1={\margm{cs1}\margm{cs2}\margm{true}\margm{false}},
+  description={tests if the replacement text of the command
+  \meta{cs1} equals the replacement text of the command \meta{cs2}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifcsstrequal,
+  name={\csfmt{if\-cs\-str\-equal}},
+  user1={\margm{cs-name1}\margm{cs-name2}\margm{true}\margm{false}},
+  description={tests if the replacement text of the command given by
+  the control sequence name \meta{cs-name1} equals the replacement text 
+  of the command given by the control sequence name \meta{cs-name2}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{undef,
   name={\csfmt{undef}},
   user1={\meta{cs}},
   description={undefines the control sequence \meta{cs}},
-  note={\styfmt{etoolbox}},
+  note={\styfmt{etoolbox}\texparserdefnote},
   category={command}
 }
 
- at index{csdef,
+ at command{csdef,
   name={\csfmt{csdef}},
   user1={\margm{cs-name}\meta{syntax}\margm{definition}},
   description={defines the control sequence whose name
    is given by \meta{cs-name}, without checking if the command
    already exists},
-  note={\styfmt{etoolbox}},
+  note={\styfmt{etoolbox}\texparserdefnote},
   category={command}
 }
 
- at index{csuse,
+ at command{csuse,
   name={\csfmt{csuse}},
   user1={\margm{cs-name}},
   description={uses the control sequence whose name
    is given by \meta{cs-name} or does nothing if the command
    isn't defined},
-  note={\styfmt{etoolbox}},
+  note={\styfmt{etoolbox}\texparserdefnote},
   category={command}
 }
 
- at index{newrobustcmd,
+ at command{newrobustcmd,
   name={\csfmt{new\-robust\-cmd}},
   user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
   description={behaves like \cs{newcommand} but the newly defined
@@ -3901,15 +4795,15 @@
   category={command}
 }
 
- at index{ifdefempty,
+ at command{ifdefempty,
   name={\csfmt{if\-def\-empty}},
   user1={\margm{cs}\margm{true}\margm{false}},
   description={tests if the control sequence \meta{cs} is empty},
-  note={\styfmt{etoolbox}},
+  note={\styfmt{etoolbox}\texparserdefnote},
   category={command}
 }
 
- at index{ifcsundef,
+ at command{ifcsundef,
   name={\csfmt{if\-cs\-un\-def}},
   user1={\margm{cs-name}\margm{true}\margm{false}},
   description={tests if the control sequence given by \meta{cs-name}
@@ -3918,7 +4812,7 @@
   category={command}
 }
 
- at index{ifcsdef,
+ at command{ifcsdef,
   name={\csfmt{if\-cs\-def}},
   user1={\margm{cs-name}\margm{true}\margm{false}},
   description={tests if the control sequence given by \meta{cs-name}
@@ -3927,15 +4821,15 @@
   category={command}
 }
 
- at index{ifdef,
+ at command{ifdef,
   name={\csfmt{if\-def}},
   user1={\margm{cs}\margm{true}\margm{false}},
   description={tests if the control sequence \meta{cs} is defined},
-  note={\styfmt{etoolbox}},
+  note={\styfmt{etoolbox}\texparserdefnote},
   category={command}
 }
 
- at index{xifinlist,
+ at command{xifinlist,
   name={\csfmt{xifinlist}},
   user1={\margm{element}\margm{list cs}\margm{true}\margm{false}},
   description={tests if the expansion of \meta{element} is in the list stored
@@ -3944,7 +4838,7 @@
   category={command}
 }
 
- at index{ifinlist,
+ at command{ifinlist,
   name={\csfmt{ifinlist}},
   user1={\margm{element}\margm{list cs}\margm{true}\margm{false}},
   description={tests if \meta{element} is in the list stored
@@ -3953,7 +4847,7 @@
   category={command}
 }
 
- at index{listxadd,
+ at command{listxadd,
   name={\csfmt{listxadd}},
   user1={\margm{list cs}\margm{element}},
   description={globally adds (expanded) \meta{element} to the list stored
@@ -3962,7 +4856,7 @@
   category={command}
 }
 
- at index{listgadd,
+ at command{listgadd,
   name={\csfmt{listgadd}},
   user1={\margm{list cs}\margm{element}},
   description={globally adds \meta{element} to the list stored
@@ -3971,16 +4865,16 @@
   category={command}
 }
 
- at index{appto,
+ at command{appto,
   name={\csfmt{appto}},
   user1={\margm{cs}\margm{code}},
   description={appends \meta{code} to the definition of
    the control sequence \meta{cs}},
-  note={\styfmt{etoolbox}},
+  note={\styfmt{etoolbox}\texparserdefnote},
   category={command}
 }
 
- at index{forlistloop,
+ at command{forlistloop,
   name={\csfmt{for\-list\-loop}},
   user1={\margm{handler cs}\margm{list cs}},
   description={iterates over the internal list given by the command 
@@ -3990,7 +4884,7 @@
   category={command}
 }
 
- at index{foreignlanguage,
+ at command{foreignlanguage,
   name={\csfmt{foreign\-language}},
   user1={\margm{language name}\margm{text}},
   description={typesets \meta{text} according to the rules of the
@@ -3999,7 +4893,7 @@
   category={command}
 }
 
- at index{selectlanguage,
+ at command{selectlanguage,
   name={\csfmt{select\-language}},
   user1={\margm{language name}},
   description={switch to the rules of the given language},
@@ -4007,7 +4901,7 @@
   category={command}
 }
 
- at index{setmainlanguage,
+ at command{setmainlanguage,
   name={\csfmt{set\-main\-language}},
   user1={\oargm{options}\margm{language name}},
   description={load the main document language},
@@ -4015,7 +4909,7 @@
   category={command}
 }
 
- at index{setotherlanguage,
+ at command{setotherlanguage,
   name={\csfmt{set\-other\-language}},
   user1={\oargm{options}\margm{language name}},
   description={load a secondary document language},
@@ -4023,7 +4917,7 @@
   category={command}
 }
 
- at index{textlanguage,
+ at command{textlanguage,
   name={\csfmt{text\-\meta{language}}},
   user1={\oargm{options}\margm{text}},
   description={typeset \meta{text} according to \meta{language}},
@@ -4031,51 +4925,79 @@
   category={command}
 }
 
- at index{marvosym,
+ at package{marvosym,
   name={\styfmt{marvosym}},
   category={package},
   parent={packages}
 }
 
- at index{ifsym,
+ at package{ifsym,
   name={\styfmt{ifsym}},
   category={package},
   parent={packages}
 }
 
- at index{CJKutf8,
+ at package{CJKutf8,
   name={\styfmt{CJKutf8}},
   category={package},
   parent={packages}
 }
 
- at index{env.CJK,
+ at environment{env.CJK,
   name={\envfmt{CJK}},
+  user1={\oargm{font encoding}\margm{encoding}\margm{family}},
+  description={sets up support for \idx{CJK} content},
+  note={\styfmt{CJK}},
   category={environment}
 }
 
- at index{env.description,
+ at environment{env.description,
   name={\envfmt{description}},
+  description={list-like environment},
+  note={provided by most classes},
   category={environment}
 }
 
- at index{longtable,
+ at package{longtable,
   name={\styfmt{longtable}},
   category={package},
   parent={packages}
 }
 
- at index{env.longtable,
+ at environment{env.longtable,
   name={\envfmt{longtable}},
+  user1={\oargm{halign}\margm{column specs}},
+  description={a tabular-like environment that can span multiple
+pages (not available in multi-column or certain other contexts)},
+  note={\styfmt{longtable}},
   category={environment}
 }
 
- at index{env.tabular,
+ at environment{env.tabular,
   name={\envfmt{tabular}},
+  user1={\oargm{valign}\margm{column specs}},
+  description={aligns material in rows and columns with \idx{colsep}
+to separate columns and \cs{cs.backslash} to separate rows},
+  note={kernel environment},
   category={environment}
 }
 
- at index{supertabular,
+ at package{tabularx,
+  name={\styfmt{tabularx}},
+  category={package},
+  parent={packages}
+}
+
+ at environment{env.tabularx,
+  name={\envfmt{tabularx}},
+  user1={\margm{width}\oargm{valign}\margm{column specs}},
+  description={a tabular-like environment that's designed to fit the
+   given \meta{width})},
+  note={\styfmt{tabularx}},
+  category={environment}
+}
+
+ at package{supertabular,
   name={\styfmt{supertabular}},
   category={package},
   parent={packages}
@@ -4083,232 +5005,1824 @@
 
 @index{env.supertabular,
   name={\envfmt{supertabular}},
+  user1={\margm{column specs}},
+  description={a tabular-like environment that can span multiple
+pages (not available in multi-column or certain other contexts)},
+  note={\styfmt{supertabular}},
   category={environment}
 }
 
- at index{env.theglossary,
+ at glsenvironment{env.theglossary,
   name={\envfmt{theglossary}},
   category={environment}
 }
 
- at index{abbreviationstyles,
+ at topic{abbreviationstyles,
   name={abbreviation styles},
-  text={abbreviation style}
+  text={abbreviation style},
+  description={abbreviation styles are set using
+  \ics{newabbreviation} and govern the format of commands like \ics{gls}
+  (display style) and \ics{glsxtrfull} (inline style). The inline
+   style may or may not match the first use format of the display
+   style. To allow for greater flexibility in abbreviation styles,
+   \cs{gls} (and its variants) normally treat abbreviations
+   differently to other terms, but some abbreviation styles can work better 
+   if the abbreviation is treated as a general term so in those cases the 
+   style sets the \catattr{regular} attribute to \qt{true} for
+   the entry's category. The \styfmt{glossaries-extra} package comes with the file
+\href{http://mirrors.ctan.org/macros/latex/contrib/glossaries-extra/samples/sample-abbr-styles.pdf}{\filefmt{sample-abbr-styles.pdf}}
+  that demonstrates all predefined styles}
 }
 
- at index{long-noshort,
-  name={\abbrstylefmt{long\dhyphen noshort}},
+ at abbreviationstyle{abbrstyle.long-short,
+  name={\abbrstylefmt{long\dhyphen short}},
+  description={this abbreviation style displays the long form on
+  \idx{firstuse} of the \cs{gls}-like commands followed by the 
+  short form in parentheses (formatted with \cs{glsxtrparen}). 
+  Only the short form is shown on subsequent use. The
+  \field{description} field is set to the long form},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
   parent={abbreviationstyles}
 }
 
- at index{long-noshort-desc,
+ at abbrvstylecommand{glsxtrlongshortname,
+  name={\csfmt{gls\-xtr\-long\-short\-name}},
+  description={hook for the \abbrstyle{long-short} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the short form)},
+  topics={abbrstyle.long-short,abbrstyle.long-short-sc,abbrstyle.long-short-sm,abbrstyle.long-short-em,abbrstyle.long-em-short-em,abbrstyle.long-short-user,abbrstyle.long-postshort-user,abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslongdefaultfont,
+  name={\csfmt{gls\-long\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the long form. The default definition
+just does its argument without any formatting},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc,abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongdefaultfont,
+  name={\csfmt{gls\-first\-long\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the long form on \idx{firstuse}. The
+   default definition uses \cs{glslongdefaultfont}},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc,abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvdefaultfont,
+  name={\csfmt{gls\-abbrv\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the short form. The default definition
+just does its argument without any formatting},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvdefaultfont,
+  name={\csfmt{gls\-first\-abbrv\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the short form on \idx{firstuse}. The
+   default definition uses \cs{glsabbrvdefaultfont}},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongshortdescname,
+  name={\csfmt{gls\-xtr\-long\-short\-desc\-name}},
+  description={hook for the \abbrstyle{long-short-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the long form followed by the
+  short form in parentheses)},
+  topics={abbrstyle.long-short-desc,abbrstyle.long-short-sc-desc,abbrstyle.long-short-sm-desc,abbrstyle.long-short-em-desc,abbrstyle.long-em-short-em-desc,abbrstyle.long-hyphen-short-hyphen-desc,abbrstyle.long-hyphen-postshort-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-long,
+  name={\abbrstylefmt{short\dhyphen long}},
+  description={this abbreviation style displays the short form on
+  \idx{firstuse} of the \cs{gls}-like commands followed by the 
+  long form in parentheses (formatted with \cs{glsxtrparen}). 
+  Only the short form is shown on subsequent use. The
+  \field{description} field is set to the long form},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortlongname,
+  name={\csfmt{gls\-xtr\-short\-long\-name}},
+  description={hook for the \abbrstyle{short-long} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.short-long,abbrstyle.short-sc-long,abbrstyle.short-sm-long,abbrstyle.short-em-long,abbrstyle.short-em-long-em,abbrstyle.short-postlong-user,abbrstyle.short-long-user,abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-postlong-hyphen},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-long-desc,
+  name={\abbrstylefmt{short\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-long} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortlongdescname,
+  name={\csfmt{gls\-xtr\-short\-long\-desc\-name}},
+  description={hook for the \abbrstyle{short-long-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the long form followed by the
+  short form in parentheses)},
+  topics={abbrstyle.short-long-desc,abbrstyle.short-sc-long-desc,abbrstyle.short-sm-long-desc,abbrstyle.short-em-long-desc,abbrstyle.short-em-long-em-desc,abbrstyle.short-hyphen-long-hyphen-desc,abbrstyle.short-hyphen-postlong-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-footnote,
+  name={\abbrstylefmt{short\dhyphen footnote}},
+  description={this abbreviation style displays the short form on
+  \idx{firstuse} of the \cs{gls}-like commands with the long form as
+  a footnote.  Only the short form is shown on subsequent use. The
+  \field{description} field is set to the long form. The inline full
+  form obtained with commands like \cs{glsxtrfull} uses a
+  parenthetical style. Since this can result in nested hyperlinks
+  (from the \idx{link-text} to the glossary and from the footnote
+  marker to the footnote) this style automatically sets the
+  \catattr{nohyperfirst} category attribute to \optfmt{true} for
+  the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.footnote,
+  name={\abbrstylefmt{footnote}},
+  description={an alias for \abbrstyle{short-footnote}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glslongfootnotefont,
+  name={\csfmt{gls\-long\-foot\-note\-font}},
+  user1={\margm{text}},
+  description={used with the \qt{footnote} abbreviation styles to
+   format the long form},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.05+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongfootnotefont,
+  name={\csfmt{gls\-first\-long\-foot\-note\-font}},
+  user1={\margm{text}},
+  description={used with the \qt{footnote} abbreviation styles to
+   format the long form on first use},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.05+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrabbrvfootnote,
+  name={\csfmt{gls\-xtr\-abbrv\-foot\-note}},
+  user1={\margm{label}\margm{long form}},
+  description={used with the \qt{footnote} abbreviation styles to
+   do the footnote. The \meta{label} is ignored by default. The
+   \meta{long form} includes the font changing command. This just
+   does \code{\cs{footnote}\margm{long form}}},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrfootnotename,
+  name={\csfmt{gls\-xtr\-foot\-note\-name}},
+  description={hook for the \qt{footnote} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-postfootnote,
+  name={\abbrstylefmt{short\dhyphen postfootnote}},
+  description={this abbreviation style is like
+  \abbrstyle{short-footnote} but the footnote is moved to the
+  \idx{postlinkhook} (outside of the hyperlink, if enabled) to
+  prevent nested hyperlinks. This means that, unlike
+  \abbrstyle{short-footnote} the \catattr{nohyperfirst} attribute
+  isn't changed},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.postfootnote,
+  name={\abbrstylefmt{postfootnote}},
+  description={an alias for \abbrstyle{short-postfootnote}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong,
+  name={\abbrstylefmt{short\dhyphen nolong}},
+  description={this abbreviation style only displays the \field{short} form 
+   with the \cs{gls}-like commands (regardless of the \idx{firstuseflag}). 
+   The \field{long} form can be accessed with \cs{glsxtrlong}. 
+   The \field{name} field is set to \cs{glsxtrshortnolongname} and the 
+   \field{description} field is set to the \field{long} form (unless 
+   overridden in the entry definition). The inline full form
+   displays the short form followed by the long form in parentheses. 
+   This style sets the \catattr{regular} attribute to \optfmt{true} 
+   for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short,
+  name={\abbrstylefmt{short}},
+  description={an alias for \abbrstyle{short-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong-noreg,
+  name={\abbrstylefmt{short\dhyphen nolong\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{short-nolong} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortnolongname,
+  name={\csfmt{gls\-xtr\-short\-no\-long\-name}},
+  description={hook for the \abbrstyle{short-nolong} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.short-nolong,abbrstyle.short-nolong-noreg,abbrstyle.short-sc-nolong,abbrstyle.short-sm-nolong,abbrstyle.short-em-nolong},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style sets
+  the \catattr{regular} attribute to \optfmt{true} for the entry's
+  category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-desc,
+  name={\abbrstylefmt{short-desc}},
+  description={an alias for \abbrstyle{short-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong-desc-noreg,
+  name={\abbrstylefmt{short\dhyphen nolong\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{short-nolong-desc} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortdescname,
+  name={\csfmt{gls\-xtr\-short\-desc\-name}},
+  description={hook for the \abbrstyle{short-nolong-desc} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form followed by long form in parentheses)},
+  topics={abbrstyle.short-nolong-desc,abbrstyle.short-nolong-desc-noreg,abbrstyle.short-sc-nolong-desc,abbrstyle.short-sm-nolong-desc,abbrstyle.short-em-nolong-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short,
+  name={\abbrstylefmt{nolong\dhyphen short}},
+  description={this abbreviation style only displays the \field{short} form 
+   with the \cs{gls}-like commands (regardless of the \idx{firstuseflag}). 
+   The \field{long} form can be accessed with \cs{glsxtrlong}. 
+   The \field{name} field is set to \cs{glsxtrshortnolongname} and the 
+   \field{description} field is set to the \field{long} form (unless 
+   overridden in the entry definition). The inline full form
+   displays the long form followed by the short form in parentheses. 
+   This style sets the \catattr{regular} attribute to \optfmt{true}
+   for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-noreg,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{nolong-short} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-desc,
   name={\abbrstylefmt{long\dhyphen noshort\dhyphen desc}},
+  description={this abbreviation style only displays the \field{long} 
+   form with the \cs{gls}-like commands (regardless of the 
+   \idx{firstuseflag}). The \field{short}
+   form can be accessed with \cs{glsxtrshort}. The \field{name}
+   field is set to \cs{glsxtrlongnoshortdescname} and the \field{description}
+   field must be provided in the entry definition. The inline full
+   form displays the long form followed by the short form in
+   parentheses. This style sets the \catattr{regular} attribute to 
+   \optfmt{true} for the entry's category},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
   parent={abbreviationstyles}
 }
 
- at index{long-short-sc,
+ at abbreviationstyle{abbrstyle.long-desc,
+  name={\abbrstylefmt{long-desc}},
+  description={an alias for \abbrstyle{long-noshort-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongnoshortdescname,
+  name={\csfmt{gls\-xtr\-long\-no\-short\-desc\-name}},
+  description={hook for the \abbrstyle{long-noshort-desc} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the long form)},
+  topics={abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-noshort-sc-desc,abbrstyle.long-noshort-sm-desc,abbrstyle.long-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-desc-noreg,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort-desc} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort,
+  name={\abbrstylefmt{long\dhyphen noshort}},
+  description={this abbreviation style only displays the \field{long} form 
+   with the \cs{gls}-like commands (regardless of the \idx{firstuseflag}). 
+   The \field{short} form can be accessed with \cs{glsxtrshort}. 
+   The \field{name} field is set to \cs{glsxtrlongnoshortname} and the 
+   \field{description} field is set to the \field{long} form (unless 
+   overridden in the entry definition). The inline full form
+   displays the long form followed by the short form in parentheses. 
+   This style sets the \catattr{regular} attribute to \optfmt{true} 
+   for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long,
+  name={\abbrstylefmt{long}},
+  description={an alias for \abbrstyle{long-noshort}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-noreg,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongnoshortname,
+  name={\csfmt{gls\-xtr\-long\-no\-short\-name}},
+  description={hook for the \abbrstyle{long-noshort} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-em,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-hyphen-noshort-noreg},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sc,
   name={\abbrstylefmt{long\dhyphen short\dhyphen sc}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
   parent={abbreviationstyles}
 }
 
- at index{long-short-sm,
+ at abbrvstylecommand{glsxtrscsuffix,
+  name={\csfmt{gls\-xtr\-sc\-suffix}},
+  user1={},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the small-cap
+   \qt{sc} styles. This counteracts the effect of \cs{textsc}
+   using \ics{glstextup}},
+  topics={abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvscfont,
+  name={\csfmt{gls\-abbrv\-sc\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sc} abbreviation styles to format the
+short form using \cs{textsc}},
+  topics={abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvscfont,
+  name={\csfmt{gls\-first\-abbrv\-sc\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sc} abbreviation styles to format the
+   short form on \idx{firstuse}. This defaults to \cs{glsabbrvscfont}},
+  topics={abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sc-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen sc\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-sc} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-long,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen long}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-long-desc,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-sc-long} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-nolong,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen nolong}},
+  description={this abbreviation style is like \abbrstyle{short-nolong}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase}). This style sets the \catattr{regular}
+  attribute to \optfmt{true} for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc,
+  name={\abbrstylefmt{short\dhyphen sc}},
+  description={an alias for \abbrstyle{short-sc-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-sc-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-desc,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen desc}},
+  description={an alias for \abbrstyle{short-sc-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-sc,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen sc}},
+  description={this abbreviation style is like \abbrstyle{nolong-short}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase}). This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sc}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase}). This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sc-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sc\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-noshort-sc} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-footnote,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen footnote}},
+  description={this abbreviation style is like \abbrstyle{short-footnote}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-postfootnote,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen postfootnote}},
+  description={this abbreviation style is like \abbrstyle{short-postfootnote}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sm,
   name={\abbrstylefmt{long\dhyphen short\dhyphen sm}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short form is displayed using a smaller font. The
+  \sty{relsize} package is required with this style},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
   parent={abbreviationstyles}
 }
 
- at index{long-short-em,
+ at abbrvstylecommand{glsabbrvsmfont,
+  name={\csfmt{gls\-abbrv\-sm\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sm} abbreviation styles to format the
+short form using \ics{textsmaller}},
+  topics={abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvsmfont,
+  name={\csfmt{gls\-first\-abbrv\-sm\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sm} abbreviation styles to format the
+   short form on \idx{firstuse}. This defaults to \cs{glsabbrvsmfont}},
+  topics={abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrsmsuffix,
+  name={\csfmt{gls\-xtr\-sm\-suffix}},
+  user1={},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{sm} styles. This
+   defaults to \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sm-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen sm\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-sm} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-long,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen long}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short form is displayed using a smaller font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-long-desc,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-sm} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-nolong,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen nolong}},
+  description={this abbreviation style is like \abbrstyle{short-nolong}
+  but the short form is displayed using a smaller font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm,
+  name={\abbrstylefmt{short\dhyphen sm}},
+  description={an alias for \abbrstyle{short-sm-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-sm-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-desc,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen desc}},
+  description={an alias for \abbrstyle{short-sm-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-sm,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen sm}},
+  description={this abbreviation style is like \abbrstyle{nolong-short}
+  but the short form is displayed using a smaller font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sm,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sm}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the short form is displayed using a smaller font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sm-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sm\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-noshort-sm} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-footnote,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen footnote}},
+  description={this abbreviation style is like \abbrstyle{short-footnote}
+  but the short form is displayed in a smaller font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-postfootnote,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen postfootnote}},
+  description={this abbreviation style is like \abbrstyle{short-postfootnote}
+  but the short form is displayed in a smaller font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-em,
   name={\abbrstylefmt{long\dhyphen short\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short form is displayed using an emphasized font},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
   parent={abbreviationstyles}
 }
 
- at index{long-short,
-  name={\abbrstylefmt{long\dhyphen short}},
+ at abbrvstylecommand{glsabbrvemfont,
+  name={\csfmt{gls\-abbrv\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{em} abbreviation styles to format the
+short form using \ics{emph}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-em-short-em-desc,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvemfont,
+  name={\csfmt{gls\-first\-abbrv\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{em} abbreviation styles to format the
+   short form on \idx{firstuse}. This defaults to \cs{glsabbrvemfont}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote,abbrstyle.long-em-short-em-desc,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtremsuffix,
+  name={\csfmt{gls\-xtr\-em\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{em} styles. This
+   defaults to \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glslongemfont,
+  name={\csfmt{gls\-long\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{long-em} abbreviation styles to format the
+long form using \ics{emph}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-em-short-em-desc,abbrstyle.short-em-long-em,abbrstyle.short-em-long-em-desc,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongemfont,
+  name={\csfmt{gls\-first\-long\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{long-em} abbreviation styles to format the
+   long form on \idx{firstuse}. This defaults to \cs{glslongemfont}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-em-short-em-desc,abbrstyle.short-em-long-em,abbrstyle.short-em-long-em-desc,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-em-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-em} style but the \field{description}
+   field must be provided in the entry definition},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
   parent={abbreviationstyles}
 }
 
- at index{long-short-user,
+ at abbreviationstyle{abbrstyle.long-em-short-em,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen short\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short and long forms are displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-short-em-desc,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen short\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-em-short-em} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short form is displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-em-long} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long-em,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short and long forms are displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long-em-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-em-long-em} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-nolong,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen nolong}},
+  description={this abbreviation style is like \abbrstyle{short-nolong}
+  but the short form is displayed using an emphasized font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em,
+  name={\abbrstylefmt{short\dhyphen em}},
+  description={an alias for \abbrstyle{short-em-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-em-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen desc}},
+  description={an alias for \abbrstyle{short-em-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-em,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{nolong-short}
+  but the short form is displayed using an emphasized font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-em,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the short form is displayed using an emphasized font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the long and short forms are displayed using an emphasized font.
+  This style sets the \catattr{regular} attribute to \optfmt{true} for the 
+  entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em-noreg,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort-noreg}
+  but the long and short forms are displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-em-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-noshort-em} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em-desc,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-em-noshort-em} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em-desc-noreg,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-em-noshort-em-noreg} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-footnote,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen footnote}},
+  description={this abbreviation style is like \abbrstyle{short-footnote}
+  but the short form is displayed in an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-postfootnote,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen postfootnote}},
+  description={this abbreviation style is like \abbrstyle{short-postfootnote}
+  but the short form is displayed in an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-user,
   name={\abbrstylefmt{long\dhyphen short\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the parenthetical material is governed by \cs{glsxtruserparen}},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
   parent={abbreviationstyles}
 }
 
- at index{short-long-user,
-  name={\abbrstylefmt{short\dhyphen long\dhyphen user}},
+ at abbrvstylecommand{glsxtruserfield,
+  name={\csfmt{gls\-xtr\-user\-field}},
+  description={used by the parenthetical abbreviation styles, this
+   expands to the internal label of the field used to store the additional parenthetical
+   material. The default value is \field{useri}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtruserparen,
+  name={\csfmt{gls\-xtr\-user\-paren}},
+  user1={\margm{text}\margm{label}},
+  description={used by the \qt{user} abbreviation styles
+   to format the parenthetical material where \meta{text}
+   is the default parenthetical text and \meta{label}
+   is the entry's label. This checks the field given
+   by \cs{glsxtruserfield} and, if set, the \meta{text} is
+   followed by a comma and the user value},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvuserfont,
+  name={\csfmt{gls\-abbrv\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the short form. The default definition just uses \cs{glsabbrvdefaultfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvuserfont,
+  name={\csfmt{gls\-first\-abbrv\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the short form on \idx{firstuse}. The default definition just uses
+\cs{glsabbrvuserfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslonguserfont,
+  name={\csfmt{gls\-long\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the long form. The default definition just uses \cs{glslongdefaultfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlonguserfont,
+  name={\csfmt{gls\-first\-long\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the long form on first use. The default definition just uses
+\cs{glslonguserfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrusersuffix,
+  name={\csfmt{gls\-xtr\-user\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{user} styles.
+   The default definition just uses \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsuserdescription,
+  name={\csfmt{gls\-user\-description}},
+  user1={\margm{description}\margm{label}},
+  description={used with \qt{user} abbreviation styles to
+   encapsulate the description. Just does
+  \code{\cs{glslonguserfont}\margm{description}} by default},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.30+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-postshort-user,
+  name={\abbrstylefmt{long\dhyphen postshort\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{long-short-user}
+  but the parenthetical material is moved to the \idx{postlinkhook}},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
   parent={abbreviationstyles}
 }
 
- at index{long-em-short-em,
-  name={\abbrstylefmt{long\dhyphen em\dhyphen short\dhyphen em}},
+ at abbrvstylecommand{glsxtrlongshortuserdescname,
+  name={\csfmt{gls\-xtr\-long\-short\-user\-desc\-name}},
+  description={hook for the \abbrstyle{long-short-user-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the long form followed by the
+  parenthetical material)},
+  topics={abbrstyle.long-postshort-user-desc,abbrstyle.long-short-user-desc},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-postshort-user-desc,
+  name={\abbrstylefmt{long\dhyphen postshort\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-postshort-user} style but the \field{description}
+   field must be provided in the entry definition},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
   parent={abbreviationstyles}
 }
 
- at index{long-short-desc,
-  name={\abbrstylefmt{long\dhyphen short\dhyphen desc}},
+ at abbreviationstyle{abbrstyle.short-postlong-user,
+  name={\abbrstylefmt{short\dhyphen postlong\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{short-long-user}
+  but the parenthetical material is moved to the \idx{postlinkhook}},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
   parent={abbreviationstyles}
 }
 
- at index{long-short-user-desc,
+ at abbrvstylecommand{glsxtrshortlonguserdescname,
+  name={\csfmt{gls\-xtr\-short\-long\-user\-desc\-name}},
+  description={hook for the \abbrstyle{short-long-user-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the short form followed by the
+  parenthetical material)},
+  topics={abbrstyle.short-postlong-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-postlong-user-desc,
+  name={\abbrstylefmt{short\dhyphen postlong\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-postlong-user} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-user-desc,
   name={\abbrstylefmt{long\dhyphen short\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-user} style but the \field{description}
+   field must be provided in the entry definition},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
   parent={abbreviationstyles}
 }
 
- at index{long-hyphen-short-hyphen,
+ at abbreviationstyle{abbrstyle.short-long-user,
+  name={\abbrstylefmt{short\dhyphen long\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the parenthetical material is governed by \cs{glsxtruserparen}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-long-user-desc,
+  name={\abbrstylefmt{short\dhyphen long\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-long-user} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-short-hyphen,
   name={\abbrstylefmt{long\dhyphen hyphen\dhyphen short\dhyphen
 hyphen}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but is designed to work with the \catattr{markwords} attribute. If
+  the attribute is set, the style will check if the inserted
+  material (provided by the final optional argument of commands like
+  \cs{gls}) starts with a hyphen. If it does, the insert is added to
+  the parenthetical material},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
   parent={abbreviationstyles}
 }
 
- at index{long-postshort-user-desc,
-  name={\abbrstylefmt{long\dhyphen postshort\dhyphen user\dhyphen desc}},
+ at abbrvstylecommand{glsxtrifhyphenstart,
+  name={\csfmt{gls\-xtr\-if\-hyphen\-start}},
+  user1={\margm{text}\margm{true}\margm{false}},
+  description={used by the \qt{hyphen} abbreviation styles, this
+   checks if \meta{text} starts with a hyphen},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-short-hyphen-desc,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-long-hyphen-desc,abbrstyle.short-hyphen-postlong-hyphen,abbrstyle.short-hyphen-postlong-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrlonghyphenshort,
+  name={\csfmt{gls\-xtr\-long\-hyphen\-short}},
+  user1={\margm{label}\margm{long}\margm{short}\margm{insert}},
+  description={used by the \qt{long\dhyphen hyphen\dhyphen
+  short\dhyphen hyphen} abbreviation styles to format the full form},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvhyphenfont,
+  name={\csfmt{gls\-abbrv\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the short form},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-short-hyphen-desc,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-long-hyphen-desc,abbrstyle.short-hyphen-postlong-hyphen,abbrstyle.short-hyphen-postlong-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvhyphenfont,
+  name={\csfmt{gls\-first\-abbrv\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the short form on \idx{firstuse}},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslonghyphenfont,
+  name={\csfmt{gls\-long\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the long form},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlonghyphenfont,
+  name={\csfmt{gls\-first\-long\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the long form on \idx{firstuse}},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrhyphensuffix,
+  name={\csfmt{gls\-xtr\-hyphen\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{hyphen} styles},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-short-hyphen-desc,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen short\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-short-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
   parent={abbreviationstyles}
 }
 
- at index{short-long,
-  name={\abbrstylefmt{short\dhyphen long}},
+ at abbrvstylecommand{glsxtrlonghyphennoshort,
+  name={\csfmt{gls\-xtr\-long\-hyphen\-noshort}},
+  user1={\margm{label}\margm{long}\margm{insert}},
+  description={used by the \qt{long-hyphen-noshort} styles
+  to format the \idx{firstuse} form. This checks if the inserted
+  material starts with a hyphen and makes the appropriate
+  modifications},
+  topics={abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-noshort-desc-noreg,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen noshort\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-noshort-noreg} style but the \field{description}
+   field must be provided in the entry definition. This
+  style won't work with the \catattr{regular} attribute set, as the
+  regular form isn't flexible enough},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
   parent={abbreviationstyles}
 }
 
- at index{short-nolong,
-  name={\abbrstylefmt{short\dhyphen nolong}},
+ at abbreviationstyle{abbrstyle.long-hyphen-noshort-noreg,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen noshort\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but is designed to work with the \catattr{markwords} attribute and 
+  the \catattr{regular} attribute isn't set to \optfmt{true}. This
+  style won't work with the \catattr{regular} attribute set, as the
+  regular form isn't flexible enough},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
   parent={abbreviationstyles}
 }
 
- at index{short-sc-nolong,
-  name={\abbrstylefmt{short\dhyphen sc\dhyphen nolong}},
+ at abbreviationstyle{abbrstyle.long-hyphen-postshort-hyphen,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen postshort\dhyphen hyphen}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-short-hyphen} style but the insert and
+   parenthetical material are moved into the \idx{postlinkhook}},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
   parent={abbreviationstyles}
 }
 
- at index{long-only-short-only,
+ at abbrvstylecommand{glsxtrlonghyphen,
+  name={\csfmt{gls\-xtr\-long\-hyphen}},
+  user1={\margm{long}\margm{label}\margm{insert}},
+  description={used by the \abbrstyle{long-hyphen-postshort-hyphen} abbreviation 
+  to format the long form and check if the \meta{insert} starts with
+  a hyphen},
+  topics={abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrposthyphenshort,
+  name={\csfmt{gls\-xtr\-post\-hyphen\-short}},
+  user1={\margm{label}\margm{insert}},
+  description={used by the \abbrstyle{long-hyphen-postshort-hyphen}
+  style in the \idx{postlinkhook}},
+  topics={abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrposthyphensubsequent,
+  name={\csfmt{gls\-xtr\-post\-hyphen\-sub\-sequent}},
+  user1={\margm{label}\margm{insert}},
+  description={used by the \abbrstyle{long-hyphen-postshort-hyphen} abbreviation 
+  in the \idx{postlinkhook} for subsequent use},
+  topics={abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-postshort-hyphen-desc,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen postshort\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-postshort-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-long-hyphen,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen long\dhyphen hyphen}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but is designed to work with the \catattr{markwords} attribute. If
+  the attribute is set, the style will check if the inserted
+  material (provided by the final optional argument of commands like
+  \cs{gls}) starts with a hyphen. If it does, the insert is added to
+  the parenthetical material},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshorthyphenlong,
+  name={\csfmt{gls\-xtr\-short\-hyphen\-long}},
+  user1={\margm{label}\margm{short}\margm{long}\margm{insert}},
+  description={used by the \abbrstyle{short-hyphen-long-hyphen} style
+  to format the full form},
+  topics={abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-long-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-long-hyphen-desc,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen long\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-hyphen-long-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-postlong-hyphen,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen postlong\dhyphen hyphen}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-hyphen-long-hyphen} style but the insert and
+   parenthetical material are moved into the \idx{postlinkhook}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshorthyphen,
+  name={\csfmt{gls\-xtr\-short\-hyphen}},
+  user1={\margm{short}\margm{label}\margm{insert}},
+  description={used by the \qt{postlong-hyphen} styles
+  to format the short form and check if \meta{insert} starts with a hyphen},
+  topics={abbrstyle.short-hyphen-postlong-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrposthyphenlong,
+  name={\csfmt{gls\-xtr\-post\-hyphen\-long}},
+  user1={\margm{label}\margm{insert}},
+  description={used by the \qt{postlong-hyphen}
+  styles in the \idx{postlinkhook}},
+  topics={abbrstyle.short-hyphen-postlong-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-postlong-hyphen-desc,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen postlong\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-hyphen-postlong-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-only-short-only,
   name={\abbrstylefmt{long\dhyphen only\dhyphen short\dhyphen only}},
+  description={this abbreviation style only displays the long form
+  on \idx{firstuse} and only the short form on subsequent use. The
+  inline full form shows the long form followed by the short form in
+  parentheses},
   category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
   parent={abbreviationstyles}
 }
 
- at index{glossarystyle,
+ at abbrvstylecommand{glsabbrvonlyfont,
+  name={\csfmt{gls\-abbrv\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+short form. The default definition just uses \cs{glsabbrvdefaultfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvonlyfont,
+  name={\csfmt{gls\-first\-abbrv\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+short form on \idx{firstuse}. The default definition just uses
+\cs{glsabbrvonlyfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslongonlyfont,
+  name={\csfmt{gls\-long\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+long form. The default definition just uses \cs{glslongdefaultfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongonlyfont,
+  name={\csfmt{gls\-first\-long\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+long form on \idx{firstuse}. The default definition just uses
+\cs{glslongonlyfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtronlysuffix,
+  name={\csfmt{gls\-xtr\-only\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{only} styles.
+   The default definition just uses \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-only-short-only},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtronlyname,
+  name={\csfmt{gls\-xtr\-only\-name}},
+  description={hook for the \abbrstyle{long-only-short-only} style
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.long-only-short-only},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtronlydescname,
+  name={\csfmt{gls\-xtr\-only\-desc\-name}},
+  description={hook for the \abbrstyle{long-only-short-only-desc} style
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the long form)},
+  topics={abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-only-short-only-desc,
+  name={\abbrstylefmt{long\dhyphen only\dhyphen short\dhyphen only\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-only-short-only} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at topic{glossarystyle,
   name={glossary styles},
-  text={glossary style}
+  text={glossary style},
+  description={glossary styles are set using \ics{setglossarystyle} 
+  or with the \styopt{style} package option or the
+  \printglossopt{style} option in \cs{printunsrtglossary}. 
+  There are a number of styles provided in the supplementary packages. See the
+\href{https://www.dickimaw-books.com/gallery/glossaries-styles/}{\styfmt{glossaries}
+  gallery of predefined styles}~\cite{glossarystylesgallery} for
+  samples of each style}
 }
 
- at index{glostyle.indexgroup,
+ at glossarystyle{glostyle.inline,
+  name={\glostylefmt{inline}},
+  description={this style is designed for inline glossaries. The
+  \field{symbol}, \idx{locationlist} and child \field{name} are omitted 
+  by default, but associated style commands may be redefined to
+  change this},
+  category={glossarystyle},
+  note={\styfmt{glossary-inline} v3.03+},
+  parent={glossarystyle}
+}
+
+ at glostylecommand{glsinlinedopostchild,
+  name={\csfmt{gls\-in\-line\-do\-post\-child}},
+  description={group headings aren't supported by default, but if
+  they are required, this command should be added to start of the definition
+  of \cs{glsgroupheading} in case a heading follows a child entry},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlineseparator,
+  name={\csfmt{gls\-in\-line\-separator}},
+  description={separator between entries},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinesubseparator,
+  name={\csfmt{gls\-in\-line\-sub\-separator}},
+  description={separator between sub-entries},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlineparentchildseparator,
+  name={\csfmt{gls\-in\-line\-parent\-child\-separator}},
+  description={separator between parent and child entries},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinepostchild,
+  name={\csfmt{gls\-in\-line\-post\-child}},
+  description={hook between child and next entry},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glspostinline,
+  name={\csfmt{gls\-post-in\-line}},
+  description={glossary terminator},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinenameformat,
+  name={\csfmt{gls\-in\-line\-name\-format}},
+  user1={\margm{label}\margm{name}},
+  description={format's the entry's name including target, if
+  supported},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinedescformat,
+  name={\csfmt{gls\-in\-line\-desc\-format}},
+  user1={\margm{description}\margm{symbol}\margm{location list}},
+  description={format's the entry's description, symbol and location
+  list. This ignores the symbol and location by default},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glossarystyle{glostyle.indexgroup,
   name={\glostylefmt{indexgroup}},
+  description={},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.mcolindexgroup,
+ at glossarystyle{glostyle.mcolindexgroup,
   name={\glostylefmt{mcolindexgroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-mcols}},
   parent={glossarystyle}
 }
 
- at index{glostyle.indexhypergroup,
+ at glossarystyle{glostyle.indexhypergroup,
   name={\glostylefmt{indexhypergroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.tree,
+ at glossarystyle{glostyle.tree,
   name={\glostylefmt{tree}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.treegroup,
+ at glossarystyle{glostyle.treegroup,
   name={\glostylefmt{treegroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.treenoname,
+ at glossarystyle{glostyle.treenoname,
   name={\glostylefmt{treenoname}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.treenonamegroup,
+ at glossarystyle{glostyle.treenonamegroup,
   name={\glostylefmt{treenonamegroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.alttree,
+ at glossarystyle{glostyle.alttree,
   name={\glostylefmt{alttree}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.alttreegroup,
+ at glossarystyle{glostyle.alttreegroup,
   name={\glostylefmt{alttreegroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.mcolalttree,
+ at glossarystyle{glostyle.mcolalttree,
   name={\glostylefmt{mcolalttree}},
   category={glossarystyle},
+  note={\styfmt{glossary-mcols}},
   parent={glossarystyle}
 }
 
- at index{glostyle.mcolalttreegroup,
+ at glossarystyle{glostyle.mcolalttreegroup,
   name={\glostylefmt{mcolalttreegroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-mcols}},
   parent={glossarystyle}
 }
 
- at index{glostyle.list,
+ at glossarystyle{glostyle.topic,
+  name={\glostylefmt{topic}},
+  category={glossarystyle},
+  note={\styfmt{glossary-topic} v1.40+},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.topicmcols,
+  name={\glostylefmt{topicmcols}},
+  category={glossarystyle},
+  note={\styfmt{glossary-topic} v1.40+},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.list,
   name={\glostylefmt{list}},
   category={glossarystyle},
+  note={\styfmt{glossary-list}},
   parent={glossarystyle}
 }
 
- at index{glostyle.altlist,
+ at glossarystyle{glostyle.altlist,
   name={\glostylefmt{altlist}},
   category={glossarystyle},
+  note={\styfmt{glossary-list}},
   parent={glossarystyle}
 }
 
- at index{glostyle.altlistgroup,
+ at glossarystyle{glostyle.altlistgroup,
   name={\glostylefmt{altlistgroup}},
   category={glossarystyle},
+  note={\styfmt{glossary-list}},
   parent={glossarystyle}
 }
 
- at index{glostyle.index,
+ at glossarystyle{glostyle.index,
   name={\glostylefmt{index}},
   category={glossarystyle},
+  note={\styfmt{glossary-tree}},
   parent={glossarystyle}
 }
 
- at index{glostyle.bookindex,
+ at glossarystyle{glostyle.bookindex,
   name={\glostylefmt{bookindex}},
   category={glossarystyle},
+  note={\styfmt{glossary-bookindex}},
   parent={glossarystyle}
 }
 
- at index{glostyle.long3col,
+ at glossarystyle{glostyle.long,
+  name={\glostylefmt{long}},
+  category={glossarystyle},
+  note={\styfmt{glossary-long}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.super,
+  name={\glostylefmt{super}},
+  category={glossarystyle},
+  note={\styfmt{glossary-long}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.long3col,
   name={\glostylefmt{long3col}},
   category={glossarystyle},
+  note={\styfmt{glossary-long}},
   parent={glossarystyle}
 }
 
- at index{glostyle.long3col-booktabs,
+ at glossarystyle{glostyle.long3col-booktabs,
   name={\glostylefmt{long3col\dhyphen booktabs}},
   category={glossarystyle},
+  note={\styfmt{glossary-longbooktabs}},
   parent={glossarystyle}
 }
 
@@ -4323,193 +6837,223 @@
   alias = {categoryattribute}
 }
 
- at index{recordcount,
+ at categoryattribute{catattr.recordcount,
   name={\catattrfmt{record\-count}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{glossname,
+ at categoryattribute{catattr.glossname,
   name={\catattrfmt{gloss\-name}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{glossnamefont,
+ at categoryattribute{catattr.glossnamefont,
   name={\catattrfmt{gloss\-name\-font}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{glossdesc,
+ at categoryattribute{catattr.glossdesc,
   name={\catattrfmt{gloss\-desc}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{glossdescfont,
+ at categoryattribute{catattr.glossdescfont,
   name={\catattrfmt{gloss\-desc\-font}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{textformat,
+ at categoryattribute{catattr.textformat,
   name={\catattrfmt{text\-format}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{headuc,
+ at categoryattribute{catattr.headuc,
   name={\catattrfmt{headuc}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{aposplural,
+ at categoryattribute{catattr.aposplural,
   name={\catattrfmt{apos\-plural}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{accessaposplural,
+ at categoryattribute{catattr.accessaposplural,
   name={\catattrfmt{access\-apos\-plural}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{noshortplural,
+ at categoryattribute{catattr.noshortplural,
   name={\catattrfmt{no\-short\-plural}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{accessnoshortplural,
+ at categoryattribute{catattr.accessnoshortplural,
   name={\catattrfmt{access\-no\-short\-plural}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{nameshortaccess,
+ at categoryattribute{catattr.nameshortaccess,
   name={\catattrfmt{name\-short\-access}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{firstshortaccess,
+ at categoryattribute{catattr.firstshortaccess,
   name={\catattrfmt{first\-short\-access}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{textshortaccess,
+ at categoryattribute{catattr.textshortaccess,
   name={\catattrfmt{text\-short\-access}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{markwords,
+ at categoryattribute{catattr.markwords,
   name={\catattrfmt{mark\-words}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{markshortwords,
+ at categoryattribute{catattr.markshortwords,
   name={\catattrfmt{mark\-short\-words}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{targeturl,
+ at categoryattribute{catattr.targeturl,
   name={\catattrfmt{target\-url}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{targetname,
+ at categoryattribute{catattr.targetname,
   name={\catattrfmt{target\-name}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{externallocation,
+ at categoryattribute{catattr.externallocation,
   name={\catattrfmt{external\-location}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{discardperiod,
+ at categoryattribute{catattr.discardperiod,
   name={\catattrfmt{discard\-period}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{pluraldiscardperiod,
+ at categoryattribute{catattr.pluraldiscardperiod,
   name={\catattrfmt{plural\-discard\-period}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{retainfirstuseperiod,
+ at categoryattribute{catattr.retainfirstuseperiod,
   name={\catattrfmt{retain\-first\-use\-period}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{insertdots,
+ at categoryattribute{catattr.insertdots,
   name={\catattrfmt{insert\-dots}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{accessinsertdots,
+ at categoryattribute{catattr.accessinsertdots,
   name={\catattrfmt{access\-insert\-dots}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{tagging,
+ at categoryattribute{catattr.tagging,
   name={\catattrfmt{tagging}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{nohyperfirst,
+ at categoryattribute{catattr.nohyperfirst,
   name={\catattrfmt{no\-hyper\-first}},
   category={categoryattribute},
   parent={categoryattribute}
 }
 
- at index{ctr.equation,
+ at categoryattribute{catattr.nohyper,
+  name={\catattrfmt{no\-hyper}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.entrycount,
+  name={\catattrfmt{entry\-count}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.hyperoutside,
+  name={\catattrfmt{hyper\-outside}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.regular,
+  name={\catattrfmt{regular}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.wrgloss,
+  name={\catattrfmt{wrgloss}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at counter{ctr.equation,
   name={\counterfmt{equation}},
   category={counter}
 }
 
- at index{ctr.page,
+ at counter{ctr.page,
   name={\counterfmt{page}},
   category={counter}
 }
 
- at index{ctr.section,
+ at counter{ctr.section,
   name={\counterfmt{section}},
   category={counter}
 }
 
- at index{ctr.chapter,
+ at counter{ctr.chapter,
   name={\counterfmt{chapter}},
   category={counter}
 }
 
- at index{ctr.wrglossary,
+ at counter{ctr.wrglossary,
   name={\counterfmt{wrglossary}},
   category={counter}
 }
 
- at index{ctr.glossaryentry,
+ at counter{ctr.glossaryentry,
   name={\counterfmt{glossaryentry}},
   category={counter}
 }
 
- at index{ctr.glossarysubentry,
+ at counter{ctr.glossarysubentry,
   name={\counterfmt{glossarysubentry}},
   category={counter}
 }
@@ -4520,19 +7064,19 @@
   plural={label prefixes}
 }
 
- at index{idprefix.dual,
+ at labelprefix{idprefix.dual,
   name={\idprefixfmt{dual}},
   category={idprefix},
   parent={labelprefixes}
 }
 
- at index{idprefix.tertiary,
+ at labelprefix{idprefix.tertiary,
   name={\idprefixfmt{tertiary}},
   category={idprefix},
   parent={labelprefixes}
 }
 
- at index{idprefix.extn,
+ at labelprefix{idprefix.extn,
   name={\idprefixfmt{ext\meta{n}}},
   category={idprefix},
   parent={labelprefixes}
@@ -4543,7 +7087,7 @@
   text={package option}
 }
 
- at dualindexentry{styopt.record,
+ at packageoption{styopt.record,
   name={\styoptfmt{record}},
   user1={\meta{value}},
   description={unless the value is \styoptfmt{off}, this option sets
@@ -4559,7 +7103,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.accsupp,
+ at packageoption{styopt.accsupp,
   name={\styoptfmt{accsupp}},
   description={load the \sty{glossaries-accsupp} package to provide
    accessibility support},
@@ -4568,7 +7112,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.abbreviations,
+ at packageoption{styopt.abbreviations,
   name={\styoptfmt{abbreviations}},
   description={creates the \code{abbreviations} glossary},
   package={glossaries-extra},
@@ -4576,7 +7120,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.symbols,
+ at packageoption{styopt.symbols,
   name={\styoptfmt{symbols}},
   package={glossaries,glossaries-extra},
   description={defines the \code{symbols} glossary; with 
@@ -4586,7 +7130,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.numbers,
+ at packageoption{styopt.numbers,
   name={\styoptfmt{numbers}},
   package={glossaries,glossaries-extra},
   description={defines the \code{numbers} glossary; with 
@@ -4596,7 +7140,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.undefaction,
+ at packageoption{styopt.undefaction,
   name={\styoptfmt{undefaction}},
   user1={\meta{value}},
   description={indicates what to do if an undefined entry is
@@ -4608,7 +7152,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.indexcrossrefs,
+ at packageoption{styopt.indexcrossrefs,
   name={\styoptfmt{indexcrossrefs}},
   user1={\meta{boolean}},
   package={glossaries-extra},
@@ -4620,7 +7164,7 @@
   note={not relevant with \bibgls}
 }
 
- at dualindexentry{styopt.autoseeindex,
+ at packageoption{styopt.autoseeindex,
   name={\styoptfmt{autoseeindex}},
   user1={\meta{boolean}},
   package={glossaries-extra},
@@ -4631,7 +7175,7 @@
    automatically indexes the cross-referenced term}
 }
 
- at dualindexentry{styopt.nopostdot,
+ at packageoption{styopt.nopostdot,
   name={\styoptfmt{nopostdot}},
   user1={\meta{boolean}},
   package={glossaries,glossaries-extra},
@@ -4644,7 +7188,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.postdot,
+ at packageoption{styopt.postdot,
   name={\styoptfmt{postdot}},
   package={glossaries-extra},
   description={equivalent to \styopt[dot]{postpunc}},
@@ -4652,7 +7196,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.postpunc,
+ at packageoption{styopt.postpunc,
   name={\styoptfmt{postpunc}},
   user1={\meta{value}},
   package={glossaries-extra},
@@ -4666,7 +7210,7 @@
    adjusted), \meta{punctuation} (use \meta{punctuation})}
 }
 
- at dualindexentry{styopt.indexcounter,
+ at packageoption{styopt.indexcounter,
   name={\styoptfmt{index\-counter}},
   description={creates the \counter{wrglossary} counter, which is
   incremented every time an entry is indexed with that counter, and sets
@@ -4676,7 +7220,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.docdef,
+ at packageoption{styopt.docdef,
   name={\styoptfmt{docdef}},
   user1={\meta{value}},
   package={glossaries-extra},
@@ -4693,7 +7237,7 @@
   reference to the entry)}
 }
 
- at dualindexentry{styopt.nomissingglstext,
+ at packageoption{styopt.nomissingglstext,
   name={\styoptfmt{nomissingglstext}},
   user1={\meta{boolean}},
   package={glossaries-extra},
@@ -4705,7 +7249,7 @@
   if the associated external file doesn't exist}
 }
 
- at dualindexentry{styopt.stylemods,
+ at packageoption{styopt.stylemods,
   name={\styoptfmt{stylemods}},
   user1={\meta{value}},
   description={load the \sty{glossaries-extra-stylemods} package with the
@@ -4719,7 +7263,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.nowarn,
+ at packageoption{styopt.nowarn,
   name={\styoptfmt{nowarn}},
   package={glossaries},
   category={packageoption},
@@ -4727,7 +7271,7 @@
   description={suppresses all \styfmt{glossaries}-related warnings}
 }
 
- at dualindexentry{styopt.nolangwarn,
+ at packageoption{styopt.nolangwarn,
   name={\styoptfmt{nolangwarn}},
   package={glossaries},
   category={packageoption},
@@ -4735,7 +7279,7 @@
   description={suppresses warnings generated by missing language modules}
 }
 
- at dualindexentry{styopt.noredefwarn,
+ at packageoption{styopt.noredefwarn,
   name={\styoptfmt{noredefwarn}},
   package={glossaries},
   category={packageoption},
@@ -4744,7 +7288,7 @@
    provided by another class or package}
 }
 
- at dualindexentry{styopt.debug,
+ at packageoption{styopt.debug,
   name={\styoptfmt{debug}},
   user1={\meta{value}},
   package={glossaries,glossaries-extra},
@@ -4760,7 +7304,7 @@
    \styoptfmt{showwrgloss})}
 }
 
- at dualindexentry{styopt.seenoindex,
+ at packageoption{styopt.seenoindex,
   name={\styoptfmt{seenoindex}},
   user1={\meta{value}},
   package={glossaries},
@@ -4776,7 +7320,7 @@
   does nothing if used before \cs{cs.makeglossaries})}
 }
 
- at dualindexentry{styopt.nomain,
+ at packageoption{styopt.nomain,
   name={\styoptfmt{nomain}},
   package={glossaries},
   category={packageoption},
@@ -4785,7 +7329,7 @@
   glossary. If used an alternative glossary must be created}
 }
 
- at dualindexentry{styopt.sanitizesort,
+ at packageoption{styopt.sanitizesort,
   name={\styoptfmt{sanitizesort}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4793,10 +7337,10 @@
   parent={packageoptions},
   note={not relevant with \bibgls},
   description={determines whether or not
-   to sanitize the \field{sort} key}
+   to sanitize the \field{sort} key (not relevant with \bibgls)}
 }
 
- at dualindexentry{styopt.savewrites,
+ at packageoption{styopt.savewrites,
   name={\styoptfmt{savewrites}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4809,7 +7353,7 @@
   glossary indexing file}
 }
 
- at dualindexentry{styopt.translate,
+ at packageoption{styopt.translate,
   name={\styoptfmt{translate}},
   user1={\meta{value}},
   package={glossaries},
@@ -4825,7 +7369,7 @@
    \styfmt{translator} package, just load \styfmt{glossaries-babel})}
 }
 
- at dualindexentry{styopt.notranslate,
+ at packageoption{styopt.notranslate,
   name={\styoptfmt{notranslate}},
   package={glossaries},
   category={packageoption},
@@ -4833,7 +7377,7 @@
   description={equivalent to \styopt[false]{translate}}
 }
 
- at dualindexentry{styopt.nohypertypes,
+ at packageoption{styopt.nohypertypes,
   name={\styoptfmt{nohypertypes}},
   user1={\meta{list}},
   package={glossaries},
@@ -4842,7 +7386,7 @@
   description={suppress hyperlinks for the listed glossary types}
 }
 
- at dualindexentry{styopt.hyperfirst,
+ at packageoption{styopt.hyperfirst,
   name={\styoptfmt{hyperfirst}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4853,7 +7397,7 @@
   \catattr{nohyperfirst} category attribute can selectively apply this)}
 }
 
- at dualindexentry{styopt.indexonlyfirst,
+ at packageoption{styopt.indexonlyfirst,
   name={\styoptfmt{indexonlyfirst}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4862,7 +7406,7 @@
   description={if true, only performs indexing on first use}
 }
 
- at dualindexentry{styopt.savenumberlist,
+ at packageoption{styopt.savenumberlist,
   name={\styoptfmt{savenumberlist}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4872,7 +7416,7 @@
   \bibgls\ use the \csopt{save-locations} resource option instead)}
 }
 
- at dualindexentry{styopt.toc,
+ at packageoption{styopt.toc,
   name={\styoptfmt{toc}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4879,10 +7423,10 @@
   category={packageoption},
   parent={packageoptions},
   description={if true (default for \styfmt{glossaries-extra}), 
-  automatically add each glossary to the table of contents}
+  automatically add each glossary to the \glsxtrlong{toc}}
 }
 
- at dualindexentry{styopt.numberline,
+ at packageoption{styopt.numberline,
   name={\styoptfmt{numberline}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4889,10 +7433,10 @@
   category={packageoption},
   parent={packageoptions},
   description={when used with \styopt[true]{toc}, this will add 
-  \code{\csfmt{numberline}\marg{}} to the start of the TOC entry}
+  \code{\csfmt{numberline}\marg{}} to the start of the \idx{toc} entry}
 }
 
- at dualindexentry{styopt.section,
+ at packageoption{styopt.section,
   name={\styoptfmt{section}},
   user1={\meta{value}},
   package={glossaries},
@@ -4908,7 +7452,7 @@
   unstarred version is determined by \styopt{numberedsection}}
 }
 
- at dualindexentry{styopt.ucmark,
+ at packageoption{styopt.ucmark,
   name={\styoptfmt{ucmark}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4915,10 +7459,10 @@
   category={packageoption},
   parent={packageoptions},
   description={if true, converts the glossary mark (used in page
-  headings) to upper case with \cs{MakeTextUppercase}}
+  headings) to \idx{uppercase} with \cs{MakeTextUppercase}}
 }
 
- at dualindexentry{styopt.numberedsection,
+ at packageoption{styopt.numberedsection,
   name={\styoptfmt{numberedsection}},
   user1={\meta{value}},
   package={glossaries},
@@ -4933,7 +7477,7 @@
   given \styoptfmt{nolabel} is assumed}
 }
 
- at dualindexentry{styopt.entrycounter,
+ at packageoption{styopt.entrycounter,
   name={\styoptfmt{entrycounter}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4945,7 +7489,7 @@
   \cs{glsxtrpageref})}
 }
 
- at dualindexentry{styopt.counterwithin,
+ at packageoption{styopt.counterwithin,
   name={\styoptfmt{counterwithin}},
   user1={\meta{counter name}},
   package={glossaries},
@@ -4955,7 +7499,7 @@
   indicates the master counter for \counter{glossaryentry}}
 }
 
- at dualindexentry{styopt.subentrycounter,
+ at packageoption{styopt.subentrycounter,
   name={\styoptfmt{subentrycounter}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -4968,7 +7512,7 @@
   independent of \styopt{entrycounter} and \counter{glossaryentry}}
 }
 
- at dualindexentry{styopt.style,
+ at packageoption{styopt.style,
   name={\styoptfmt{style}},
   user1={\meta{name}},
   package={glossaries},
@@ -4977,7 +7521,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.nolong,
+ at packageoption{styopt.nolong,
   name={\styoptfmt{nolong}},
   package={glossaries},
   description={prevents the \sty{glossary-long} package (which
@@ -4987,7 +7531,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.nosuper,
+ at packageoption{styopt.nosuper,
   name={\styoptfmt{nosuper}},
   package={glossaries},
   description={prevents the \sty{glossary-super} package (which
@@ -4997,7 +7541,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.nolist,
+ at packageoption{styopt.nolist,
   name={\styoptfmt{nolist}},
   package={glossaries},
   description={prevents the \sty{glossary-list} package (which
@@ -5007,7 +7551,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.notree,
+ at packageoption{styopt.notree,
   name={\styoptfmt{notree}},
   package={glossaries},
   category={packageoption},
@@ -5017,7 +7561,7 @@
    automatically loaded}
 }
 
- at dualindexentry{styopt.nostyles,
+ at packageoption{styopt.nostyles,
   name={\styoptfmt{nostyles}},
   package={glossaries},
   description={prevents all the default styles from being loaded. If
@@ -5028,7 +7572,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.esclocations,
+ at packageoption{styopt.esclocations,
   name={\styoptfmt{esclocations}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -5040,7 +7584,7 @@
   locations}
 }
 
- at dualindexentry{styopt.nonumberlist,
+ at packageoption{styopt.nonumberlist,
   name={\styoptfmt{nonumberlist}},
   package={glossaries},
   description={suppresses the location lists from being
@@ -5053,7 +7597,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.seeautonumberlist,
+ at packageoption{styopt.seeautonumberlist,
   name={\styoptfmt{seeautonumberlist}},
   package={glossaries},
   category={packageoption},
@@ -5064,7 +7608,7 @@
   for the associated entry}
 }
 
- at dualindexentry{styopt.counter,
+ at packageoption{styopt.counter,
   name={\styoptfmt{counter}},
   user1={\meta{value}},
   description={sets the default location counter to \meta{value}
@@ -5076,7 +7620,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.nogroupskip,
+ at packageoption{styopt.nogroupskip,
   name={\styoptfmt{nogroupskip}},
   user1={\meta{boolean}},
   description={if true, suppresses the visual separation between
@@ -5086,7 +7630,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.sort,
+ at packageoption{styopt.sort,
   name={\styoptfmt{sort}},
   user1={\meta{value}},
   note={not relevant with \bibgls, use the \csopt{sort}
@@ -5104,7 +7648,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.order,
+ at packageoption{styopt.order,
   name={\styoptfmt{order}},
   user1={\meta{value}},
   note={not relevant with \bibgls, use the \csopt{break-at}
@@ -5115,7 +7659,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.makeindex,
+ at packageoption{styopt.makeindex,
   name={\styoptfmt{makeindex}},
   note={not relevant with \bibgls},
   description={write the indexing
@@ -5125,7 +7669,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.xindy,
+ at packageoption{styopt.xindy,
   name={\styoptfmt{xindy}},
   user1={\meta{settings}},
   note={not relevant with \bibgls},
@@ -5138,7 +7682,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.xindygloss,
+ at packageoption{styopt.xindygloss,
   name={\styoptfmt{xindygloss}},
   package={glossaries},
   category={packageoption},
@@ -5147,7 +7691,7 @@
   description={equivalent to \styopt[\empty]{xindy}}
 }
 
- at dualindexentry{styopt.xindynoglsnumbers,
+ at packageoption{styopt.xindynoglsnumbers,
   name={\styoptfmt{xindynoglsnumbers}},
   package={glossaries},
   category={packageoption},
@@ -5156,7 +7700,7 @@
   description={equivalent to \styopt[glsnumbers=false]{xindy}}
 }
 
- at dualindexentry{styopt.automake,
+ at packageoption{styopt.automake,
   name={\styoptfmt{automake}},
   user1={\meta{boolean}},
   description={if true, tries to use \TeX's shell escape to
@@ -5167,7 +7711,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.acronym,
+ at packageoption{styopt.acronym,
   name={\styoptfmt{acronym}},
   user1={\meta{boolean}},
   package={glossaries},
@@ -5176,7 +7720,7 @@
   description={if true, creates a new glossary with the label \code{acronym}}
 }
 
- at dualindexentry{styopt.acronyms,
+ at packageoption{styopt.acronyms,
   name={\styoptfmt{acronyms}},
   package={glossaries},
   category={packageoption},
@@ -5184,7 +7728,7 @@
   description={equivalent to \styopt[true]{acronym}}
 }
 
- at dualindexentry{styopt.acronymlists,
+ at packageoption{styopt.acronymlists,
   name={\styoptfmt{acronymlists}},
   user1={\meta{list}},
   package={glossaries},
@@ -5194,7 +7738,7 @@
   (don't use with \sty{glossaries-extra})}
 }
 
- at dualindexentry{styopt.shortcuts,
+ at packageoption{styopt.shortcuts,
   name={\styoptfmt{shortcuts}},
   package={glossaries,glossaries-extra},
   user1={\meta{value}},
@@ -5215,7 +7759,7 @@
   parent={packageoptions}
 }
 
- at dualindexentry{styopt.index,
+ at packageoption{styopt.index,
   name={\styoptfmt{index}},
   package={glossaries},
   description={defines the \code{index} glossary and \csref{newterm}},
@@ -5228,7 +7772,7 @@
   text={field}
 }
 
- at dualindexentry{field.alias,
+ at field{field.alias,
   name={\fieldfmt{alias}},
   description={The entry with this field set is a synonym of the 
     entry whose label is given by this field.},
@@ -5237,7 +7781,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.category,
+ at field{field.category,
   name={\fieldfmt{category}},
   description={The entry's category label.},
   note={\styfmt{glossaries-extra}},
@@ -5245,7 +7789,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.description,
+ at field{field.description,
   name={\fieldfmt{description}},
   description={The description displayed in the glossary.},
   note={\styfmt{glossaries}},
@@ -5253,7 +7797,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.descriptionplural,
+ at field{field.descriptionplural,
   name={\fieldfmt{descriptionplural}},
   description={The plural form of the description.},
   note={\styfmt{glossaries}},
@@ -5261,7 +7805,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.first,
+ at field{field.first,
   name={\fieldfmt{first}},
   description={The text to display on first use with \cs{gls}\margm{label}.},
   note={\styfmt{glossaries}},
@@ -5269,7 +7813,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.firstplural,
+ at field{field.firstplural,
   name={\fieldfmt{firstplural}},
   description={The text to display on first use with \cs{glspl}\margm{label}.},
   note={\styfmt{glossaries}},
@@ -5277,7 +7821,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.long,
+ at field{field.long,
   name={\fieldfmt{long}},
   description={The long form of an abbreviation. (Set internally
   by commands like \csref{newabbreviation}.)},
@@ -5286,7 +7830,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.longplural,
+ at field{field.longplural,
   name={\fieldfmt{longplural}},
   description={The plural long form of an abbreviation.},
   note={\styfmt{glossaries}},
@@ -5294,7 +7838,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.name,
+ at field{field.name,
   name={\fieldfmt{name}},
   description={The name displayed in the glossary.},
   note={\styfmt{glossaries}},
@@ -5302,15 +7846,16 @@
   parent={fields}
 }
 
- at dualindexentry{field.parent,
+ at field{field.parent,
   name={\fieldfmt{parent}},
-  description={The parent entry's label.},
+  description={The parent entry's label. See 
+   \sectionref{sec:logicaldivisions}.},
   note={\styfmt{glossaries}},
   category={basefield},
   parent={fields}
 }
 
- at dualindexentry{field.plural,
+ at field{field.plural,
   name={\fieldfmt{plural}},
   description={The text to display on subsequent use of
     \cs{glspl}\margm{label}.},
@@ -5319,7 +7864,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.see,
+ at field{field.see,
   name={\fieldfmt{see}},
   description={General purpose cross-reference
    (syntax: \code{see=\marg{\oargm{tag}\meta{xr-list}}}).},
@@ -5328,7 +7873,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.seealso,
+ at field{field.seealso,
   name={\fieldfmt{seealso}},
   description={Cross-reference related entries
      (syntax: \code{seealso=\margm{xr-list}}).},
@@ -5337,7 +7882,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.short,
+ at field{field.short,
   name={\fieldfmt{short}},
   description={The short form of an abbreviation. (Set internally
   by commands like \csref{newabbreviation}.)},
@@ -5346,7 +7891,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.shortplural,
+ at field{field.shortplural,
   name={\fieldfmt{shortplural}},
   description={The plural short form of an abbreviation.},
   note={\styfmt{glossaries}},
@@ -5354,7 +7899,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.symbol,
+ at field{field.symbol,
   name={\fieldfmt{symbol}},
   description={The associated symbol.},
   note={\styfmt{glossaries}},
@@ -5362,7 +7907,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.symbolplural,
+ at field{field.symbolplural,
   name={\fieldfmt{symbolplural}},
   description={The plural form of the associated symbol.},
   note={\styfmt{glossaries}},
@@ -5370,7 +7915,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.text,
+ at field{field.text,
   name={\fieldfmt{text}},
   description={The text to display on subsequent use of 
     \cs{gls}\margm{label}.},
@@ -5379,7 +7924,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.user1,
+ at field{field.user1,
   name={\fieldfmt{user1}},
   description={A general purpose user field.},
   note={\styfmt{glossaries}},
@@ -5387,7 +7932,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.user2,
+ at field{field.user2,
   name={\fieldfmt{user2}},
   description={A general purpose user field.},
   note={\styfmt{glossaries}},
@@ -5395,7 +7940,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.user3,
+ at field{field.user3,
   name={\fieldfmt{user3}},
   description={A general purpose user field.},
   note={\styfmt{glossaries}},
@@ -5403,7 +7948,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.user4,
+ at field{field.user4,
   name={\fieldfmt{user4}},
   description={A general purpose user field.},
   note={\styfmt{glossaries}},
@@ -5411,7 +7956,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.user5,
+ at field{field.user5,
   name={\fieldfmt{user5}},
   description={A general purpose user field.},
   note={\styfmt{glossaries}},
@@ -5419,7 +7964,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.user6,
+ at field{field.user6,
   name={\fieldfmt{user6}},
   description={A general purpose user field.},
   note={\styfmt{glossaries}},
@@ -5427,7 +7972,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.duallong,
+ at field{field.duallong,
   name={\fieldfmt{duallong}},
   description={The long form of a dual
     abbreviation mapped by \atentry{dualabbreviation}.},
@@ -5436,8 +7981,8 @@
   parent={fields}
 }
 
- at dualindexentry{field.duallongplural,
-  name={\fieldfmt{duallongplural}},
+ at field{field.duallongplural,
+  name={\fieldfmt{dual\-long\-plural}},
   description={The plural long form of a dual
     abbreviation mapped by \atentry{dualabbreviation}.},
   note={\appfmt{bib2gls}},
@@ -5445,7 +7990,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.dualshort,
+ at field{field.dualshort,
   name={\fieldfmt{dualshort}},
   description={The short form of a dual
     abbreviation mapped by \atentry{dualabbreviation}.},
@@ -5454,8 +7999,8 @@
   parent={fields}
 }
 
- at dualindexentry{field.dualshortplural,
-  name={\fieldfmt{dualshortplural}},
+ at field{field.dualshortplural,
+  name={\fieldfmt{dual\-short\-plural}},
   description={The plural short form of a dual abbreviation
     mapped by \atentry{dualabbreviation}.},
   note={\appfmt{bib2gls}},
@@ -5463,7 +8008,17 @@
   parent={fields}
 }
 
- at dualindexentry{field.prefix,
+ at field{field.adoptparents,
+  name={\fieldfmt{adopt\-parents}},
+  description={The list of adopted parents for entries spawned by
+    \atentry{progenitor}. (Field only available for use in 
+    \ext{bib} file within \atentry{progenitor}-like entries.)},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.prefix,
   name={\fieldfmt{prefix}},
   description={The prefix associated with the \field{text}
     field.},
@@ -5472,7 +8027,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.prefixfirst,
+ at field{field.prefixfirst,
   name={\fieldfmt{prefixfirst}},
   description={The prefix associated with the \field{first}
 field.},
@@ -5481,7 +8036,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.prefixfirstplural,
+ at field{field.prefixfirstplural,
   name={\fieldfmt{prefixfirstplural}},
   description={The prefix associated with the
     \field{firstplural} field.},
@@ -5490,7 +8045,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.prefixplural,
+ at field{field.prefixplural,
   name={\fieldfmt{prefixplural}},
   description={The prefix associated with the
     \field{plural} field.},
@@ -5499,7 +8054,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.access,
+ at field{field.access,
   name={\fieldfmt{access}},
   description={The replacement text for the \field{name} field.},
   note={\styfmt{glossaries-accsupp}},
@@ -5507,7 +8062,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.descriptionaccess,
+ at field{field.descriptionaccess,
   name={\fieldfmt{descriptionaccess}},
   description={The replacement text for the
     \field{description} field.},
@@ -5516,7 +8071,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.descriptionpluralaccess,
+ at field{field.descriptionpluralaccess,
   name={\fieldfmt{descriptionpluralaccess}},
   description={The replacement text for the
     \field{descriptionplural} field.},
@@ -5525,7 +8080,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.firstaccess,
+ at field{field.firstaccess,
   name={\fieldfmt{firstaccess}},
   description={The replacement text for the \field{first} field.},
   note={\styfmt{glossaries-accsupp}},
@@ -5533,7 +8088,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.firstpluralaccess,
+ at field{field.firstpluralaccess,
   name={\fieldfmt{firstpluralaccess}},
   description={The replacement text for the
    \field{firstplural} field.},
@@ -5542,7 +8097,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.longaccess,
+ at field{field.longaccess,
   name={\fieldfmt{longaccess}},
   description={The replacement text for the \field{long} field.},
   note={\styfmt{glossaries-accsupp}},
@@ -5550,7 +8105,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.longpluralaccess,
+ at field{field.longpluralaccess,
   name={\fieldfmt{longpluralaccess}},
   description={The replacement text for the
     \field{longplural} field.},
@@ -5559,7 +8114,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.pluralaccess,
+ at field{field.pluralaccess,
   name={\fieldfmt{pluralaccess}},
   description={The replacement text for the \field{plural} field.},
   note={\styfmt{glossaries-accsupp}},
@@ -5567,7 +8122,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.shortaccess,
+ at field{field.shortaccess,
   name={\fieldfmt{shortaccess}},
   description={The replacement text for the \field{short} field.},
   note={\styfmt{glossaries-accsupp}},
@@ -5575,7 +8130,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.shortpluralaccess,
+ at field{field.shortpluralaccess,
   name={\fieldfmt{shortpluralaccess}},
   description={The replacement text for the
    \field{shortplural} field.},
@@ -5584,7 +8139,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.symbolaccess,
+ at field{field.symbolaccess,
   name={\fieldfmt{symbolaccess}},
   description={The replacement text for the \field{symbol} field.},
   note={\styfmt{glossaries-accsupp}},
@@ -5592,7 +8147,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.symbolpluralaccess,
+ at field{field.symbolpluralaccess,
   name={\fieldfmt{symbolpluralaccess}},
   description={The replacement text for the
     \field{symbolplural} field.},
@@ -5601,7 +8156,7 @@
   parent={fields}
 }
 
- at dualindexentry{field.textaccess,
+ at field{field.textaccess,
   name={\fieldfmt{textaccess}},
   description={The replacement text for the
      \field{text} field.},
@@ -5615,7 +8170,7 @@
   text={internal fields}
 }
 
- at dualindexentry{field.childcount,
+ at field{field.childcount,
   name={\fieldfmt{childcount}},
   description={Stores the number of children this entry has
     had selected.},
@@ -5624,7 +8179,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.childlist,
+ at field{field.childlist,
   name={\fieldfmt{childlist}},
   description={A list of labels (in \sty{etoolbox}'s internal list
    format) of the children this entry has had selected.},
@@ -5633,7 +8188,16 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.primarylocations,
+ at field{field.originalentrytype,
+  name={\fieldfmt{original\-entry\-type}},
+  description={The original entry type before any aliasing was
+  applied or the actual entry type if no aliasing.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.primarylocations,
   name={\fieldfmt{primarylocations}},
   description={Stores the locations that use one of the designated
 primary formats, if enabled.},
@@ -5642,7 +8206,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.indexcounter,
+ at field{field.indexcounter,
   name={\fieldfmt{index\-counter}},
   description={Stores the location corresponding to the matching
 \counter{wrglossary} reference.},
@@ -5651,7 +8215,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.counter,
+ at field{field.counter,
   name={\fieldfmt{counter}},
   description={The default counter used for indexing (assigned by
    the \csopt{counter} option).},
@@ -5660,16 +8224,17 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.group,
+ at field{field.group,
   name={\fieldfmt{group}},
   description={The letter group determined by the comparator
-   (or assigned by the \csopt{group} option).},
+   (or assigned by the \csopt{group} option). See 
+   \sectionref{sec:logicaldivisions}.},
   note={internal field set by \appfmt{bib2gls}},
   category={internalfield},
   parent={internalfields}
 }
 
- at dualindexentry{field.location,
+ at field{field.location,
   name={\fieldfmt{location}},
   description={The typeset location list.},
   note={internal field set by \appfmt{bib2gls}},
@@ -5677,7 +8242,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.loclist,
+ at field{field.loclist,
   name={\fieldfmt{loclist}},
   description={The internal list of locations.},
   note={internal field set by \appfmt{bib2gls}},
@@ -5685,7 +8250,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.recordcount,
+ at field{field.recordcount,
   name={\fieldfmt{recordcount}},
   description={Used with record counting to store the
     total record count.},
@@ -5694,7 +8259,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.recordcount.counter,
+ at field{field.recordcount.counter,
   name={\fieldfmt{recordcount.\discretionary{}{}{}\meta{counter}}},
   description={Used with record counting to store the
    total number of records for a given counter.},
@@ -5703,7 +8268,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.recordcount.counter.location,
+ at field{field.recordcount.counter.location,
   name={\fieldfmt{recordcount.\discretionary{}{}{}\meta{counter}.\discretionary{}{}{}\meta{location}}},
   description={Used with record counting to store the
    total number of records for a given location.},
@@ -5712,7 +8277,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.secondarygroup,
+ at field{field.secondarygroup,
   name={\fieldfmt{secondarygroup}},
   description={The letter group determined by the
     comparator used with the \csopt{secondary} sort.},
@@ -5721,7 +8286,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.secondarysort,
+ at field{field.secondarysort,
   name={\fieldfmt{secondarysort}},
   description={The sort value determined by the
    comparator used with the \csopt{secondary} sort.},
@@ -5730,7 +8295,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.dual,
+ at field{field.dual,
   name={\fieldfmt{dual}},
   description={Created by \csopt{dual-field} if set with no value,
    this field is used to store the dual label.},
@@ -5739,7 +8304,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.sort,
+ at field{field.sort,
   name={\fieldfmt{sort}},
   description={The sort value obtained by the comparator.},
   note={internal field set by \appfmt{bib2gls}},
@@ -5747,16 +8312,17 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.type,
+ at field{field.type,
   name={\fieldfmt{type}},
   description={The glossary this entry belongs to (assigned by
-   the \csopt{type} option).},
+   the \csopt{type} option). See 
+   \sectionref{sec:logicaldivisions}.},
   note={internal field set by \appfmt{bib2gls}},
   category={internalfield},
   parent={internalfields}
 }
 
- at dualindexentry{field.fieldendpunc,
+ at field{field.fieldendpunc,
   name={\meta{field}\fieldfmt{endpunc}},
   description={Used with the \csopt{check-end-punctuation}
   option.},
@@ -5765,7 +8331,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.bibtextype,
+ at field{field.bibtextype,
   name={\fieldfmt{bib\-tex\-type}},
   description={Used by \bibgls\ as a substitution for \BibTeX's
    \fieldfmt{type} field when parsing \atentry{bibtexentry}. Needs
@@ -5775,7 +8341,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.bibtexcontributor,
+ at field{field.bibtexcontributor,
   name={\fieldfmt{bib\-tex\-con\-trib\-u\-tor}},
   description={An internal list field provided when a
   \atentry{contributor} entry is automatically
@@ -5785,7 +8351,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.bibtexentry,
+ at field{field.bibtexentry,
   name={\fieldfmt{bib\-tex\-entry}},
   description={An internal list field created by \atentry{bibtexentry}.},
   note={internal field set by \bibgls},
@@ -5793,7 +8359,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.bibtexentry at entrytype,
+ at field{field.bibtexentry at entrytype,
   name={\fieldfmt{bib\-tex\-entry\-@\meta{entry-type}}},
   description={An internal list field created by \atentry{bibtexentry}.},
   note={internal field set by \bibgls},
@@ -5801,7 +8367,25 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.currcount,
+ at field{field.progeny,
+  name={\fieldfmt{progeny}},
+  description={A comma-separated list of labels identifying
+   the entries spawned by \atentry{progenitor}.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.progenitor,
+  name={\fieldfmt{progenitor}},
+  description={The label identifying the \atentry{progenitor} 
+   that spawned this entry.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.currcount,
   name={\fieldfmt{currcount}},
   description={Used with entry counting to store the current total.},
   note={internal field set by \styfmt{glossaries}},
@@ -5809,7 +8393,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.currcountunit,
+ at field{field.currcountunit,
   name={\fieldfmt{currcount@}\meta{value}},
   description={Used with unit entry counting (\styfmt{glossaries-extra}).},
   note={internal field set by \styfmt{glossaries-extra}},
@@ -5817,7 +8401,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.desc,
+ at field{field.desc,
   name={\fieldfmt{desc}},
   description={Corresponds to \field{description} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5825,7 +8409,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.descplural,
+ at field{field.descplural,
   name={\fieldfmt{descplural}},
   description={Corresponds to \field{descriptionplural} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5833,7 +8417,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.firstpl,
+ at field{field.firstpl,
   name={\fieldfmt{firstpl}},
   description={Corresponds to \field{firstplural} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5841,7 +8425,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.flag,
+ at field{field.flag,
   name={\fieldfmt{flag}},
   description={Boolean that determines if an entry has been used.},
   note={internal field set by \styfmt{glossaries}},
@@ -5849,7 +8433,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.index,
+ at field{field.index,
   name={\fieldfmt{index}},
   description={The main part of the indexing code
     (\appfmt{makeindex} or \appfmt{xindy}).},
@@ -5858,7 +8442,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.level,
+ at field{field.level,
   name={\fieldfmt{level}},
   description={Hierarchical level.},
   note={internal field set by \styfmt{glossaries}},
@@ -5866,7 +8450,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.longpl,
+ at field{field.longpl,
   name={\fieldfmt{longpl}},
   description={Corresponds to \field{longplural} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5874,7 +8458,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.nonumberlist,
+ at field{field.nonumberlist,
   name={\fieldfmt{nonumberlist}},
   description={Used to suppress the location list for a specific entry.},
   note={internal field set by \styfmt{glossaries}},
@@ -5882,7 +8466,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.prevcount,
+ at field{field.prevcount,
   name={\fieldfmt{prevcount}},
   description={Used with entry counting to store the total 
    from the previous run.},
@@ -5891,7 +8475,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.prevcountunit,
+ at field{field.prevcountunit,
   name={\fieldfmt{prevcount@}\meta{value}},
   description={Used with unit entry counting
     (\styfmt{glossaries-extra}).},
@@ -5900,7 +8484,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.prevunitmax,
+ at field{field.prevunitmax,
   name={\fieldfmt{prevunitmax}},
   description={Used with unit entry counting
     (\styfmt{glossaries-extra}).},
@@ -5909,7 +8493,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.prevunittotal,
+ at field{field.prevunittotal,
   name={\fieldfmt{prevunittotal}},
   description={Used with unit entry counting
    (\styfmt{glossaries-extra}).},
@@ -5918,7 +8502,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.shortpl,
+ at field{field.shortpl,
   name={\fieldfmt{shortpl}},
   description={Corresponds to \field{shortplural} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5926,7 +8510,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.sortvalue,
+ at field{field.sortvalue,
   name={\fieldfmt{sortvalue}},
   description={Original \field{sort} value 
    (before sanitizing and escaping special characters).},
@@ -5935,7 +8519,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.unitlist,
+ at field{field.unitlist,
   name={\fieldfmt{unitlist}},
   description={Used with unit entry counting
    (\styfmt{glossaries-extra}).},
@@ -5944,7 +8528,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.useri,
+ at field{field.useri,
   name={\fieldfmt{useri}},
   description={Corresponds to \field{user1} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5952,7 +8536,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.userii,
+ at field{field.userii,
   name={\fieldfmt{userii}},
   description={Corresponds to \field{user2} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5960,7 +8544,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.useriii,
+ at field{field.useriii,
   name={\fieldfmt{useriii}},
   description={Corresponds to \field{user3} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5968,7 +8552,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.useriv,
+ at field{field.useriv,
   name={\fieldfmt{useriv}},
   description={Corresponds to \field{user4} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5976,7 +8560,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.userv,
+ at field{field.userv,
   name={\fieldfmt{userv}},
   description={Corresponds to \field{user5} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5984,7 +8568,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.uservi,
+ at field{field.uservi,
   name={\fieldfmt{uservi}},
   description={Corresponds to \field{user6} key.},
   note={internal field set by \styfmt{glossaries}},
@@ -5992,7 +8576,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.bib2gls at sort,
+ at field{field.bib2gls at sort,
   name={\fieldfmt{bib2gls at sort}},
   description={Used by \bibgls\ to store the actual sort value.},
   note={internal field set by \bibgls},
@@ -6000,7 +8584,7 @@
   parent={internalfields}
 }
 
- at dualindexentry{field.bib2gls at sortfallback,
+ at field{field.bib2gls at sortfallback,
   name={\fieldfmt{bib2gls at sortfallback}},
   description={Used by \bibgls\ to store the sort fallback value.},
   note={internal field set by \bibgls},
@@ -6013,144 +8597,204 @@
   text={entry type}
 }
 
- at dualindexentry{entry.string,
+ at entrytype{entry.string,
   name={\atentryfmt{string}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.preamble,
+ at entrytype{entry.preamble,
   name={\atentryfmt{preamble}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.entry,
+ at entrytype{entry.comment,
+  name={\atentryfmt{comment}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.entry,
   name={\atentryfmt{entry}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.symbol,
+ at entrytype{entry.symbol,
   name={\atentryfmt{symbol}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.number,
+ at entrytype{entry.number,
   name={\atentryfmt{number}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.index,
+ at entrytype{entry.index,
   name={\atentryfmt{index}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.indexplural,
+ at entrytype{entry.indexplural,
   name={\atentryfmt{indexplural}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.abbreviation,
+ at entrytype{entry.abbreviation,
   name={\atentryfmt{abbreviation}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.acronym,
+ at entrytype{entry.acronym,
   name={\atentryfmt{acronym}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualentry,
+ at entrytype{entry.dualentry,
   name={\atentryfmt{dual\-entry}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualindexentry,
+ at entrytype{entry.dualindexentry,
   name={\atentryfmt{dual\-index\-entry}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualindexabbreviation,
+ at entrytype{entry.dualindexabbreviation,
   name={\atentryfmt{dual\-index\-abbre\-via\-tion}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualindexsymbol,
+ at entrytype{entry.dualindexsymbol,
   name={\atentryfmt{dual\-index\-symbol}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualindexnumber,
+ at entrytype{entry.dualindexnumber,
   name={\atentryfmt{dual\-index\-number}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualabbreviationentry,
+ at entrytype{entry.dualabbreviationentry,
   name={\atentryfmt{dual\-abbre\-via\-tion\-entry}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualentryabbreviation,
+ at entrytype{entry.dualentryabbreviation,
   name={\atentryfmt{dual\-entry\-abbre\-via\-tion}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualsymbol,
+ at entrytype{entry.dualsymbol,
   name={\atentryfmt{dual\-symbol}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualnumber,
+ at entrytype{entry.dualnumber,
   name={\atentryfmt{dual\-number}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualabbreviation,
+ at entrytype{entry.dualabbreviation,
   name={\atentryfmt{dual\-abbre\-via\-tion}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.dualacronym,
+ at entrytype{entry.dualacronym,
   name={\atentryfmt{dual\-acronym}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.tertiaryindexabbreviationentry,
+ at entrytype{entry.tertiaryindexabbreviationentry,
   name={\atentryfmt{tert\-iary\-index\-abbre\-via\-tion\-entry}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.bibtexentry,
+ at entrytype{entry.bibtexentry,
   name={\atentryfmt{bib\-tex\-entry}},
   category={entrytype},
   parent={entrytypes}
 }
 
- at dualindexentry{entry.contributor,
+ at entrytype{entry.contributor,
   name={\atentryfmt{contributor}},
   category={entrytype},
   parent={entrytypes}
 }
 
+ at entrytype{entry.progenitor,
+  name={\atentryfmt{progenitor}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnindex,
+  name={\atentryfmt{spawn\-index}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnindexplural,
+  name={\atentryfmt{spawn\-index\-plural}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnentry,
+  name={\atentryfmt{spawn\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnsymbol,
+  name={\atentryfmt{spawn\-symbol}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnnumber,
+  name={\atentryfmt{spawn\-number}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnabbreviation,
+  name={\atentryfmt{spawn\-abbreviation}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnacronym,
+  name={\atentryfmt{spawn\-acronym}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawndualindexentry,
+  name={\atentryfmt{spawn\-dual\-index\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
 @index{switches,
   name={switches},
   text={switch},
@@ -6163,7 +8807,7 @@
   text={command line option}
 }
 
- at dualindexentry{switch.help,
+ at switch{switch.help,
   name={\longargfmt{help}},
   symbol={\shortargfmt{h}},
   user1={},
@@ -6171,7 +8815,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.version,
+ at switch{switch.version,
   name={\longargfmt{version}},
   symbol={\shortargfmt{v}},
   user1={},
@@ -6179,7 +8823,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.debug,
+ at switch{switch.debug,
   name={\longargfmt{debug}},
   user1={\oargm{n}},
   category={switch},
@@ -6186,7 +8830,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-debug,
+ at switch{switch.no-debug,
   name={\longargfmt{no\dhyphen debug}},
   symbol={\longargfmt{nodebug}},
   user1={},
@@ -6194,7 +8838,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.verbose,
+ at switch{switch.verbose,
   name={\longargfmt{verbose}},
   user1={},
   category={switch},
@@ -6201,7 +8845,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-verbose,
+ at switch{switch.no-verbose,
   name={\longargfmt{no\dhyphen verbose}},
   symbol={\longargfmt{noverbose}},
   user1={},
@@ -6209,7 +8853,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.silent,
+ at switch{switch.silent,
   name={\longargfmt{silent}},
   user1={},
   category={switch},
@@ -6216,7 +8860,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.locale,
+ at switch{switch.locale,
   name={\longargfmt{locale}},
   symbol={\shortargfmt{l}},
   user1={\meta{lang}},
@@ -6224,7 +8868,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.log-file,
+ at switch{switch.log-file,
   name={\longargfmt{log\dhyphen file}},
   symbol={\shortargfmt{t}},
   user1={\meta{filename}},
@@ -6232,7 +8876,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.dir,
+ at switch{switch.dir,
   name={\longargfmt{dir}},
   symbol={\shortargfmt{d}},
   user1={\meta{dirname}},
@@ -6240,7 +8884,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.interpret,
+ at switch{switch.interpret,
   name={\longargfmt{interpret}},
   user1={},
   category={switch},
@@ -6247,7 +8891,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-interpret,
+ at switch{switch.no-interpret,
   name={\longargfmt{no\dhyphen interpret}},
   user1={},
   category={switch},
@@ -6254,7 +8898,35 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.break-space,
+ at switch{switch.warn-non-bib-fields,
+  name={\longargfmt{warn\dhyphen non\dhyphen bib\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-warn-non-bib-fields,
+  name={\longargfmt{no\dhyphen warn\dhyphen non\dhyphen bib\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.warn-unknown-entry-types,
+  name={\longargfmt{warn\dhyphen unknown\dhyphen entry\dhyphen types}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-warn-unknown-entry-types,
+  name={\longargfmt{no\dhyphen warn\dhyphen unknown\dhyphen entry\dhyphen types}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.break-space,
   name={\longargfmt{break\dhyphen space}},
   user1={},
   category={switch},
@@ -6261,7 +8933,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-break-space,
+ at switch{switch.no-break-space,
   name={\longargfmt{no\dhyphen break\dhyphen space}},
   user1={},
   category={switch},
@@ -6268,7 +8940,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.cite-as-record,
+ at switch{switch.cite-as-record,
   name={\longargfmt{cite\dhyphen as\dhyphen record}},
   user1={},
   category={switch},
@@ -6275,7 +8947,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-cite-as-record,
+ at switch{switch.no-cite-as-record,
   name={\longargfmt{no\dhyphen cite\dhyphen as\dhyphen record}},
   user1={},
   category={switch},
@@ -6282,7 +8954,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.merge-wrglossary-records,
+ at switch{switch.merge-wrglossary-records,
   name={\longargfmt{merge\dhyphen wrglossary\dhyphen records}},
   user1={},
   category={switch},
@@ -6289,7 +8961,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-merge-wrglossary-records,
+ at switch{switch.no-merge-wrglossary-records,
   name={\longargfmt{no\dhyphen merge\dhyphen wrglossary\dhyphen records}},
   user1={},
   category={switch},
@@ -6296,7 +8968,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.merge-nameref-on,
+ at switch{switch.merge-nameref-on,
   name={\longargfmt{merge\dhyphen nameref\dhyphen on}},
   user1={\meta{rule}},
   category={switch},
@@ -6303,7 +8975,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.force-cross-resource-refs,
+ at switch{switch.force-cross-resource-refs,
   name={\longargfmt{force\dhyphen cross\dhyphen resource\dhyphen refs}},
   symbol={\shortargfmt{x}},
   user1={},
@@ -6311,7 +8983,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-force-cross-resource-refs,
+ at switch{switch.no-force-cross-resource-refs,
   name={\longargfmt{no\dhyphen force\dhyphen cross\dhyphen resource\dhyphen refs}},
   user1={},
   category={switch},
@@ -6318,7 +8990,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.support-unicode-script,
+ at switch{switch.support-unicode-script,
   name={\longargfmt{support\dhyphen unicode\dhyphen script}},
   user1={},
   category={switch},
@@ -6325,7 +8997,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-support-unicode-script,
+ at switch{switch.no-support-unicode-script,
   name={\longargfmt{no\dhyphen support\dhyphen unicode\dhyphen script}},
   user1={},
   category={switch},
@@ -6332,7 +9004,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.packages,
+ at switch{switch.packages,
   name={\longargfmt{packages}},
   symbol={\shortargfmt{p}},
   user1={\meta{list}},
@@ -6340,7 +9012,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.ignore-packages,
+ at switch{switch.ignore-packages,
   name={\longargfmt{ignore-packages}},
   symbol={\shortargfmt{k}},
   user1={\meta{list}},
@@ -6348,7 +9020,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.custom-packages,
+ at switch{switch.custom-packages,
   name={\longargfmt{custom\dhyphen packages}},
   user1={\meta{list}},
   category={switch},
@@ -6355,13 +9027,13 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.list-known-packages,
+ at switch{switch.list-known-packages,
   name={\longargfmt{list\dhyphen known\dhyphen packages}},
   category={switch},
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.mfirstuc-protection,
+ at switch{switch.mfirstuc-protection,
   name={\longargfmt{mfirstuc\dhyphen protection}},
   symbol={\shortargfmt{u}},
   user1={\meta{list}\argor\code{all}},
@@ -6369,7 +9041,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-mfirstuc-protection,
+ at switch{switch.no-mfirstuc-protection,
   name={\longargfmt{no\dhyphen mfirstuc\dhyphen protection}},
   user1={},
   category={switch},
@@ -6376,7 +9048,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.mfirstuc-math-protection,
+ at switch{switch.mfirstuc-math-protection,
   name={\longargfmt{mfirstuc\dhyphen math\dhyphen protection}},
   user1={},
   category={switch},
@@ -6383,7 +9055,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-mfirstuc-math-protection,
+ at switch{switch.no-mfirstuc-math-protection,
   name={\longargfmt{no\dhyphen mfirstuc\dhyphen math\dhyphen protection}},
   user1={},
   category={switch},
@@ -6390,7 +9062,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.nested-link-check,
+ at switch{switch.nested-link-check,
   name={\longargfmt{nested\dhyphen link\dhyphen check}},
   user1={\meta{list}\argor\code{none}},
   category={switch},
@@ -6397,7 +9069,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-nested-link-check,
+ at switch{switch.no-nested-link-check,
   name={\longargfmt{no\dhyphen nested\dhyphen link\dhyphen check}},
   user1={},
   category={switch},
@@ -6404,7 +9076,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.shortcuts,
+ at switch{switch.shortcuts,
   name={\longargfmt{shortcuts}},
   user1={\meta{value}},
   category={switch},
@@ -6411,7 +9083,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.map-format,
+ at switch{switch.map-format,
   name={\longargfmt{map\dhyphen format}},
   symbol={\shortargfmt{m}},
   user1={\meta{map:value list}},
@@ -6419,7 +9091,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.group,
+ at switch{switch.group,
   name={\longargfmt{group}},
   symbol={\shortargfmt{g}},
   user1={},
@@ -6427,7 +9099,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-group,
+ at switch{switch.no-group,
   name={\longargfmt{no\dhyphen group}},
   user1={},
   category={switch},
@@ -6434,7 +9106,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.tex-encoding,
+ at switch{switch.tex-encoding,
   name={\longargfmt{tex\dhyphen encoding}},
   user1={\meta{name}},
   category={switch},
@@ -6441,7 +9113,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-expand-fields,
+ at switch{switch.no-expand-fields,
   name={\longargfmt{no\dhyphen expand\dhyphen fields}},
   user1={},
   category={switch},
@@ -6448,7 +9120,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.expand-fields,
+ at switch{switch.expand-fields,
   name={\longargfmt{expand\dhyphen fields}},
   user1={},
   category={switch},
@@ -6455,7 +9127,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.record-count,
+ at switch{switch.record-count,
   name={\longargfmt{record\dhyphen count}},
   symbol={\shortargfmt{c}},
   user1={},
@@ -6463,7 +9135,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-record-count,
+ at switch{switch.no-record-count,
   name={\longargfmt{no\dhyphen record\dhyphen count}},
   user1={},
   category={switch},
@@ -6470,7 +9142,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.record-count-unit,
+ at switch{switch.record-count-unit,
   name={\longargfmt{record\dhyphen count\dhyphen unit}},
   symbol={\shortargfmt{n}},
   user1={},
@@ -6478,7 +9150,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-record-count-unit,
+ at switch{switch.no-record-count-unit,
   name={\longargfmt{no\dhyphen record\dhyphen count\dhyphen unit}},
   user1={},
   category={switch},
@@ -6485,7 +9157,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.trim-fields,
+ at switch{switch.trim-fields,
   name={\longargfmt{trim\dhyphen fields}},
   user1={},
   category={switch},
@@ -6492,7 +9164,7 @@
   parent={commandlineoptions}
 }
 
- at dualindexentry{switch.no-trim-fields,
+ at switch{switch.no-trim-fields,
   name={\longargfmt{no\dhyphen trim\dhyphen fields}},
   user1={},
   category={switch},
@@ -6574,27 +9246,27 @@
   name={language resource file (\extfmt{xml})}
 }
 
- at index{tag.page,
+ at xmltag{tag.page,
   name={\xmltagfmt{tag.page}},
   parent={languagexml}
 }
 
- at index{tag.pages,
+ at xmltag{tag.pages,
   name={\xmltagfmt{tag.pages}},
   parent={languagexml}
 }
 
- at index{tag.passim,
+ at xmltag{tag.passim,
   name={\xmltagfmt{tag.passim}},
   parent={languagexml}
 }
 
- at index{sentence.terminators,
+ at xmltag{sentence.terminators,
   name={\xmltagfmt{sentence.terminators}},
   parent={languagexml}
 }
 
- at index{grouptitle.case.lc,
+ at xmltag{grouptitle.case.lc,
   name={\xmltagfmt{grouptitle.case.}\meta{lc}},
   parent={languagexml}
 }
@@ -6681,7 +9353,13 @@
 @index{non-regular}
 @index{variant}
 @index{homograph}
+ at index{progeny}
+ at index{progenitor}
 
+ at index{StackOverflowError,
+  name={\code{Stack\-Over\-flow\-Error}}
+}
+
 @index{moving-argument,
   name={moving argument}
 }
@@ -6713,330 +9391,344 @@
   plural={Unicode categories}
 }
 
- at index{numberdecimaldigit,
+ at unicodecategory{numberdecimaldigit,
   name={\unicodecategoryfmt{Number, Decimal Digit}},
   parent={unicodecategories}
 }
 
- at index{separatorspace,
+ at unicodecategory{separatorspace,
   name={\unicodecategoryfmt{Separator, Space}},
   parent={unicodecategories}
 }
 
- at index{letteruppercase,
+ at unicodecategory{letteruppercase,
   name={\unicodecategoryfmt{Letter, Uppercase}},
   parent={unicodecategories}
 }
 
- at index{letterlowercase,
+ at unicodecategory{letterlowercase,
   name={\unicodecategoryfmt{Letter, Lowercase}},
   parent={unicodecategories}
 }
 
- at index{lettertitlecase,
+ at unicodecategory{lettertitlecase,
   name={\unicodecategoryfmt{Letter, Titlecase}},
   parent={unicodecategories}
 }
 
- at index{lettermodifier,
+ at unicodecategory{lettermodifier,
   name={\unicodecategoryfmt{Letter, Modifier}},
   parent={unicodecategories}
 }
 
- at index{letterother,
+ at unicodecategory{letterother,
   name={\unicodecategoryfmt{Letter, Other}},
   parent={unicodecategories}
 }
 
- at index{punctuationclose,
+ at unicodecategory{punctuationclose,
   name={\unicodecategoryfmt{Punctuation, Close}},
   parent={unicodecategories}
 }
 
- at index{punctuationfinalquote,
+ at unicodecategory{punctuationfinalquote,
   name={\unicodecategoryfmt{Punctuation, Final quote}},
   parent={unicodecategories}
 }
 
- at index{punctuationother,
+ at unicodecategory{punctuationother,
   name={\unicodecategoryfmt{Punctuation, Other}},
   parent={unicodecategories}
 }
 
- at index{punctuationdash,
+ at unicodecategory{punctuationdash,
   name={\unicodecategoryfmt{Punctuation, Dash}},
   parent={unicodecategories}
 }
 
- at index{texmfcnf.openinany,
+ at texmfcnf{texmfcnf.openinany,
   name={\texmfcnffmt{openin\_any}}
 }
 
- at index{texmfcnf.openoutany,
+ at texmfcnf{texmfcnf.openoutany,
   name={\texmfcnffmt{openout\_any}}
 }
 
- at index{file.bib2gls-en.xml,
+ at file{file.bib2gls-en.xml,
   name={\filefmt{bib2gls-en.xml}}
 }
 
- at index{file.bib2gls.sh,
+ at file{file.bib2gls.sh,
   name={\filefmt{bib2gls.sh}}
 }
 
- at index{file.convertgls2bib.sh,
+ at file{file.convertgls2bib.sh,
   name={\filefmt{convert\-gls2bib.sh}}
 }
 
- at index{file.texparserlib.jar,
+ at file{file.texparserlib.jar,
   name={\filefmt{texparserlib.jar}}
 }
 
- at index{file.bib2gls.jar,
+ at file{file.bib2gls.jar,
   name={\filefmt{bib2gls.jar}}
 }
 
- at index{file.convertgls2bib.jar,
+ at file{file.convertgls2bib.jar,
   name={\filefmt{convert\-gls2bib.jar}}
 }
 
- at index{file.bib2gls.bat,
+ at file{file.bib2gls.bat,
   name={\filefmt{bib2gls.bat}}
 }
 
- at index{file.xampl.bib,
+ at file{file.xampl.bib,
   name={\filefmt{xampl.bib}}
 }
 
- at index{file.sample-dual.tex,
+ at file{file.sample-dual.tex,
   name={\filefmt{sample\dhyphen dual.tex}}
 }
 
- at dualindexentry{file.no-interpret-preamble.bib,
+ at samplefile{file.no-interpret-preamble.bib,
   name={\filefmt{no\dhyphen interpret\dhyphen preamble.bib}}
 }
 
- at dualindexentry{file.interpret-preamble.bib,
+ at samplefile{file.interpret-preamble.bib,
   name={\filefmt{interpret\dhyphen preamble.bib}}
 }
 
- at dualindexentry{file.interpret-preamble2.bib,
+ at samplefile{file.interpret-preamble2.bib,
   name={\filefmt{interpret\dhyphen preamble2.bib}}
 }
 
- at dualindexentry{file.people.bib,
+ at samplefile{file.people.bib,
   name={\filefmt{people.bib}}
 }
 
- at dualindexentry{file.sample-people.tex,
+ at samplefile{file.sample-people.tex,
   name={\filefmt{sample\dhyphen people.tex}}
 }
 
- at dualindexentry{file.sample-authors.tex,
+ at samplefile{file.sample-authors.tex,
   name={\filefmt{sample\dhyphen authors.tex}}
 }
 
- at dualindexentry{file.sample-citations.tex,
+ at samplefile{file.sample-citations.tex,
   name={\filefmt{sample\dhyphen citations.tex}}
 }
 
- at dualindexentry{file.citations.bib,
+ at samplefile{file.citations.bib,
   name={\filefmt{citations.bib}}
 }
 
- at dualindexentry{file.bacteria.bib,
+ at samplefile{file.bacteria.bib,
   name={\filefmt{bacteria.bib}}
 }
 
- at dualindexentry{file.sample-bacteria.tex,
+ at samplefile{file.sample-bacteria.tex,
   name={\filefmt{sample\dhyphen bacteria.tex}}
 }
 
- at dualindexentry{file.chemicalformula.bib,
+ at samplefile{file.chemicalformula.bib,
   name={\filefmt{chemicalformula.bib}}
 }
 
- at dualindexentry{file.sample-chemical.tex,
+ at samplefile{file.sample-chemical.tex,
   name={\filefmt{sample\dhyphen chemical.tex}}
 }
 
- at dualindexentry{file.constants.bib,
+ at samplefile{file.constants.bib,
   name={\filefmt{constants.bib}}
 }
 
- at dualindexentry{file.sample-constants.tex,
+ at samplefile{file.sample-constants.tex,
   name={\filefmt{sample\dhyphen constants.tex}}
 }
 
- at dualindexentry{file.baseunits.bib,
+ at samplefile{file.baseunits.bib,
   name={\filefmt{baseunits.bib}}
 }
 
- at dualindexentry{file.derivedunits.bib,
+ at samplefile{file.derivedunits.bib,
   name={\filefmt{derivedunits.bib}}
 }
 
- at dualindexentry{file.sample-units1.tex,
+ at samplefile{file.sample-units1.tex,
   name={\filefmt{sample-units1.tex}}
 }
 
- at dualindexentry{file.sample-units2.tex,
+ at samplefile{file.sample-units2.tex,
   name={\filefmt{sample-units2.tex}}
 }
 
- at dualindexentry{file.sample-units3.tex,
+ at samplefile{file.sample-units3.tex,
   name={\filefmt{sample-units3.tex}}
 }
 
- at dualindexentry{file.books.bib,
+ at samplefile{file.books.bib,
   name={\filefmt{books.bib}}
 }
 
- at dualindexentry{file.films.bib,
+ at samplefile{file.films.bib,
   name={\filefmt{films.bib}}
 }
 
- at dualindexentry{file.sample-media.tex,
+ at samplefile{file.sample-media.tex,
   name={\filefmt{sample\dhyphen media.tex}}
 }
 
- at dualindexentry{file.bigmathsymbols.bib,
+ at samplefile{file.bigmathsymbols.bib,
   name={\filefmt{bigmathsymbols.bib}}
 }
 
- at dualindexentry{file.mathgreek.bib,
+ at samplefile{file.mathgreek.bib,
   name={\filefmt{mathgreek.bib}}
 }
 
- at dualindexentry{file.mathsrelations.bib,
+ at samplefile{file.mathsrelations.bib,
   name={\filefmt{mathsrelations.bib}}
 }
 
- at dualindexentry{file.binaryoperators.bib,
+ at samplefile{file.binaryoperators.bib,
   name={\filefmt{binaryoperators.bib}}
 }
 
- at dualindexentry{file.unaryoperators.bib,
+ at samplefile{file.unaryoperators.bib,
   name={\filefmt{unaryoperators.bib}}
 }
 
- at dualindexentry{file.mathsobjects.bib,
+ at samplefile{file.mathsobjects.bib,
   name={\filefmt{mathsobjects.bib}}
 }
 
- at dualindexentry{file.sample-msymbols.tex,
+ at samplefile{file.sample-msymbols.tex,
   name={\filefmt{sample\dhyphen msymbols.tex}}
 }
 
- at dualindexentry{file.sample-maths.tex,
+ at samplefile{file.sample-maths.tex,
   name={\filefmt{sample\dhyphen maths.tex}}
 }
 
- at dualindexentry{file.miscsymbols.bib,
+ at samplefile{file.miscsymbols.bib,
   name={\filefmt{miscsymbols.bib}}
 }
 
- at dualindexentry{file.sample-textsymbols.tex,
+ at samplefile{file.sample-textsymbols.tex,
   name={\filefmt{sample\dhyphen textsymbols.tex}}
 }
 
- at dualindexentry{file.markuplanguages.bib,
+ at samplefile{file.sample-textsymbols2.tex,
+  name={\filefmt{sample\dhyphen textsymbols2.tex}}
+}
+
+ at samplefile{file.markuplanguages.bib,
   name={\filefmt{markuplanguages.bib}}
 }
 
- at dualindexentry{file.sample-markuplanguages.tex,
+ at samplefile{file.sample-markuplanguages.tex,
   name={\filefmt{sample\dhyphen markuplanguages.tex}}
 }
 
- at dualindexentry{file.usergroups.bib,
+ at samplefile{file.usergroups.bib,
   name={\filefmt{usergroups.bib}}
 }
 
- at dualindexentry{file.sample-usergroups.tex,
+ at samplefile{file.sample-usergroups.tex,
   name={\filefmt{sample\dhyphen usergroups.tex}}
 }
 
- at dualindexentry{file.animals.bib,
+ at samplefile{file.animals.bib,
   name={\filefmt{animals.bib}}
 }
 
- at dualindexentry{file.vegetables.bib,
+ at samplefile{file.vegetables.bib,
   name={\filefmt{vegetables.bib}}
 }
 
- at dualindexentry{file.minerals.bib,
+ at samplefile{file.minerals.bib,
   name={\filefmt{minerals.bib}}
 }
 
- at dualindexentry{file.terms.bib,
+ at samplefile{file.terms.bib,
   name={\filefmt{terms.bib}}
 }
 
- at dualindexentry{file.sample-multi1.tex,
+ at samplefile{file.topics.bib,
+  name={\filefmt{topics.bib}}
+}
+
+ at samplefile{file.sample-multi1.tex,
   name={\filefmt{sample\dhyphen multi1.tex}}
 }
 
- at dualindexentry{file.sample-multi2.tex,
+ at samplefile{file.sample-multi2.tex,
   name={\filefmt{sample\dhyphen multi2.tex}}
 }
 
- at index{glshyperlink,
+ at glscommand{glshyperlink,
   name={\csfmt{gls\-hyper\-link}},
   user1={\oargm{link text}\margm{label}},
   description={creates a hyperlink to the entry information in the
    glossary},
-  note={\styfmt{glossaries}},
+  topics={linkcommands,entryrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsxtrfielddolistloop,
+ at glscommand{glsxtrfielddolistloop,
   name={\csfmt{gls\-xtr\-field\-do\-list\-loop}},
   user1={\margm{label}\margm{field}},
   description={iterates over the items the given field, which contains
    an \styfmt{etoolbox} internal list},
+  topics={listcommands,loops,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   seealso={glsxtrfieldforlistloop,glsxtrfieldifinlist,glsxtrfieldlistadd},
   category={command}
 }
 
- at index{glsxtrfieldforlistloop,
+ at glscommand{glsxtrfieldforlistloop,
   name={\csfmt{gls\-xtr\-field\-for\-list\-loop}},
   user1={\margm{label}\margm{field}\margm{handler}},
   description={iterates over the items the given field, which contains
    an \styfmt{etoolbox} internal list, using the given handler},
+  topics={listcommands,loops,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.29+},
   seealso={glsxtrfielddolistloop,glsxtrfieldifinlist,glsxtrfieldlistadd},
   category={command}
 }
 
- at index{glsfieldfetch,
+ at glscommand{glsfieldfetch,
   name={\csfmt{gls\-field\-fetch}},
   user1={\margm{label}\margm{field}\margm{cs}},
   description={fetches the value of the given field for the given
    label and stores it in the command \meta{cs}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
   category={command}
 }
 
- at index{glsxtrautoindexassignsort,
+ at glscommand{glsxtrautoindexassignsort,
   name={\csfmt{gls\-xtr\-auto\-index\-assign\-sort}},
   user1={\margm{cs}\margm{label}},
   description={assigns the sort value for \cs{index} when
    using auto-indexing},
+  topics={hooks,indexing},
   note={\styfmt{glossaries-extra} v1.16+},
   category={command}
 }
 
- at index{glsxtrautoindexentry,
+ at glscommand{glsxtrautoindexentry,
   name={\csfmt{gls\-xtr\-auto\-index\-entry}},
   user1={\margm{label}},
   description={used for the actual value in \cs{index} when
    using auto-indexing},
+  topics={hooks,indexing},
   note={\styfmt{glossaries-extra} v1.16+},
   category={command}
 }
 
- at index{glsseeformat,
+ at glscommand{glsseeformat,
   name={\csfmt{gls\-see\-format}},
   user1={\margm{tag}\margm{labels}\margm{location (ignored)}},
   description={formats the entries identified in the comma separated
@@ -7044,12 +9736,13 @@
    item in the list is encapsulated with \cs{glsseeitem} and
    each element is separated with \cs{glsseesep} or
    \cs{glsseelastsep}},
+  topics={formattingcommands,crossrefcommands,loclistcommands},
   note={\styfmt{glossaries}},
   seealso={glsseeitem,glsseeitemformat,glsseesep,glsseelastsep},
   category={command}
 }
 
- at index{glsseeitem,
+ at glscommand{glsseeitem,
   name={\csfmt{gls\-see\-item}},
   user1={\margm{label}},
   description={formats an element of the cross-reference list.
@@ -7056,12 +9749,13 @@
    The default behaviour is to create a hyperlink (if enabled) to the 
    referenced entry with the link text given by
    \code{\cs{glsseeitemformat}\margm{label}}},
+  topics={formattingcommands,crossrefcommands,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   seealso={glsseeformat,glsseeitemformat},
   category={command}
 }
 
- at index{glsseeitemformat,
+ at glscommand{glsseeitemformat,
   name={\csfmt{gls\-see\-item\-format}},
   user1={\margm{label}},
   description={formats an element of the cross-reference list.
@@ -7070,50 +9764,55 @@
    \styfmt{glossaries-extra} this uses either \cs{glsentryshort}
    or \cs{glsentryname} depending on whether or not the
    \field{short} field has been set},
+  topics={formattingcommands,crossrefcommands,loclistcommands},
   note={\styfmt{glossaries} v3.0+},
   seealso={glsseeformat,glsseeitem},
   category={command}
 }
 
- at index{glsseesep,
+ at glscommand{glsseesep,
   name={\csfmt{gls\-see\-sep}},
   description={the separator used between all but the last 
   entries of a cross-reference list},
   note={\styfmt{glossaries}},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
   seealso={glsseeformat,glsseelastsep},
   category={command}
 }
 
- at index{glsseelastsep,
+ at glscommand{glsseelastsep,
   name={\csfmt{gls\-see\-last\-sep}},
   description={the separator used between the penultimate and
    ultimate entries of a cross-reference list},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
   note={\styfmt{glossaries}},
   seealso={glsseeformat,glsseesep},
   category={command}
 }
 
- at index{glsxtruseseeformat,
+ at glscommand{glsxtruseseeformat,
   name={\csfmt{gls\-xtr\-use\-see\-format}},
   user1={\margm{tag}\margm{labels}},
   description={formats the entries identified in the comma separated
    list of labels as a set of cross-references},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsxtrhiername,
+ at glscommand{glsxtrhiername,
   name={\csfmt{gls\-xtr\-hier\-name}},
   user1={\margm{label}},
   description={Displays the hierarchical name for the entry
    identified by \meta{label} with each level separated by
    \cs{glsxtrhiernamesep}},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={formattingcommands,entryrefcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   seealso={glsxtrhiernamesep},
   category={command}
 }
 
- at index{glsxtrhiernamesep,
+ at glscommand{glsxtrhiernamesep,
   name={\csfmt{gls\-xtr\-hier\-name\-sep}},
   description={Separator between hierarchical levels displayed with
    \cs{glsxtrhiername} (and case-changing variants). This defaults
@@ -7120,12 +9819,13 @@
    to \qt{\glsxtrhiernamesep} with the \styfmt{glossaries-extra}
    package, but the \bibgls\ interpreter has a different definition
    to assist sorting},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={separatorcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   seealso={glsxtrhiername},
   category={command}
 }
 
- at index{Glsxtrhiername,
+ at glscommand{Glsxtrhiername,
   name={\csfmt{Gls\-xtr\-hier\-name}},
   user1={\margm{label}},
   description={Displays the hierarchical name for the entry
@@ -7132,12 +9832,13 @@
    identified by \meta{label} with each level separated by
    \cs{glsxtrhiernamesep} where the top-most name has the
    first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   seealso={glsxtrhiername,glsxtrhiernamesep},
   category={command}
 }
 
- at index{GlsXtrhiername,
+ at glscommand{GlsXtrhiername,
   name={\csfmt{Gls\-Xtr\-hier\-name}},
   user1={\margm{label}},
   description={Displays the hierarchical name for the entry
@@ -7144,23 +9845,25 @@
    identified by \meta{label} with each level separated by
    \cs{glsxtrhiernamesep} where each name has the
    first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   seealso={glsxtrhiername,glsxtrhiernamesep},
   category={command}
 }
 
- at index{GLSxtrhiername,
+ at glscommand{GLSxtrhiername,
   name={\csfmt{GLS\-xtr\-hier\-name}},
   user1={\margm{label}},
   description={Displays the hierarchical name for the entry
    identified by \meta{label} with each level separated by
    \cs{glsxtrhiernamesep} where the top-most name is converted to \idx{uppercase}},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   seealso={glsxtrhiername,glsxtrhiernamesep},
   category={command}
 }
 
- at index{GLSXTRhiername,
+ at glscommand{GLSXTRhiername,
   name={\csfmt{GLS\-XTR\-hier\-name}},
   user1={\margm{label}},
   description={Displays the hierarchical name for the entry
@@ -7167,371 +9870,1098 @@
    identified by \meta{label} with each level separated by
    \cs{glsxtrhiernamesep} where each name is converted 
    to \idx{uppercase}},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   seealso={glsxtrhiername,glsxtrhiernamesep},
   category={command}
 }
 
- at index{glsextrapostnamehook,
+ at glscommand{glsextrapostnamehook,
   name={\csfmt{gls\-extra\-post\-name\-hook}},
   user1={\margm{label}},
   description={additional category-independent code for the
 post-name hook},
+  topics={hooks},
   note={\styfmt{glossaries-extra} v1.25+},
   category={command}
 }
 
- at index{glsentrytext,
+ at glscommand{glsentrytext,
   name={\csfmt{gls\-entry\-text}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{text} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentrytext,
+ at glscommand{Glsentrytext,
   name={\csfmt{Gls\-entry\-text}},
   user1={\margm{label}},
   description={displays the value of the \field{text} field with 
   the first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryplural,
+ at glscommand{glsentryplural,
   name={\csfmt{gls\-entry\-plural}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{plural} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryplural,
+ at glscommand{Glsentryplural,
   name={\csfmt{Gls\-entry\-plural}},
   user1={\margm{label}},
   description={displays the value of the
     \field{plural} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryfirst,
+ at glscommand{glsentryfirst,
   name={\csfmt{gls\-entry\-first}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{first} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryfirst,
+ at glscommand{Glsentryfirst,
   name={\csfmt{Gls\-entry\-first}},
   user1={\margm{label}},
   description={displays the value of the
     \field{first} field with the first letter converted to
     \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryfirstplural,
+ at glscommand{glsentryfirstplural,
   name={\csfmt{gls\-entry\-first\-plural}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{firstplural} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryfirstplural,
+ at glscommand{Glsentryfirstplural,
   name={\csfmt{Gls\-entry\-first\-plural}},
   user1={\margm{label}},
   description={displays the value of the
     \field{firstplural} field with the first letter converted to
     \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryname,
+ at glscommand{glsentryname,
   name={\csfmt{gls\-entry\-name}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{name} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryname,
+ at glscommand{Glsentryname,
   name={\csfmt{Gls\-entry\-name}},
   user1={\margm{label}},
   description={displays the value of the
     \field{name} field with the first character
-     converted to upper case},
-  note={\styfmt{glossaries}},
+     converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentrydesc,
+ at glscommand{glsentrydesc,
   name={\csfmt{gls\-entry\-desc}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{description} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentrydesc,
+ at glscommand{glsentrydescplural,
+  name={\csfmt{gls\-entry\-desc\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{descriptionplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrydesc,
   name={\csfmt{Gls\-entry\-desc}},
   user1={\margm{label}},
   description={displays the value of the
     \field{description} field with the first letter converted to
-    upper case},
-  note={\styfmt{glossaries}},
+    \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentrysymbol,
+ at glscommand{Glsentrydescplural,
+  name={\csfmt{Gls\-entry\-desc\-plural}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{descriptionplural} field with the first letter converted to
+    \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrysymbol,
   name={\csfmt{gls\-entry\-symbol}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{symbol} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentrysymbol,
+ at glscommand{Glsentrysymbol,
   name={\csfmt{Gls\-entry\-symbol}},
   user1={\margm{label}},
   description={displays the value of the
     \field{symbol} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentrysymbolplural,
+ at glscommand{glsentrysymbolplural,
   name={\csfmt{gls\-entry\-symbol\-plural}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{symbolplural} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentrysymbolplural,
+ at glscommand{Glsentrysymbolplural,
   name={\csfmt{Gls\-entry\-symbol\-plural}},
   user1={\margm{label}},
   description={displays the value of the
     \field{symbolplural} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentrylong,
+ at glscommand{glsentrylong,
   name={\csfmt{gls\-entry\-long}},
   user1={\margm{label}},
   description={expands to the value of the \field{long} field 
   without any formatting or indexing},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentrylongpl,
+ at glscommand{glsentrylongpl,
   name={\csfmt{gls\-entry\-long\-pl}},
   user1={\margm{label}},
   description={expands to the value of the \field{longplural} field 
   without any formatting or indexing},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentrylong,
+ at glscommand{Glsentrylong,
   name={\csfmt{Gls\-entry\-long}},
   user1={\margm{label}},
   description={displays the value of the
     \field{long} field without any formatting or indexing but 
     with the first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentrylongpl,
+ at glscommand{Glsentrylongpl,
   name={\csfmt{Gls\-entry\-long\-pl}},
   user1={\margm{label}},
   description={displays the value of the
     \field{longplural} field without any formatting or indexing but 
     with the first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryshort,
+ at glscommand{glsentryshort,
   name={\csfmt{gls\-entry\-short}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{short} field without any formatting or indexing},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryshortpl,
+ at glscommand{glsentryshortpl,
   name={\csfmt{gls\-entry\-short\-pl}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{shortplural} field without any formatting or indexing},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryshort,
+ at glscommand{Glsentryshort,
   name={\csfmt{Gls\-entry\-short}},
   user1={\margm{label}},
   description={displays the value of the
     \field{short} field without any formatting or indexing but 
     with the first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryshortpl,
+ at glscommand{Glsentryshortpl,
   name={\csfmt{Gls\-entry\-short\-pl}},
   user1={\margm{label}},
   description={displays the value of the
     \field{shortplural} field without any formatting or indexing 
     but with the first letter converted to \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryuseri,
+ at glscommand{glsentryuseri,
   name={\csfmt{gls\-entry\-useri}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{user1} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryuserii,
+ at glscommand{glsentryuserii,
   name={\csfmt{gls\-entry\-userii}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{user2} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryuseriii,
+ at glscommand{glsentryuseriii,
   name={\csfmt{gls\-entry\-useriii}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{user3} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryuseriv,
+ at glscommand{glsentryuseriv,
   name={\csfmt{gls\-entry\-useriv}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{user4} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryuserv,
+ at glscommand{glsentryuserv,
   name={\csfmt{gls\-entry\-userv}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{user5} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsentryuservi,
+ at glscommand{glsentryuservi,
   name={\csfmt{gls\-entry\-uservi}},
   user1={\margm{label}},
   description={expands to the value of the
     \field{user6} field},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryuseri,
+ at glscommand{Glsentryuseri,
   name={\csfmt{Gls\-entry\-useri}},
   user1={\margm{label}},
   description={displays the value of the
     \field{user1} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryuserii,
+ at glscommand{Glsentryuserii,
   name={\csfmt{Gls\-entry\-userii}},
   user1={\margm{label}},
   description={displays the value of the
     \field{user2} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryuseriii,
+ at glscommand{Glsentryuseriii,
   name={\csfmt{Gls\-entry\-useriii}},
   user1={\margm{label}},
   description={displays the value of the
     \field{user3} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryuseriv,
+ at glscommand{Glsentryuseriv,
   name={\csfmt{Gls\-entry\-useriv}},
   user1={\margm{label}},
   description={displays the value of the
     \field{user4} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryuserv,
+ at glscommand{Glsentryuserv,
   name={\csfmt{Gls\-entry\-userv}},
   user1={\margm{label}},
   description={displays the value of the
     \field{user5} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{Glsentryuservi,
+ at glscommand{Glsentryuservi,
   name={\csfmt{Gls\-entry\-uservi}},
   user1={\margm{label}},
   description={displays the value of the
     \field{user6} field with the first letter converted to
 \idx{uppercase}},
-  note={\styfmt{glossaries}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glssetcategoryattribute,
+ at glscommand{glsaccessname,
+  name={\csfmt{gls\-access\-name}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{name} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryname})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessname,
+  name={\csfmt{Gls\-access\-name}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{name} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryname})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesstext,
+  name={\csfmt{gls\-access\-text}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{text} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrytext})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesstext,
+  name={\csfmt{Gls\-access\-text}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{text} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrytext})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessplural,
+  name={\csfmt{gls\-access\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{plural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessplural,
+  name={\csfmt{Gls\-access\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{plural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessfirst,
+  name={\csfmt{gls\-access\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{first} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryfirst})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessfirst,
+  name={\csfmt{Gls\-access\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{first} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryfirst})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessfirstplural,
+  name={\csfmt{gls\-access\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{firstplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryfirstplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessfirstplural,
+  name={\csfmt{Gls\-access\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{firstplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryfirstplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesssymbol,
+  name={\csfmt{gls\-access\-symbol}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbol} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrysymbol})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesssymbol,
+  name={\csfmt{Gls\-access\-symbol}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbol} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrysymbol})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesssymbolplural,
+  name={\csfmt{gls\-access\-symbol\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbolplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrysymbolplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesssymbolplural,
+  name={\csfmt{Gls\-access\-symbol\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbolplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrysymbolplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessdesc,
+  name={\csfmt{gls\-access\-desc}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{description} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrydesc})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessdesc,
+  name={\csfmt{Gls\-access\-desc}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{description} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrydesc})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessdescplural,
+  name={\csfmt{gls\-access\-desc\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{descriptionplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrydescplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessdescplural,
+  name={\csfmt{Gls\-access\-desc\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{descriptionplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrydescplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessshort,
+  name={\csfmt{gls\-access\-short}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{short} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryshort})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessshort,
+  name={\csfmt{Gls\-access\-short}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{short} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryshort})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessshortpl,
+  name={\csfmt{gls\-access\-shortpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{shortplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryshortpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessshortpl,
+  name={\csfmt{Gls\-access\-shortpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{shortplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryshortpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesslong,
+  name={\csfmt{gls\-access\-long}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{long} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrylong})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesslong,
+  name={\csfmt{Gls\-access\-long}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{long} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrylong})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesslongpl,
+  name={\csfmt{gls\-access\-longpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{longplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrylongpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesslongpl,
+  name={\csfmt{Gls\-access\-longpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{longplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrylongpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsxtrentryparentname,
+  name={\csfmt{gls\-xtr\-entry\-parent\-name}},
+  user1={\margm{label}},
+  description={expands to the entry's parent's name},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.39+},
+  category={command}
+}
+
+ at glscommand{glsentryprefix,
+  name={\csfmt{gls\-entry\-prefix}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefix} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glsentryprefixplural,
+  name={\csfmt{gls\-entry\-prefix\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glsentryprefixfirst,
+  name={\csfmt{gls\-entry\-prefix\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirst} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glsentryprefixfirstplural,
+  name={\csfmt{gls\-entry\-prefix\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirstplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefix,
+  name={\csfmt{Gls\-entry\-prefix}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefix} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefixplural,
+  name={\csfmt{Gls\-entry\-prefix\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixplural} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefixfirst,
+  name={\csfmt{Gls\-entry\-prefix\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirst} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefixfirstplural,
+  name={\csfmt{Gls\-entry\-prefix\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirstplural} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glssetcategoryattribute,
   name={\csfmt{gls\-set\-cat\-e\-gory\-at\-tribute}},
   user1={\margm{category}\margm{attribute}\margm{value}},
   description={sets the value of the attribute for the given
 category},
+  topics={assigncommands,catattrcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostlinkAddDescOnFirstUse,
+ at glscommand{glsentryaccess,
+  name={\csfmt{gls\-entry\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{access} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrytextaccess,
+  name={\csfmt{gls\-entry\-text\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{textaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryfirstaccess,
+  name={\csfmt{gls\-entry\-first\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{firstaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrypluralaccess,
+  name={\csfmt{gls\-entry\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{pluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryfirstpluralaccess,
+  name={\csfmt{gls\-entry\-first\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{firstpluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrysymbolaccess,
+  name={\csfmt{gls\-entry\-symbol\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{symbolaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrysymbolpluralaccess,
+  name={\csfmt{gls\-entry\-symbol\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{symbolpluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrydescaccess,
+  name={\csfmt{gls\-entry\-desc\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{descriptionaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrydescpluralaccess,
+  name={\csfmt{gls\-entry\-desc\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{descriptionpluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryshortaccess,
+  name={\csfmt{gls\-entry\-short\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{shortaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryshortpluralaccess,
+  name={\csfmt{gls\-entry\-short\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{shortpluralaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrylongaccess,
+  name={\csfmt{gls\-entry\-long\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{longaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrylongpluralaccess,
+  name={\csfmt{gls\-entry\-long\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{longpluralaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsnameaccessdisplay,
+  name={\csfmt{gls\-name\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glstextaccessdisplay,
+  name={\csfmt{gls\-text\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrytextaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glspluralaccessdisplay,
+  name={\csfmt{gls\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrypluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsfirstaccessdisplay,
+  name={\csfmt{gls\-first\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryfirstaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsfirstpluralaccessdisplay,
+  name={\csfmt{gls\-first\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryfirstpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glssymbolaccessdisplay,
+  name={\csfmt{gls\-symbol\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrysymbolaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glssymbolpluralaccessdisplay,
+  name={\csfmt{gls\-symbol\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrysymbolpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsdescriptionaccessdisplay,
+  name={\csfmt{gls\-descrip\-tion\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrydescaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsdescriptionpluralaccessdisplay,
+  name={\csfmt{gls\-descrip\-tion\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrydescpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsshortaccessdisplay,
+  name={\csfmt{gls\-short\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryshortaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsshortpluralaccessdisplay,
+  name={\csfmt{gls\-short\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryshortpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glslongaccessdisplay,
+  name={\csfmt{gls\-long\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrylongaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glslongpluralaccessdisplay,
+  name={\csfmt{gls\-long\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrylongpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsaccessdisplay,
+  name={\csfmt{gls\-access\-display}},
+  user1={\margm{field}\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\csfmt{glsentry\meta{field}access}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostlinkAddDescOnFirstUse,
   name={\csfmt{gls\-xtr\-post\-link\-Add\-Desc\-On\-First\-Use}},
   description={only for use in the post-link hooks,
    this appends a space and the value of the 
@@ -7538,11 +10968,12 @@
    \field{description} field in parentheses
    if the entry that was just referenced was used for the
    first time},
+  topics={hooks},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostlinkAddSymbolOnFirstUse,
+ at glscommand{glsxtrpostlinkAddSymbolOnFirstUse,
   name={\csfmt{gls\-xtr\-post\-link\-Add\-Symbol\-On\-First\-Use}},
   description={only for use in the post-link hooks,
    this appends a space and the value of the 
@@ -7549,11 +10980,12 @@
    \field{symbol} field in parentheses
    if the entry that was just referenced was used for the
    first time and has the \field{symbol} field set},
+  topics={hooks},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostlinkAddSymbolDescOnFirstUse,
+ at glscommand{glsxtrpostlinkAddSymbolDescOnFirstUse,
   name={\csfmt{gls\-xtr\-post\-link\-Add\-Symbol\-Desc\-On\-First\-Use}},
   description={only for use in the post-link hooks, if the 
    entry that was just referenced was used for the first time,
@@ -7560,93 +10992,96 @@
    this appends a space and, in parentheses, the value of the 
    \field{symbol} field (if set)
    followed by the value of the \field{description} field},
+  topics={hooks},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{glspluralsuffix,
+ at glscommand{glspluralsuffix,
   name={\csfmt{gls\-plural\-suffix}},
   user1={},
   description={the suffix used to construct the default plural},
-  note={\styfmt{glossaries}},
+  topics={fixedtextcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{acrpluralsuffix,
+ at glscommand{acrpluralsuffix,
   name={\csfmt{acr\-plural\-suffix}},
   user1={},
   description={the suffix used to construct the default plural for
-   the short form of acronyms},
-  note={\styfmt{glossaries}},
+   the short form of acronyms using the base \sty{glossaries}
+   package's acronym mechanism (not used with the
+   \sty{glossaries-extra} enhanced abbreviation mechanism)},
+  topics={fixedtextcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{abbrvpluralsuffix,
+ at glscommand{abbrvpluralsuffix,
   name={\csfmt{abbrv\-plural\-suffix}},
   user1={},
   description={the style sensitive suffix used to construct the 
    default plural for the short form of abbreviations},
-  note={\styfmt{glossaries-extra}},
+  topics={fixedtextcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
   seealso={glsxtrabbrvpluralsuffix},
   category={command}
 }
 
- at index{glsxtrabbrvpluralsuffix,
+ at abbrvstylecommand{glsxtrabbrvpluralsuffix,
   name={\csfmt{gls\-xtr\-abbrv\-plural\-suffix}},
   user1={},
   description={the default suffix used to construct the plural for
-   the short form of abbreviations},
-  note={\styfmt{glossaries-extra}},
+   the short form of abbreviations. This just uses
+   \cs{glspluralsuffix}. If you don't want a plural suffix, you can
+   use the \catattr{noshortplural} attribute},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
   category={command}
 }
 
- at index{glsxtrscsuffix,
-  name={\csfmt{gls\-xtr\-sc\-suffix}},
-  user1={},
-  description={the suffix used to construct the plural for
-   the short form of abbreviations with one of the small-cap
-   (\code{sc}) styles},
-  note={\styfmt{glossaries-extra}},
-  category={command}
-}
-
- at index{glsdefpostlink,
+ at glscommand{glsdefpostlink,
   name={\csfmt{gls\-def\-post\-link}},
   user1={\margm{category}\margm{definition}},
   description={define the post-link hook 
   \cs{glsxtrpostlinkcategory} for the given category},
+  topics={hooks,providingcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{glsdefpostname,
+ at glscommand{glsdefpostname,
   name={\csfmt{gls\-def\-post\-name}},
   user1={\margm{category}\margm{definition}},
   description={define the post-name hook 
   \cs{glsxtrpostnamecategory} for the given category},
+  topics={hooks,providingcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{glsdefpostdesc,
+ at glscommand{glsdefpostdesc,
   name={\csfmt{gls\-def\-post\-desc}},
   user1={\margm{category}\margm{definition}},
   description={define the post-description hook
   \csfmt{glsxtrpostdesc}\meta{category} for the given category},
+  topics={hooks,providingcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{glsxtrifwasfirstuse,
+ at glscommand{glsxtrifwasfirstuse,
   name={\csfmt{glsxtr\-if\-was\-first\-use}},
   user1={\margm{true}\margm{false}},
   description={only for use in the post-link hooks this
   tests if the entry just referenced was used for the first time},
+  topics={hooks,conditionals},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{ifglsused,
+ at glscommand{ifglsused,
   name={\csfmt{if\-gls\-used}},
   user1={\margm{label}\margm{true}\margm{false}},
   description={does \meta{true} if the entry given by \meta{label} has been
@@ -7654,12 +11089,13 @@
   if the entry doesn't exist (an error or warning message will
   occur and ?? will appear in the document).
   This command is not for use in the post-link hooks},
+  topics={conditionals,entryrefcommands},
   note={\styfmt{glossaries}},
   seealso={GlsXtrIfUnusedOrUndefined,glsxtrifwasfirstuse},
   category={command}
 }
 
- at index{GlsXtrIfUnusedOrUndefined,
+ at glscommand{GlsXtrIfUnusedOrUndefined,
   name={\csfmt{Gls\-Xtr\-If\-Un\-used\-Or\-Un\-defined}},
   user1={\margm{label}\margm{true}\margm{false}},
   description={does \meta{true} if the entry given by \meta{label}
@@ -7666,125 +11102,136 @@
 hasn't been
   used or is undefined, otherwise it does \meta{false}.
   This command is not for use in the post-link hooks},
+  topics={conditionals},
   note={\styfmt{glossaries-extra} v1.34+},
   seealso={ifglsused,glsxtrifwasfirstuse},
   category={command}
 }
 
- at index{GlsXtrLocationField,
+ at glscommand{GlsXtrLocationField,
   name={\csfmt{GlsXtrLocationField}},
   user1={},
   description={expands to the internal name of the field storing the
 location list, defaulting to \field{location}},
+  topics={fieldrefcommands,loclistcommands},
   note={\styfmt{glossaries-extra} v1.37+},
   category={command}
 }
 
- at index{glslabel,
+ at glscommand{glslabel,
   name={\csfmt{glslabel}},
   user1={},
   description={only for use in the post-link hooks, this
   expands to the label of the entry that was last referenced},
+  topics={hooks},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glscurrententrylabel,
+ at glscommand{glscurrententrylabel,
   name={\csfmt{gls\-current\-entry\-label}},
   user1={},
   description={only for use in the glossary, such as in the style or
 in the post-name or post-description hooks, this expands to the
 label of the current entry},
+  topics={hooks},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glscurrentfieldvalue,
+ at glscommand{glscurrentfieldvalue,
   name={\csfmt{gls\-current\-field\-value}},
   user1={},
   description={only for use in the \meta{true} part of
 \cs{ifglshasfield} or \cs{glsxtrifhasfield}, this expands to the
 field value},
+  topics={conditionals},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsentrytitlecase,
+ at glscommand{glsentrytitlecase,
   name={\csfmt{gls\-entry\-title\-case}},
   user1={\margm{entry label}\margm{field label}},
   description={fetches the given field and applies
   \ics{capitalisewords} to it},
-  note={\styfmt{glossaries} v4.22+},
+  topics={casecommands,fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote\ v4.22+},
   category={command}
 }
 
- at index{capitalisewords,
+ at command{capitalisewords,
   name={\csfmt{capitalise\-words}},
   user1={\margm{text}},
   description={converts the first letter of each word to
   \idx{uppercase} using \ics{makefirstuc}},
-  note={\styfmt{mfirstuc} v1.06+},
+  note={\styfmt{mfirstuc}\texparserdefnote\ v1.06+},
   category={command}
 }
 
- at index{MFUnocap,
+ at command{MFUnocap,
   name={\csfmt{MFU\-no\-cap}},
   user1={\margm{word}},
   description={identifies \meta{word} as one that
    should not have its case-changed by \ics{capitalisewords}
    unless it occurs at the start},
-  note={\styfmt{mfirstuc} v1.09+},
+  note={\styfmt{mfirstuc}\texparserdefnote\ v1.09+},
   category={command}
 }
 
- at index{glsxtrusefield,
+ at glscommand{glsxtrusefield,
   name={\csfmt{gls\-xtr\-use\-field}},
   user1={\margm{entry label}\margm{field label}},
   description={expands to the value of the given field for the given
    entry},
-  note={\styfmt{glossaries-extra} v1.12+},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.12+},
   category={command}
 }
 
- at index{Glsxtrusefield,
+ at glscommand{Glsxtrusefield,
   name={\csfmt{Gls\-xtr\-use\-field}},
   user1={\margm{entry label}\margm{field label}},
   description={like \cs{glsxtrusefield} but converts the first
    letter to \idx!{uppercase}},
-  note={\styfmt{glossaries-extra} v1.12+},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.12+},
   category={command}
 }
 
- at index{GLSxtrusefield,
+ at glscommand{GLSxtrusefield,
   name={\csfmt{GLS\-xtr\-use\-field}},
   user1={\margm{entry label}\margm{field label}},
   description={as \cs{glsxtrusefield} but converts the value to
   \idx{uppercase}},
-  note={\styfmt{glossaries-extra} v1.37+},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
   category={command}
 }
 
- at index{GlsXtrSetField,
+ at glscommand{GlsXtrSetField,
   name={\csfmt{Gls\-Xtr\-Set\-Field}},
   user1={\margm{entry label}\margm{field label}\margm{value}},
   description={assigns the given \meta{value} to the field
    identified by \meta{field label} for the
    entry identified by \meta{entry label}},
+  topics={assigncommands},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{xGlsXtrSetField,
+ at glscommand{xGlsXtrSetField,
   name={\csfmt{xGls\-Xtr\-Set\-Field}},
   user1={\margm{entry label}\margm{field label}\margm{value}},
   description={globally assigns the (protected) full expansion of the given \meta{value} to the field
    identified by \meta{field label} for the
    entry identified by \meta{entry label}},
+  topics={assigncommands},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{glsxtrifhasfield,
+ at glscommand{glsxtrifhasfield,
   name={\csfmt{gls\-xtr\-if\-has\-field}},
   user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry has the given \emph{internal} field set
@@ -7791,12 +11238,13 @@
    (defined and not empty)
    without testing if the entry exists and adds implicit scoping
    to \meta{true} and \meta{false}},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.19+},
   seealso={GlsXtrIfFieldUndef},
   category={command}
 }
 
- at index{glsxtrifhasfield*,
+ at glscommand{glsxtrifhasfield*,
   name={\csfmt{gls\-xtr\-if\-has\-field*}},
   user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry has the given field set
@@ -7803,98 +11251,114 @@
    (defined and not empty)
    without testing if the entry exists and without introducing
    an implicit scope},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.19+},
   seealso={GlsXtrIfFieldUndef},
   category={command}
 }
 
- at index{GlsXtrIfFieldUndef,
+ at glscommand{GlsXtrIfFieldUndef,
   name={\csfmt{Gls\-Xtr\-If\-Field\-Undef}},
   user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given field isn't defined for the given
    entry, which may also not exist},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.23+},
   category={command}
 }
 
- at index{GlsXtrIfFieldEqStr,
+ at glscommand{GlsXtrIfFieldEqStr,
   name={\csfmt{Gls\-Xtr\-If\-Field\-Eq\-Str}},
   user1={\margm{field label}\margm{entry label}\margm{text}\margm{true}\margm{false}},
   description={tests if the given field value is the same as
-   \meta{text} for the given entry, which may not exist},
+   \meta{text} for the given entry, which may not exist. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{GlsXtrIfFieldEqXpStr,
+ at glscommand{GlsXtrIfFieldEqXpStr,
   name={\csfmt{Gls\-Xtr\-If\-Field\-Eq\-Xp\-Str}},
   user1={\margm{field label}\margm{entry label}\margm{text}\margm{true}\margm{false}},
   description={like \cs{GlsXtrIfFieldEqStr} but first (protected)
-fully expands \meta{text} (but not the field value)},
+fully expands \meta{text} (but not the field value). The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{GlsXtrIfXpFieldEqXpStr,
+ at glscommand{GlsXtrIfXpFieldEqXpStr,
   name={\csfmt{Gls\-Xtr\-If\-Xp\-Field\-Eq\-Xp\-Str}},
   user1={\margm{field label}\margm{entry label}\margm{text}\margm{true}\margm{false}},
   description={like \cs{GlsXtrIfFieldEqStr} but first (protected)
-fully expands both the field value and \meta{text}},
+fully expands both the field value and \meta{text}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{ifglshasfield,
+ at glscommand{ifglshasfield,
   name={\csfmt{if\-gls\-has\-field}},
   user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    given field set to a non-empty value},
   note={\styfmt{glossaries}},
+  topics={conditionals,fieldrefcommands},
   seealso={glsxtrifhasfield,GlsXtrIfFieldUndef},
   category={command}
 }
 
- at index{ifglshassymbol,
+ at glscommand{ifglshassymbol,
   name={\csfmt{if\-gls\-has\-symbol}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    \field{symbol} field set to value that's not empty and not
      \csfmt{relax}},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries}},
   seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
   category={command}
 }
 
- at index{ifglshasdesc,
+ at glscommand{ifglshasdesc,
   name={\csfmt{if\-gls\-has\-desc}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    \field{description} field set},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries}},
   seealso={ifglshassymbol,ifglshasdescsuppressed},
   category={command}
 }
 
- at index{ifglshasdescsuppressed,
+ at glscommand{ifglshasdescsuppressed,
   name={\csfmt{if\-gls\-has\-suppressedesc}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    \field{description} field set to \cs{nopostdesc}},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries}},
   seealso={ifglshasdesc},
   category={command}
 }
 
- at index{ifglshasparent,
+ at glscommand{ifglshasparent,
   name={\csfmt{if\-gls\-has\-parent}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    \field{parent} field set},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{ifglshaschildren,
+ at glscommand{ifglshaschildren,
   name={\csfmt{if\-gls\-has\-children}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has
@@ -7904,29 +11368,154 @@
   field. With \bibgls, a more efficient approach is to
   use \csopt{save-child-count} and test the value of
   the \field{childcount} field},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{ifglshasshort,
+ at glscommand{ifglshasshort,
   name={\csfmt{if\-gls\-has\-short}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    \field{short} field set},
+  topics={conditionals,fieldrefcommands,abbreviationcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{ifglshaslong,
+ at glscommand{ifglshaslong,
   name={\csfmt{if\-gls\-has\-long}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given entry, which must be defined, has the 
    \field{long} field set},
+  topics={conditionals,fieldrefcommands,abbreviationcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{GlsXtrIfFieldNonZero,
+ at glscommand{ifglshasprefix,
+  name={\csfmt{if\-gls\-has\-prefix}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefix} field set to value that's not empty},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasprefixplural,
+  name={\csfmt{if\-gls\-has\-prefix\-plural}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefixplural} field set to value that's not empty},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasprefixfirst,
+  name={\csfmt{if\-gls\-has\-prefix\-first}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefixfirst} field set to value that's not empty},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasprefixfirstplural,
+  name={\csfmt{if\-gls\-has\-prefix\-first\-plural}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefixfirstplural} field set to value that's not empty},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglsfieldeq,
+  name={\csfmt{if\-gls\-field\-eq}},
+  user1={\margm{entry label}\margm{field label}\margm{string}\margm{true}\margm{false}},
+  description={tests if the given entry has the 
+   given field value equal to \meta{string}, where \meta{field label}
+   is the internal field label (not the key name). No expansion is
+   performed in the test (which just uses \cs{ifcsstring})},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{ifglsfielddefeq,
+  name={\csfmt{if\-gls\-field\-def\-eq}},
+  user1={\margm{entry label}\margm{field label}\margm{cs}\margm{true}\margm{false}},
+  description={tests if the given entry has the 
+   given field value equal to the replacement text of the command
+   given by \meta{cs}, where \meta{field label}
+   is the internal field label (not the key name). The test 
+   uses \cs{ifdefstrequal}},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{ifglsfieldcseq,
+  name={\csfmt{if\-gls\-field\-cs\-eq}},
+  user1={\margm{entry label}\margm{field label}\margm{cs-name}\margm{true}\margm{false}},
+  description={tests if the given entry has the 
+   given field value equal to the replacement text of the command
+   given by the control sequence name \meta{cs-name}, where \meta{field label}
+   is the internal field label (not the key name). The test 
+   uses \cs{ifcsstrequal}},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfielddef,
+  name={\csfmt{gls\-field\-def}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={changes the value of the given
+  entry's field to \meta{definition} (localised by any scope)},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfieldgdef,
+  name={\csfmt{gls\-field\-gdef}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={globally changes the value of the given
+  entry's field to \meta{definition}},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfieldedef,
+  name={\csfmt{gls\-field\-edef}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={changes the value of the given entry's field to the 
+  full expansion of \meta{definition} (localised by any scope)},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfieldxdef,
+  name={\csfmt{gls\-field\-xdef}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={globally changes the value of the given entry's field to the 
+  full expansion of \meta{definition}},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldNonZero,
   name={\csfmt{Gls\-Xtr\-If\-Field\-Non\-Zero}},
   user1={\margm{field}\margm{entry label}\margm{true}\margm{false}},
   description={tests if the given field value expands to a non-zero
@@ -7933,13 +11522,16 @@
 integer. If the field is undefined or empty, the value is assumed to
 be 0. If the field is set, it must expand to an integer value.
 The value can be referenced in \meta{true} or \meta{false}
-with \cs{glscurrentfieldvalue}},
+with \cs{glscurrentfieldvalue}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   seealso={GlsXtrIfFieldEqNum},
   category={command}
 }
 
- at index{GlsXtrIfFieldEqNum,
+ at glscommand{GlsXtrIfFieldEqNum,
   name={\csfmt{Gls\-Xtr\-If\-Field\-Eq\-Num}},
   user1={\margm{field}\margm{entry label}\margm{number}\margm{true}\margm{false}},
   description={tests if the given field value expands to the given
@@ -7946,13 +11538,33 @@
 integer \meta{number}. If the field is undefined or empty, the value is assumed to
 be 0. If the field is set, it must expand to an integer value.
 The value can be referenced in \meta{true} or \meta{false}
-with \cs{glscurrentfieldvalue}},
+with \cs{glscurrentfieldvalue}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.31+},
+  seealso={GlsXtrIfFieldNonZero,GlsXtrIfFieldCmpNum},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldCmpNum,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Cmp\-Num}},
+  user1={\margm{field}\margm{entry label}\margm{comparison}\margm{number}\margm{true}\margm{false}},
+  description={compares the given (numerical) field value to the given
+integer \meta{number}. The \meta{comparison} may be one of:
+\code{=}, \code{<} or \code{>}. If the field is undefined or empty, the value is assumed to
+be 0. If the field is set, it must expand to an integer value.
+The value can be referenced in \meta{true} or \meta{false}
+with \cs{glscurrentfieldvalue}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditionals,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
   seealso={GlsXtrIfFieldNonZero},
   category={command}
 }
 
- at dualindexentry{GlsXtrIfHasNonZeroChildCount,
+ at mainglscommand{GlsXtrIfHasNonZeroChildCount,
   name={\csfmt{Gls\-Xtr\-If\-Has\-Non\-Zero\-Child\-Count}},
   user1={\margm{entry label}\margm{true}\margm{false}},
   description={for use with the \csopt{save-child-count} resource
@@ -7960,67 +11572,34 @@
 \field{childcount} field has a non-zero value. The value
 can be referenced in \meta{true} or \meta{false} with
 \cs{glscurrentfieldvalue}},
+  topics={conditionals,fieldrefcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.31+},
   seealso={GlsXtrIfFieldNonZero},
   category={command}
 }
 
- at dualindexentry{glsxtrifcustomdiscardperiod,
+ at mainglscommand{glsxtrifcustomdiscardperiod,
   name={\csfmt{gls\-xtr\-if\-custom\-discard\-period}},
   user1={\margm{true}\margm{false}},
   description={should expand to \meta{true} if the post-link hook
    should check for a following full stop (in addition to attribute
    checks) otherwise should expand to \meta{false}},
+  topics={conditionals,hooks},
   note={\styfmt{glossaries-extra} v1.23+},
   category={command}
 }
 
- at index{glsxtrlongshortdescname,
-  name={\csfmt{gls\-xtr\-long\-short\-desc\-name}},
-  user1={},
-  description={governs the way the \field{name} field is set
-   by the \abbrstyle{long-short-desc} abbreviation styles},
-  note={\styfmt{glossaries-extra} v1.17+},
-  category={command}
-}
-
- at index{glsxtrlongshortname,
-  name={\csfmt{gls\-xtr\-long\-short\-name}},
-  user1={},
-  description={governs the way the \field{name} field is set
-   by the \abbrstyle{long-short} abbreviation styles},
-  note={\styfmt{glossaries-extra} v1.25+},
-  category={command}
-}
-
- at index{glsxtronlyname,
-  name={\csfmt{gls\-xtr\-only\-name}},
-  user1={},
-  description={governs the way the \field{name} field is set
-   by the \abbrstyle{long-only-short-only} abbreviation styles},
-  note={\styfmt{glossaries-extra} v1.25+},
-  category={command}
-}
-
- at index{glsxtronlydescname,
-  name={\csfmt{gls\-xtr\-only\-desc\-name}},
-  user1={},
-  description={governs the way the \field{name} field is set
-   by the \abbrstyle{long-only-short-only} abbreviation styles},
-  note={\styfmt{glossaries-extra} v1.17+},
-  category={command}
-}
-
- at index{glsaddkey,
+ at glscommand{glsaddkey,
   name={\csfmt{gls\-add\-key}},
   user1={\margm{key}\margm{default value}\margm{no link cs}\margm{no link ucfirst cs}\margm{link cs}\margm{link ucfirst cs}\margm{link allcaps cs}},
   description={adds a new key for use in \csref{newglossaryentry}
    and associated commands to access it},
+  topics={definingterms,providingcommands,linkcommands,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsxtrprovidestoragekey,
+ at glscommand{glsxtrprovidestoragekey,
   name={\csfmt{gls\-xtr\-provide\-storage\-key}},
   user1={\margm{key}\margm{default value}\margm{no link cs}},
   description={adds a new key, if not already defined, for use in
@@ -8028,146 +11607,192 @@
    and an associated command
    to access it where (unlike \cs{glsaddstoragekey})
    the \meta{no link cs} part may be empty if unrequired},
+  topics={definingterms,providingcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{glsaddstoragekey,
+ at glscommand{glsaddstoragekey,
   name={\csfmt{gls\-add\-storage\-key}},
   user1={\margm{key}\margm{default value}\margm{no link cs}},
   description={adds a new key for internal use that can be set in 
     \csref{newglossaryentry}},
+  topics={definingterms,providingcommands,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{GlsXtrEnableInitialTagging,
+ at glscommand{glsautoprefix,
+  name={\csfmt{gls\-auto\-prefix}},
+  description={prefix used for the automatically labelling triggered
+  by the \styopt[autolabel]{numberedsection} option},
+  topics={hooks,crossrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsenablehyper,
+  name={\csfmt{gls\-enable\-hyper}},
+  description={enables the creation of hyperlinks and targets for
+  the glossary commands that support them (automatically implemented
+  if \sty{hyperref} is loaded before \sty{glossaries})},
+  topics={linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdisablehyper,
+  name={\csfmt{gls\-disable\-hyper}},
+  description={disables the creation of hyperlinks and targets for
+  the glossary commands that support them (automatically implemented
+  if \sty{hyperref} isn't loaded before \sty{glossaries})},
+  topics={linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{GlsXtrEnableInitialTagging,
   name={\csfmt{Gls\-Xtr\-Enable\-Initial\-Tagging}},
   user1={\margm{category list}\margm{cs}},
   description={defines the control sequence \meta{cs}
    to be used with abbreviation tagging
    with the given categories},
-  note={\styfmt{glossaries-extra}},
+  topics={abbreviationcommands,formattingcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
   category={command}
 }
 
- at index{glsxtrtagfont,
+ at glscommand{glsxtrtagfont,
   name={\csfmt{gls\-xtr\-tag\-font}},
   user1={\margm{text}},
   description={font used by tagging command defined by
    \cs{GlsXtrEnableInitialTagging}},
   note={\styfmt{glossaries-extra}},
+  topics={abbreviationcommands,formattingcommands},
   category={command},
   seealso={GlsXtrEnableInitialTagging}
 }
 
- at index{glsnavhypertarget,
+ at glscommand{glsnavhypertarget,
   name={\csfmt{gls\-nav\-hyper\-target}},
   user1={\oargm{type}\margm{label}\margm{text}},
   description={creates a hyper target for the group given by
-    \meta{label} for the given glossary type and displays the text},
+    \meta{label} for the given glossary type and uses \meta{text}
+    for the hyperlink text},
+  topics={linkcommands,entryrefcommands},
   note={\styfmt{glossary-hypernav}},
   category={command}
 }
 
- at index{newentry,
+ at glscommand{newentry,
   name={\csfmt{newentry}},
   user1={\margm{label}\margm{\keyvallist}},
   description={equivalent to \csref{newglossaryentry}},
-  note={\styfmt{glossaries-extra}'s shortcuts},
+  topics={definingterms,shortcutcommands},
+  note={\styfmt{glossaries-extra} \styopt{shortcuts}},
   category={command}
 }
 
- at index{newsym,
+ at glscommand{newsym,
   name={\csfmt{newsym}},
   user1={\margm{label}\margm{\keyvallist}\margm{symbol}},
   description={equivalent to \csref{glsxtrnewsymbol}},
   note={\styfmt{glossaries-extra} \styopt{shortcuts}},
+  topics={definingterms,shortcutcommands},
   category={command}
 }
 
- at index{newnum,
+ at glscommand{newnum,
   name={\csfmt{newnum}},
   user1={\margm{label}\margm{\keyvallist}},
   description={equivalent to \csref{glsxtrnewnumber}},
+  topics={definingterms,shortcutcommands},
   note={\styfmt{glossaries-extra} \styopt{shortcuts}},
   category={command}
 }
 
- at index{acronymtype,
+ at glscommand{acronymtype,
   name={\csfmt{acronym\-type}},
   user1={},
   description={expands to the default acronym glossary type when using
    \csref{newacronym}},
+  topics={glossrefs},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsxtrabbrvtype,
+ at glscommand{glsxtrabbrvtype,
   name={\csfmt{gls\-xtr\-abbrv\-type}},
   user1={},
   description={expands to the default glossary type when using
    \csref{newabbreviation}},
+  topics={glossrefs},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{nopostdesc,
+ at glscommand{nopostdesc,
   name={\csfmt{no\-post\-desc}},
   user1={},
   description={suppresses the post-description hook},
+  topics={hooks},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsxtrnopostpunc,
+ at glscommand{glsxtrnopostpunc,
   name={\csfmt{gls\-xtr\-no\-post\-punc}},
   user1={},
   description={suppresses the post-description punctuation
    without suppressing the post-description hook},
+  topics={hooks},
   note={\styfmt{glossaries-extra} v1.22+},
   category={command}
 }
 
- at index{glsxtrrestorepostpunc,
+ at glscommand{glsxtrrestorepostpunc,
   name={\csfmt{gls\-xtr\-restore\-post\-punc}},
   user1={},
   description={used within post-description category hooks, 
    this restores the post-description punctuation
    if it's been suppressed with \cs{glsxtrnopostpunc}},
+  topics={hooks},
   note={\styfmt{glossaries-extra} v1.23+},
   category={command}
 }
 
- at index{loadglsentries,
+ at glscommand{loadglsentries,
   name={\csfmt{load\-gls\-entries}},
   user1={\oargm{type}\margm{file}},
   description={locally redefines \cs{glsdefaulttype}
     to \meta{type} and inputs \meta{file}},
+  topics={definingterms},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{newglossary,
+ at glscommand{newglossary,
   name={\csfmt{newglossary}},
   user1={\oargm{log}\margm{type}\margm{gls}\margm{glo}\margm{title}},
   description={defines a new glossary identified by \meta{type}
    with the given title and associated file extensions used by
    \appfmt{makeindex} or \appfmt{xindy}},
+  topics={glossrefs},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{newglossary*,
+ at glscommand{newglossary*,
   name={\csfmt{newglossary*}},
   user1={\margm{type}\margm{title}},
   description={defines a new glossary identified by \meta{type}
    with the given title},
+  topics={glossrefs},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{newignoredglossary,
+ at glscommand{newignoredglossary,
   name={\csfmt{new\-ignored\-glossary}},
   user1={\margm{type}},
   description={defines a new ignored glossary (with hyperlinks
@@ -8174,11 +11799,12 @@
    suppressed) identified by \meta{type}
    that's not included in the list used by commands, such
    as \cs{printunsrtglossaries}, that iterate over defined glossaries},
+  topics={glossrefs},
   note={\styfmt{glossaries} v4.08+},
   category={command}
 }
 
- at index{newignoredglossary*,
+ at glscommand{newignoredglossary*,
   name={\csfmt{new\-ignored\-glossary*}},
   user1={\margm{type}},
   description={defines a new ignored glossary (without 
@@ -8185,155 +11811,202 @@
    suppressing hyperlinks) identified by \meta{type}
    that's not included in the list used by commands, such
    as \cs{printunsrtglossaries}, that iterate over defined glossaries},
+  topics={glossrefs},
   note={\styfmt{glossaries-extra} v1.11+},
   category={command}
 }
 
- at index{provideignoredglossary,
+ at glscommand{provideignoredglossary,
   name={\csfmt{provide\-ignored\-glossary}},
   user1={\margm{type}},
   description={as \cs{newignoredglossary} but does nothing
     if a glossary identified by \meta{type} already exists},
+  topics={glossrefs},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{provideignoredglossary*,
+ at glscommand{provideignoredglossary*,
   name={\csfmt{provide\-ignored\-glossary*}},
   user1={\margm{type}},
   description={as \ics{provideignoredglossary} but doesn't
     suppress hyperlinks},
+  topics={glossrefs},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{delimN,
+ at glscommand{delimN,
   name={\csfmt{delimN}},
   user1={},
   description={used to delimited individual locations},
+  topics={glossarystylecommands,separatorcommands,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{delimR,
+ at glscommand{delimR,
   name={\csfmt{delimR}},
   user1={},
   description={used as a separator between the start and end locations
    of a range},
+  topics={glossarystylecommands,separatorcommands,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsnoidxloclist,
+ at glscommand{glsnoidxloclist,
   name={\csfmt{gls\-noidx\-loc\-list}},
   user1={\margm{location list cs}},
   description={iterates over the given internal location list using
    the \cs{glsnoidxloclisthandler} handler},
+  topics={glossarystylecommands,loops,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsnoidxloclisthandler,
+ at glscommand{glsnoidxloclisthandler,
   name={\csfmt{gls\-noidx\-loc\-list\-handler}},
   description={the handler used by the internal list loop function used
     in \cs{glsnoidxloclist}},
+  topics={glossarystylecommands,loops,loclistcommands},
   user1={\margm{location}},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glossentry,
+ at glscommand{glossentry,
   name={\csfmt{glossentry}},
   user1={\margm{label}\margm{location list}},
   description={used in the glossary to display a top-level entry},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries} v3.08a+},
   category={command}
 }
 
- at index{subglossentry,
+ at glscommand{subglossentry,
   name={\csfmt{subglossentry}},
   user1={\margm{level}\margm{label}\margm{location list}},
   description={used in the glossary to display a sub-entry},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries} v3.08a+},
   category={command}
 }
 
- at index{newglossarystyle,
+ at glscommand{newglossarystyle,
   name={\csfmt{new\-glossary\-style}},
   user1={\margm{name}\margm{definition}},
   description={defines a new glossary style called \meta{name}},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{setglossarystyle,
+ at glscommand{setglossarystyle,
   name={\csfmt{set\-glossary\-style}},
   user1={\margm{name}},
   description={sets the glossary style identified by \meta{name}},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glossaryheader,
+ at glscommand{glossaryheader,
   name={\csfmt{glossary\-header}},
   description={implemented at the start of a glossary (modified by
 glossary styles)},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsentryitem,
+ at glscommand{glsgroupskip,
+  name={\csfmt{gls\-group\-skip}},
+  description={inserted between groups to create some vertical
+  spacing (this command is modified by
+  glossary styles, and may be switched off with the  
+  \styopt{nogroupskip} option)},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsentryitem,
   name={\csfmt{gls\-entry\-item}},
   user1={\margm{label}},
   description={increments and displays the \counter{glossaryentry}
 counter, if appropriate},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries} v3.0+},
   category={command}
 }
 
- at index{glssubentryitem,
+ at glscommand{glsentrycounterlabel,
+  name={\csfmt{gls\-entry\-counter\-label}},
+  description={governs the way the \counter{glossaryentry}
+  counter is displayed by \cs{glsentryitem}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glssubentryitem,
   name={\csfmt{gls\-sub\-entry\-item}},
   user1={\margm{label}},
   description={increments and displays the \counter{glossarysubentry}
 counter, if appropriate},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries} v3.0+},
   category={command}
 }
 
- at index{glstarget,
+ at glscommand{glssubentrycounterlabel,
+  name={\csfmt{gls\-sub\-entry\-counter\-label}},
+  description={governs the way the \counter{glossarysubentry}
+  counter is displayed by \cs{glssubentryitem}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glstarget,
   name={\csfmt{gls\-target}},
   user1={\margm{label}\margm{text}},
   description={creates a hypertarget for the entry given by
 \meta{label} (the target for commands like \cs{gls}) and displays \meta{text}},
+  topics={glossarystylecommands,linkcommands},
   note={\styfmt{glossaries} v1.18+},
   category={command}
 }
 
- at index{glsnamefont,
+ at glscommand{glsnamefont,
   name={\csfmt{gls\-name\-font}},
   user1={\margm{text}},
   description={used by \cs{glossentryname} to format the name},
+  topics={glossarystylecommands,formattingcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glossentryname,
+ at glscommand{glossentryname,
   name={\csfmt{gloss\-entry\-name}},
   user1={\margm{label}},
   description={used by glossary styles to display the name},
+  topics={glossarystylecommands,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glossentrysymbol,
+ at glscommand{glossentrysymbol,
   name={\csfmt{gloss\-entry\-symbol}},
   user1={\margm{label}},
   description={used by glossary styles to display the symbol},
+  topics={glossarystylecommands,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glspostdescription,
+ at glscommand{glspostdescription,
   name={\csfmt{glspostdescription}},
   description={a hook added after the description in some glossary
 styles (all if the \sty{glossaries-extra-stylemods} package is
@@ -8340,12 +12013,13 @@
 loaded to patch them). This hook is used to reflect the
 \styopt{nopostdot} package option for \sty{glossaries}
 and the \styopt{postpunc} option for \sty{glossaries-extra}},
+  topics={glossarystylecommands,hooks},
   note={\styfmt{glossaries} and modified by
 \styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glossentrynameother,
+ at glscommand{glossentrynameother,
   name={\csfmt{gloss\-entry\-name\-other}},
   user1={\margm{label}\margm{field}},
   description={acts like \ics{glossentryname} (obeys 
@@ -8352,124 +12026,174 @@
    \catattr{glossname} and \catattr{glossnamefont}
    or \cs{glsnamefont} and the post-name hook) but uses
    the given \meta{field} instead of the \field{name} field},
+  topics={glossarystylecommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.22+},
   category={command}
 }
 
- at index{glossentrydesc,
+ at glscommand{glossentrydesc,
   name={\csfmt{gloss\-entry\-desc}},
   user1={\margm{label}},
   description={used by glossary styles to display the description},
+  topics={glossarystylecommands,fieldrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{Glossentrydesc,
+ at glscommand{Glossentrydesc,
   name={\csfmt{Gloss\-entry\-desc}},
   user1={\margm{label}},
   description={like \cs{glossentrydesc} but converts the first
-letter to uppercase},
+letter to \idx{uppercase}},
+  topics={glossarystylecommands,fieldrefcommands,casecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsaddall,
+ at glscommand{Glossentryname,
+  name={\csfmt{Gloss\-entry\-name}},
+  user1={\margm{label}},
+  description={like \cs{glossentryname} but converts the first
+letter to \idx{uppercase}},
+  topics={glossarystylecommands,fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glossentrysymbol,
+  name={\csfmt{Gloss\-entry\-symbol}},
+  user1={\margm{label}},
+  description={like \cs{glossentrysymbol} but converts the first
+letter to \idx{uppercase}},
+  topics={glossarystylecommands,fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsaddall,
   name={\csfmt{glsaddall}},
   user1={\oargm{options}},
   description={iterates over all entries defined for all glossaries
-   (or for the sub-list provided in the options) and performs
-   \cs{glsadd} for each entry},
+   (or for the sub-list provided by \optfmt{types=\margm{list}} in the options) 
+   and performs \code{\cs{glsadd}\oargm{options}} for each entry.
+   This command isn't suitable for use with \bibgls. Use the
+   \csopt{selection} option instead},
+  topics={loops,indexing},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsaddallunused,
+ at glscommand{glsaddallunused,
   name={\csfmt{gls\-add\-all\-unused}},
   user1={\oargm{list}},
   description={iterates over all entries defined for all glossaries
    (or for the sub-list provided in the options) and performs
    \cs{glsadd} for each entry that hasn't been used with
-   the \glsaddopt{format} set to \code{glsignore}},
+   the \glsaddopt{format} set to \code{glsignore}.
+   This command isn't suitable for use with \bibgls. Use the
+   \csopt{selection} option instead},
+  topics={loops,indexing},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsadd,
+ at glscommand{glsadd,
   name={\csfmt{glsadd}},
   user1={\oargm{options}\margm{label}},
   description={indexes the entry without displaying any text},
+  topics={indexing},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsaddeach,
+ at glscommand{glsaddeach,
   name={\csfmt{gls\-add\-each}},
   user1={\oargm{options}\margm{label list}},
   description={indexes each entry identified in the comma-separated
   list of labels without displaying any text},
+  topics={indexing},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{glsadd.thevalue,
+ at glsaddoption{glsadd.thevalue,
   name={\csoptfmt{thevalue}},
+  user1={\margm{value}},
+  description={overrides the record value so that it's the
+  given \meta{value} not obtained from the associated counter},
   category={commandoption},
+  note={\styfmt{glossaries-extra} v1.14+},
   parent={glsadd}
 }
 
- at index{glsadd.theHvalue,
+ at glsaddoption{glsadd.theHvalue,
   name={\csoptfmt{theHvalue}},
+  user1={\margm{value}},
+  description={the hyperlink target corresponding to the value
+  of \glsopt{thevalue}, if appropriate},
   category={commandoption},
+  note={\styfmt{glossaries-extra} v1.14+},
   parent={glsadd}
 }
 
- at index{glsadd.format,
+ at glsaddoption{glsadd.format,
   name={\csoptfmt{format}},
+  user1={\margm{encap}},
+  description={sets the \gls{encap} for the record to 
+  \meta{encap}, optionally with the start or end range markers},
   category={commandoption},
+  note={\styfmt{glossaries}},
   parent={glsadd}
 }
 
- at index{glsadd.counter,
+ at glsaddoption{glsadd.counter,
   name={\csoptfmt{counter}},
+  user1={\margm{counter-name}},
+  description={sets the counter to use for the record},
   category={commandoption},
+  note={\styfmt{glossaries}},
   parent={glsadd}
 }
 
- at index{theglossaryentry,
+ at glscommand{theglossaryentry,
   name={\csfmt{theglossaryentry}},
   description={textual representation of the \counter{glossaryentry}
 counter, which is defined with the \styopt{entrycounter} option},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{theHglossaryentry,
+ at glscommand{theHglossaryentry,
   name={\csfmt{theHglossaryentry}},
   description={hypertarget associated with the \counter{glossaryentry}
 counter, which is defined with the \styopt{entrycounter} option},
+  topics={glossarystylecommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsstepentry,
+ at glscommand{glsstepentry,
   name={\csfmt{gls\-step\-entry}},
   user1 = {\margm{label}},
   description={increments the \counter{glossaryentry} counter, which
 is defined with the \styopt{entrycounter} option, and automatically
 labels it with \cs{label}},
+  topics={glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{currentglossary,
+ at glscommand{currentglossary,
   name={\csfmt{currentglossary}},
   description={defined within the glossary to the current glossary
 type, this has no meaning outside of the glossary list},
+  topics={glossarystylecommands,glossrefs},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{frontmatter,
+ at command{frontmatter,
   name={\csfmt{front\-matter}},
   user1={},
   description={switches to front matter},
@@ -8477,7 +12201,7 @@
   category={command}
 }
 
- at index{mainmatter,
+ at command{mainmatter,
   name={\csfmt{main\-matter}},
   user1={},
   description={switches to main matter},
@@ -8485,7 +12209,7 @@
   category={command}
 }
 
- at index{backmatter,
+ at command{backmatter,
   name={\csfmt{back\-matter}},
   user1={},
   description={switches to back matter},
@@ -8493,86 +12217,96 @@
   category={command}
 }
 
- at index{GlsXtrSetDefaultNumberFormat,
+ at glscommand{GlsXtrSetDefaultNumberFormat,
   name={\csfmt{Gls\-Xtr\-Set\-Default\-Number\-Format}},
   user1={\margm{format}},
   description={set the default format to use if the
    \glsaddopt{format} key isn't set},
+  topics={formattingcommands,indexing},
   note={\styfmt{glossaries-extra} v1.19+},
   category={command}
 }
 
- at index{GlsXtrSetDefaultGlsOpts,
+ at glscommand{GlsXtrSetDefaultGlsOpts,
   name={\csfmt{Gls\-Xtr\-Set\-Default\-Gls\-Opts}},
   user1={\margm{options}},
   description={set the default options for commands like \cs{gls}},
+  topics={formattingcommands,indexing},
+  seealso={GlsXtrSetDefaultNumberFormat},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsnumberformat,
+ at glscommand{glsnumberformat,
   name={\csfmt{gls\-number\-format}},
   user1={\margm{text}},
   description={default location format, uses \cs{glshypernumber} if
 hyperlinks enabled otherwise just does \meta{text}},
+  topics={formattingcommands,indexing,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glshypernumber,
+ at glscommand{glshypernumber,
   name={\csfmt{gls\-hyper\-number}},
   user1={\margm{text}},
   description={a location format that has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{hypersf,
+ at glscommand{hypersf,
   name={\csfmt{hypersf}},
   user1={\margm{text}},
   description={a location format that uses the sans-serif 
    font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{hyperit,
+ at glscommand{hyperit,
   name={\csfmt{hyperit}},
   user1={\margm{text}},
   description={a location format that uses the italic 
    font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{hyperbf,
+ at glscommand{hyperbf,
   name={\csfmt{hyperbf}},
   user1={\margm{text}},
   description={a location format that uses the bold 
    font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{hyperemph,
+ at glscommand{hyperemph,
   name={\csfmt{hyperemph}},
   user1={\margm{text}},
   description={a location format that uses \ics{emph} to set the
   font and also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{hyperrm,
+ at glscommand{hyperrm,
   name={\csfmt{hyperrm}},
   user1={\margm{text}},
   description={a location format that uses the serif (Roman) 
    font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{emph,
+ at command{emph,
   name={\csfmt{emph}},
   user1={\margm{text}},
   description={emphasizes the given text (italic or slanted
@@ -8582,7 +12316,7 @@
   category={command}
 }
 
- at index{em,
+ at command{em,
   name={\csfmt{em}},
   description={switch to emphasized font (until end of current scope)},
   note={kernel command},
@@ -8589,7 +12323,7 @@
   category={command}
 }
 
- at index{textsf,
+ at command{textsf,
   name={\csfmt{textsf}},
   user1={\margm{text}},
   description={displays the given text in sans-serif},
@@ -8597,7 +12331,7 @@
   category={command}
 }
 
- at index{textbf,
+ at command{textbf,
   name={\csfmt{textbf}},
   user1={\margm{text}},
   description={displays the given text in bold},
@@ -8605,7 +12339,7 @@
   category={command}
 }
 
- at index{bfseries,
+ at command{bfseries,
   name={\csfmt{bfseries}},
   description={switch to bold (until end of current scope)},
   note={kernel command},
@@ -8612,7 +12346,7 @@
   category={command}
 }
 
- at index{textit,
+ at command{textit,
   name={\csfmt{textit}},
   user1={\margm{text}},
   description={displays the given text in italic},
@@ -8621,7 +12355,7 @@
   category={command}
 }
 
- at index{texttt,
+ at command{texttt,
   name={\csfmt{texttt}},
   user1={\margm{text}},
   description={displays the given text in monospaced font},
@@ -8629,33 +12363,33 @@
   category={command}
 }
 
- at index{@firstofone,
+ at command{@firstofone,
   name={\csfmt{@first\-of\-one}},
   user1={\margm{code}},
   description={does \meta{code}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{@gobble,
+ at command{@gobble,
   name={\csfmt{@gobble}},
   user1={\margm{code}},
   description={does nothing (the argument is discarded)},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{@for,
+ at command{@for,
   name={\csfmt{@for}},
   user1={\meta{cs}:=\meta{list}\csfmt{do}\margm{code}},
   description={iterates over each item in the comma-separated
 \meta{list}, and on each iteration sets \meta{cs} to the current
 element and performs \meta{code}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{alph,
+ at command{alph,
   name={\csfmt{alph}},
   user1={\margm{counter}},
   description={displays the given counter as an alphabetic character
@@ -8664,7 +12398,7 @@
   category={command}
 }
 
- at index{footnote,
+ at command{footnote,
   name={\csfmt{footnote}},
   user1={\oargm{number}\margm{text}},
   description={displays the given text as a footnote},
@@ -8672,7 +12406,7 @@
   category={command}
 }
 
- at index{index,
+ at command{index,
   name={\csfmt{index}},
   user1={\margm{text}},
   description={indexes the given term by writing the relevant
@@ -8682,36 +12416,39 @@
   category={command}
 }
 
- at index{glsignore,
+ at glscommand{glsignore,
   name={\csfmt{gls\-ignore}},
   user1={\margm{text}},
   description={does nothing but when used as a location format
    \bibgls\ recognises it as an \idx{ignoredrecord}},
+  topics={formattingcommands,indexing,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{@istfilename,
+ at glscommand{@istfilename,
   name={\csfmt{@istfilename}},
   user1={\margm{filename}},
   description={identifies the style file in the \ext{aux}
    file for the benefit of external tools like 
     \idx{makeglossaries} and \idx{makeglossaries-lite}},
+  topics={internalcommands,auxcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glstriggerrecordformat,
+ at glscommand{glstriggerrecordformat,
   name={\csfmt{gls\-trigger\-record\-format}},
   user1={\margm{text}},
   description={does nothing but when used as a location format
    \bibgls\ recognises it as an \idx{ignoredrecord} indexed by
    commands like \csref{rgls}},
+  topics={formattingcommands,indexing,loclistcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{at,
+ at command{at,
   name={\csfmt{@}},
   user1={},
   description={adjusts the space factor to indicate the following
@@ -8720,15 +12457,31 @@
   category={command}
 }
 
- at index{forall,
+ at command{forall,
   name={\csfmt{forall}},
   user1={},
   description={for all symbol ($\forall$)},
-  note={kernel command},
+  note={kernel command\texparserdefnote\ (maths mode)},
   category={command}
 }
 
- at index{ensuremath,
+ at command{heartsuit,
+  name={\csfmt{heartsuit}},
+  user1={},
+  description={heart symbol ($\heartsuit$)},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{diamondsuit,
+  name={\csfmt{diamondsuit}},
+  user1={},
+  description={diamond symbol ($\diamondsuit$)},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{ensuremath,
   name={\csfmt{ensuremath}},
   user1={\margm{maths}},
   description={ensures the argument is in math mode. As a general
@@ -8735,11 +12488,11 @@
 rule this should only be used if you know for certain that
 the argument just contains mathematical markup and doesn't cause a
 change in mode},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{mathord,
+ at command{mathord,
   name={\csfmt{mathord}},
   user1={\margm{maths}},
   description={assigns the character or sub-formula in the 
@@ -8748,7 +12501,7 @@
   category={command}
 }
 
- at index{mathop,
+ at command{mathop,
   name={\csfmt{mathop}},
   user1={\margm{maths}},
   description={assigns the character or sub-formula in the 
@@ -8757,7 +12510,7 @@
   category={command}
 }
 
- at index{mathpunct,
+ at command{mathpunct,
   name={\csfmt{mathpunct}},
   user1={\margm{maths}},
   description={assigns the character or sub-formula in the 
@@ -8766,7 +12519,7 @@
   category={command}
 }
 
- at index{mathrel,
+ at command{mathrel,
   name={\csfmt{mathrel}},
   user1={\margm{maths}},
   description={assigns the character or sub-formula in the 
@@ -8775,7 +12528,7 @@
   category={command}
 }
 
- at index{write18,
+ at command{write18,
   name={\csfmt{write18}},
   user1={\margm{system call}},
   description={perform shell escape if permitted},
@@ -8783,7 +12536,7 @@
   category={command}
 }
 
- at index{immediate,
+ at command{immediate,
   name={\csfmt{immediate}},
   user1={\meta{file operation}},
   description={perform the file operation immediately instead of the
@@ -8792,7 +12545,7 @@
   category={command}
 }
 
- at index{AtEndDocument,
+ at command{AtEndDocument,
   name={\csfmt{AtEndDocument}},
   user1={\margm{code}},
   description={perform \meta{code} at the end of the document},
@@ -8800,40 +12553,40 @@
   category={command}
 }
 
- at index{unexpanded,
+ at command{unexpanded,
   name={\csfmt{unexpanded}},
   user1={\margm{general text}},
   description={expands to the argument},
-  note={{}\eTeX\ primitive},
+  note={{}\eTeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{detokenize,
+ at command{detokenize,
   name={\csfmt{detokenize}},
   user1={\margm{general text}},
   description={expands the argument to a list of character tokens},
-  note={{}\eTeX\ primitive},
+  note={{}\eTeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{input,
+ at command{input,
   name={\csfmt{input}},
   user1={\margm{file}},
   description={input the given file},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{IfFileExists,
+ at command{IfFileExists,
   name={\csfmt{IfFileExists}},
   user1={\margm{file}\margm{true}\margm{false}},
   description={if the given \meta{file} exists does \meta{true}
    otherwise does \meta{false}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{jobname,
+ at command{jobname,
   name={\csfmt{jobname}},
   user1={},
   description={the current job name, which is usually the name of
@@ -8842,63 +12595,63 @@
   category={command}
 }
 
- at index{protect,
+ at command{protect,
   name={\csfmt{protect}},
   user1={\meta{token}},
   description={protects \meta{token} from expansion},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ifcase,
+ at command{ifcase,
   name={\csfmt{ifcase}},
   user1={\meta{number}},
   description={case conditional},
-  note={\TeX\ primitive},
+  note={\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{ifnum,
+ at command{ifnum,
   name={\csfmt{ifnum}},
   user1={\meta{number1}\meta{comparison}\meta{number2}},
   description={integer conditional},
-  note={\TeX\ primitive},
+  note={\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{renewcommand,
+ at command{renewcommand,
   name={\csfmt{re\-new\-com\-mand}},
   user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
   description={redefines an existing command},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{newcommand,
+ at command{newcommand,
   name={\csfmt{new\-com\-mand}},
   user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
   description={defines a new command},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{providecommand,
+ at command{providecommand,
   name={\csfmt{pro\-vide\-com\-mand}},
   user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
   description={defines a command if it's not already defined},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{section,
+ at command{section,
   name={\csfmt{section}},
-  user1={\oargm{toc title}\margm{title}},
+  user1={\oargm{\idx{toc} title}\margm{title}},
   description={section heading},
   note={most classes that have a concept of document sections},
   category={command}
 }
 
- at index{section*,
+ at command{section*,
   name={\csfmt{section*}},
   user1={\margm{title}},
   description={unnumbered section heading},
@@ -8906,15 +12659,15 @@
   category={command}
 }
 
- at index{chapter,
+ at command{chapter,
   name={\csfmt{chapter}},
-  user1={\oargm{toc title}\margm{title}},
+  user1={\oargm{\idx{toc} title}\margm{title}},
   description={chapter heading},
   note={book or report classes},
   category={command}
 }
 
- at index{chapter*,
+ at command{chapter*,
   name={\csfmt{chapter*}},
   user1={\margm{title}},
   description={unnumbered chapter heading},
@@ -8922,7 +12675,7 @@
   category={command}
 }
 
- at index{caption,
+ at command{caption,
   name={\csfmt{caption}},
   user1={\oargm{list title}\margm{title}},
   description={caption title},
@@ -8930,7 +12683,7 @@
   category={command}
 }
 
- at index{boldsymbol,
+ at command{boldsymbol,
   name={\csfmt{boldsymbol}},
   user1={\margm{symbol}},
   description={renders given maths symbol in bold if supported by
@@ -8939,7 +12692,7 @@
   category={command}
 }
 
- at index{mathcal,
+ at command{mathcal,
   name={\csfmt{mathcal}},
   user1={\margm{character}},
   description={renders the given (\idx!{uppercase}) maths character in a calligraphic font},
@@ -8947,186 +12700,294 @@
   category={command}
 }
 
- at index{ifglsentryexists,
+ at glscommand{ifglsentryexists,
   name={\csfmt{ifglsentryexists}},
   user1={\margm{label}\margm{true}\margm{false}},
   description={tests if the entry given by \meta{label} exists},
+  topics={conditionals,entryrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsdefaulttype,
+ at glscommand{glsdefaulttype,
   name={\csfmt{gls\-default\-type}},
   user1={},
   description={the default glossary type},
+  topics={glossrefs},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glssymbolsgroupname,
+ at glscommand{glssymbolsgroupname,
   name={\csfmt{gls\-symbols\-group\-name}},
   user1={},
-  description={the name used for the symbols group},
+  description={language-sensitive name used for the symbols group and 
+   also used for the title of the glossary created with the \styopt{symbols} 
+   package option},
+  topics={fixedtextcommands,glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsnumbersgroupname,
+ at glscommand{glsnumbersgroupname,
   name={\csfmt{gls\-numbers\-group\-name}},
   user1={},
-  description={the name used for the numbers group},
+  description={language-sensitive name used for the numbers group 
+   and also used for the title of the glossary created with the 
+   \styopt{numbers} package option},
+  topics={fixedtextcommands,glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{printunsrtglossary,
+ at glscommand{printunsrtglossary,
   name={\csfmt{print\-unsrt\-glos\-sary}},
   user1={\oargm{options}},
-  description={display the glossary by iterating over all entries 
+  description={display a glossary by iterating over all entries 
    associated with that glossary in the order in which they were
-   defined},
+   defined (which, with \bibgls, should correspond to the
+   order obtained from the sort settings given in the
+   \idx{resourceset} options)},
+  topics={glossrefs,loops},
   note={\styfmt{glossaries-extra} v1.08+},
   category={command}
 }
 
- at index{printunsrtglossary*,
+ at glscommand{printunsrtglossary*,
   name={\csfmt{print\-unsrt\-glos\-sary*}},
   user1={\oargm{options}\margm{code}},
   description={as \cs{printunsrtglossary} but performs
   \meta{code} first (scoped to localise any assignments within
   \meta{code})},
+  topics={glossrefs,loops},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{printunsrtglossaries,
+ at glscommand{printunsrtglossaries,
   name={\csfmt{print\-unsrt\-glos\-saries}},
   user1={},
   description={iterates over all non-ignored defined glossaries
    and performs \cs{printunsrtglossary} for each one},
+  topics={glossrefs,loops},
   note={\styfmt{glossaries-extra} v1.08+},
   category={command}
 }
 
- at index{printunsrtglossaryentryprocesshook,
+ at glscommand{printunsrtglossaryentryprocesshook,
   name={\csfmt{print\-unsrt\-glos\-sary\-entry\-process\-hook}},
   user1={\margm{label}},
   description={performed at each iteration of the internal loop used
 by \cs{printunsrtglossary}},
+  topics={glossrefs,loops,hooks},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{printunsrtglossaryskipentry,
+ at glscommand{printunsrtglossaryskipentry,
   name={\csfmt{print\-unsrt\-glos\-sary\-skip\-entry}},
   description={only allowed within
    \cs{printunsrtglossaryentryprocesshook} this command 
    indicates that the current entry should be skipped},
+  topics={glossrefs,loops,hooks},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{printunsrtglossarypredoglossary,
+ at glscommand{printunsrtglossarypredoglossary,
   name={\csfmt{print\-unsrt\-glos\-sary\-pre\-do\-glos\-sary}},
   description={hook performed by \cs{printunsrtglossary}},
+  topics={glossrefs,hooks},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{glscategory,
+ at glscommand{glscategory,
   name={\csfmt{gls\-cat\-e\-gory}},
   user1={\margm{label}},
   description={expands to the value of the \field{category} field
 for the entry identified by \meta{label} or nothing if the entry
 hasn't been defined},
+  topics={fieldrefcommands,catattrcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsifcategory,
+ at glscommand{glsifcategory,
   name={\csfmt{gls\-if\-cat\-e\-gory}},
   user1={\margm{label}\margm{category}\margm{true}\margm{false}},
   description={does \meta{true} if the \field{category} field for
    the entry given by \meta{label} is \meta{category}},
+  topics={conditionals,fieldrefcommands,catattrcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtriflabelinlist,
+ at glscommand{glsxtriflabelinlist,
   name={\csfmt{gls\-xtr\-if\-label\-in\-list}},
   user1={\margm{label}\margm{list}\margm{true}\margm{false}},
   description={tests if the \meta{label} is contained
    in the comma-separated \meta{list}, where both \meta{label}
    and \meta{list} are fully expanded before testing. This test
-   is designed for \emph{labels} which should be fully expandable},
+   is designed for \emph{labels} that are fully expandable},
+  topics={conditionals,listcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{printgloss.type,
+ at printglossoption{printgloss.type,
   parent = {printunsrtglossary},
   name = {\csoptfmt{type}},
+  user1 = {\margm{glossary-label}},
+  description={identifies the glossary list (\cs{glsdefaulttype}, if
+   omitted)},
   category={commandoption},
 }
 
- at index{printgloss.style,
+ at printglossoption{printgloss.style,
   parent = {printunsrtglossary},
   name = {\csoptfmt{style}},
+  user1 = {\margm{style-name}},
+  description={use the glossary style identified by \meta{style-name} 
+   (overrides current style setting)},
   category={commandoption},
 }
 
- at index{printgloss.title,
+ at printglossoption{printgloss.entrycounter,
   parent = {printunsrtglossary},
+  name = {\csoptfmt{entrycounter}},
+  user1 = {\margm{boolean}},
+  description = {locally enable or disable top-level enumeration 
+   (overrides \styopt{entrycounter} package option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.subentrycounter,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{subentrycounter}},
+  user1 = {\margm{boolean}},
+  description = {locally enable or disable level~1 enumeration 
+   (overrides \styopt{subentrycounter} package option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.nopostdot,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{nopostdot}},
+  user1 = {\margm{boolean}},
+  description = {locally omit the post-description punctuation (overrides
+   \styopt{nopostdot} and related package options)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.numberedsection,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{numbered\-section}},
+  user1={\margm{value}},
+  description={locally change whether or not to use a numbered
+   sectioning command (overrides \styopt{numberedsection} package
+   option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.title,
+  parent = {printunsrtglossary},
   name = {\csoptfmt{title}},
+  user1={\margm{text}},
+  description = {locally sets the title for this glossary},
   category={commandoption},
 }
 
- at index{printgloss.toctitle,
+ at printglossoption{printgloss.toctitle,
   parent = {printunsrtglossary},
   name = {\csoptfmt{toctitle}},
+  description = {locally sets the \idx{toc} title for this glossary},
+  user1={\margm{text}},
   category={commandoption},
 }
 
- at index{printgloss.target,
+ at printglossoption{printgloss.target,
   parent = {printunsrtglossary},
   name = {\csoptfmt{target}},
+  user1={\margm{boolean}},
+  description = {locally enables or disables the hypertargets for
+   each item},
   category={commandoption},
 }
 
- at index{printgloss.targetnameprefix,
+ at printglossoption{printgloss.targetnameprefix,
   parent = {printunsrtglossary},
   name = {\csoptfmt{target\-name\-prefix}},
+  user1={\margm{label}},
+  description = {locally assign a prefix for the hypertargets
+   assigned to each item (if \printglossopt[true]{target})
+   to avoid duplicate target names},
   category={commandoption},
 }
 
- at index{printgloss.prefix,
+ at printglossoption{printgloss.prefix,
   parent = {printunsrtglossary},
   name = {\csoptfmt{prefix}},
+  user1 = {\margm{label}},
+  description = {locally redefine \cs{glolinkprefix} for the item
+  hypertargets and for any entry reference or cross-reference hyperlinks},
   category={commandoption},
 }
 
- at index{printgloss.nonumberlist,
+ at printglossoption{printgloss.nonumberlist,
   parent = {printunsrtglossary},
   name = {\csoptfmt{no\-number\-list}},
+  user1 = {\margm{boolean}},
+  description={locally change whether or not to display the
+   \idxpl{locationlist} (overrides \styopt{nonumberlist} package
+   option)},
   category={commandoption},
 }
 
- at index{printgloss.nogroupskip,
+ at printglossoption{printgloss.nogroupskip,
   parent = {printunsrtglossary},
   name = {\csoptfmt{no\-group\-skip}},
+  user1 = {\margm{boolean}},
+  description={locally change whether or not to separate groups
+  with a vertical space if the glossary style that support this option 
+   (overrides \styopt{nogroupskip} package option)},
   category={commandoption},
 }
 
- at index{cs.makeglossaries,
+ at printglossoption{printgloss.label,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{label}},
+  user1 = {\margm{label}},
+  description = {creates a label for this glossary by locally
+   using \code{\ics{glsxtrsetglossarylabel}\margm{label}}},
+  category={commandoption},
+}
+
+ at glscommand{glsxtrsetglossarylabel,
+  name={\csfmt{gls\-xtr\-set\-glos\-sary\-label}},
+  user1={\margm{label}},
+  description={sets the label for subsequent glossaries
+   (should be scoped or updated per glossary to prevent
+   duplicate labels) and defines \ics{@currentlabelname} to the
+   glossary's \idx{toc} title. This is an alternative to the
+   \styopt[nameref]{numberedsection} package option or
+   \printglossopt{label} \ics{printunsrtglossary} option},
+  topics={crossrefcommands},
+  note={\styfmt{glossaries-extra} v1.39+},
+  category={command}
+}
+
+ at glscommand{cs.makeglossaries,
   name={\csfmt{make\-glos\-saries}},
   user1={},
   description={opens associated glossary files to be processed
    by \idx{makeindex} or \idx{xindy}},
+  topics={indexing},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{makenoidxglossaries,
+ at glscommand{makenoidxglossaries,
   name={\csfmt{make\-noidx\-glos\-saries}},
   user1={},
   description={indicates that \TeX\ should be used to sort and
@@ -9133,415 +12994,556 @@
    collate the glossary information instead of using an
    external application; this command should not be used
    with \bibgls},
+  topics={indexing},
   note={\styfmt{glossaries} v4.04+},
   category={command}
 }
 
- at index{printglossary,
+ at glscommand{printglossary,
   name={\csfmt{print\-glos\-sary}},
   user1={\oargm{options}},
   description={inputs file created by \idx{makeindex} or \idx{xindy}},
+  topics={glossrefs},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{printglossaries,
+ at glscommand{printglossaries,
   name={\csfmt{print\-glos\-saries}},
   user1={},
   description={iterates over all non-ignored defined glossaries
    and performs \cs{printglossary} for each one},
+  topics={glossrefs,loops},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{printnoidxglossary,
+ at glscommand{printnoidxglossary,
   name={\csfmt{print\-noidx\-glos\-sary}},
   user1={\oargm{options}},
   description={uses \TeX\ to sort, collate and list the glossary},
+  topics={glossrefs},
   note={\styfmt{glossaries} v4.04+},
   category={command}
 }
 
- at index{printnoidxglossaries,
+ at glscommand{printnoidxglossaries,
   name={\csfmt{print\-noidx\-glos\-saries}},
   user1={},
   description={iterates over all non-ignored defined glossaries
    and performs \cs{printnoidxglossary} for each one},
+  topics={glossrefs,loops},
   note={\styfmt{glossaries} v4.04+},
   category={command}
 }
 
- at index{makefirstuc,
+ at command{makefirstuc,
   name={\csfmt{make\-first\-uc}},
   user1={\margm{text}},
-  description={converts the first letter of \meta{text} to upper case},
-  note={\styfmt{mfirstuc}},
+  description={converts the first letter of \meta{text} to \idx{uppercase}},
+  note={\styfmt{mfirstuc}\texparserdefnote},
   category={command}
 }
 
- at index{xmakefirstuc,
+ at command{xmakefirstuc,
   name={\csfmt{xmake\-first\-uc}},
   user1={\margm{text}},
   description={applies \cs{makefirstuc} with one level expansion
    of the first token of \meta{text}},
-  note={\styfmt{mfirstuc} v1.01+},
+  note={\styfmt{mfirstuc}\texparserdefnote\ v1.01+},
   category={command}
 }
 
- at index{ac,
+ at glscommand{ac,
   name={\csfmt{ac}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={equivalent to \cs{gls}},
-  note={\styfmt{glossaries-extra} \styopt{shortcuts} package
-option},
+  topics={entryrefcommands,linkcommands,indexing,abbreviationcommands,shortcutcommands},
+  note={\styfmt{glossaries-extra} \styopt{shortcuts}},
   category={command}
 }
 
- at index{ab,
+ at glscommand{ab,
   name={\csfmt{ab}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={equivalent to \cs{gls}},
+  topics={entryrefcommands,linkcommands,indexing,abbreviationcommands,shortcutcommands},
   note={\styfmt{glossaries-extra} 
   \styopt[abbreviations]{shortcuts}},
   category={command}
 }
 
- at index{glsxtrp,
+ at glscommand{glsxtrp,
   name={\csfmt{glsxtrp}},
   user1={\margm{field}\margm{label}},
-  description={displays the given field for the entry given by label},
+  description={displays the given \meta{field} value for the entry given by 
+  \meta{label} (no hyperlinks, except in the glossary, and no indexing 
+  by default, but includes formatting, if appropriate)},
+  topics={fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.07+},
   category={command}
 }
 
- at index{glsps,
+ at glscommand{glsps,
   name={\csfmt{glsps}},
   user1={\margm{label}},
   description={shortcut for \code{\cs{glsxtrp}\marg{short}\margm{label}}},
+  topics={fieldrefcommands,shortcutcommands},
   note={\styfmt{glossaries-extra} v1.07+},
   category={command}
 }
 
- at index{glspt,
+ at glscommand{glspt,
   name={\csfmt{glspt}},
   user1={\margm{label}},
   description={shortcut for \code{\cs{glsxtrp}\marg{text}\margm{label}}},
+  topics={fieldrefcommands,shortcutcommands},
   note={\styfmt{glossaries-extra} v1.07+},
   category={command}
 }
 
- at index{GlsXtrFmtField,
+ at glscommand{glsxtrsetpopts,
+  name={\csfmt{glsxtrsetpopts}},
+  user1={\margm{options}},
+  description={sets the default options for \cs{glsxtrp}},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glossxtrsetpopts,
+  name={\csfmt{glossxtrsetpopts}},
+  description={glossary hook that uses \cs{glsxtrsetpopts} 
+   to enable hyperlinks by default for \cs{glsxtrp}},
+  topics={assigncommands,hooks},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{GlsXtrFmtField,
   name={\csfmt{Gls\-Xtr\-Fmt\-Field}},
   user1={},
   description={expands to the internal label of the field used
    to store the control sequence name for use with \csref{glsxtrfmt}},
+  topics={fieldrefcommands,formattingcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{glsxtrusesee,
+ at glscommand{glsxtrusesee,
   name={\csfmt{gls\-xtr\-use\-see}},
   user1={\margm{label}},
   description={applies \cs{glsseeformat} to the entry's
    \field{see} field if not empty},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.06+},
   category={command}
 }
 
- at index{glsxtruseseealso,
+ at glscommand{glsxtruseseealso,
   name={\csfmt{gls\-xtr\-use\-seealso}},
   user1={\margm{label}},
   description={applies \cs{glsseeformat} to the entry's
    \field{seealso} field if not empty},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.16+},
   category={command}
 }
 
- at index{glsxtrsetaliasnoindex,
+ at glscommand{glsxtrsetaliasnoindex,
   name={\csfmt{gls\-xtr\-set\-alias\-noindex}},
   user1={},
   description={hooks into the alias \glsopt{noindex} setting},
+  topics={hooks,crossrefcommands},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{glsxtruseseealsoformat,
+ at glscommand{glsxtruseseealsoformat,
   name={\csfmt{gls\-xtr\-use\-seealso\-format}},
   user1={\margm{xr list}},
   description={used to format the entries whose labels are 
    given in \meta{xr list} as a list of \qt{see also}
 cross-references},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,formattingcommands},
   note={\styfmt{glossaries-extra} v1.16+},
   category={command}
 }
 
- at index{glsxtrindexseealso,
+ at glscommand{glsxtrindexseealso,
   name={\csfmt{gls\-xtr\-index\-seealso}},
   user1={\margm{label}\margm{xr list}},
   description={indexes a \qt{see also} cross-reference},
+  topics={indexing,crossrefcommands},
   note={\styfmt{glossaries-extra} v1.16+},
   category={command}
 }
 
- at index{glssee,
+ at glscommand{glssee,
   name={\csfmt{glssee}},
   user1={\oargm{tag}\margm{label}\margm{xr label list}},
   description={indexes a \qt{see} cross-reference},
+  topics={indexing,crossrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsxtrseelist,
+ at glscommand{glsxtrseelist,
   name={\csfmt{gls\-xtr\-see\-list}},
   user1={\margm{xr label list}},
   description={formats the list of cross-reference labels, without
 the initial \qt{see} tag},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,formattingcommands},
   note={\styfmt{glossaries-extra} v1.16+},
   category={command}
 }
 
- at index{setabbreviationstyle,
+ at glscommand{setabbreviationstyle,
   name={\csfmt{setabbreviationstyle}},
   user1={\oargm{category}\margm{style-name}},
   description={sets the abbreviation style to \meta{style-name} for the
 given \meta{category}, must be used before the abbreviation is
 defined},
+  topics={abbreviationcommands,assigncommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glshex,
+ at glscommand{glshex,
   name={\csfmt{glshex}},
   user1={},
   description={expands to \cs{cs.string}\cs{u}},
+  topics={charcommands,collationsubrules},
   note={\styfmt{glossaries-extra} v1.21+ (moved to
 \styfmt{glossaries-extra-bib2gls} in v1.27)},
   category={command}
 }
 
- at index{glscapturedgroup,
+ at glscommand{glscapturedgroup,
   name={\csfmt{glscapturedgroup}},
-  user1={},
   description={expands to \cs{cs.string}\idx{dollarchar}},
+  topics={charcommands,regex},
   note={\styfmt{glossaries-extra-bib2gls} v1.31+},
   category={command}
 }
 
- at index{GlsXtrBibTeXEntryAliases,
+ at glscommand{GlsXtrBibTeXEntryAliases,
   name={\csfmt{Gls\-Xtr\-Bib\-TeX\-Entry\-Aliases}},
   user1={},
   description={expands to the set of common entry aliases for
 \atentry{bibtexentry}},
+  topics={definingterms},
   note={\styfmt{glossaries-extra-bib2gls} v1.29+},
   category={command}
 }
 
- at index{GlsXtrProvideBibTeXFields,
+ at glscommand{GlsXtrProvideBibTeXFields,
   name={\csfmt{Gls\-Xtr\-Provide\-Bib\-TeX\-Fields}},
   user1={},
   description={defines the standard \BibTeX\ fields using
    \cs{glsaddstoragekey}},
+  topics={definingterms,fieldrefcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.29+},
   category={command}
 }
 
- at index{glsxtrprovidecommand,
+ at glscommand{glsxtrprovidecommand,
   name={\csfmt{gls\-xtr\-provide\-command}},
   user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
   description={behaves like \cs{providecommand} in the document but
    like \cs{renewcommand} in \bibgls},
-  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  topics={providingcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote\ v1.27+},
   category={command}
 }
 
- at index{glsrenewcommand,
+ at glscommand{glsrenewcommand,
   name={\csfmt{gls\-re\-new\-command}},
   user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
   description={behaves like \cs{renewcommand} but only generates a
 warning rather than an error if the command isn't already defined},
-  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  topics={providingcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote\ v1.37+},
   category={command}
 }
 
- at index{glsxtrresourceinit,
+ at glscommand{glsxtrresourceinit,
   name={\csfmt{gls\-xtr\-resource\-init}},
   user1={},
   description={provides code that locally redefines commands 
    during the protected write operation performed by 
    \csref{glsxtrresourcefile}},
+  topics={hooks},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{glsxtrgroupfield,
+ at mainglscommand{GlsXtrDefaultResourceOptions,
+  name={\csfmt{Gls\-Xtr\-Default\-Resource\-Options}},
+  user1={},
+  description={provides default options for 
+   \csref{glsxtrresourcefile}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.40+},
+  category={command}
+}
+
+ at glscommand{glsxtrgroupfield,
   name={\csfmt{gls\-xtr\-group\-field}},
   user1={},
   description={expands to the field label used to store the
    entry group labels},
+  topics={fieldrefcommands,groupcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{glolinkprefix,
+ at glscommand{glolinkprefix,
   name={\csfmt{glo\-link\-prefix}},
   user1={},
   description={target name prefix used in entry hyperlinks},
+  topics={linkcommands,hooks},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{apptoglossarypreamble,
+ at glscommand{setglossarypreamble,
+  name={\csfmt{set\-glossary\-preamble}},
+  user1={\oargm{type}\margm{code}},
+  description={sets \meta{code} as the preamble for the given
+glossary (or the default of \meta{type} is omitted)},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  seealso={glossarypreamble},
+  category={command}
+}
+
+ at glscommand{apptoglossarypreamble,
   name={\csfmt{app\-to\-glossary\-preamble}},
   user1={\oargm{type}\margm{code}},
   description={appends \meta{code} to the preamble for the given
-glossary},
+glossary (or the default of \meta{type} is omitted)},
+  topics={glossrefs,hooks,glossarystylecommands},
   note={\styfmt{glossaries-extra}},
+  seealso={glossarypreamble},
   category={command}
 }
 
- at index{glossarypreamble,
+ at glscommand{glossarypreamble,
   name={\csfmt{glossary\-preamble}},
   description={the preamble for all glossaries except 
   those that have the preamble explicitly set with
   \cs{apptoglossarypreamble}},
-  note={\styfmt{glossaries-extra}},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries}},
   seealso={apptoglossarypreamble},
   category={command}
 }
 
- at index{glsbackslash,
+ at glscommand{glossarypostamble,
+  name={\csfmt{glossary\-post\-amble}},
+  description={the postamble that's placed after each glossary},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  seealso={apptoglossarypreamble},
+  category={command}
+}
+
+ at glscommand{glsbackslash,
   name={\csfmt{glsbackslash}},
   user1={},
   description={expands to a literal backslash \idx{backslashchar} 
    character},
-  note={\styfmt{glossaries}},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
   category={command}
 }
 
- at index{glsquote,
+ at glscommand{glsopenbrace,
+  name={\csfmt{glsopenbrace}},
+  user1={},
+  description={expands to a literal open brace \idx{openbracechar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsclosebrace,
+  name={\csfmt{glsclosebrace}},
+  user1={},
+  description={expands to a literal close brace \idx{closebracechar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glspercentchar,
+  name={\csfmt{glspercentchar}},
+  user1={},
+  description={expands to a literal percent character \idx{percentchar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsquote,
   name={\csfmt{glsquote}},
   user1={\margm{text}},
   description={encapsulates \meta{text} with literal straight
    double-quotes \texttt{\glsquote{\meta{text}}}},
+  topics={charcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glstildechar,
+ at glscommand{glstildechar,
   name={\csfmt{glstildechar}},
   user1={},
   description={expands to a literal tilde \texttt{\glstildechar} character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{descriptionname,
+  name={\csfmt{description\-name}},
+  user1={},
+  description={language-sensitive name used for the description 
+   header for some glossary styles},
+  topics={fixedtextcommands,glossarystylecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{pagelistname,
-  name={\csfmt{pagelistname}},
+ at glscommand{pagelistname,
+  name={\csfmt{page\-list\-name}},
   user1={},
   description={language-sensitive name used for the location list 
    header for some glossary styles},
+  topics={fixedtextcommands,glossarystylecommands,loclistcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{seealsoname,
+ at command{seealsoname,
   name={\csfmt{seealsoname}},
   user1={},
   description={language sensitive \qt{see also} text},
-  note={\styfmt{glossaries-extra} or language
-packages},
+  topics={fixedtextcommands,glossarystylecommands,loclistcommands},
+  note={\styfmt{glossaries-extra} or language packages},
   category={command}
 }
 
- at index{glsxtruserfield,
-  name={\csfmt{gls\-xtr\-user\-field}},
+ at glscommand{glossaryname,
+  name={\csfmt{glossary\-name}},
   user1={},
-  description={used by the parenthetical abbreviation styles, this
-   expands to the label of the field used to store the parenthetical
-   material},
-  note={\styfmt{glossaries-extra} v1.04+},
+  description={language-sensitive name used for the title of the default
+   \code{main} glossary},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries} or language packages},
   category={command}
 }
 
- at index{glsxtruserparen,
-  name={\csfmt{gls\-xtr\-user\-paren}},
-  user1={\margm{text}\margm{label}},
-  description={used by the \abbrstyle{long-short-user} and
-  \abbrstyle{short-long-user} abbreviation styles
-   to format the parenthetical material where \meta{text}
-   is the default parenthetical text and \meta{label}
-   is the entry's label. This checks the field given
-   by \cs{glsxtruserfield} and, if set, the \meta{text} is
-   followed by a comma and the user value},
-  note={\styfmt{glossaries-extra} v1.04+},
+ at glscommand{indexname,
+  name={\csfmt{index\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the 
+  glossary created with the \styopt{index} package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries} or language packages},
   category={command}
 }
 
- at index{glsxtrfullsep,
-  name={\csfmt{gls\-xtr\-full\-sep}},
-  user1={\margm{label}},
-  description={the separator used in the full format for the parenthetical styles},
+ at glscommand{acronymname,
+  name={\csfmt{acronym\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the
+   glossary created with the \styopt{acronym} or \styopt{acronyms} 
+   package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{abbreviationname,
+  name={\csfmt{ab\-bre\-vi\-a\-tion\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the
+   glossary created with the \styopt{abbreviations} package option},
+  topics={fixedtextcommands,glossarystylecommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{GlsXtrForeignText,
+ at glscommand{GlsXtrForeignText,
   name={\csfmt{Gls\-Xtr\-Foreign\-Text}},
   user1={\margm{label}\margm{text}},
   description={encapsulates \meta{text} in \csfmt{foreignlanguage}
   where the language label is obtained from the locale tag
   given in the field identified by \cs{GlsXtrForeignTextField}},
+  topics={formattingcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.32+},
   category={command}
 }
 
- at index{GlsXtrForeignTextField,
+ at glscommand{GlsXtrForeignTextField,
   name={\csfmt{Gls\-Xtr\-Foreign\-Text\-Field}},
   description={used by \cs{GlsXtrForeignText} to identify
    the field containing the locale tag},
+  topics={fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.32+},
   category={command}
 }
 
- at index{glsxtrparen,
+ at glscommand{glsxtrparen,
   name={\csfmt{gls\-xtr\-paren}},
   user1={\margm{text}},
-  description={used to markup parenthetical material},
+  description={used to markup parenthetical material, such as
+   in \cs{glsxtrpostlinkAddDescOnFirstUse} or in the
+  \abbrstyle{long-short} and \abbrstyle{short-long} abbreviation
+  styles},
+  topics={formattingcommands},
   note={\styfmt{glossaries-extra} v1.17+},
   category={command}
 }
 
- at index{glsxtrpostdescabbreviation,
+ at glscommand{glsxtrpostdescabbreviation,
   name={\csfmt{gls\-xtr\-post\-desc\-abbreviation}},
   user1={},
   description={hook used after the description is displayed in the
    glossary for entries that have the
    \field{category} set to \code{abbreviation}},
+  topics={hooks,abbreviationcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostdescsymbol,
+ at glscommand{glsxtrpostdescsymbol,
   name={\csfmt{gls\-xtr\-post\-desc\-symbol}},
   user1={},
   description={hook used after the description is displayed in the
    glossary for entries that have the
    \field{category} set to \code{symbol}},
+  topics={hooks},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostdescgeneral,
+ at glscommand{glsxtrpostdescgeneral,
   name={\csfmt{gls\-xtr\-post\-desc\-general}},
   user1={},
   description={hook used after the description is displayed in the
    glossary for entries that have the
    \field{category} set to \code{general}},
+  topics={hooks},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostdesccategory,
+ at glscommand{glsxtrpostdesccategory,
   name={\csfmt{gls\-xtr\-post\-desc\-\meta{category}}},
   user1={},
   description={hook used after the description is displayed in the
@@ -9548,20 +13550,25 @@
    glossary for entries that have the
    \field{category} set to \meta{category}. Common category hooks 
    such as \cs{glsxtrpostdescgeneral} are provided by
-   \styfmt{glossaries-extra}, custom categories need the hook defined},
+   \styfmt{glossaries-extra}.  If required,
+   this hook can be defined with \cs{glsdefpostdesc}},
+  topics={hooks,glossarystylecommands},
+  note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostnamecategory,
+ at glscommand{glsxtrpostnamecategory,
   name={\csfmt{gls\-xtr\-post\-name\-\meta{category}}},
   user1={},
   description={hook used by \cs{glossentryname} for entries 
    that have the \field{category} set to \meta{category}. 
    If required, this hook can be defined with \cs{glsdefpostname}},
+  topics={hooks,glossarystylecommands},
+  note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrpostlinkcategory,
+ at glscommand{glsxtrpostlinkcategory,
   name={\csfmt{gls\-xtr\-post\-link\-\meta{category}}},
   user1={},
   description={hook used after commands like \cs{gls} 
@@ -9568,462 +13575,641 @@
    for entries that have the
    \field{category} set to \meta{category}. If required,
    this hook can be defined with \cs{glsdefpostlink}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{GlsXtrFmtDefaultOptions,
+ at glscommand{GlsXtrFmtDefaultOptions,
   name={\csfmt{Gls\-Xtr\-Fmt\-Default\-Options}},
   user1={},
   description={the default options used by \csref{glsxtrfmt}},
+  topics={formattingcommands,indexing},
   note={\styfmt{glossaries-extra} v1.12+},
   category={command}
 }
 
- at index{glslink,
+ at glscommand{glslink,
   name={\csfmt{glslink}},
   user1={\oargm{options}\margm{label}\margm{text}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the given link text without altering the first use flag},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   seealso={glsdisp},
   category={command}
 }
 
- at index{glsdisp,
+ at glscommand{glsdisp,
   name={\csfmt{glsdisp}},
   user1={\oargm{options}\margm{label}\margm{text}},
-  description={links to the entry's location in the glossary with
-   the given link text and marks the entry as having been used},
+  description={links to the entry's definition in the glossary with
+   the given link text and marks the entry as having been used.
+   The options are the same as for \cs{glslink}},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   seealso={glslink},
   category={command}
 }
 
- at index{dglslink,
+ at glscommand{dglslink,
   name={\csfmt{dgls\-link}},
   user1={\oargm{options}\margm{label}\margm{text}},
   description={like \cs{glslink} but tries the prefixes
   identified with commands like \cs{glsxtraddlabelprefix}},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={dglsdisp},
   category={command}
 }
 
- at index{dglsdisp,
+ at glscommand{dglsdisp,
   name={\csfmt{dgls\-disp}},
   user1={\oargm{options}\margm{label}\margm{text}},
   description={like \cs{glsdisp} but tries the prefixes
   identified with commands like \cs{glsxtraddlabelprefix}},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={dglsdisp},
   category={command}
 }
 
- at index{glsxtrshort,
+ at glscommand{glsxtrshort,
   name={\csfmt{glsxtrshort}},
   user1={\oargm{options}\margm{label}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{short} field (using the
-   appropriate abbreviation style) 
-   without altering the first use flag},
+   appropriate abbreviation style) without altering the first use flag},
+  topics={entryrefcommands,linkcommands,abbreviationcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrlong,
+ at glscommand{glsxtrlong,
   name={\csfmt{glsxtrlong}},
   user1={\oargm{options}\margm{label}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{long} field (using the
    appropriate abbreviation style) 
    without altering the first use flag},
+  topics={entryrefcommands,linkcommands,abbreviationcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrfull,
+ at glscommand{glsxtrfull,
   name={\csfmt{glsxtrfull}},
   user1={\oargm{options}\margm{label}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{long} and \field{short}
-fields (using the
-   appropriate abbreviation style) 
+   fields (using the appropriate abbreviation style) 
    without altering the first use flag},
+  topics={entryrefcommands,linkcommands,abbreviationcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsxtrword,
+ at glscommand{glsxtrword,
   name={\csfmt{glsxtrword}},
   user1={\margm{text}},
   description={used to encapsulate each word in the long form of an
 abbreviation by the \catattr{markwords} attribute},
+  topics={formattingcommands,abbreviationcommands},
   note={\styfmt{glossaries-extra} v1.17+},
   category={command}
 }
 
- at index{glsxtrwordsep,
+ at glscommand{glsxtrwordsep,
   name={\csfmt{glsxtrwordsep}},
   description={used to mark spaces between each word in the long form of an
-abbreviation by the \catattr{markwords} attribute},
+  abbreviation by the \catattr{markwords} attribute},
+  topics={separatorcommands,abbreviationcommands},
   note={\styfmt{glossaries-extra} v1.17+},
   category={command}
 }
 
- at index{glstext,
+ at glscommand{glstext,
   name={\csfmt{glstext}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{text} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{Glstext,
+ at glscommand{Glstext,
   name={\csfmt{Glstext}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={as \cs{glstext} but converts the first letter to
    \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsname,
+ at glscommand{glsname,
   name={\csfmt{glsname}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{name} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsfirst,
+ at glscommand{glsfirst,
   name={\csfmt{glsfirst}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{first} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glssymbol,
+ at glscommand{Glsfirst,
+  name={\csfmt{Glsfirst}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{glsfirst} but converts the first letter to
+  \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glssymbol,
   name={\csfmt{glssymbol}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{symbol} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsdesc,
+ at glscommand{glsdesc,
   name={\csfmt{glsdesc}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{description} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuseri,
+ at glscommand{glsuseri,
   name={\csfmt{glsuseri}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{user1} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuserii,
+ at glscommand{glsuserii,
   name={\csfmt{glsuserii}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{user2} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuseriii,
+ at glscommand{glsuseriii,
   name={\csfmt{glsuseriii}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{user3} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuseriv,
+ at glscommand{glsuseriv,
   name={\csfmt{glsuseriv}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{user4} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuserv,
+ at glscommand{glsuserv,
   name={\csfmt{glsuserv}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{user5} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuservi,
+ at glscommand{glsuservi,
   name={\csfmt{glsuservi}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={links to the entry's location in the glossary with
+  description={links to the entry's definition in the glossary with
    the link text obtained from the \field{user6} field  
    without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at dualindexentry{rgls,
+ at mainglscommand{rgls,
   name={\csfmt{rgls}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={like \cs{gls} but checks for the record
-   count trigger setting},
+   count trigger setting (the formatting is governed by \cs{rglsformat})},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at dualindexentry{rglsformat,
+ at mainglscommand{rglsformat,
   name={\csfmt{rglsformat}},
   user1={\margm{label}\oargm{insert}},
   description={used by \csref{rgls} if the record count
    switch is triggered},
+  topics={formattingcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{glsxtrenablerecordcount,
+ at glscommand{glsxtrenablerecordcount,
   name={\csfmt{glsxtr\-enable\-record\-count}},
   user1={},
-  description={redefines \cs{gls} etc to their 
-   \csref{rgls} counterpart},
+  description={redefines \cs{gls} etc to their \csref{rgls} counterpart},
+  topics={providingcommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at dualindexentry{GlsXtrSetRecordCountAttribute,
+ at mainglscommand{GlsXtrSetRecordCountAttribute,
   name={\csfmt{Gls\-Xtr\-Set\-Record\-Count\-Attribute}},
   user1={\margm{category list}\margm{value}},
   description={sets the \catattr{recordcount} attribute to
     \meta{value} for the given categories},
+  topics={assigncommands},
   note={\styfmt{glossaries-extra} v1.21+},
   category={command}
 }
 
- at index{gls,
+ at glscommand{gls,
   name={\csfmt{gls}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={on first use displays the first use text
    (the value of the \field{first} field
     for general entries) and on subsequent use displays
-    the subsequent use text (the value of the 
-    \field{text} field
+    the subsequent use text (the value of the \field{text} field
     for general entries) where the text is optionally hyperlinked
-    to the relevant place in the glossary},
+    to the relevant place in the glossary. The options are
+    the same as for \cs{glslink}},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{gls.format,
+ at glslinkoption{gls.format,
   name={\csoptfmt{format}},
+  user1={\margm{encap}},
   category={commandoption},
-  parent={gls}
+  description={sets the \gls{encap} for the record to 
+  \meta{encap}, optionally with the start or end range markers},
+  note={\styfmt{glossaries}},
+  parent={glslink}
 }
 
- at index{gls.counter,
+ at glslinkoption{gls.counter,
   name={\csoptfmt{counter}},
+  user1={\margm{counter-name}},
+  description={sets the counter to use for the record},
   category={commandoption},
-  parent={gls}
+  note={\styfmt{glossaries}},
+  parent={glslink}
 }
 
- at index{gls.noindex,
+ at glslinkoption{gls.noindex,
   name={\csoptfmt{noindex}},
+  user1={\margm{boolean}},
+  description={indicates whether or not to suppress indexing},
   category={commandoption},
-  parent={gls}
+  note={\styfmt{glossaries-extra}},
+  parent={glslink}
 }
 
- at index{gls.hyper,
+ at glslinkoption{gls.wrgloss,
+  name={\csoptfmt{wrgloss}},
+  user1={\margm{value}},
+  description={indicates whether to write the glossary information
+  before (\csoptfmt{wrgloss\dequals before}) or after
+  (\csoptfmt{wrgloss\dequals after}) the link text (default:
+   \csoptfmt{before})},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.14+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.thevalue,
+  name={\csoptfmt{thevalue}},
+  user1={\margm{value}},
+  description={overrides the record value so that it's the
+  given \meta{value} not obtained from the associated counter},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.19+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.theHvalue,
+  name={\csoptfmt{theHvalue}},
+  user1={\margm{value}},
+  description={the hyperlink target corresponding to the value
+  of \glsopt{thevalue}, if appropriate},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.19+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.hyper,
   name={\csoptfmt{hyper}},
+  user1={\margm{boolean}},
+  description={indicates whether or not to make a hyperlink to the
+  relevant glossary entry},
   category={commandoption},
-  parent={gls}
+  note={\styfmt{glossaries}},
+  parent={glslink}
 }
 
- at index{gls.textformat,
+ at glslinkoption{gls.local,
+  name={\csoptfmt{local}},
+  user1={\margm{boolean}},
+  description={if \csoptfmt{true} indicates to use \ics{glslocalunset}
+   instead of the default global \cs{glsunset} to unset the
+   \idx{firstuseflag}},
+  category={commandoption},
+  note={\styfmt{glossaries}},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.textformat,
   name={\csoptfmt{text\-format}},
+  user1={\margm{cs-name}},
+  description={if set, replaces \cs{glstextformat} with
+  the command given by the control sequence name
+  \meta{cs-name} to format the \idx{link-text}},
   category={commandoption},
-  parent={gls}
+  note={\styfmt{glossaries-extra} v1.30+},
+  parent={glslink}
 }
 
- at index{gls.prefix,
+ at glslinkoption{gls.prefix,
   name={\csoptfmt{prefix}},
+  user1={\margm{label}},
+  description={locally changes \ics{glolinkprefix} to the
+  given \meta{label}},
   category={commandoption},
-  parent={gls}
+  note={\styfmt{glossaries-extra} v1.31+},
+  parent={glslink}
 }
 
- at index{gls.hyperoutside,
-  name={\csoptfmt{hyperoutside}},
+ at glslinkoption{gls.hyperoutside,
+  name={\csoptfmt{hyper\-out\-side}},
+  user1={\margm{boolean}},
+  description={determines whether \cs{hyperlink} should
+   be outside of \cs{glstextformat} (default
+  \csoptfmt{hyperoutside\dequals true}) or inside
+  (\csoptfmt{hyperoutside\dequals false})},
   category={commandoption},
-  parent={gls}
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={glslink}
 }
 
- at index{glspl,
+ at glscommand{glspl,
   name={\csfmt{glspl}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={as \cs{gls} but shows the plural form},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{Gls,
+ at glscommand{Gls,
   name={\csfmt{Gls}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={as \cs{gls} but converts the first letter
-    of the link text to upper case},
+    of the link text to \idx{uppercase}},
+  topics={entryrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{Glspl,
+ at glscommand{Glspl,
   name={\csfmt{Glspl}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={as \cs{Gls} but shows the plural form},
+  topics={entryrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{GLS,
+ at glscommand{GLS,
   name={\csfmt{GLS}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
-  description={as \cs{gls} but converts the link text to upper case},
+  description={as \cs{gls} but converts the link text to \idx{uppercase}},
+  topics={entryrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{GLSpl,
+ at glscommand{GLSpl,
   name={\csfmt{GLSpl}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={as \cs{GLS} but shows the plural form},
+  topics={entryrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{pgls,
+ at glscommand{pgls,
   name={\csfmt{pgls}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={does \meta{prefix}\cs{gls}\oargm{options}\margm{label}\oargm{insert},
   where the \meta{prefix} is obtained from the appropriate prefix
   field},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries-prefix}},
   category={command}
 }
 
- at index{dgls,
+ at glscommand{Pgls,
+  name={\csfmt{Pgls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{gls}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the first letter converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{PGLS,
+  name={\csfmt{PGLS}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{GLS}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the text converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{pglspl,
+  name={\csfmt{pglspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{glspl}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Pglspl,
+  name={\csfmt{Pglspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{glspl}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the first letter converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{PGLSpl,
+  name={\csfmt{PGLSpl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{GLSpl}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the text converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{dgls,
   name={\csfmt{dgls}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={intended for documents with a mixture of 
    single and dual entries, this is like \cs{gls} but tries to 
    determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
   category={command}
 }
 
- at index{dglspl,
+ at glscommand{dglspl,
   name={\csfmt{dglspl}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={intended for documents with a mixture of 
    single and dual entries, this is like \cs{glspl} but tries to 
    determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
   category={command}
 }
 
- at index{dGls,
+ at glscommand{dGls,
   name={\csfmt{dGls}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={intended for documents with a mixture of 
    single and dual entries, this is like \cs{Gls} but tries to 
    determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
   category={command}
 }
 
- at index{dGlspl,
+ at glscommand{dGlspl,
   name={\csfmt{dGlspl}},
   user1={\oargm{options}\margm{label}\oargm{insert}},
   description={intended for documents with a mixture of 
    single and dual entries, this is like \cs{Glspl} but tries to 
    determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands,casecommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
   category={command}
 }
 
- at index{glsxtraddlabelprefix,
+ at glscommand{glsxtraddlabelprefix,
   name={\csfmt{gls\-xtr\-add\-label\-prefix}},
   user1={\margm{prefix}},
   description={appends \meta{prefix} to the prefix label list},
+  topics={listcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={dgls,glsxtrprependlabelprefix,glsxtrclearlabelprefixes},
   category={command}
 }
 
- at index{glsxtrprependlabelprefix,
+ at glscommand{glsxtrprependlabelprefix,
   name={\csfmt{gls\-xtr\-prepend\-label\-prefix}},
   user1={\margm{prefix}},
   description={prepends \meta{prefix} to the prefix label list},
+  topics={listcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={dgls,glsxtraddlabelprefix,glsxtrclearlabelprefixes},
   category={command}
 }
 
- at index{glsxtrclearlabelprefixes,
+ at glscommand{glsxtrclearlabelprefixes,
   name={\csfmt{gls\-xtr\-clear\-label\-prefixes}},
   user1={\margm{prefix}},
   description={clears the prefix label list},
+  topics={listcommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
   category={command}
 }
 
- at index{glssetwidest,
+ at glscommand{glssetwidest,
   name={\csfmt{gls\-set\-widest}},
   user1={\oargm{level}\margm{text}},
   description={used with the \glostyle{alttree} style to set the
    widest entry name for the given level},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossary-tree}},
   category={command}
 }
 
- at index{glsxtrSetWidest,
+ at glscommand{glsxtrSetWidest,
   name={\csfmt{gls\-xtr\-Set\-Widest}},
   user1={\margm{type}\margm{level}\margm{text}},
   description={used by \csref{bibglssetwidest} to set the
    widest entry name for the given level for the \glostyle{alttree}
    style and the styles provided by \sty{glossary-longextra}},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glssetwidest,glslongextraSetWidest},
   category={command}
 }
 
- at index{glsxtrSetWidestFallback,
+ at glscommand{glsxtrSetWidestFallback,
   name={\csfmt{gls\-xtr\-Set\-Widest\-Fallback}},
   user1={\margm{max depth}\margm{list}},
   description={used by \csref{bibglssetwidesttoplevelfallback} and
@@ -10031,235 +14217,180 @@
    widest entry name for the \glostyle{alttree}
    style and the styles provided by \sty{glossary-longextra}
    using the commands provided by \sty{glossaries-extra-stylemods}},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-bib2gls} v1.37+},
   seealso={glsFindWidestTopLevelName,glsFindWidestLevelTwo},
   category={command}
 }
 
- at index{glslongextraSetWidest,
+ at glscommand{glslongextraSetWidest,
   name={\csfmt{gls\-long\-extra\-Set\-Widest}},
   user1={\margm{text}},
   description={used with the styles provided by the
   \sty{glossary-longextra} package to set the
    widest entry name},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossary-longextra} v1.37+},
   seealso={glslongextraUpdateWidest},
   category={command}
 }
 
- at index{glslongextraUpdateWidest,
+ at glscommand{glslongextraUpdateWidest,
   name={\csfmt{gls\-long\-extra\-Update\-Widest}},
   user1={\margm{text}},
   description={as \cs{glslongextraSetWidest} but only sets if \meta{text} is
   wider than the current value},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossary-longextra} v1.37+},
   category={command}
 }
 
- at index{glsupdatewidest,
+ at glscommand{glsupdatewidest,
   name={\csfmt{gls\-update\-widest}},
   user1={\oargm{level}\margm{text}},
   description={as \cs{glssetwidest} but only sets if \meta{text} is
 wider than the current value},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods} v1.23+},
   seealso={glssetwidest,eglsupdatewidest},
   category={command}
 }
 
- at index{eglsupdatewidest,
+ at glscommand{eglsupdatewidest,
   name={\csfmt{egls\-update\-widest}},
   user1={\oargm{level}\margm{text}},
   description={as \cs{glsupdatewidest} but expands \meta{text}},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods} v1.23+},
   seealso={glssetwidest,glsupdatewidest},
   category={command}
 }
 
- at index{glsFindWidestTopLevelName,
+ at glscommand{glsFindWidestTopLevelName,
   name={\csfmt{gls\-Find\-Widest\-Top\-Level\-Name}},
   user1={\oargm{glossary list}},
   description={CamelCase synonym for \cs{glsfindwidesttoplevelname}},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods}},
   seealso={glsfindwidesttoplevelname},
   category={command}
 }
 
- at index{glsfindwidesttoplevelname,
+ at glscommand{glsfindwidesttoplevelname,
   name={\csfmt{gls\-find\-widest\-top\-level\-name}},
   user1={\oargm{glossary list}},
   description={finds the widest top-level name in the given
 glossaries},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossary-tree}},
   category={command}
 }
 
- at index{glsFindWidestLevelTwo,
+ at glscommand{glsFindWidestLevelTwo,
   name={\csfmt{gls\-Find\-Widest\-Level\-Two}},
   user1={\oargm{glossary list}},
   description={finds the widest name in the given glossaries
    for the top level and first two sub-levels},
+  topics={assigncommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods}},
   seealso={glsfindwidesttoplevelname},
   category={command}
 }
 
- at index{glsxtrbookindexname,
+ at glscommand{glsxtrbookindexname,
   name={\csfmt{glsxtr\-book\-index\-name}},
   user1={\margm{label}},
   description={used with the \glostyle{bookindex} style to
    format the entry's name},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossary-bookindex}},
   category={command}
 }
 
- at index{glsxtrbookindexprelocation,
+ at glscommand{glsxtrbookindexprelocation,
   name={\csfmt{glsxtr\-book\-index\-pre\-location}},
   user1={\margm{label}},
   description={used with the \glostyle{bookindex} style before the
 location list},
+  topics={formattingcommands,separatorcommands,glossarystylecommands},
   note={\styfmt{glossary-bookindex}},
   category={command}
 }
 
- at index{glsxtrprelocation,
+ at glscommand{glsxtrprelocation,
   name={\csfmt{glsxtr\-pre\-location}},
   user1={},
   description={used before the location list in the
    \glostyle{bookindex} style and the styles patched by 
    \styfmt{glossaries-extra-stylemods}},
+  topics={formattingcommands,separatorcommands,glossarystylecommands},
   note={\styfmt{glossary-bookindex} v1.21+ and
    \styfmt{glossaries-extra-stylemods} v1.21+},
   category={command}
 }
 
- at index{glsabbrvscfont,
-  name={\csfmt{gls\-abbrv\-sc\-font}},
-  user1={\margm{text}},
-  description={used with \qt{sc} abbreviation styles to format the
-short form using \cs{textsc}},
-  note={\styfmt{glossaries-extra} v1.17+},
-  category={command}
-}
-
- at index{glsabbrvonlyfont,
-  name={\csfmt{gls\-abbrv\-only\-font}},
-  user1={\margm{text}},
-  description={used with \qt{only} abbreviation styles to format the
-short form},
-  note={\styfmt{glossaries-extra} v1.17+},
-  category={command}
-}
-
- at index{glslongonlyfont,
-  name={\csfmt{gls\-long\-only\-font}},
-  user1={\margm{text}},
-  description={used with \qt{only} abbreviation styles to format the
-long form},
-  note={\styfmt{glossaries-extra} v1.17+},
-  category={command}
-}
-
- at index{glsabbrvfont,
+ at glscommand{glsabbrvfont,
   name={\csfmt{gls\-abbrv\-font}},
   user1={\margm{text}},
   description={generic abbreviation font command for the short form},
+  topics={formattingcommands,abbreviationcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glslongfont,
+ at glscommand{glslongfont,
   name={\csfmt{gls\-long\-font}},
   user1={\margm{text}},
   description={generic abbreviation font command for the long form},
+  topics={formattingcommands,abbreviationcommands},
   note={\styfmt{glossaries-extra} v1.04+},
   category={command}
 }
 
- at index{glsshorttok,
+ at glscommand{glsshorttok,
   name={\csfmt{gls\-short\-tok}},
   description={token register used in the construction of
    acronyms or abbreviations to allow the style hooks to access the short form},
+  topics={hooks,abbreviationcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glslongtok,
+ at glscommand{glslongtok,
   name={\csfmt{gls\-long\-tok}},
   description={token register used in the construction of
    acronyms or abbreviations to allow the style hooks to access the long form},
+  topics={hooks,abbreviationcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsuserdescription,
-  name={\csfmt{gls\-user\-description}},
-  user1={\margm{description}\margm{label}},
-  description={used with \qt{user} abbreviation styles to
-   encapsulate the description. Just does
-  \code{\cs{glslonguserfont}\margm{description}} by default},
-  note={\styfmt{glossaries-extra} v1.30+},
-  category={command}
-}
-
- at index{glslonguserfont,
-  name={\csfmt{gls\-long\-user\-font}},
-  user1={\margm{text}},
-  description={used with \qt{user} abbreviation styles to
-   format the long form},
-  note={\styfmt{glossaries-extra} v1.04+},
-  category={command}
-}
-
- at index{glsfirstlonguserfont,
-  name={\csfmt{gls\-first\-long\-user\-font}},
-  user1={\margm{text}},
-  description={used with \qt{user} abbreviation styles to
-   format the long form on first use},
-  note={\styfmt{glossaries-extra} v1.04+},
-  category={command}
-}
-
- at index{glsabbrvuserfont,
-  name={\csfmt{gls\-abbrv\-user\-font}},
-  user1={\margm{text}},
-  description={used with \qt{user} abbreviation styles to
-   format the short form},
-  note={\styfmt{glossaries-extra} v1.04+},
-  category={command}
-}
-
- at index{glsfirstabbrvuserfont,
-  name={\csfmt{gls\-first\-abbrv\-user\-font}},
-  user1={\margm{text}},
-  description={used with \qt{user} abbreviation styles to
-   format the short form on first use},
-  note={\styfmt{glossaries-extra} v1.04+},
-  category={command}
-}
-
- at index{glsxtrifinmark,
+ at glscommand{glsxtrifinmark,
   name={\csfmt{gls\-xtr\-if\-in\-mark}},
   user1={\margm{true}\margm{true}},
   description={used by commands like \cs{glsfmtshort}, this expands
-to \meta{true} in page headings and the table of contents, 
+  to \meta{true} in page headings and the table of contents, 
   otherwise it expands to \meta{false}},
+  topics={conditionals},
   note={\styfmt{glossaries-extra} v1.07+},
   category={command}
 }
 
- at index{glsxtrRevertTocMarks,
+ at glscommand{glsxtrRevertTocMarks,
   name={\csfmt{gls\-xtr\-Revert\-Toc\-Marks}},
   description={restores original behaviour of \cs{tableofcontents}
   so that \cs{glsxtrifinmark} expands to \meta{false} in the table
-of contents},
+  of contents},
+  topics={providingcommands},
   note={\styfmt{glossaries-extra} v1.07+},
   category={command}
 }
 
- at index{glstreenamefmt,
+ at glscommand{glstreenamefmt,
   name={\csfmt{gls\-tree\-name\-fmt}},
   user1={\margm{text}},
   description={used with the tree styles to format the entry's name},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossary-tree} v4.08+ and 
 \styfmt{glossaries-extra-stylemods} v1.31+},
   seealso={glstreegroupheaderfmt,glstreenavigationfmt,glstreedefaultnamefmt},
@@ -10266,90 +14397,139 @@
   category={command}
 }
 
- at index{glstreegroupheaderfmt,
+ at glscommand{glstreegroupheaderfmt,
   name={\csfmt{gls\-tree\-group\-header\-fmt}},
   user1={\margm{text}},
-  description={used with the tree styles to format the group
-headings},
+  description={used with the tree styles to format the group headings},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossary-tree} v4.22+ and 
   \styfmt{glossaries-extra-stylemods} v1.31+},
   category={command}
 }
 
- at index{glstreenavigationfmt,
+ at glscommand{glstreenavigationfmt,
   name={\csfmt{gls\-tree\-navigation\-fmt}},
   user1={\margm{text}},
-  description={used with the tree styles to format the navigation
-elements},
+  description={used with the tree styles to format the navigation elements},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossary-tree} v4.22+ and 
   \styfmt{glossaries-extra-stylemods} v1.31+},
   category={command}
 }
 
- at index{glstreedefaultnamefmt,
+ at glscommand{glstreedefaultnamefmt,
   name={\csfmt{gls\-tree\-default\-name\-fmt}},
   user1={\margm{text}},
   description={used as the default format for \cs{glstreenamefmt},
    \cs{glstreegroupheaderfmt} and \cs{glstreenavigationfmt}},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods} v1.31+},
   category={command}
 }
 
- at index{glstreeprelocation,
+ at glscommand{glstreeprelocation,
   name={\csfmt{gls\-tree\-pre\-location}},
   description={inserted before the location list for top-level
 entries in the \glostyle{tree}-like styles},
+  topics={formattingcommands,separatorcommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods} v1.21+},
   category={command}
 }
 
- at index{glsdescwidth,
+ at glscommand{glsdescwidth,
   name={\csfmt{gls\-desc\-width}},
   user1={},
   description={length register used by the tabular styles to specify
 the width of the description column},
+  topics={glossarystylecommands},
   note={\styfmt{glossary-long} and
    \styfmt{glossary-super}},
   category={command}
 }
 
- at index{glsxtralttreeSymbolDescLocation,
+ at glscommand{glsxtralttreeSymbolDescLocation,
   name={\csfmt{gls\-xtr\-alt\-tree\-Symbol\-Desc\-Location}},
   user1={\margm{label}\margm{location list}},
   description={used by the \glostyle{alttree} styles to format the
 symbol, description and location},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods} v1.05+},
   category={command}
 }
 
- at index{glsxtrAltTreePar,
+ at glscommand{glsxtrAltTreePar,
   name={\csfmt{gls\-xtr\-Alt\-Tree\-Par}},
   description={used by the \glostyle{alttree} styles to indicate a
 paragraph break that retains the hanging indent},
+  topics={formattingcommands,glossarystylecommands},
   note={\styfmt{glossaries-extra-stylemods} v1.05+},
   category={command}
 }
 
- at index{glsaccsupp,
+ at glscommand{glsaccsupp,
   name={\csfmt{gls\-acc\-supp}},
   user1={\margm{accessible text}\margm{text}},
   description={used by the accessibility support to interface with
-the \sty{accsupp} package},
+  the \sty{accsupp} package (use \cs{xglsaccsupp} if \meta{text}
+  needs to be fully expanded first)},
+  topics={access-support},
   note={\styfmt{glossaries-accsupp}},
+  seealso={xglsaccsupp},
   category={command}
 }
 
- at index{forglsentries,
+ at glscommand{xglsaccsupp,
+  name={\csfmt{xgls\-acc\-supp}},
+  user1={\margm{accessible text}\margm{text}},
+  description={used by the accessibility support to interface with
+  the \sty{accsupp} package, where \meta{text} is fully expanded},
+  topics={access-support},
+  note={\styfmt{glossaries-accsupp}},
+  seealso={glsaccsupp},
+  category={command}
+}
+
+ at glscommand{forglsentries,
   name={\csfmt{for\-gls\-entries}},
+  user1={\oargm{type}\margm{cs}\margm{body}},
+  description={iterates over all entries defined in the glossary
+   identified by \meta{type} (or the default, if \meta{type}
+   is omitted) and perform \meta{body} where you can use the
+   control sequence \meta{cs} to reference the current entry label},
+  topics={loops,entryrefcommands},
+  note={\styfmt{glossaries}},
+  seealso={forallglsentries},
+  category={command}
+}
+
+ at glscommand{forallglsentries,
+  name={\csfmt{for\-all\-gls\-entries}},
   user1={\oargm{glossary-list}\margm{cs}\margm{body}},
-  description={iterates over all entries defined in the listed
-   glossaries and perform \meta{body} where you can use the
-   control sequence \meta{cs} to reference the current label},
+  description={iterates over all entries defined in the
+  comma-separated \meta{glossary-list} (or all defined non-ignored
+   glossaries if the optional argument is omitted) and perform 
+   \meta{body} where you can use the control sequence \meta{cs} to 
+   reference the current entry label},
+  topics={loops,glossrefs,entryrefcommands},
   note={\styfmt{glossaries}},
+  seealso={forglsentries,forallglossaries},
   category={command}
 }
 
- at index{glsxtrforcsvfield,
+ at glscommand{forallglossaries,
+  name={\csfmt{for\-all\-glos\-saries}},
+  user1={\oargm{glossary-list}\margm{cs}\margm{body}},
+  description={iterates over all glossaries identified in the 
+   comma-separated \meta{glossary-list} (or all defined non-ignored
+   glossaries if the optional argument is omitted) and performs \meta{body} 
+   where you can use the control sequence \meta{cs} to reference 
+   the current glossary label},
+  topics={loops,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrforcsvfield,
   name={\csfmt{gls\-xtr\-for\-csv\-field}},
   user1={\margm{label}\margm{field}\margm{handler}},
   description={iterates over the comma-separated list
@@ -10357,22 +14537,93 @@
    by \meta{label} and performs \meta{handler}\margm{element}
    on each element of the list, where \meta{handler} is
    a control sequence which takes a single argument},
+  topics={loops,fieldrefcommands,listcommands},
+  note={\styfmt{glossaries}},
   note={\styfmt{glossaries-extra} v1.24+},
   seealso={glsxtrendfor},
   category={command}
 }
 
- at index{glsxtrendfor,
+ at glscommand{glsxtrendfor,
   name={\csfmt{gls\-xtr\-end\-for}},
   user1={},
   description={may be used within the handler macro
    of \cs{glsxtrforcsvfield} to prematurely break the loop},
+  topics={loops,listcommands},
   note={\styfmt{glossaries-extra} v1.24+},
   seealso={glsxtrforcsvfield},
   category={command}
 }
 
- at index{TrackLocale,
+ at glscommand{ifglossaryexists,
+  name={\csfmt{if\-glossary\-exists}},
+  user1={\margm{type}\margm{true}\margm{false}},
+  description={tests if the glossary given by \meta{type} exists
+  and does \meta{true} if it does exists, otherwise does \meta{false}},
+  topics={conditionals,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{ifignoredglossary,
+  name={\csfmt{if\-ignored\-glossary}},
+  user1={\margm{type}\margm{true}\margm{false}},
+  description={tests if the glossary given by \meta{type} was
+  defined as an ignored glossary},
+  topics={conditionals,glossrefs},
+  note={\styfmt{glossaries} v4.08+},
+  category={command}
+}
+
+ at glscommand{glsdoifexists,
+  name={\csfmt{gls\-do\-if\-exists}},
+  user1={\margm{label}\margm{code}},
+  description={if the entry given by \meta{label} exists, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered},
+  topics={conditionals,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdoifnoexists,
+  name={\csfmt{gls\-do\-if\-no\-exists}},
+  user1={\margm{label}\margm{code}},
+  description={if the entry given by \meta{label} doesn't exist, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered},
+  topics={conditionals,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdoifexistsordo,
+  name={\csfmt{gls\-do\-if\-exists\-or\-do}},
+  user1={\margm{label}\margm{code}\margm{else code}},
+  description={if the entry given by \meta{label} exists, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered and \meta{else code} is done},
+  topics={conditionals,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdoifnoexistsordo,
+  name={\csfmt{gls\-do\-if\-no\-exists\-or\-do}},
+  user1={\margm{label}\margm{code}\margm{else code}},
+  description={if the entry given by \meta{label} doesn't exist, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered and \meta{else code} is done},
+  topics={conditionals,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{TrackLocale,
   name={\csfmt{Track\-Locale}},
   user1={\margm{language tag}},
   description={tracks the given language tag},
@@ -10380,7 +14631,7 @@
   category={command}
 }
 
- at index{GetTrackedDialectFromLanguageTag,
+ at command{GetTrackedDialectFromLanguageTag,
   name={\csfmt{Get\-Tracked\-Dialect\-From\-Language\-Tag}},
   user1={\margm{language tag}\margm{cs}},
   description={gets the \styfmt{tracklang} dialect label from the
@@ -10391,7 +14642,7 @@
   category={command}
 }
 
- at index{TrackedDialectClosestSubMatch,
+ at command{TrackedDialectClosestSubMatch,
   name={\csfmt{Tracked\-Dialect\-Closest\-Sub\-Match}},
   description={set by \cs{GetTrackedDialectFromLanguageTag}
   if an exact match isn't found but a partial match on the
@@ -10400,7 +14651,7 @@
   category={command}
 }
 
- at index{IfTrackedDialectHasMapping,
+ at command{IfTrackedDialectHasMapping,
   name={\csfmt{If\-Tracked\-Dialect\-Has\-Mapping}},
   user1={\margm{tracklang label}\margm{true}\margm{false}},
   description={tests if the \styfmt{tracklang} dialect label has
@@ -10409,7 +14660,7 @@
   category={command}
 }
 
- at index{GetTrackedDialectToMapping,
+ at command{GetTrackedDialectToMapping,
   name={\csfmt{Get\-Tracked\-Dialect\-To\-Mapping}},
   user1={\margm{tracklang label}},
   description={the language hook label corresponding to the given
@@ -10418,65 +14669,74 @@
   category={command}
 }
 
- at index{glstextformat,
+ at glscommand{glstextformat,
   name={\csfmt{glstextformat}},
   user1={\margm{text}},
   description={used by commands like \cs{gls} to format the 
   \idx{link-text}},
+  topics={formattingcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsxtrregularfont,
+ at glscommand{glsxtrregularfont,
   name={\csfmt{gls\-xtr\-reg\-u\-lar\-font}},
   user1={\margm{text}},
   description={used by commands like \cs{gls} to format the 
   \idx{link-text} for regular terms},
+  topics={formattingcommands},
   note={\styfmt{glossaries-extra} v1.04+},
   category={command}
 }
 
- at index{glsxtrabbreviationfont,
+ at glscommand{glsxtrabbreviationfont,
   name={\csfmt{gls\-xtr\-abbre\-vi\-a\-tion\-font}},
   user1={\margm{text}},
   description={used by commands like \cs{gls} to format the 
   \idx{link-text} for (non-regular) abbreviations},
+  topics={formattingcommands,abbreviationcommands},
   note={\styfmt{glossaries-extra} v1.30+},
   category={command}
 }
 
- at index{GlsXtrExpandedFmt,
+ at glscommand{GlsXtrExpandedFmt,
   name={\csfmt{Gls\-Xtr\-Expanded\-Fmt}},
   user1={\margm{cs}\margm{text}},
   description={fully expands \meta{text} and then does
    \meta{cs}\margm{expanded text}},
+  topics={formattingcommands},
   note={\styfmt{glossaries-extra} v1.30+},
   category={command}
 }
 
- at index{GlsXtrStartUnsetBuffering,
+ at glscommand{GlsXtrStartUnsetBuffering,
   name={\csfmt{Gls\-Xtr\-Start\-Unset\-Buffer\-ing}},
   description={starts buffering calls to \cs{glsunset}
+   (which is internally used by commands like \cs{gls})
    for use in code where the boolean switch causes a problem.
    The buffer can later be processed and cleared with
    \cs{GlsXtrStopUnsetBuffering}. The starred form
    (added to v1.31) avoids duplicate labels in the buffer's 
    internal list},
+  topics={entryrefcommands,conditionals},
   note={\styfmt{glossaries-extra} v1.30+},
+  seealso={GlsXtrForUnsetBufferedList},
   category={command}
 }
 
- at index{GlsXtrStopUnsetBuffering,
+ at glscommand{GlsXtrStopUnsetBuffering,
   name={\csfmt{Gls\-Xtr\-Stop\-Unset\-Buffer\-ing}},
-  description={unsets (locally with the starred form) 
-    all the entry whose labels are stored in the
+  description={unsets (locally with the starred form) the 
+    \idx{firstuseflag} of all the entry whose labels are stored in the
     buffer that was started with
-   \cs{GlsXtrStartUnsetBuffering} and clears the buffer},
+   \cs{GlsXtrStartUnsetBuffering} and then clears the buffer},
+  topics={entryrefcommands,conditionals},
   note={\styfmt{glossaries-extra} v1.30+},
+  seealso={GlsXtrForUnsetBufferedList},
   category={command}
 }
 
- at index{GlsXtrForUnsetBufferedList,
+ at glscommand{GlsXtrForUnsetBufferedList,
   name={\csfmt{Gls\-Xtr\-For\-Unset\-Buffered\-List}},
   user1 = {\margm{cs}},
   description={iterates over 
@@ -10484,29 +14744,64 @@
     buffer that was started with
    \cs{GlsXtrStartUnsetBuffering} and implements
    \meta{cs}\margm{label} at each iteration},
+  topics={entryrefcommands,listcommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{glsunset,
+ at glscommand{glsunset,
   name={\csfmt{gls\-unset}},
   user1 = {\margm{label}},
   description={unsets the \idx{firstuseflag} so that the entry is
 marked as having been used},
+  topics={conditionals},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glsreset,
+ at glscommand{glslocalunset,
+  name={\csfmt{gls\-local\-unset}},
+  user1 = {\margm{label}},
+  description={locally unsets the \idx{firstuseflag} so that the entry is
+marked as having been used},
+  topics={conditionals},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsreset,
   name={\csfmt{gls\-reset}},
   user1 = {\margm{label}},
   description={resets the \idx{firstuseflag} so that the entry is
 marked as not used},
+  topics={conditionals},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{TrackLangLastTrackedDialect,
+ at glscommand{glslocalreset,
+  name={\csfmt{gls\-local\-reset}},
+  user1 = {\margm{label}},
+  description={locally resets the \idx{firstuseflag} so that the entry is
+marked as not used},
+  topics={conditionals},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glspatchtabularx,
+  name={\csfmt{gls\-patch\-tab\-ularx}},
+  description={preamble command that will patch the \env{tabularx}
+   environment to deal with the problem of unsetting the
+  \idx{firstuseflag} either explicitly with \cs{glsunset} or
+  implicitly through commands like \cs{gls} (does nothing if
+  \sty{tabularx} hasn't been loaded)},
+  topics={hooks,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{TrackLangLastTrackedDialect,
   name={\csfmt{Track\-Lang\-Last\-Tracked\-Dialect}},
   user1={},
   description={set by commands like \cs{TrackLocale}},
@@ -10514,7 +14809,7 @@
   category={command}
 }
 
- at index{TrackedLanguageFromDialect,
+ at command{TrackedLanguageFromDialect,
   name={\csfmt{Tracked\-Language\-From\-Dialect}},
   user1={\margm{dialect}},
   description={expands to the root language associated with the
@@ -10523,7 +14818,7 @@
   category={command}
 }
 
- at index{DTMdisplaydate,
+ at command{DTMdisplaydate,
   name={\csfmt{DTM\-display\-date}},
   user1={\margm{year}\margm{month}\margm{day}\margm{dow}},
   description={formats the given date where all arguments are
@@ -10532,70 +14827,128 @@
   category={command}
 }
 
- at index{DTLformatlist,
+ at command{DTLformatlist,
   name={\csfmt{DTL\-format\-list}},
   user1={\margm{list}},
   description={formats a comma-separated list},
-  note={\styfmt{datatool-base}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={ifDTLlistskipempty},
   category={command}
 }
 
- at index{DTLlistformatsep,
+ at command{DTLlistformatitem,
+  name={\csfmt{DTL\-list\-format\-item}},
+  user1={\margm{element}},
+  description={used by \ics{DTLformatlist} to format each
+   element in the list},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={DTLformatlist},
+  category={command}
+}
+
+ at command{DTLlistformatsep,
   name={\csfmt{DTL\-list\-format\-sep}},
   user1={},
   description={used by \ics{DTLformatlist} to separate items in the
 list, except for the last pair},
-  note={\styfmt{datatool-base}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
   seealso={DTLformatlist},
   category={command}
 }
 
- at index{DTLlistformatlastsep,
+ at command{DTLlistformatlastsep,
   name={\csfmt{DTL\-list\-format\-last\-sep}},
   user1={},
   description={used by \ics{DTLformatlist} to separate the last two items in the
 list},
-  note={\styfmt{datatool-base}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
   seealso={DTLformatlist},
   category={command}
 }
 
- at index{DTLlistformatoxford,
+ at command{DTLlistformatoxford,
   name={\csfmt{DTL\-list\-format\-oxford}},
   user1={},
   description={insert before \ics{DTLlistformatlastsep} if the list
 has three or more items},
-  note={\styfmt{datatool-base}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
   seealso={DTLformatlist},
   category={command}
 }
 
- at index{DTLandname,
+ at command{DTLandname,
   name={\csfmt{DTL\-and\-name}},
   user1={},
   description={used in the definition of \ics{DTLlistformatlastsep}},
-  note={\styfmt{datatool-base}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
   seealso={DTLformatlist},
   category={command}
 }
 
- at index{si,
+ at command{DTLlistelement,
+  name={\csfmt{DTL\-list\-element}},
+  user1={\margm{list}\margm{index}},
+  description={does the \meta{index}th element (starting from 1 for
+   the first element) in the comma-separated \meta{list}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  seealso={DTLfetchlistelement,ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{DTLfetchlistelement,
+  name={\csfmt{DTL\-fetch\-list\-element}},
+  user1={\margm{list}\margm{index}\margm{cs}},
+  description={fetches the \meta{index}th element (starting from 1 for
+   the first element) in the comma-separated \meta{list} and stores
+   it in the command given by \meta{cs}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  seealso={DTLlistelement,ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{ifDTLlistskipempty,
+  name={\csfmt{if\-DTL\-list\-skip\-empty}},
+  description={conditional that determines whether or not commands
+    like \cs{DTLformatlist} should skip empty elements},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  category={command}
+}
+
+ at command{DTLnumitemsinlist,
+  name={\csfmt{DTL\-num\-items\-in\-list}},
+  user1={\margm{list}\margm{cs}},
+  description={counts the number of elements in the comma-separated 
+   \meta{list} and stores the value in the command given by \meta{cs}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  seealso={DTLformatlist,DTLlistelement,ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{DTLifinlist,
+  name={\csfmt{DTL\-if\-in\-list}},
+  user1={\margm{element}\margm{list}\margm{true}\margm{false}},
+  description={tests if \meta{element} is in the comma-separated \meta{list}},
+  note={\styfmt{datatool-base}\texparserdefnote},
+  category={command}
+}
+
+ at command{si,
   name={\csfmt{si}},
   user1={\margm{unit}},
   description={displays the unit with intelligent formatting},
-  note={\styfmt{siunitx}},
+  note={\styfmt{siunitx}\texparserdefnote},
   category={command}
 }
 
- at index{ce,
+ at command{ce,
   name={\csfmt{ce}},
   user1={\margm{formula}},
   description={displays the chemical formula},
-  note={\styfmt{mhchem}},
+  note={\styfmt{mhchem}\texparserdefnote},
   category={command}
 }
 
- at index{textweathersymbol,
+ at command{textweathersymbol,
   name={\csfmt{text\-weather\-symbol}},
   user1={\margm{number}},
   description={displays weather symbol identified by \meta{number}},
@@ -10603,7 +14956,7 @@
   category={command}
 }
 
- at index{toprule,
+ at command{toprule,
   name={\csfmt{top\-rule}},
   description={horizontal rule for the top of a \envfmt{tabular}-like environment},
   note={\styfmt{booktabs}},
@@ -10610,7 +14963,7 @@
   category={command}
 }
 
- at index{midrule,
+ at command{midrule,
   name={\csfmt{mid\-rule}},
   description={horizontal rule for divider between header and main
    content of a \envfmt{tabular}-like environment},
@@ -10618,7 +14971,7 @@
   category={command}
 }
 
- at index{bottomrule,
+ at command{bottomrule,
   name={\csfmt{bottom\-rule}},
   description={horizontal rule for the bottom of a 
   \envfmt{tabular}-like environment},
@@ -10626,7 +14979,7 @@
   category={command}
 }
 
- at index{endhead,
+ at command{endhead,
   name={\csfmt{end\-head}},
   description={ends the header section},
   note={\styfmt{longtable}},
@@ -10633,7 +14986,7 @@
   category={command}
 }
 
- at index{endfoot,
+ at command{endfoot,
   name={\csfmt{end\-foot}},
   description={ends the footer section},
   note={\styfmt{longtable}},
@@ -10640,50 +14993,50 @@
   category={command}
 }
 
- at index{MakeTextLowercase,
+ at command{MakeTextLowercase,
   name={\csfmt{MakeTextLowercase}},
   user1={\margm{text}},
   description={converts \meta{text} to lower case},
-  note={\styfmt{textcase}},
+  note={\styfmt{textcase}\texparserdefnote},
   category={command}
 }
 
- at index{MakeTextUppercase,
+ at command{MakeTextUppercase,
   name={\csfmt{MakeTextUppercase}},
   user1={\margm{text}},
-  description={converts \meta{text} to upper case},
-  note={\styfmt{textcase}},
+  description={converts \meta{text} to \idx{uppercase}},
+  note={\styfmt{textcase}\texparserdefnote},
   category={command}
 }
 
- at index{NoCaseChange,
+ at command{NoCaseChange,
   name={\csfmt{NoCaseChange}},
   user1={\margm{text}},
   description={prevents \cs{MakeTextUppercase} and
    \cs{MakeTextLowercase} from converting \meta{text}},
-  note={\styfmt{textcase}},
+  note={\styfmt{textcase}\texparserdefnote},
   category={command}
 }
 
- at index{MakeUppercase,
+ at command{MakeUppercase,
   name={\csfmt{MakeUppercase}},
   user1={\margm{text}},
-  description={converts \meta{text} to upper case},
-  note={kernel command},
+  description={converts \meta{text} to \idx{uppercase}},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{char,
+ at command{char,
   name={\csfmt{char}},
   user1={\meta{number}},
   description={accesses the character identified by \meta{number}
 (use \code{\csfmt{char}\idx{doublequotecharhex}\meta{hex}} if the
 number is hexadecimal)},
-  note={{}\TeX\ primitive},
+  note={{}\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{number,
+ at command{number,
   name={\csfmt{number}},
   user1={\meta{value}},
   description={expands the given numerical \meta{value} to 
@@ -10690,233 +15043,233 @@
   a base~10 integer number stripping any leading
   zeros (use \code{\csfmt{char}\idx{doublequotecharhex}\meta{hex}} 
   if the value is hexadecimal)},
-  note={{}\TeX\ primitive},
+  note={{}\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{the,
+ at command{the,
   name={\csfmt{the}},
   user1={\meta{register}},
   description={expands \meta{register} to the current value of the
    register},
-  note={{}\TeX\ primitive},
+  note={{}\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{cs.string,
+ at command{cs.string,
   name={\csfmt{string}},
   user1={\meta{token}},
   description={if \meta{token} is a control sequence it expands
    to the escape character followed by the control sequence name},
-  note={{}\TeX\ primitive},
+  note={{}\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{let,
+ at command{let,
   name={\csfmt{let}},
   user1={\meta{token1}\meta{token2}},
   description={assigns \meta{token1} to \meta{token2}},
-  note={{}\TeX\ primitive},
+  note={{}\TeX\ primitive\texparserdefnote},
   category={command}
 }
 
- at index{u,
+ at command{u,
   name={\csfmt{u}},
   user1={\margm{character}},
   description={puts a breve accent over \meta{character}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{acute,
+ at command{acute,
   name={\csfmt{'}},
   user1={\margm{character}},
   description={puts an acute accent over \meta{character}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{umlaut,
+ at command{umlaut,
   name={\csfmt{"}},
   user1={\margm{character}},
   description={puts an umlaut accent over \meta{character}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{c,
+ at command{c,
   name={\csfmt{c}},
   user1={\margm{character}},
   description={puts a cedilla accent over \meta{character}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{AA,
+ at command{AA,
   name={\csfmt{AA}},
   description={produces the \idx!{uppercase} A-ring character \AA},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{aa,
+ at command{aa,
   name={\csfmt{aa}},
   description={produces the \idx!{lowercase} a-ring character \aa},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{O,
+ at command{O,
   name={\csfmt{O}},
   description={produces the \idx!{uppercase} O-slash character \O},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{o,
+ at command{o,
   name={\csfmt{o}},
   description={produces the \idx!{lowercase} o-slash character \o},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{L,
+ at command{L,
   name={\csfmt{L}},
   description={produces the \idx!{uppercase} L-slash character \L},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{l,
+ at command{l,
   name={\csfmt{l}},
   description={produces the \idx!{lowercase} l-slash character \l},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ae,
+ at command{ae,
   name={\csfmt{ae}},
   description={produces the \idx!{lowercase} \ae-ligature},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{AE,
+ at command{AE,
   name={\csfmt{AE}},
   description={produces the \idx!{uppercase} \AE-ligature},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{oe,
+ at command{oe,
   name={\csfmt{oe}},
   description={produces the \idx!{lowercase} \oe-ligature},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{OE,
+ at command{OE,
   name={\csfmt{OE}},
   description={produces the \idx!{uppercase} \OE-ligature},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{th,
+ at command{th,
   name={\csfmt{th}},
   description={produces the \idx!{lowercase} thorn \th},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{TH,
+ at command{TH,
   name={\csfmt{TH}},
   description={produces the \idx!{uppercase} thorn \TH},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ss,
+ at command{ss,
   name={\csfmt{ss}},
   description={produces the \idx!{lowercase} eszett \ss},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{SS,
+ at command{SS,
   name={\csfmt{SS}},
   description={produces the \idx!{uppercase} eszett \SS},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ng,
+ at command{ng,
   name={\csfmt{ng}},
   description={produces the \idx!{lowercase} eng \ng},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{NG,
+ at command{NG,
   name={\csfmt{NG}},
   description={produces the \idx!{uppercase} eng \NG},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{dh,
+ at command{dh,
   name={\csfmt{dh}},
   description={produces the \idx!{lowercase} eth \dh},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{DH,
+ at command{DH,
   name={\csfmt{DH}},
   description={produces the \idx!{uppercase} eth \DH},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{dj,
+ at command{dj,
   name={\csfmt{dj}},
   description={produces the \idx!{lowercase} d-stroke \dj},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{DJ,
+ at command{DJ,
   name={\csfmt{DJ}},
   description={produces the \idx!{uppercase} d-stroke \DJ},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{textsuperscript,
+ at command{textsuperscript,
   name={\csfmt{textsuperscript}},
   user1={\margm{text}},
   description={displays \meta{text} as a superscript},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{textsubscript,
+ at command{textsubscript,
   name={\csfmt{textsubscript}},
   user1={\margm{text}},
   description={displays \meta{text} as a subscript},
-  note={kernel command as from 2015/01/01},
+  note={kernel command\texparserdefnote\ as from 2015/01/01},
   category={command}
 }
 
- at index{MakeLowercase,
+ at command{MakeLowercase,
   name={\csfmt{MakeLowercase}},
   user1={\margm{text}},
   description={converts \meta{text} to lower case},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{textsc,
+ at command{textsc,
   name={\csfmt{textsc}},
   user1={\margm{text}},
   description={applies small-caps font to \meta{text}},
@@ -10924,64 +15277,84 @@
   category={command}
 }
 
- at index{usepackage,
+ at command{textsmaller,
+  name={\csfmt{text\-smaller}},
+  user1={\margm{text}},
+  description={typesets \meta{text} in a font size that's smaller
+  than the surrounding text},
+  note={\styfmt{relsize}},
+  category={command}
+}
+
+ at glscommand{glstextup,
+  name={\csfmt{gls\-text\-up}},
+  user1={\margm{text}},
+  description={typesets \meta{text} in an upright font (used to
+cancel the effect of \cs{textsc} in abbreviation styles that use
+\ics{glsabbrvscfont})},
+  note={\styfmt{glossaries} v3.09a+},
+  topics={abbreviationcommands,formattingcommands},
+  category={command}
+}
+
+ at command{usepackage,
   name={\csfmt{use\-pack\-age}},
   user1={\oargm{options}\margm{name}\oargm{min version}},
   description={loads the package identified by \meta{name}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{RequirePackage,
+ at command{RequirePackage,
   name={\csfmt{Require\-Pack\-age}},
   user1={\oargm{options}\margm{name}\oargm{min version}},
   description={loads the package identified by \meta{name} from
     within another package},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ProvidesPackage,
+ at command{ProvidesPackage,
   name={\csfmt{Provides\-Pack\-age}},
   user1={\margm{name}\oargm{version}},
   description={identifies a package},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{DeclareOption,
+ at command{DeclareOption,
   name={\csfmt{Declare\-Opt\-ions}},
   user1={\margm{name}\margm{code}},
   description={declares an option with the given \meta{name}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{DeclareOption*,
+ at command{DeclareOption*,
   name={\csfmt{Declare\-Opt\-ions*}},
   user1={\margm{code}},
   description={indicates what to do with unknown options},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ProcessOptions,
+ at command{ProcessOptions,
   name={\csfmt{Process\-Opt\-ions}},
   description={processes supplied options},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{PackageError,
+ at command{PackageError,
   name={\csfmt{Pack\-age\-Err\-or}},
   user1={\margm{name}\margm{code}\margm{help}},
   description={generates an error message for the package identified
 by \meta{name}},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{cs.color,
+ at command{cs.color,
   name={\csfmt{color}},
   user1={\oargm{model}\margm{spec}},
   description={switches the current font colour},
@@ -10989,7 +15362,7 @@
   category={command}
 }
 
- at index{textcolor,
+ at command{textcolor,
   name={\csfmt{textcolor}},
   user1={\oargm{model}\margm{spec}\margm{text}},
   description={typesets \meta{text} in the given colour},
@@ -10997,7 +15370,7 @@
   category={command}
 }
 
- at index{cjkname,
+ at examplecommand{cjkname,
   name={\csfmt{cjkname}},
   user1={\margm{CJK characters}},
   description={example command},
@@ -11004,7 +15377,7 @@
   category={command}
 }
 
- at index{citation,
+ at command{citation,
   name={\csfmt{citation}},
   user1={\margm{label}},
   description={written to the \ext{aux} file on each occurrence of
@@ -11013,102 +15386,111 @@
   category={command}
 }
 
- at index{cite,
+ at command{cite,
   name={\csfmt{cite}},
   user1={\margm{label}},
   description={cross-reference a bibliographic citation},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{bibliography,
+ at command{bibliography,
   name={\csfmt{bibliography}},
   user1={\margm{file list}},
   description={display bibliography created by \BibTeX},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{refstepcounter,
+ at command{refstepcounter,
   name={\csfmt{refstepcounter}},
   user1={\margm{counter name}},
   description={increments the given counter in a manner compatible
    with the \cs{label} cross-referencing mechanism},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{label,
+ at command{label,
   name={\csfmt{label}},
   user1={\margm{id}},
   description={creates a label that can be referenced with \ics{ref}
 or \ics{pageref}},
   seealso={ref,pageref},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{pageref,
+ at command{pageref,
   name={\csfmt{pageref}},
   user1={\margm{id}},
   description={cross-reference the page where \cs{label}\margm{id}
 occurred},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{ref,
+ at command{ref,
   name={\csfmt{ref}},
   user1={\margm{id}},
   description={cross-reference the location where \cs{label}\margm{id}
 occurred},
   seealso={label},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{autoref,
+ at command{autoref,
   name={\csfmt{autoref}},
   user1={\margm{id}},
   description={cross-reference with textual tag inferred from the
 associated counter},
   seealso={label},
-  note={\sty{hyperref}},
+  note={\styfmt{hyperref}},
   category={command}
 }
 
- at index{par,
+ at command{par,
   name={\csfmt{par}},
   description={paragraph break},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{hyperlink,
+ at command{hyperlink,
   name={\csfmt{hyperlink}},
   user1={\margm{target name}\margm{text}},
   description={create a hyperlink to \meta{target name} with the given
 \meta{text}},
-  note={\styfmt{hyperref}},
+  note={\styfmt{hyperref}\texparserdefnote},
   category={command}
 }
 
- at index{hypertarget,
+ at command{hypertarget,
   name={\csfmt{hypertarget}},
   user1={\margm{target name}\margm{text}},
   description={create a hypertarget with the given \meta{target
 name} and the displayed \meta{text}},
+  note={\styfmt{hyperref}\texparserdefnote},
+  category={command}
+}
+
+ at command{texorpdfstring,
+  name={\csfmt{texorpdfstring}},
+  user1={\margm{\TeX\ code}\margm{PDF text}},
+  description={does \meta{PDF text} if used in a PDF bookmark,
+   otherwise does \meta{\TeX\ code}},
   note={\styfmt{hyperref}},
   category={command}
 }
 
- at index{cs.hyperref,
+ at command{cs.hyperref,
   name={\csfmt{hyperref}},
   note={\styfmt{hyperref}},
   category={command}
 }
 
- at index{cs.hyperref.ext,
+ at command{cs.hyperref.ext,
   parent={cs.hyperref},
   name={\csfmt{hyperref}},
   user1={\margm{URL}\margm{category}\margm{name}\margm{text}},
@@ -11118,7 +15500,7 @@
   category={command}
 }
 
- at index{cs.hyperref.int,
+ at command{cs.hyperref.int,
   parent={cs.hyperref},
   name={\csfmt{hyperref}},
   user1={\oargm{label}\margm{text}},
@@ -11131,7 +15513,7 @@
   category={command}
 }
 
- at index{@currentlabelname,
+ at command{@currentlabelname,
   name={\csfmt{@current\-label\-name}},
   user1={},
   description={used to store the current title information for the next instance
@@ -11140,7 +15522,7 @@
   category={command}
 }
 
- at index{@currentHref,
+ at command{@currentHref,
   name={\csfmt{@current\-H\-ref}},
   user1={},
   description={used to store the current anchor for the next instance
@@ -11150,18 +15532,19 @@
 }
 
 
- at index{glsrefentry,
+ at glscommand{glsrefentry,
   name={\csfmt{gls\-ref\-entry}},
   user1={\margm{label}},
   description={when used with \styopt{entrycounter} or
    \styopt{subentrycounter} may be used to cross-reference the
   entry's number in the glossary list with \cs{ref}},
+  topics={crossrefcommands},
   seealso={ref},
   note={\styfmt{glossaries} v3.0+},
   category={command}
 }
 
- at index{glsxtrpageref,
+ at glscommand{glsxtrpageref,
   name={\csfmt{gls\-xtr\-page\-ref}},
   user1={\margm{label}},
   description={when used with \styopt{entrycounter} or
@@ -11168,21 +15551,23 @@
    \styopt{subentrycounter} may be used to cross-reference the
   entry's number in the glossary list with \cs{pageref}},
   seealso={pageref},
+  topics={crossrefcommands},
   note={\styfmt{glossaries-extra} v1.11},
   category={command}
 }
 
- at index{glsxtrglossentry,
+ at glscommand{glsxtrglossentry,
   name={\csfmt{gls\-xtr\-gloss\-entry}},
   user1={\margm{label}},
-  description={displays the given entry name including a hypertarget (if
+  description={displays the given entry \field{name} including a hypertarget (if
 \sty{hyperref} has been loaded) as the destination for commands like
 \cs{gls}},
+  topics={linkcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.21},
   category={command}
 }
 
- at index{glsxtrglossentryother,
+ at glscommand{glsxtrglossentryother,
   name={\csfmt{gls\-xtr\-gloss\-entry\-other}},
   user1={\margm{header}\margm{label}\margm{field}},
   description={like \gls{glsxtrglossentry} but uses the value given
@@ -11189,172 +15574,481 @@
 in the supplied internal \meta{field} where \meta{header} is the
 code
 to use in the header (leave empty for default)},
+  topics={linkcommands,fieldrefcommands},
   note={\styfmt{glossaries-extra} v1.22+},
   category={command}
 }
 
- at index{glsshowtarget,
+ at glscommand{glsshowtarget,
   name={\csfmt{gls\-show\-target}},
   user1={\margm{label}},
   description={used to show the target name when the
-\styopt[showtargets]{debug} option is on},
+   \styopt[showtargets]{debug} option is on},
+  topics={debugging,linkcommands},
   note={\styfmt{glossaries} v4.32+},
   category={command}
 }
 
- at index{GlsEntryCounterLabelPrefix,
+ at glscommand{showgloparent,
+  name={\csfmt{show\-glo\-parent}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{parent} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglolevel,
+  name={\csfmt{show\-glo\-level}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the entry's
+   hierarchical level in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloname,
+  name={\csfmt{show\-glo\-name}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{name} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglosort,
+  name={\csfmt{show\-glo\-sort}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{sort} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglosymbol,
+  name={\csfmt{show\-glo\-symbol}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{symbol} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglosymbolplural,
+  name={\csfmt{show\-glo\-symbol\-plural}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{symbolplural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloshort,
+  name={\csfmt{show\-glo\-short}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{short} field in the transcript},
+  topics={debugging,fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglolong,
+  name={\csfmt{show\-glo\-long}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{long} field in the transcript},
+  topics={debugging,fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloloclist,
+  name={\csfmt{show\-glo\-loc\-list}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{loclist} field in the transcript},
+  topics={debugging,fieldrefcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloflag,
+  name={\csfmt{show\-glo\-flag}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \idx{firstuseflag} in the transcript},
+  topics={debugging,fieldrefcommands,conditionals},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglodesc,
+  name={\csfmt{show\-glo\-desc}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{description} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglodescplural,
+  name={\csfmt{show\-glo\-desc\-plural}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{descriptionplural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglotext,
+  name={\csfmt{show\-glo\-text}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{text} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloplural,
+  name={\csfmt{show\-glo\-plural}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{plural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglofirst,
+  name={\csfmt{show\-glo\-first}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{first} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglofirstpl,
+  name={\csfmt{show\-glo\-firstpl}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{firstplural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglotype,
+  name={\csfmt{show\-glo\-type}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{type} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglocounter,
+  name={\csfmt{show\-glo\-counter}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{counter} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouseri,
+  name={\csfmt{show\-glo\-useri}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user1} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouserii,
+  name={\csfmt{show\-glo\-userii}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user2} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouseriii,
+  name={\csfmt{show\-glo\-useriii}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user3} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouseriv,
+  name={\csfmt{show\-glo\-useriv}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user4} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouserv,
+  name={\csfmt{show\-glo\-userv}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user5} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouservi,
+  name={\csfmt{show\-glo\-uservi}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user6} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglofield,
+  name={\csfmt{show\-glo\-field}},
+  user1={\margm{entry label}\margm{internal field}},
+  description={interrupts the document build and shows the value of
+   the given field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloglossaries,
+  name={\csfmt{show\-glo\-glossaries}},
+  description={interrupts the document build and shows the list
+  of all non-ignored glossary types in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglossarytitle,
+  name={\csfmt{show\-glos\-sary\-title}},
+  user1={\margm{type}},
+  description={interrupts the document build and shows the title
+   of the given glossary in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglossarycounter,
+  name={\csfmt{show\-glos\-sary\-counter}},
+  user1={\margm{type}},
+  description={interrupts the document build and shows the default
+   counter for the given glossary in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglossaryentries,
+  name={\csfmt{show\-glos\-sary\-entries}},
+  user1={\margm{type}},
+  description={interrupts the document build and shows the list of
+   entry labels for the given glossary in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{GlsEntryCounterLabelPrefix,
   name={\csfmt{Gls\-Entry\-Counter\-Label\-Prefix}},
   description={used as a prefix in the \cs{label} command
    automatically implemented by the \styopt{entrycounter}
     and \styopt{subentrycounter} options},
+  topics={hooks,crossrefcommands},
   note={\styfmt{glossaries} v4.38+},
   category={command}
 }
 
- at index{GlsXtrStandaloneGlossaryType,
+ at glscommand{GlsXtrStandaloneGlossaryType,
   name={\csfmt{Gls\-Xtr\-Stand\-alone\-Glossary\-Type}},
   description={expands to the label for \gls{currentglossary}
    within \gls{glsxtrglossentry} and \gls{glsxtrglossentryother}},
+  topics={hooks,glossrefs,standalonestyles},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{GlsXtrStandaloneSubEntryItem,
+ at glscommand{GlsXtrStandaloneSubEntryItem,
   name={\csfmt{Gls\-Xtr\-Stand\-alone\-Sub\-Entry\-Item}},
   user1 = {\margm{label}},
   description={used within \gls{glsxtrglossentry} and
 \gls{glsxtrglossentryother} to display sub-item labels},
+  topics={hooks,glossarystylecommands},
   note={\styfmt{glossaries-extra} v1.31+},
   category={command}
 }
 
- at index{GlsXtrStandaloneEntryName,
+ at glscommand{GlsXtrStandaloneEntryName,
   name={\csfmt{Gls\-Xtr\-Stand\-alone\-Entry\-Name}},
   user1 = {\margm{label}},
   description={used within \gls{glsxtrglossentry} to
    display the name (with a hypertarget, if supported)},
+  topics={hooks,glossarystylecommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries-extra} v1.37+},
   category={command}
 }
 
- at index{GlsXtrStandaloneEntryOther,
+ at glscommand{GlsXtrStandaloneEntryOther,
   name={\csfmt{Gls\-Xtr\-Stand\-alone\-Entry\-Other}},
   user1 = {\margm{label}\margm{field}},
   description={used within \gls{glsxtrglossentryother} to
    display the given field value (with a hypertarget, if supported)},
+  topics={hooks,glossarystylecommands,fieldrefcommands,linkcommands},
   note={\styfmt{glossaries-extra} v1.37+},
   category={command}
 }
 
- at index{glsresetentrycounter,
+ at glscommand{glsresetentrycounter,
   name={\csfmt{gls\-reset\-entry\-counter}},
   description={resets the \counter{glossaryentry} counter if the
 \styopt{entrycounter} setting is on},
+  topics={hooks,glossarystylecommands,assigncommands,crossrefcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{setentrycounter,
+ at glscommand{setentrycounter,
   name={\csfmt{set\-entry\-counter}},
   user1={\oargm{prefix}\margm{counter}},
   description={sets up the entry's associated counter and prefix
    required by \cs{glshypernumber}},
+  topics={glossarystylecommands,assigncommands,loclistcommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{setupglossaries,
+ at glscommand{setupglossaries,
   name={\csfmt{set\-up\-glossaries}},
   user1 = {\margm{\keyvallist}},
   description={applies the base \styfmt{glossaries} options
   that are allowed to be changed after the package has loaded},
+  topics={assigncommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{glossariesextrasetup,
+ at glscommand{glossariesextrasetup,
   name={\csfmt{glossaries\-extra\-setup}},
   user1 = {\margm{\keyvallist}},
   description={applies the extension \styfmt{glossaries-extra} options
   that are allowed to be changed after the package has loaded},
+  topics={assigncommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glstreepredesc,
+ at glscommand{glstreepredesc,
   name={\csfmt{gls\-tree\-pre\-desc}},
   user1={\margm{label}},
   description={separator used before the description for the
    \glostyle{tree} styles},
+  topics={glossarystylecommands,separatorcommands,formattingcommands},
   note={\styfmt{glossary-tree} v4.26+},
   category={command}
 }
 
- at index{glstreenonamedesc,
+ at glscommand{glstreenonamedesc,
   name={\csfmt{gls\-tree\-no\-name\-desc}},
   user1={\margm{label}},
   description={displays the pre-description separator, the
    description and the post-description hook for the
    \glostyle{treenoname} styles},
+  topics={glossarystylecommands,separatorcommands,formattingcommands},
   note={\styfmt{glossaries-extra-stylemods} v1.31+},
   category={command}
 }
 
- at index{glsfmtshort,
+ at glscommand{glsfmtshort,
   name={\csfmt{gls\-fmt\-short}},
   user1={\margm{label}},
   description={provided for use in section or caption titles, this
 displays the short form of the given abbreviation},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,abbreviationcommands,capheadcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsfmtlong,
+ at glscommand{glsfmtlong,
   name={\csfmt{gls\-fmt\-long}},
   user1={\margm{label}},
   description={provided for use in section or caption titles, this
 displays the long form of the given abbreviation},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,abbreviationcommands,capheadcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsfmtfull,
+ at glscommand{glsfmtfull,
   name={\csfmt{gls\-fmt\-full}},
   user1={\margm{label}},
   description={provided for use in section or caption titles, this
-displays the full form of the given abbreviation},
+  displays the full form of the given abbreviation (using the inline
+  style that matches \cs{glsxtrfull})},
+  topics={formattingcommands,entryrefcommands,abbreviationcommands,capheadcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsfmtname,
+ at glscommand{glsfmtname,
   name={\csfmt{gls\-fmt\-name}},
   user1={\margm{label}},
   description={provided for use in section or caption titles, this
 displays the given entry's name},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,capheadcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsfmtfirst,
+ at glscommand{glsfmtfirst,
   name={\csfmt{gls\-fmt\-first}},
   user1={\margm{label}},
   description={provided for use in section or caption titles, this
 displays the given entry's \field{first} field},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,capheadcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{glsfmttext,
+ at glscommand{glsfmttext,
   name={\csfmt{gls\-fmt\-text}},
   user1={\margm{label}},
   description={provided for use in section or caption titles, this
 displays the given entry's \field{text} field},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,capheadcommands},
   note={\styfmt{glossaries-extra}},
   category={command}
 }
 
- at index{theHentrycounter,
+ at glscommand{theHentrycounter,
   name={\csfmt{the\-H\-entry\-counter}},
   user1={},
   description={when indexing, this is set to the
@@ -11361,20 +16055,21 @@
    \csfmt{theH}\meta{counter} command corresponding to the 
    current indexing counter (or, if undefined, 
    \csfmt{the}\meta{counter})},
+  topics={glossarystylecommands,linkcommands},
   note={\styfmt{glossaries}},
   category={command}
 }
 
- at index{tableofcontents,
+ at command{tableofcontents,
   name={\csfmt{table\-of\-contents}},
-  description={displays the table of contents (by reading in the
+  description={displays the \glsxtrlong{toc} (by reading in the
 \ext{toc} file) and then opens \ext{toc} file to allow the
 sectioning commands to write to it},
-  note={kernel command},
+  note={kernel command\texparserdefnote},
   category={command}
 }
 
- at index{underline,
+ at command{underline,
   name={\csfmt{under\-line}},
   user1={\margm{text}},
   description={underlines the given text},
@@ -11382,7 +16077,7 @@
   category={command}
 }
 
- at index{ul,
+ at command{ul,
   name={\csfmt{ul}},
   user1={\margm{text}},
   description={underlines the given text},
@@ -11390,11 +16085,11 @@
   category={command}
 }
 
- at index{ding,
+ at command{ding,
   name={\csfmt{ding}},
   user1={\margm{number}},
   description={displays the symbol associated with the given number},
-  note={\styfmt{pifont}},
+  note={\styfmt{pifont}\texparserdefnote},
   category={command}
 }
 
@@ -11402,7 +16097,7 @@
   name = {example terms}
 }
 
- at entry{ex1.duck,
+ at exampleentry{ex1.duck,
   parent={exampleterms},
   name={duck},
   description={a waterbird with webbed feet},
@@ -11409,7 +16104,7 @@
   identifier={animal}
 }
 
- at entry{ex1.goose,
+ at exampleentry{ex1.goose,
   parent={exampleterms},
   name={goose},
   plural={geese},
@@ -11418,7 +16113,7 @@
   identifier={animal}
 }
 
- at entry{ex2.duck,
+ at exampleentry{ex2.duck,
   parent={exampleterms},
   name={Duck (noun)},
   first={duck (quack, quack)},
@@ -11428,7 +16123,7 @@
   identifier={animal}
 }
 
- at entry{ex2.goose,
+ at exampleentry{ex2.goose,
   parent={exampleterms},
   name={Goose (noun, pl.\ geese)},
   first={goose (honk, honk)},
@@ -11440,7 +16135,7 @@
   identifier={animal}
 }
 
- at entry{ex.fleuron,
+ at exampleentry{ex.fleuron,
   parent={exampleterms},
   name = {fleuron},
   symbol = {\ding{167}},
@@ -11448,7 +16143,7 @@
   description = {typographic ornament}
 }
 
- at entry{ex.pi,
+ at exampleentry{ex.pi,
   parent={exampleterms},
   name = {Archimedes' constant},
   symbol = {\ensuremath{\pi}},
@@ -11456,7 +16151,7 @@
   description = {ratio of a circle's circumference to its diameter}
 }
 
- at entry{ex.thetai,
+ at exampleentry{ex.thetai,
   parent = {exampleterms},
   name = {theta parameter},
   symbol = {\ensuremath{\theta_i}},
@@ -11463,7 +16158,7 @@
   description = {one of the model parameters}
 }
 
- at abbreviation{ex.tug,
+ at exampleabbreviation{ex.tug,
   parent={exampleterms},
   category = {longshortem},
   short = {TUG},
@@ -11470,19 +16165,19 @@
   long = {\TeX\ Users Group}
 }
 
- at abbreviation{ex.ascii,
+ at exampleabbreviation{ex.ascii,
   short = {ascii},
   long = {American Standard Code for Information Interchange},
   category={shortsc}
 }
 
- at abbreviation{ex.svm,
+ at exampleabbreviation{ex.svm,
   parent={exampleterms},
   short = {SVM},
   long = {support vector machine}
 }
 
- at abbreviation{ex.ssl,
+ at exampleabbreviation{ex.ssl,
   parent={exampleterms},
   category = {markwordsexample},
   short = {SSL},
@@ -11489,7 +16184,7 @@
   long = {Secure Sockets Layer}
 }
 
- at abbreviation{ex.xml,
+ at exampleabbreviation{ex.xml,
   parent={exampleterms},
   category = {taggingexample},
   short = {XML},
@@ -11496,7 +16191,7 @@
   long = {e\itag{x}tensible \itag{m}arkup \itag{l}anguage}
 }
 
- at abbreviation{ex.dante,
+ at exampleabbreviation{ex.dante,
   parent={exampleterms},
   category = {discardperiodexample},
   short = {DANTE e.V.},
@@ -11503,7 +16198,7 @@
   long = {Deutschsprachige Anwendervereinigung \TeX\ e.V.}
 }
 
- at abbreviation{ex.gp,
+ at exampleabbreviation{ex.gp,
   parent={exampleterms},
   category = {discardperiodexample},
   short = {G.P.},
@@ -11510,7 +16205,7 @@
   long = {General Practitioner}
 }
 
- at abbreviation{ex2.gp,
+ at exampleabbreviation{ex2.gp,
   parent={exampleterms},
   category = {initialism},
   short = {GP},
@@ -11517,7 +16212,7 @@
   long = {General Practitioner}
 }
 
- at abbreviation{ex.rna,
+ at exampleabbreviation{ex.rna,
   parent={exampleterms},
   short = {RNA},
   long = {ribonukleins\"aure},
@@ -11525,7 +16220,7 @@
   category = {abbrvtrans}
 }
 
- at entry{ex.length,
+ at exampleentry{ex.length,
   parent={exampleterms},
   name = {length},
   symbol = {\si{\metre}},
@@ -11532,7 +16227,7 @@
   description = {measurement between two points}
 }
 
- at entry{ex.area,
+ at exampleentry{ex.area,
   parent={exampleterms},
   name = {area},
   symbol = {\si{\metre\squared}},
@@ -11539,19 +16234,19 @@
   description = {measurement of a surface}
 }
 
- at symbol{ex2.length,
+ at examplesymbol{ex2.length,
   parent={exampleterms},
   description = {length},
   name = {\si{\metre}}
 }
 
- at symbol{ex2.area,
+ at examplesymbol{ex2.area,
   parent={exampleterms},
   description = {area},
   name = {\si{\metre\squared}}
 }
 
- at symbol{ex.deriv,
+ at examplesymbol{ex.deriv,
   parent={exampleterms},
   description = {derivative},
   name = {\ensuremath{\derivfn{x}}},
@@ -11558,19 +16253,19 @@
   user1 = {derivfn}
 }
 
- at index{hom.bow1,
+ at exampleindex{hom.bow1,
   name={bow},
   description={(rhymes with toe)},
   category = {homograph}
 }
 
- at entry{hom.bowknot,
+ at exampleentry{hom.bowknot,
   parent={hom.bow1},
   description = {a knot tied with two loops and loose ends},
   category = {homograph}
 }
 
- at entry{hom.bowweapon,
+ at exampleentry{hom.bowweapon,
   parent={hom.bow1},
   description = {a weapon for shooting arrows, made of curved wood
   joined at both ends with taut string},
@@ -11577,48 +16272,48 @@
   category = {homograph}
 }
 
- at index{hom.bow2,
+ at exampleindex{hom.bow2,
   name={bow},
   description={(rhymes with cow)},
   category = {homograph}
 }
 
- at index{hom.bowbend,
+ at exampleindex{hom.bowbend,
   parent={hom.bow2},
   description={bend head or upper body},
   category = {homograph}
 }
 
- at index{hom.bowpressure,
+ at exampleindex{hom.bowpressure,
   parent={hom.bow2},
   description={give in to pressure},
   category = {homograph}
 }
 
- at index{hom.bow3,
+ at exampleindex{hom.bow3,
   name={bow},
   description={(also bows) the front end of a ship},
   category = {homograph}
 }
 
- at index{hom.glossary,
+ at exampleindex{hom.glossary,
   name={glossary},
   category = {homograph}
 }
 
- at entry{hom.glossarycol,
+ at exampleentry{hom.glossarycol,
   parent = {hom.glossary},
   description = {collection of glosses},
   category = {homograph}
 }
 
- at entry{hom.glossarylist,
+ at exampleentry{hom.glossarylist,
   parent = {hom.glossary},
   description = {list of technical words},
   category = {homograph}
 }
 
- at entry{hier.animal,
+ at exampleentry{hier.animal,
  name = {animal},
  description = {living organism with a nervous system and sense organs
     that can move independently},
@@ -11625,7 +16320,7 @@
  category = {hierarchical}
 }
 
- at entry{hier.bird,
+ at exampleentry{hier.bird,
  parent = {hier.animal},
  name = {bird},
  description = {warm-blooded egg-laying animal with feathers, wings 
@@ -11633,7 +16328,7 @@
  category = {hierarchical}
 }
 
- at entry{hier.duck,
+ at exampleentry{hier.duck,
  parent = {hier.bird},
  name = {duck},
  description={a waterbird with webbed feet},
@@ -11640,7 +16335,7 @@
  category = {hierarchical}
 }
 
- at entry{hier.goose,
+ at exampleentry{hier.goose,
  parent = {hier.bird},
  name = {goose},
  description = {a large waterbird with a long neck, short legs,
@@ -11648,13 +16343,13 @@
  category = {hierarchical}
 }
 
- at entry{hier.mineral,
+ at exampleentry{hier.mineral,
  name = {mineral},
  description = {natural inorganic substance},
  category = {hierarchical}
 }
 
- at entry{hier.calcite,
+ at exampleentry{hier.calcite,
  parent = {hier.mineral},
  name = {calcite},
  description = {a carbonate mineral},
@@ -11661,7 +16356,7 @@
  category = {hierarchical}
 }
 
- at entry{hier.quartz,
+ at exampleentry{hier.quartz,
  parent = {hier.mineral},
  name = {quartz},
  description = {hard mineral consisting of silica},
@@ -11668,7 +16363,7 @@
  category = {hierarchical}
 }
 
- at entry{hier.amethyst,
+ at exampleentry{hier.amethyst,
  parent = {hier.quartz},
  name = {amethyst},
  description = {a purple type of quartz},
@@ -11675,7 +16370,7 @@
  category = {hierarchical}
 }
 
- at entry{hier.citrine,
+ at exampleentry{hier.citrine,
  parent = {hier.quartz},
  name = {citrine},
  description = {a form of quartz with a colour ranging
@@ -11683,7 +16378,7 @@
  category = {hierarchical}
 }
 
- at entry{ex2.amethyst,
+ at exampleentry{ex2.amethyst,
  name = {amethyst},
  description = {a purple type of quartz},
  symbol = {\ce{SiO2}},
@@ -11692,7 +16387,7 @@
  category = {standalone}
 }
 
- at entry{ex3.goose,
+ at exampleentry{ex3.goose,
   name={goose},
   user3={G},
   user4={G},
@@ -11702,7 +16397,7 @@
   category={standalone}
 }
 
- at entry{ex3.duck,
+ at exampleentry{ex3.duck,
   name={duck},
   user3={D},
   user4={D},
@@ -11710,7 +16405,7 @@
   category={standalone}
 }
 
- at entry{standalone.pi,
+ at exampleentry{standalone.pi,
   name = {\ensuremath{\pi}},
   description = {Archimedes' constant},
   user3={glssymbols},
@@ -11718,7 +16413,7 @@
   category = {standalone}
 }
 
- at entry{standalone.area,
+ at exampleentry{standalone.area,
   name = {\ensuremath{A}},
   description = {area},
   user3={glssymbols},
@@ -11726,7 +16421,7 @@
   category = {standalone}
 }
 
- at entry{standalone.radius,
+ at exampleentry{standalone.radius,
   name = {\ensuremath{r}},
   description = {radius},
   user3={glssymbols},
@@ -11734,7 +16429,7 @@
   category = {standalone}
 }
 
- at entry{standalone.circumference,
+ at exampleentry{standalone.circumference,
   name = {\ensuremath{C}},
   user3={glssymbols},
   user4={C},

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.pod
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.pod	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.pod	2019-05-05 18:06:25 UTC (rev 51008)
@@ -92,6 +92,24 @@
 
 Don't check for instances of B<\citation> in the B<.aux> file (default).
 
+=item B<--warn-non-bib-fields>
+
+Warn if internal non-bib fields are found in the .bib file.
+
+=item B<--no-warn-non-bib-fields>
+
+Don't warn if internal non-bib fields are found in the .bib file.
+The use of these internal fields can cause unexpected results, so
+only use this option if you have taken appropriate precautions.
+
+=item B<--warn-unknown-entry-types>
+
+Warn if any unknown entry types are found in the .bib file.
+
+=item B<--no-warn-unknown-entry-types>
+
+Don't warn if any unknown entry types are found in the .bib file.
+
 =item B<--merge-wrglossary-records>
 
 Merge an entry's B<wrglossary> records for the same page locations.

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.tex
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.tex	2019-05-05 18:05:56 UTC (rev 51007)
+++ trunk/Master/texmf-dist/source/support/bib2gls/src/bib2gls.tex	2019-05-05 18:06:25 UTC (rev 51008)
@@ -2,12 +2,13 @@
 % arara: bib2gls: {group: on} if missing("glstex") || changed("bib") || found("log", "Warning: Glossary entry")
 % arara: bibtex
 % arara: lualatex if changed("glstex") || missing("toc")
-% arara: bib2gls: {group: on}
+% arara: bib2gls: {group: on, packages: [mfirstuc-english]}
 % arara: lualatex
 % arara: lualatex if found ("log", "Rerun")
 \documentclass[titlepage=false,index=totoc,bibliography=totoc,
  fontsize=12pt,captions=tableheading]{scrreprt}
 
+\usepackage[autooneside=false]{scrlayer-scrpage}
 \usepackage{pifont}
 
 % Need support for extended characters
@@ -26,6 +27,8 @@
 \newcommand{\insularG}{{\freeserif\char"A77D}}
 \newcommand{\insularg}{{\freeserif\char"1D79}}
 \newcommand{\longs}{\char"017F}
+\newcommand{\Wynn}{\char"01F7}
+\newcommand{\wynn}{\char"01BF}
 
 \usepackage[x11names]{xcolor}
 \usepackage{alltt}
@@ -37,6 +40,7 @@
 \usepackage{amsmath}
 \usepackage{accents}
 \usepackage{tikz}
+\usepackage{tcolorbox}
 \usepackage{datetime2}
 \usepackage{listings}
 \usepackage[hidelinks]{hyperref}
@@ -59,6 +63,7 @@
 
 \glsxtrprovidestoragekey{note}{}{}
 \glsxtrprovidestoragekey{package}{}{}
+\glsxtrprovidestoragekey{nametitle}{}{}
 
 \providecommand{\omicron}{o}
 
@@ -98,6 +103,7 @@
 \newcommand{\glsxtrpostnamecounter}{\space counter}
 
 \newcommand*{\csfmtfont}[1]{\texttt{#1}}
+\newcommand*{\csfmtcolourfont}[1]{\texttt{\textcolor{cs}{#1}}}
 
 \newcommand*{\csfmt}[1]{%
  \texorpdfstring
@@ -105,9 +111,47 @@
  {\string\\#1}%
 }
 
-\setabbreviationstyle[common]{short-nolong}
+\newcommand{\texparserdefprefix}{}
+\newcommand{\texparserdefnotetarget}{%
+  \raisebox{2ex}{\hypertarget{\texparserdefprefix texparserdef}{}}%
+  \textsuperscript{*}Indicates command is
+  recognised by \bibgls's interpreter although it may have
+  a slightly different implementation.
+}
+\newcommand{\texparserdefnote}{\hyperlink{\texparserdefprefix texparserdef}{*}}
 
+\setabbreviationstyle{long-short-sc}
+\setabbreviationstyle[common]{short-sc-nolong}
+
+\glsxtrprovidestoragekey{unsortedprogeny}{}{}
+
 \GlsXtrLoadResources[
+  entry-type-aliases={
+   bibglscommand=dualindexentry,
+   mainglscommand=spawndualindexentry,
+   glscommand=spawnentry,
+   abbrvstylecommand=spawnentry,
+   glostylecommand=spawnentry,
+   resourceoption=dualindexentry,
+   packageoption=dualindexentry,
+   field=dualindexentry,
+   entrytype=dualindexentry,
+   switch=dualindexentry,
+   samplefile=dualindexentry,
+   examplecommand=dualindexentry,
+   examplesymbol=symbol,
+   exampleabbreviation=abbreviation,
+   exampleentry=entry
+  },
+  field-aliases={topics=adoptparents},
+  replicate-fields={name=nametitle,progeny=unsortedprogeny},
+  field-case-change={nametitle=title},
+  interpret-fields={nametitle},
+  no-case-change-cs={fieldfmt,abbrstylefmt,glostylefmt},
+  short-case-change={lc},
+  dual-short-case-change={lc},
+  unknown-entry-alias={index},
+  save-original-entrytype,
   label-prefix={idx.},
   save-loclist=false,
   sort={letternumber-nocase},
@@ -115,11 +159,20 @@
   type={index},
   dual-field={dualid},
   match-action={add},
-  match={{category}={.*field}},
+  match-op={or},
+  match={
+   {category}={.*field},
+   {original entrytype}={.*(gls|style)command},
+   {original entrytype}={.*option},
+   {original entrytype}={abbreviationstyle},
+   {original entrytype}={glossarystyle},
+  },
   dual-prefix={},
   dual-type={main},
   combine-dual-locations={primary},
   selection={recorded and deps and see},
+  symbol-sort-fallback={name},
+  sort-label-list={progeny:letter-nocase:glsxtrentryparentname},
   strip-missing-parents,
   save-child-count
 ]
@@ -146,7 +199,8 @@
 
 \newcommand{\frontmatter}{%
  \clearpage\pagenumbering{roman}%
- \pagestyle{headings}%
+ \pagestyle{scrheadings}%
+ \automark[section]{chapter}%
  \mainmatterfalse
 }
 \newcommand{\mainmatter}{%
@@ -155,6 +209,27 @@
  \mainmattertrue
 }
 
+\newcommand{\rightleftmark}[2]{\ifstrequal{#1}{#2}{#1}{#1: #2}}
+\makeatletter
+\newcommand{\setsecdepth}{\@ifstar\s at setsecdepth\@setsecdepth}
+\newcommand{\s at setsecdepth}[1]{%
+ \setcounter{secnumdepth}{#1}%
+ \automark[section]{chapter}%
+ \let\@rightmark\rightleftmark
+}
+\newcommand{\@setsecdepth}[1]{%
+ \setcounter{secnumdepth}{#1}%
+ \ifnum#1 > 0
+  \automark[section]{chapter}%
+ \else
+  \automark{chapter}%
+ \fi
+ \let\@rightmark\@secondoftwo
+}
+\makeatother
+
+\newtcolorbox{important}{colback=red!5!white,colframe=red}
+
 \newcommand{\bibgls}{\appfmt{bib2gls}}
 
 \newcommand*{\BibTeX}{\hologo{BibTeX}}
@@ -308,19 +383,29 @@
 \newcommand{\glsxtrpostdescenvironment}{environment}
 
 \newcommand*{\abbrstyle}[1]{%
-  \texorpdfstring{\idx{#1}}{#1}%
+  \texorpdfstring{\idx{abbrstyle.#1}}{#1}%
 }
 
+\newcommand*{\topicabbrstyle}[1]{%
+  %\texorpdfstring{\idx[prefix=topic.]{abbrstyle.#1}}{#1}%
+  \texorpdfstring{\idx{abbrstyle.#1}}{#1}%
+}
+
 \newcommand*{\glostyle}[1]{%
   \texorpdfstring{\idx{glostyle.#1}}{#1}%
 }
 
+\newcommand*{\topicglostyle}[1]{%
+ %\texorpdfstring{\idx[prefix=topic.]{glostyle.#1}}{#1}%
+ \texorpdfstring{\idx{glostyle.#1}}{#1}%
+}
+
 \newcommand*{\iglostyle}[1]{%
   \texorpdfstring{\idx[noindex=false]{glostyle.#1}}{#1}%
 }
 
 \newcommand*{\catattr}[1]{%
-  \texorpdfstring{\idx{#1}}{#1}%
+  \texorpdfstring{\idx{catattr.#1}}{#1}%
 }
 
 \newcommand*{\counter}[1]{%
@@ -502,11 +587,22 @@
   \renewenvironment{theglossary}%
    {%
      \setlength{\glsdescwidth}{\dimexpr\linewidth-\maxnamewidth-4\tabcolsep}%
-     \begin{tabular}{l>{\raggedright}p{\glsdescwidth}}%
+     \begin{longtable}{l>{\raggedright}p{\glsdescwidth}}%
    }%
-   {\end{tabular}}%
+   {\end{longtable}}%
   \renewcommand*{\glossaryheader}{%
-    \bfseries Field & \bfseries Description\tabularnewline}%
+    \noalign{\xdef\dofieldtabcaption{%
+      \noexpand\caption\expandonce\fieldtablelotcaption
+        {\expandonce\fieldtablecaption}}}%
+    \dofieldtabcaption
+    \fieldtablecaptionlabel
+    \fieldtablepostcaption\tabularnewline
+    \bfseries Field & \bfseries Description\tabularnewline
+    \endfirsthead
+    \caption*{\fieldtablecaption\ (Continued)}\tabularnewline
+    \bfseries Field & \bfseries Description\tabularnewline
+    \endhead
+  }%
   \renewcommand*{\glsgroupheading}[1]{}%
   \renewcommand{\glossentry}[2]{%
     \glsadd{##1}%
@@ -529,11 +625,36 @@
 
 \newlength\maxnamewidth
 
-\newcommand*{\printfields}[1]{%
+%\printfields[postcaption]{category list}[lot caption]{caption}{label}
+\newcommand*{\printfields}[2][]{%
+  \ifstrempty{#1}%
+  {%
+    \def\fieldtablepostcaption{}%
+  }%
+  {%
+    \def\fieldtablepostcaption{%
+      \tabularnewline
+      \multicolumn{2}{p{\linewidth}}{#1}%
+      \tabularnewline
+    }%
+  }%
+  \def\fieldcategories{#2}%
+  \innerprintfields
+}
+
+\newcommand*{\innerprintfields}[3][]{%
  \printunsrtglossary*[style=fieldstyle]{%
    \renewcommand*\glossarysection[2][]{}%
+   \ifstrempty{#1}%
+   {%
+     \def\fieldtablelotcaption{}%
+   }%
+   {%
+     \def\fieldtablelotcaption{[#1]}%
+   }%
+   \def\fieldtablecaption{#2}%
+   \def\fieldtablecaptionlabel{\label{#3}}%
    \setlength{\maxnamewidth}{0pt}%
-   \def\fieldcategories{#1}%
    \let\printunsrtglossaryentryprocesshook\fieldhook
  }%
 }
@@ -550,6 +671,24 @@
  }%
 }
 
+\newcommand{\summarysubheaderfont}[1]{\textbf{\sffamily #1}}
+
+\newcommand{\summaryoptionhandler}[1]{%
+ \par\smallskip\nopagebreak
+ \par\noindent\hspace{1em}%
+ \code{\gls{#1}\glsxtrifhasfield{useri}{#1}{=\glscurrentfieldvalue}{}}%
+ \glsxtrifhasfield{note}{#1}%
+ {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
+ {}%
+ \nopagebreak\par\hangindent2em\noindent\hspace{2em}\Glossentrydesc{#1}%
+}
+
+\newrobustcmd{\donote}[1]{%
+ \glsxtrifhasfield{note}{#1}%
+ {\nolinebreak\hfill\mbox{\normalfont\footnotesize\glscurrentfieldvalue}}%
+ {}%
+}
+
 \newglossarystyle{commandsummary}%
 {%
   \setglossarystyle{index}%
@@ -564,27 +703,40 @@
    \glstreeitem \glstarget{cs.##1}{\strut}%
    \glsxtrifhasfield{dualid}{##1}%
    {%
-     \glshyperlink{\glscurrentfieldvalue}%
+     {%
+       \let\csfmtfont\csfmtcolourfont
+       \glshyperlink{\glscurrentfieldvalue}%
+     }%
      \glsxtrifhasfield{useri}{##1}{\glscurrentfieldvalue}{}%
-     \glsxtrifhasfield{note}{##1}%
-     {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
-     {}%
+     \donote{##1}%
      \nopagebreak\par\hspace{10pt}%
      \Glossentrydesc{\glscurrentfieldvalue}%
      \ifglshasdesc{\glscurrentfieldvalue}{\@. }{}%
    }%
    {%
-     \gls[hyper=false]{##1}%
+     {\let\csfmtfont\csfmtcolourfont\gls[hyper=false]{##1}}%
      \glsxtrifhasfield{useri}{##1}{\glscurrentfieldvalue}{}%
-     \glsxtrifhasfield{note}{##1}%
-     {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
-     {}%
+     \donote{##1}%
      \nopagebreak\par\hspace{10pt}%
      \Glossentrydesc{##1}%
      \ifglshasdesc{##1}{\@. }{}%
    }%
-   \GlsXtrIfHasNonZeroChildCount{##1}%
-   {This command has \glscurrentfieldvalue\ forms:}{}%
+   \GlsXtrIfFieldEqStr{originalentrytype}{##1}{glscommand}%
+   {%
+     % Does this entry have options?
+     \GlsXtrIfHasNonZeroChildCount{##1}%
+     {%
+       \glspar\medskip\glspar 
+       \summarysubheaderfont{Options:} 
+       \glsxtrfieldforlistloop{##1}{childlist}{\summaryoptionhandler}%
+     }%
+     {}%
+   }%
+   {%
+     \GlsXtrIfHasNonZeroChildCount{##1}%
+     {This command has \glscurrentfieldvalue\ forms:}{}%
+   }%
+   %\listtopics{##1}%
    \par\medskip
   }%
   \renewcommand*{\subglossentry}[3]{%
@@ -591,24 +743,22 @@
    \glstreesubitem \glstarget{cs.##2}{\strut}%
    \glsxtrifhasfield{dualid}{##2}%
    {%
-     \glshyperlink{\glscurrentfieldvalue}%
+     {%
+       \let\csfmtfont\csfmtcolourfont
+       \glshyperlink{\glscurrentfieldvalue}%
+     }%
      \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
-     \glsxtrifhasfield{note}{##2}%
-     {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
-     {}%
+     \donote{##2}%
      \nopagebreak\par\hspace{20pt}%
-     \Glossentrydesc{\glscurrentfieldvalue}%
-     \ifglshasdesc{\glscurrentfieldvalue}{.}{}%
+     \ifglshasdesc{\glscurrentfieldvalue}%
+     {\Glossentrydesc{\glscurrentfieldvalue}.}{}%
    }%
    {%
-     \gls[hyper=false]{##2}%
+     {\let\csfmtfont\csfmtcolourfont\gls[hyper=false]{##2}}%
      \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
-     \glsxtrifhasfield{note}{##2}%
-     {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
-     {}%
+     \donote{##2}%
      \nopagebreak\par\hspace{20pt}%
-     \Glossentrydesc{##2}%
-     \ifglshasdesc{##2}{.}{}%
+     \ifglshasdesc{##2}{\Glossentrydesc{##2}.}{}%
    }%
    \par\medskip
   }%
@@ -617,7 +767,10 @@
 \newcommand*{\commandsummaryhook}[1]{%
   \edef\currentcategory{\glscategory{#1}}%
   \ifdefstring{\currentcategory}{command}%
-  {}%
+  {%
+    \glsxtrifhasfield*{progenitor}{#1}%
+    {\printunsrtglossaryskipentry}{}%
+  }%
   {\printunsrtglossaryskipentry}%
 }
 
@@ -624,9 +777,13 @@
 \newcommand*{\printcommandsummary}{%
   \printunsrtglossary*[type=index,
     style=commandsummary,
-    title={Command Summary}
+    title={General Command Summary},
   ]%
   {%
+   \def\glossarypreamble{This is an alphabetical summary of 
+    commands referenced in this document. See the
+    relevent user guides for further details.\endgraf\medskip
+    \texparserdefnotetarget}%
    \let\printunsrtglossaryentryprocesshook\commandsummaryhook
    \let\csref\cs
    \glsxtrlocalsetgrouptitle{glssymbols}{}%
@@ -633,6 +790,203 @@
   }%
 }
 
+\newcommand{\topicxrhandler}[1]{%
+ \glsxtrifhasfield{parent}{#1}%
+ {%
+   \let\field\fieldfmt
+   \hyperlink
+   {topic.\glscurrentfieldvalue}%
+   {\glsentryname{\glscurrentfieldvalue}}%
+ }%
+ {%
+   \hyperlink{topic.#1}{\glsentryname{#1}}%
+ }% 
+}
+
+% \iffirstprogeny{entry label}{topic label}{true}{false}
+\makeatletter
+\newcommand{\iffirstprogeny}[2]{%
+  \let\doiffirstprogeny\@secondoftwo
+  \def\firstprogeny{}%
+  \glsxtrifhasfield*{unsortedprogeny}{#1}%
+  {%
+    \edef\suppliedprogeny{#2}%
+    \@for\thisprogeny:=\glscurrentfieldvalue\do{%
+      \let\firstprogeny\thisprogeny
+      \ifdefequal{\thisprogeny}{\suppliedprogeny}%
+      {\let\doiffirstprogeny\@firstoftwo}%
+      {\let\doiffirstprogeny\@secondoftwo}%
+      \@endfortrue
+    }%
+  }%
+  {}%
+  \doiffirstprogeny
+}
+\makeatother
+
+\newcommand{\ifstylecommand}[1]{%
+  \letcs\doifstylecommand{@firstoftwo}%
+  \GlsXtrIfFieldEqStr{originalentrytype}{#1}{abbrvstylecommand}%
+  {}%
+  {%
+    \GlsXtrIfFieldEqStr{originalentrytype}{#1}{glostylecommand}%
+    {}%
+    {\global\letcs\doifstylecommand{@secondoftwo}}%
+  }%
+  \doifstylecommand
+}
+
+\newcommand{\listtopics}[1]{%
+ \glsxtrifhasfield{progeny}{#1}% 
+ {%
+   \ifdefequal\glscurrentfieldvalue\glscurrententrylabel
+   {}%
+   {%
+     \par\nopagebreak\medskip\par\footnotesize
+     \sloppy
+     \ifstylecommand{#1}%
+     {\summarysubheaderfont{Styles:}}%
+     {\summarysubheaderfont{Topics:}}%
+     \space
+     \let\DTLlistformatitem\topicxrhandler
+     \DTLformatlist{\glscurrentfieldvalue}.\par
+   }%
+ }%
+ {}%
+}
+
+\newglossarystyle{commandtopic}%
+{%
+  \setglossarystyle{index}%
+  %\renewcommand*{\glossaryheader}{\raggedright}%
+  \renewcommand*{\glsgroupheading}[1]{}%
+  \renewcommand*{\glossentry}[2]{%
+   \glsfieldfetch{##1}{nametitle}{\thisvalue}%
+   \section*{%
+     \raisebox{2ex}%
+     {\pdfbookmark[1]{\thisvalue}{topic.##1}\hypertarget{topic.##1}{}}%
+     \glsdisp{##1}{\thisvalue}\donote{##1}%
+   }%
+   \expandafter\sectionmark\expandafter{\thisvalue}%
+   \ifglshasdesc{##1}{\Glossentrydesc{##1}.}{}%
+   \glsxtrifhasfield{seealso}{##1}%
+   {%
+    \par\smallskip
+     \emph{See also:} 
+     \let\DTLlistformatitem\topicxrhandler
+     \DTLformatlist{\glscurrentfieldvalue}.%
+     \par\medskip\par
+   }%
+   {}%
+  }%
+  \renewcommand*{\subglossentry}[3]{%
+   \glsifcategory{##2}{command}%
+   {%
+     \glsdohypertarget{topic.##2}{\strut}%
+     \glsxtrifhasfield*{progenitor}{##2}%
+     {\let\originallabel\glscurrentfieldvalue}%
+     {\def\originallabel{##2}}%
+%
+     \ifstylecommand{##2}%
+     {%
+        \iffirstprogeny{\originallabel}{##2}%
+        {\letcs\dothisentry{@firstofone}}%
+        {%
+          \glspar
+          \ifdefempty\firstprogeny
+          {%
+            {\let\csfmtfont\csfmtcolourfont\gls[noindex]{\originallabel}}%
+            \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+          }%
+          {%
+            {\let\csfmtfont\csfmtcolourfont
+              \hyperlink{topic.\firstprogeny}{\glsentryname{\firstprogeny}}}%
+            \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+            \glsxtrifhasfield{parent}{\firstprogeny}%
+            {\hfill
+             {\footnotesize\emph{see} \hyperlink{topic.\glscurrentfieldvalue}%
+             {\glsentryname{\glscurrentfieldvalue}}.}}
+            {}%
+          }%
+          \letcs\dothisentry{@gobble}%
+        }%
+     }%
+     {\letcs\dothisentry{@firstofone}}%
+     \dothisentry
+     {%
+       \par\smallskip\par 
+       % hyperlink to index:
+       {\let\csfmtfont\csfmtcolourfont\gls[format=glsignore]{\originallabel}}%
+       \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+       \glsxtrifhasfield{note}{##2}%
+       {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
+       {}%
+       \nopagebreak\par\smallskip\par\nopagebreak
+       \ifglshasdesc{##2}{\Glossentrydesc{##2}.}{}%
+       % Topics
+       \listtopics\originallabel
+       \par\smallskip
+     }%
+   }%
+   {%
+     \glsfieldfetch{##2}{nametitle}{\thisvalue}%
+     \subsection*{%
+       \raisebox{2ex}%
+       {\hypertarget{topic.##2}{}\pdfbookmark[2]{\thisvalue}{topic.##2}}%
+       \glsdisp{##2}{\thisvalue}\donote{##2}%
+     }%
+     \expandafter\subsectionmark\expandafter{\thisvalue}%
+     \ifglshasdesc{##2}{\Glossentrydesc{##2}.\glspar\nopagebreak\smallskip}{}%
+   }%
+  }%
+}
+
+\newcommand*{\commandtopichook}[1]{%
+  \glsxtrifhasfield*{progenitor}{#1}%
+  {}%
+  {%
+    \GlsXtrIfFieldEqStr*{originalentrytype}{#1}{topic}%
+    {}%
+    {%
+      \glsxtrifhasfield*{parent}{#1}%
+      {%
+        \GlsXtrIfFieldEqStr*{originalentrytype}{\glscurrentfieldvalue}{topic}%
+        {}%
+        {\printunsrtglossaryskipentry}%
+      }%
+      {\printunsrtglossaryskipentry}%
+    }%
+  }%
+}
+
+\newcommand*{\printcommandtopic}{%
+  \setsecdepth*{0}%
+  \automark[subsection]{section}%
+  \printunsrtglossary*[type=index,
+    style=commandtopic,
+    title={Summary by Topic of Glossary Commands},
+    label={sec:topics},
+    nogroupskip,
+    nonumberlist
+  ]%
+  {%
+   \def\texparserdefprefix{topic.}%
+   \def\glossarypreamble{This is a summary of commands provided
+    by \styfmt{glossaries}, \styfmt{glossaries-extra} and
+    their supplementary packages that may be useful to 
+    \bibgls\ users. Commands specific to other indexing methods
+    aren't listed unless they've been referenced in this manual.
+    See the appropriate user guides for further details.
+    \endgraf\medskip
+    \texparserdefnotetarget}%
+   \let\abbrstyle\topicabbrstyle
+   \let\glostyle\topicglostyle
+   \let\printunsrtglossaryentryprocesshook\commandtopichook
+   \let\csref\cs
+  }%
+  \setsecdepth{0}%
+}
+
 \newglossarystyle{styoptsummary}%
 {%
   \setglossarystyle{mcolindex}%
@@ -701,6 +1055,8 @@
    {\glsadd{entry.#2}\glsxtrglossentry{entry.#2}}%
 }
 
+\newcommand{\entrydef}[1]{\glsadd{entry.#1}\glsxtrglossentry{entry.#1}}
+
 \newcommand*{\atentry}[2][]{%
  \texorpdfstring
  {\gls[#1]{entry.#2}}%
@@ -953,14 +1309,16 @@
 ?? which can be significantly shorter than the actual text produced
 when the reference is known. 
 
-Note that \bibgls\ is a Java application, and requires at least Java~7
-(although the latest version is recommended).  Additionally,
-\sty{glossaries-extra} must be at least version 1.12.
-(Although again the latest version is recommended.)
-This application was developed in response to the question
-\qt{\href{http://tex.stackexchange.com/q/342544}{Is there a program for
-managing glossary tags?}} on \TeX\ on StackExchange~\cite{tex.sx}. The \ext{bib}
-file can be managed in an application such as JabRef.
+Note that \bibgls\ is a Java application, and requires at least
+Java~8.\footnote{The \code{List.sort} method used to sort the
+entries was only introduced to Java~8.}  Additionally,
+\sty{glossaries-extra} must be at least version 1.12.  (Although
+the latest version is recommended.) This application was
+developed in response to the question
+\qt{\href{http://tex.stackexchange.com/q/342544}{Is there a program
+for managing glossary tags?}} on \TeX\ on
+StackExchange~\cite{tex.sx}. The \ext{bib} file can be managed in an
+application such as JabRef.
 
 If you already have a \ext{tex} file containing 
 entry definitions using commands like \gls{newglossaryentry}
@@ -1191,6 +1549,283 @@
 it's best to avoid this hybrid method unless you have a particular
 set of \idx{xindy} rules that can't be replicated with \bibgls.
 
+\section{Logical Divisions: \field{type} vs \field{group} vs \field{parent}}
+\label{sec:logicaldivisions}
+
+If you have a document with many terms that need listing, it's
+likely that you may want to divide the terms into separate blocks or
+units for easier reading. There are three fields that are used
+for this.
+\begin{description}
+\item[\field{type}] The highest division is the glossary to which
+the entry belongs. The glossary must first be defined (see
+\sectionref{sec:newglossary}) with an associated label used to
+identify it. The title is assigned to the glossary when it is
+defined or it can be overridden with the \printglossopt{title} key.
+The glossary is displayed using \cs{printunsrtglossary} and the
+title is placed in a sectioning command by default.
+
+\begin{important}
+\bibgls\ does not provide any means of sorting glossary types. If
+you use \ics{printunsrtglossaries} the order will be according to
+the order in which the glossaries were defined. You may use
+\cs{printunsrtglossary} to list individual glossaries in your own
+preferred order.
+\end{important}
+
+\item[\field{group}] The entries within a glossary can form groups
+as a by-product of the sorting method. This must be enabled with the
+\longarg{group} switch and isn't available for the sort methods
+listed in \tableref{tab:sortoptionsnosort}. The group label is
+stored in the \field{group} field. This is an internal field that
+typically shouldn't be set in the \ext{bib} file.
+
+You can specify your own custom groups but if you do so you must
+ensure that the terms are ordered in such a way that they are
+gathered according to group. This is typically done by splitting the
+glossary into blocks using a separate \gls{GlsXtrLoadResources} with
+the \csopt{group} option set. You control the order of the groups by
+your ordering of \gls{GlsXtrLoadResources}. The group title can be
+assigned using \gls{glsxtrsetgrouptitle} within the document.
+
+\begin{important}
+\bibgls\ does not sort by group title. At most it can sort by the
+group label (by changing the \csopt{sort-field}) but this is usually
+an indication that you actually have a hierarchical glossary and you
+ought to be using the \field{parent} field instead. (Compare
+\exfile{sample-textsymbols.tex} and
+\exfile{sample-textsymbols2.tex}.)
+\end{important}
+
+\item[\field{parent}] An entry may have one or more sub-entries.
+Most of the sort methods will produce a hierarchical ordering that
+ensures that the sub-entries are listed immediately after their
+parent entry. The parent entry is identified by the \field{parent}
+field which should contain the parent's label.
+
+\begin{important}
+\bibgls\ sorts the parent and child entries using the same
+comparator. The sort methods listed
+in \tableref{tab:sortoptionsnosort} disregard the hierarchical
+level, which can result in child entries becoming detached from
+their parent entry. The other methods sort hierarchically using
+the same comparator but take the hierarchical level into account.
+\end{important}
+
+\end{description}
+
+Suppose you have a mixture of terms, abbreviations and symbols, then
+you might want to have three glossaries that are listed in the table
+of contents. In this case, you use the \field{type} field or the
+\field{type} resource option. The ordering of the glossaries is
+determined by the ordering of the \cs{printunsrtglossary}
+commands within the document. For example:
+\begin{codeenv}
+\cs{printunsrtglossary}
+\cs{printunsrtglossary}\oarg{\printglossopt[abbreviations]{type}}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type}}
+\end{codeenv}
+
+Suppose that your list of terms spans many pages and you feel it
+would be helpful to the reader to split it up into letter groups
+then you would need to run \bibgls\ with the \longarg{group} switch
+and use a glossary style that supports letter groups for that
+glossary. For example:
+\begin{codeenv}
+\cs{printunsrtglossary}\oarg{\printglossopt[indexgroup]{style}}
+\end{codeenv}
+
+Suppose that your list of symbols consists of pictographs, Latin characters
+and Greek characters and you want them grouped together
+in that order. Then you would use a separate
+\gls{GlsXtrLoadResources} for each block and assign your own custom 
+group. This means ensuring that each \idx{resourceset} only selects
+the terms for that group. The simplest way of doing this is to
+have a separate \ext{bib} file for each set. For example:
+\begin{codeenv}
+\gls{glsxtrsetgrouptitle}\marg{pictographs}\marg{Pictographs}
+\gls{glsxtrsetgrouptitle}\marg{latinsymbols}\marg{Latin Characters}
+\gls{glsxtrsetgrouptitle}\marg{greeksymbols}\marg{Greek Characters}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[generalsymbols]{src},\comment{data in generalsymbols.bib}
+  \csopt[pictographs]{group},
+  \csopt[symbols]{type}
+}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[latinsymbols]{src},\comment{data in latinsymbols.bib}
+  \csopt[latin]{group},
+  \csopt[symbols]{type}
+}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[greeksymbols]{src},\comment{data in greeksymbols.bib}
+  \csopt[greek]{group},
+  \csopt[symbols]{type}
+}
+\end{codeenv}
+
+Suppose instead that you have many of these logical blocks and you
+want them ordered according to the block title. In this case you
+have a hierarchical glossary and you need to use the \field{parent}
+field. You then need to select an appropriate \idx{glossarystyle}.
+
+If you only want to have a single \ext{bib} file that contains all
+your entries and you want to share it across multiple documents then
+the most flexible approach is to use custom fields and entry types
+that can be aliased according to the needs of the
+\idxpl{resourceset}.
+
+For example, the file \filefmt{entries.bib}:
+\begin{codeenv}
+\comment{Encoding: UTF-8}
+\strut
+\atentryfmt{indexplural}\marg{latin,\field{text}=\marg{Latin character}}
+\atentryfmt{indexplural}\marg{greek,\field{text}=\marg{Greek character}}
+\atentryfmt{indexplural}\marg{pictograph}
+\strut
+\atentry{symbol}\marg{fx,
+  \field{name}=\marg{\cs{ensuremath}\marg{f(x)}},
+  \field{description}=\marg{function of \idx{mshiftchar}x\idx{mshiftchar}},
+  \fieldfmt{identifier}=\marg{latin}
+}
+\strut
+\atentry{symbol}\marg{f\idx{aposchar}x,
+  \field{name}={\cs{ensuremath}\marg{f\idx{aposchar}(x)}},
+  \field{description}=\marg{derivative of \cs{gls}\marg{fx}},
+  \fieldfmt{identifier}=\marg{latin}
+}
+\strut
+\atentry{symbol}\marg{pi,
+  \field{name}=\marg{\cs{ensuremath}\marg{\cs{pi}}},
+  \field{description}=\marg{ratio of circumference to diameter},
+  \fieldfmt{identifier}=\marg{greek}
+}
+\strut
+\atentry{symbol}\marg{heart,
+  \field{name}=\marg{\cs{ensuremath}\marg{\ics{heartsuit}}},
+  \field{description}=\marg{heart},
+  \fieldfmt{identifier}=\marg{pictograph}
+}
+\strut
+\atentry{symbol}\marg{diamond,
+  \field{name}=\marg{\cs{ensuremath}\marg{\ics{diamondsuit}}},
+  \field{description}=\marg{diamond},
+  \fieldfmt{identifier}=\marg{pictograph}
+}
+\strut
+\atentry{abbreviation}\marg{html,
+  \field{short}=\marg{html},
+  \field{long}=\marg{hypertext markup language},
+  \fieldfmt{identifier}=\marg{markuplanguage}
+}
+\strut
+\atentry{abbreviation}\marg{xml,
+  \field{short}=\marg{xml},
+  \field{long}=\marg{extensible markup language},
+  \fieldfmt{identifier}=\marg{markuplanguage}
+}
+\strut
+\atentry{entry}\marg{duck,
+  \field{name}=\marg{duck},
+  \field{description}=\marg{a waterbird with webbed feet},
+  \fieldfmt{identifier}=\marg{animal}
+}
+\strut
+\atentry{entry}\marg{parrot,
+  \field{name}=\marg{parrot},
+  \field{description}=\marg{mainly tropical bird with bright plumage},
+  \fieldfmt{identifier}=\marg{animal}
+}
+\end{codeenv}
+This has a custom field \fieldfmt{identifier}. This will be ignored
+by \bibgls\ unless defined or aliased in the document.
+
+Here's an example document that creates three glossary types (the
+default \code{main} glossary and the glossaries created with the
+\styopt{abbreviations} and \styopt{symbols} options). They are
+listed in the order of \cs{printunsrtglossary} and their titles are
+added to the table of contents.
+
+The custom \fieldfmt{identifier} fields are ignored for the
+main and abbreviation glossaries, but they are aliased for the
+symbols to the \field{group} field. Since I've split the symbols
+glossary into blocks with each block only containing entries that
+have the same \field{group} value, this isn't a problem. It also
+won't trigger a warning with \longarg{warn-non-bib-fields} as it's
+being aliased rather than set in the \ext{bib} file. The blocks
+appear in the same order as the corresponding \gls{GlsXtrLoadResources} 
+commands. The title for each block is provided in the document 
+using \gls{glsxtrsetgrouptitle}.
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt{abbreviations},\styopt{symbols}}\marg{glossaries-extra}
+\strut
+\cs{renewcommand}\marg{\gls{GlsXtrDefaultResourceOptions}}\marg{
+ \csopt[all]{selection},\csopt[entries]{src},\csopt[false]{save-locations}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[main]{type},\csopt[entrytype=entry]{match}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[abbreviations]{type},
+ \csopt[entrytype=abbreviation]{match}}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{pictograph}\marg{Pictographs}
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{group}]{field-aliases},
+ \csopt[\field{group}=pictograph]{match}}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{latin}\marg{Latin Characters}
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{group}]{field-aliases},
+ \csopt[\field{group}=latin]{match}}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{greek}\marg{Greek Characters}
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{group}]{field-aliases},
+ \csopt[\field{group}=greek]{match}}
+\strut
+\cmd{begin}\marg{document}
+\cs{tableofcontents}
+\cs{printunsrtglossary}\oarg{\printglossopt[abbreviations]{type}}
+\cs{printunsrtglossary}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type},\printglossopt[\glostyle{treegroup}]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+
+In the above example document, the symbols list is divided into
+three groups, listed in the order: Pictographs, Latin characters and
+Greek characters. If you want these titles ordered alphabetically
+then you need a hierarchical structure instead. This can be obtained
+by aliasing the custom \fieldfmt{identifier} field to
+\field{parent}:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt[topic]{stylemods},\styopt{abbreviations},\styopt{symbols}}\marg{glossaries-extra}
+\strut
+\cs{renewcommand}\marg{\gls{GlsXtrDefaultResourceOptions}}\marg{\comment{}
+ \csopt[all]{selection},\csopt[entries]{src},\csopt[false]{save-locations}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[main]{type},\csopt[entrytype=entry]{match}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[abbreviations]{type},
+ \csopt[entrytype=abbreviation]{match}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{parent}]{field-aliases},
+ \csopt[entrytype=symbol,entrytype=indexplural]{match}}
+\strut
+\cmd{begin}\marg{document}
+\cs{tableofcontents}
+\cs{printunsrtglossary}\oarg{\printglossopt[abbreviations]{type}}
+\cs{printunsrtglossary}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type},\printglossopt[\glostyle{topic}]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+The style used for the symbols list is now \glostyle{topic} rather
+than \glostyle{treegroup}. This results in a slightly different
+appearance. You can select the most appropriate style according to
+your needs (see the gallery of predefined
+styles~\cite{glossarystylesgallery}). The topic ordering is now:
+Greek characters, Latin characters and Pictographs.
+
 \section{Defining a New Glossary}
 \label{sec:newglossary}
 
@@ -1287,7 +1922,10 @@
 
 \item[Stage 2 (Parsing)] All the \iext{bib} files associated with
 the \idx{resourceset} are parsed. Entry aliases (identified by
-\csopt{entry-type-aliases}) are performed. Preamble information (provided by
+\csopt{entry-type-aliases}) are performed. The
+\hyperref[sec:multientry]{multi-entry types}, such as
+\atentry{bibtexentry} and \atentry{progenitor}, spawn their
+associated primary entries. Preamble information (provided by
 \atentry{preamble}) is saved but is not interpreted at this stage.
 The transcript will show the message
 \begin{alltt}
@@ -1308,39 +1946,73 @@
 \item Field checks and modifications are performed:
   \begin{itemize}
   \item field aliases are performed (\csopt{field-aliases}); 
+
   \item ignored fields (identified by \csopt{ignore-fields}) are
   removed;
+
   \item case-changes (for example, \csopt{short-case-change}) are
-  performed, except for the \field{name} field;
+  performed, except for the \field{name} field and fields identified
+  with \csopt{field-case-change};
+
   \item suffixes are appended if required (for example, with
   \csopt{short-plural-suffix});
+
   \item field replications are made (\csopt{replicate-fields}),
     and any of the above case-change or suffixes required
     on the replicated fields are performed;
-  \item the \field{group} field is assigned if \csopt{group} is set;
+
+  \item the \field{group} field is assigned if \csopt[\meta{label}]{group} 
+    is set;
+
   \item any variables (identified by \atentry{string}) are expanded
   (if not already done in any of the previous steps);
+
   \item any fields that have been identified by
   \csopt{bibtex-contributor-fields} are converted;
+
+  \item any fields that have been identified with
+  \csopt{encapsulate-fields} are converted;
+
+  \item any fields that have been identified with
+  \csopt{encapsulate-fields*} are converted;
+
   \item any fields that must be converted into a label form
   (\csopt{labelify} or \csopt{labelify-list}) are processed;
+
   \item any fields identified by \csopt{dependency-fields} are parsed for
   dependent entries;
+
   \item any fields whose value must be a label are interpreted
   if \csopt{interpret-label-fields} is set;
+
   \item the \field{parent} field is adjusted according to the label prefix 
   settings (\csopt{label-prefix} etc);
+
   \item \ics{makefirstuc} protection is applied according to 
   \longarg{mfirstuc-protection} and \longarg{mfirstuc-math-protection};
+
   \item fields are parsed for commands like \cs{gls} or
   \cs{glshyperlink} and also checked for nested links if
   \longarg{nested-link-check} is set;
+
   \item the \field{description} field is adjusted according to
   \csopt{strip-trailing-nopost};
+
   \item end punctuation is checked according to
   \csopt{check-end-punctuation};
+
   \item \field{name} case-change is performed if
-  \csopt{name-case-change} is set.
+  \csopt{name-case-change} is set;
+
+  \item if \csopt[true]{copy-alias-to-see} the \field{alias} is copied 
+  to the \field{see} field;
+
+  \item general field case changes identified by
+  \csopt{field-case-change} are performed;
+
+  \item any fields that have been identified with
+  \csopt{interpret-fields} are replaced with their interpreted
+  values.
   \end{itemize}
 \item The dual version (if appropriate) is created.
 \item Records are added to the entry's location list (or transferred
@@ -1610,10 +2282,10 @@
 files are newer than the \ext{tex} file.
 
 It's not possible to determine if the location lists require
-updating, just as it's not possible to do this for the table of
-contents, list of figures, list of tables etc. (Or, if it could be
-implemented, the required code would make the document build far more
-complicated.)
+updating, just as it's not possible to do this for the
+\idx{toc}, list of figures, list of tables etc. (Or, if it could
+be implemented, the required code would make the document build far
+more complicated.)
 
 In general, the basic algorithm is:
 \begin{enumerate}
@@ -1778,6 +2450,18 @@
 that would be expanded by \LaTeX\ (such as commands defined
 in terms of complicated internals).
 
+If you get a \idx{StackOverflowError} while a field is being
+interpreted (with a long stack trace that contains repeated file names and
+line numbers) then it's likely you have an infinite loop. For
+example, this can be triggered if a field contains \csfmt{foo} that
+has been defined as:
+\begin{codeenv}
+\cs{def}\cmd{foo}\marg{\cmd{foo}}
+\end{codeenv}
+This will obviously also cause an error in the \LaTeX\ document as
+well (unless the document has a different definition that doesn't
+have this unbounded recursion).
+
 The \file{texparserlib.jar} library is not a \TeX\ engine and there
 are plenty of situations where it doesn't work. In particular, in
 this case it's being used in a fragmented context without knowing
@@ -1825,7 +2509,7 @@
 Glsentryuseri,Glsentryuserii,Glsentryuseriii,Glsentryuseriv,%
 Glsentryuserv,Glsentryuservi,Glsentryplural,Glsentryfirstplural,Glsentryshortpl,%
 Glsentrylongpl,Glsentrysymbolplural,bibglshashchar,bibglsunderscorechar,%
-bibglsdollarchar,bibglsampersandchar,bibglscircumchar,glsbackslash,glstildechar,%
+bibglsdollarchar,bibglsampersandchar,bibglscircumchar,glsbackslash,glstildechar,glsopenbrace,glsclosebrace,glspercentchar,%
 glsxtrusefield,Glsxtrusefield,GLSxtrusefield,glsentrytitlecase,%
 glsxtrhiernamesep,glsxtrhiername,Glsxtrhiername,GlsXtrhiername,%
 GLSxtrhiername,GLSXTRhiername}
@@ -1856,7 +2540,7 @@
 \csopt[\cs{glshex}2694 \string< \cs{glshex}2693 \string< \cs{glshex}26BD]{sort-rule}).
 
 \TeX\ syntax can be quite complicated and, in some cases, far too
-complicated for simple regular expressions. The \TeX\ parser library performs
+complicated for simple \idxpl!{regex}. The \TeX\ parser library performs
 better than a simple pattern match, and that's the purpose of
 \file{texparserlib.jar} and why it's used by \bibgls\ (and by
 \idx{convertgls2bib}). When the \longarg{debug} mode is on, any
@@ -2008,6 +2692,10 @@
 wouldn't be recognised and would be discarded leaving just \qtt{S}
 as the sort value.
 
+(Note that if \ics{vert} is used instead of \textbar\ then it would
+be converted into the mathematical operator \hex{2223} and result in
+a different order.)
+
 For the \code{i} entry, the code is:
 \begin{verbatim}
 {}$\imaginary$
@@ -2124,8 +2812,7 @@
 \begin{verbatim}
 java.locale.providers=CLDR,JRE
 \end{verbatim}
-This isn't available for Java~7, and should be enabled by default
-for the proposed Java~9. The property
+This should be enabled by default for Java~9. The property
 can either be set in a script that runs \bibgls, for example,
 \begin{verbatim}
 java -Djava.locale.providers=CLDR,JRE,SPI -jar "$jarpath" "$@"
@@ -2146,9 +2833,8 @@
 
 \chapter{Command Line Options}
 \label{sec:switches}
+\setsecdepth{0}
 
-\setcounter{secnumdepth}{0}
-
 The syntax of \bibgls\ is:
 \begin{alltt}
 bib2gls \oargm{options} \meta{filename}
@@ -2306,6 +2992,43 @@
 Don't check for instances of \ics{citation} in the \ext{aux} file
 (default).
 
+\argsection{warn-non-bib-fields}
+
+If any internal fields are found in the \ext{bib} file, this setting
+will issue a warning as their use can cause unexpected results.
+The fields checked for are those listed in Tables~\ref{tab:internalfields}
+and \ref{tab:baseinternalfields} with a few exceptions, notably
+\field{type} and \field{sort}. Ideally you shouldn't need to use
+\field{sort} as there should be an appropriate fallback set up to
+use if \field{sort} isn't set, such as the label for symbols or the
+name for terms or the short form for abbreviations.
+
+This is the default setting and was added as some users were
+confused over which fields could be used in the \ext{bib} file.
+The use of these fields can break \bibgls's normal behaviour and
+cause unexpected results.
+
+The check is performed before field aliasing, so it's possible to
+alias a field to an internal field, such as \field{group}, without
+triggering this warning. If you do this you need to make sure you
+have taken appropriate precautions to avoid unexpected results.
+
+\argsection{no-warn-non-bib-fields}
+
+Switches off the check for non-bib fields. If you use this option
+you need to make sure you have taken appropriate precautions to
+avoid unexpected results.
+
+\argsection{warn-unknown-entry-types}
+
+If any unknown entry types are found in the \ext{bib} file, \bibgls\
+will issue a warning with this option set (default).
+
+\argsection{no-warn-unknown-entry-types}
+
+This option will suppress the warning if an unknown entry types are
+found in the \ext{bib} file.
+
 \argsection{merge-wrglossary-records}
 
 For use with the \styopt{indexcounter} package option
@@ -2711,9 +3434,10 @@
 \argsection{group}
 
 The \styfmt{glossaries-extra} \styopt{record} package option
-automatically creates a new field called \field{group}. If the
-\longarg{group} switch is used then, when sorting, \bibgls\ will try
-to determine the letter group for each entry and add it to the
+automatically creates a new internal field called \field{group}. If the
+\longarg{group} switch is used with the default \csopt[auto]{group}
+option then, when sorting, \bibgls\ will try
+to determine the letter group for each entry and assign it to the
 \field{group} field.  (Some \csopt{sort} options ignore this
 setting.) This value will be picked up by \ics{printunsrtglossary}
 if group headings are required (for example with the
@@ -2723,6 +3447,18 @@
 the glossary, there's no need to use this switch. Note that this
 switch doesn't automatically select an appropriate glossary style.
 
+\begin{important}
+The \field{group} field should typically not be set in the \ext{bib}
+file and will trigger a warning if found. The explicit use of the
+\field{group} key will override \bibgls's normal group formation behaviour,
+which can cause unexpected results. The custom use of the
+\field{group} field requires some care. As a general rule, if you
+find yourself wanting to use the \field{group} field in the \ext{bib} file,
+then the chances are that what you actually have is a hierarchical
+glossary (list of topics) and what you really need is the \field{parent} field.
+Compare the example files \exfile{sample-textsymbols.tex} and
+\exfile{sample-textsymbols2.tex}. See also \sectionref{sec:logicaldivisions}.
+\end{important}
 There are eight types of groups:
 \begin{description}
 \item[\idx{lettergroup}] The first non-ignored character of the
@@ -2768,13 +3504,14 @@
 comparisons (where the date is omitted). 
 The group label is obtained from \gls!{bibglstimegroup}.
 
-\item[\idx{customgroup}] The group label is explicitly set either in
-the \ext{bib} file or using the \csopt[\meta{label}]{group} resource
-option. You will need to use \gls{glsxtrsetgrouptitle} to provide an
-associated title if the \meta{label} isn't the same as the title.
-Remember that the label can't contain any active characters, so you
-can't use non-ASCII characters in \meta{label} with \sty{inputenc}
-(but you can use non-ASCII alphanumerics with \sty{fontspec}).
+\item[\idx{customgroup}] The group label is explicitly set either by
+aliasing a field (with \csopt{field-aliases}) or by using the
+\csopt[\meta{label}]{group} resource option. You will need to use
+\gls{glsxtrsetgrouptitle} in the document to provide an associated title if the
+\meta{label} isn't the same as the title.  Remember that the label
+can't contain any active characters, so you can't use non-ASCII
+characters in \meta{label} with \sty{inputenc} (but you can use
+non-ASCII alphanumerics with \sty{fontspec}).
 
 \end{description}
 
@@ -2896,9 +3633,10 @@
 
 \argsection{no-group}
 
-Don't use the \field{group} field. (Default.)
-The glossary won't have groups even if a group style, such as
-\glostyle{indexgroup}, is used.
+Don't automatically set the \field{group} field with
+\csopt[auto]{group} (default). The glossary won't have groups even if a
+group style, such as \glostyle{indexgroup}, is used (unless the
+\field{group} field is set to a custom value).
 
 \argsection{tex-encoding}
 
@@ -3055,7 +3793,7 @@
 
 \chapter{\iext{bib} Format}
 \label{sec:bib}
-\setcounter{secnumdepth}{1}
+\setsecdepth{1}
 
 \bibgls\ recognises certain entry types. Any unrecognised types will
 be ignored and a warning will be written to the transcript file.
@@ -3142,7 +3880,13 @@
 should be omitted.  Avoid using comments within field values.
 Comments are best placed outside of entry definitions.
 
-The most common type of comment is the encoding comment, described above.
+The most common type of comment is the encoding comment, described
+above.  \BibTeX's \entrydef{comment} is also supported by \bibgls\
+for general comments, but not for the encoding. For example, JabRef
+uses \atentryfmt{Comment} for metadata.
+\begin{codeenv}
+\atentryfmt{Comment}\marg{jabref-meta: databaseType:bib2gls;}
+\end{codeenv}
 
 \section{Fields}
 \label{sec:fields}
@@ -3151,9 +3895,17 @@
 ignored fields. These are set using a \keyvallist\ within
 \code{@\meta{entry-type}\marg{\meta{id},\meta{fields}}} in the
 \ext{bib} file. Most keys recognised by
-\gls{newglossaryentry} may be used as a field. In general, you
+\gls{newglossaryentry} may be used as a field unless \bibgls\
+considers them an internal field (see below). In general, you
 shouldn't need to use the \field{sort} field.
 
+If an optional field is missing and \bibgls\ needs to access it for
+some reason, \bibgls\ will try to fallback on another value. The
+actual fallback value depends on the entry type. The most common
+fallback is that used if the \field{sort} field is missing, which is
+typically the case. This approach allows different entry types to
+have different fields used for sorting.
+
 Predefined fields for use in \ext{bib} files are listed in
 Tables~\ref{tab:fields}, \ref{tab:bib2glsfields},
 \ref{tab:prefixfields} and~\ref{tab:accsuppfields}.  If you add any
@@ -3160,13 +3912,17 @@
 custom keys in your document using \ics{glsaddkey} or
 \ics{glsaddstoragekey}, those commands must be placed before the
 first use of \gls{GlsXtrLoadResources} to ensure that \bibgls\
-recognises them as a field name. 
+recognises them as a valid field name. 
 
-Internal fields that may be set by \bibgls\ when it creates the \iext{glstex}
-files are listed in Table~\ref{tab:internalfields}. These typically
-shouldn't be set in the \ext{bib} file. Some of these fields can be set
-for a particular document using a resource option, such as
-\csopt{type} or \csopt{category}.
+Internal fields that may be assigned within the document (the
+\LaTeX\ assignment code having been written by \bibgls\ in the
+\iext{glstex} file) are listed in Table~\ref{tab:internalfields}.
+These typically shouldn't be used in the \ext{bib} file. Some of
+these fields can be set for a particular document using a resource
+option, such as \csopt{type} or \csopt{group}. With
+\longarg{warn-non-bib-fields} set, \bibgls\ will check for internal
+fields that can cause interference with its normal operations and
+will warn if any are found in the \ext{bib} file.
 
 There are also some fields that are set and used by 
 \styfmt{glossaries} or \styfmt{glossaries-extra} listed in
@@ -3184,11 +3940,6 @@
 requires all the keys used in the file to be defined, regardless of
 whether or not you actually need them in the document.
 
-If an optional field is missing and \bibgls\ needs to access it for
-some reason (for example, for sorting), \bibgls\ will try to
-fallback on another value. The actual fallback value depends on the
-entry type.
-
 Other entries can be cross-referenced using the \field{see},
 \field{seealso} or \field{alias} fields or
 by using commands like \ics{gls} or \ics{glsxtrp} in any of the
@@ -3226,68 +3977,69 @@
 location list. The option may be used in combination with the \field{see} or
 \field{seealso} fields.
 
-\begin{table}[hbtp]
-\caption{Fields Provided by \styfmt{glossaries-extra}}\label{tab:fields}
-\centering
-\printfields{basefield,extrafield}%
-\end{table}
+\clearpage
 
-\begin{table}[hbtp]
-\caption{Fields Provided by \bibgls}\label{tab:bib2glsfields}
-\centering
-\printfields{bib2glsfield}%
-\end{table}
+\printfields
+ {basefield,extrafield}
+ {Fields Provided by \styfmt{glossaries-extra}}
+ {tab:fields}
 
-\begin{table}[hbtp]
-\caption[Fields Provided by \styfmt{glossaries-prefix}]{Fields
-Provided by \isty{glossaries-prefix}}\label{tab:prefixfields}
-\centering
-\printfields{prefixfield}%
-\end{table}
+\clearpage
 
-\begin{table}[hbtp]
-\caption[Fields Provided by \styfmt{glossaries-accsupp}]{Fields
-Provided by \isty{glossaries-accsupp}}
-\label{tab:accsuppfields}
-{\centering
-\printfields{accessfield}%
-\par}
-\medskip
-Don't load \isty{glossaries-accsupp} directly (with \ics{usepackage}) when using
-\styfmt{glossaries-extra}. Load using the \styopt{accsupp} package
-option instead.
-\begin{codeenv}
-\cs{usepackage}\oarg{\styopt{record},\styopt{accsupp}}\marg{glossaries-extra}
-\end{codeenv}
-\end{table}
+\printfields
+ {bib2glsfield}
+ {Fields Provided by \bibgls}
+ {tab:bib2glsfields}
 
-\begin{table}[hbtp]
-\caption[Fields Set by \bibgls]{Fields Sometimes Set by \bibgls\ in
-the \iext{glstex} File}
-\label{tab:internalfields}
-You may define and assign \field{bibtextype} (although it's more
-likely to be aliased). Don't define any of others, and don't use any
-of them in the \ext{bib} file, except for \field{group},
-\field{sort} or \field{type} although those three are best
-set in the resource command or by \bibgls.\par
-\bigskip
-\centering
-\printfields{internalfield}%
-\end{table}
+\printfields
+ {prefixfield}%
+ [Fields Provided by \styfmt{glossaries-prefix}]%
+ {Fields Provided by \isty{glossaries-prefix}}
+ {tab:prefixfields}
 
-\begin{table}[hbtp]
-\caption[Internal Fields Set by \styfmt{glossaries} or
-\styfmt{glossaries-extra} or \bibgls]{Internal Fields Set by
-\styfmt{glossaries} or \styfmt{glossaries-extra} or \bibgls}%
-\label{tab:baseinternalfields}
-\medskip
-Don't define any of these and don't use any of them in the \ext{bib}
-file.\par
-\bigskip
-\centering
-\printfields{baseinternalfield}%
-\end{table}
+\printfields
+ [%
+   Don't load \isty{glossaries-accsupp} directly (with \ics{usepackage}) 
+   when using \styfmt{glossaries-extra}. Load using the \styopt{accsupp} 
+   package option instead.
+%\begin{codeenv}
+%\cs{usepackage}\oarg{\styopt{record},\styopt{accsupp}}\marg{glossaries-extra}
+%\end{codeenv}
+ ]%
+ {accessfield}%
+ [Fields Provided by \styfmt{glossaries-accsupp}]%
+ {Fields Provided by \isty{glossaries-accsupp}}
+ {tab:accsuppfields}
 
+\printfields
+ [%
+  You may define and assign \field{bibtextype} as a key (although it's more
+  likely to be aliased). Don't define any of the others listed in this
+  table, and don't use any of them in the \ext{bib} file. A possible
+  exception is the \field{type} field, but it's more flexible to set
+  that through a resource option. The explicit use of \field{group} 
+  within a \ext{bib} file can cause unpredictable
+  results and is best set through a resource option or by \bibgls.
+  In general, you shouldn't need to set the \field{sort} field as
+  appropriate fallbacks should produce useful sort values.%
+ ]%
+ {internalfield}%
+ [Fields Set by \bibgls]%
+ {Fields Sometimes Set by \bibgls\ in the \iext{glstex} File}%
+ {tab:internalfields}
+
+\printfields
+ [%
+   Don't define any of these as keys and don't use any of them in the \ext{bib}
+   file.%
+ ]%
+ {baseinternalfield}%
+ [Internal Fields Set by \styfmt{glossaries} or \styfmt{glossaries-extra} 
+  or \bibgls]%
+ {Internal Fields Set by \isty{glossaries} or \isty{glossaries-extra} 
+  or \bibgls}%
+ {tab:baseinternalfields}
+
 \clearpage
 
 \section{Standard Entry Types}
@@ -3406,6 +4158,10 @@
 the document definitions will take precedence (but the interpreter
 will use the \atentry{preamble} definitions) and in the second
 example the \atentry{preamble} definitions will take precedence.
+For example, the document may define \csfmt{card} as:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{card}}[1]\marg{\ics{vert}\cmd{set}\marg{\idx{param}1}\cs{vert}}
+\end{codeenv}
 
 \item Make use of \gls{glsxtrfmt} provided by \styfmt{glossaries-extra} which
 allows you to store the name of the formatting command in a field.
@@ -3619,10 +4375,11 @@
 }
 \end{codeenv}
 
-If the \field{sort} field is missing the default is obtained from the
-\field{name} field.  (A different field can be selected for the sort value with
-\csopt{sort-field}.) For hierarchical entries, if the \field{name} field is
-omitted it will be obtained from the parent's \field{name}. 
+If the \field{sort} field is missing the default is obtained from
+the \field{name} field (unless overridden by
+\csopt{entry-sort-fallback}). For hierarchical entries, if the
+\field{name} field is omitted it will be obtained from the parent's
+\field{name}. 
 
 Terms defined using \atentry{entry} will be written to the output
 (\ext{glstex}) file using the command \gls!{bibglsnewentry}.
@@ -3706,6 +4463,10 @@
 entry.) If the name contains any characters that can't be used in
 the label, you must use the \field{name} field. If the \field{sort}
 field is missing the default is obtained from the \field{name}.
+Note that the \atentry{index} entry type is \emph{not} governed by
+\csopt{entry-sort-fallback}. This allows \atentry{index} and
+\atentry{entry} to have different fallbacks if the \field{sort}
+field is missing.
 
 Example:
 \begin{codeenv}
@@ -3727,7 +4488,9 @@
 field with the plural suffix appended. If the \field{text} field is
 missing, it's obtained from the original entry label. If the
 \field{sort} field is missing the default is obtained from the
-\field{name} field. All fields are optional. For example:
+\field{name} field. (As with \atentry{index}, \atentry{indexplural}
+is \emph{not} governed by \csopt{entry-sort-fallback}.) 
+All fields are optional. For example:
 \begin{codeenv}
 \atentry{indexplural}\marg{goose,
   \field{plural} = \marg{geese}
@@ -5109,10 +5872,12 @@
 \section{Multi-Entry Types}
 \label{sec:multientry}
 
-A multi-entry type is a primary entry that may spawn multiple 
+A multi-entry type is an entry that may spawn multiple 
 primary entries. This means that both the main entry and the
 spawned entries are sorted together along with all the other primary
-entries.
+entries. In the case of \atentry{spawndualindexentry}, the main and
+spawned entries are primary. The main entry's dual is created as per
+\atentry{dualindexentry}.
 
 \entrysection{bibtexentry}
 
@@ -5129,7 +5894,9 @@
 \end{codeenv}
 For convenience, \isty{glossaries-extra-bib2gls} v1.29+
 provides \ics{GlsXtrBibTeXEntryAliases} which covers all the
-standard \BibTeX\ entry types. If you use 
+standard \BibTeX\ entry types. Alternatively, you can use
+\csopt[bibtexentry]{unknown-entry-alias} to alias all entries
+that aren't recognised by \bibgls. If you use 
 \csopt[same as original entry]{category}, the \field{category}
 field will be set to the original entry type (for example,
 \code{article} or \code{book}). Similarly you can use
@@ -5313,6 +6080,290 @@
 pdflatex myDoc
 \end{codeenv}
 
+\entrysection{progenitor}
+
+The \atentryfmt{progenitor} type of entries are the only place where
+the \field{adoptparents} field is permitted. The value should be a
+comma-separated list of labels. The \field{adoptparents} field
+must be set and must contain a least one label. If the value
+contains any of the characters \idx{backslashchar} (backslash), 
+\idx{bgroupchar} (open brace) or \idx{egroupchar} (close brace) then
+the field will be interpreted (if the default \longarg{interpret} settings 
+is on).
+
+Since entries are spawned before fields are processed, the
+\field{adoptparents} field is parsed before any field aliases
+(\csopt{field-aliases}) or replication (\csopt{replicate-fields})
+takes place. However, if the \field{adoptparents} field isn't found,
+\bibgls\ will check for a simple mapping in both the
+\csopt{field-aliases} and \csopt{replicate-fields} settings.
+
+This entry type creates a main \idx[textformat=emph]{progenitor}
+term (with all the given fields except \field{adoptparents})
+and $n$ spawned \idx[textformat=emph]{progeny} terms, where
+$n$ is the number of elements in the \field{adoptparents} field,
+that are dependent on the main term.
+
+Each of the spawned \idx{progeny} entries have the field identified by
+\csopt{adopted-parent-field} (\field{parent} by default) set to the
+corresponding element in the \field{adoptparents} field.
+
+All fields from the original definition are copied except for the
+\field{adoptparents}, \field{alias} and \field{parent} fields. The
+\field{parent} field is never copied, regardless of the value of
+\csopt{adopted-parent-field}.  If the adopted parent field is
+changed to one that's contained in the original entry, it's value
+will be from \field{adoptparents} not the value from the original
+entry.
+
+The copied fields follow the same conditions as normal
+entries. (For example, unknown fields are ignored, case-changes are
+applied, if appropriate, and the \field{type} field must reference a
+valid glossary, if set.) If \csopt{progenitor-type} is set, then
+this assignment is made after the \idx{progeny} are created
+and only applies to the main \idx{progenitor} entry. The
+type for the \idx{progeny} can be set with \csopt{progeny-type}.
+For example, \csopt[same as parent]{progeny-type} will ensure
+that the \idx{progeny} are in the same glossary type as
+their parent entry.
+
+For example, an entry defined as:
+\begin{codeenv}
+\atentry{progenitor}\marg{\meta{id},
+  \field{adoptparents} = \marg{\meta{parent-1 id},\ldots,\meta{parent-N id}},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\end{codeenv}
+is essentially like:
+\begin{codeenv}
+\atentry{index}\marg{\meta{id},
+  \field{progeny} = \marg{\meta{parent-1 id}.\meta{id},\ldots,\meta{parent-N id}.\meta{id}},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\strut
+\atentry{index}\marg{\meta{parent-1 id}.\meta{id},
+  \field{progenitor} = \margm{id},
+  \field{parent} = \margm{parent-1 id},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\strut
+\ldots
+\strut
+\atentry{index}\marg{\meta{parent-N id}.\meta{id},
+  \field{progenitor} = \margm{id},
+  \field{parent} = \margm{parent-N id},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\end{codeenv}
+This creates the main (\idx{progenitor}) \meta{id} entry, which
+contains all the fields (except for \field{adoptparents}) that were
+in the original \atentry{progenitor} definition and has the new
+field \field{progeny} set to the comma-separated list of spawned
+entry labels. The main entries are defined in the \ext{glstex} file
+with \gls{bibglsnewprogenitor}.
+
+In addition to the main \meta{id} entry, the above also creates the
+spawned \idx{progeny} entries \code{\meta{parent-1 id}.\meta{id}}, \ldots, 
+\code{\meta{parent-N id}.\meta{id}} that are dependent on the main
+\meta{id} entry.
+
+The spawned entries have the \field{parent} field set to the
+corresponding label obtained from the \field{adoptparents} list.
+This parent entry must also be defined, as usual for the
+\field{parent} field.  (This restriction obviously doesn't apply if
+\csopt{adopted-parent-field} is changed from the default
+\field{parent}.) The spawned entries are defined in the \ext{glstex}
+file with \gls{bibglsnewspawnedindex}
+
+If the main \idx{progenitor} entry is referenced in the document
+then (assuming the default selection criteria) the spawned entries
+will also be automatically selected. You can check for the existence
+of the \field{progenitor} field using \cs{glsxtrifhasfield} and
+fetch the \field{location} field from the main entry, if required.
+
+Although the spawned entries are considered dependents of the main
+entry, the reverse doesn't apply. If a spawned entry is referenced
+in the document (with \code{\meta{parent-id}.\meta{id}}) then the
+main entry and its other spawned entries aren't automatically
+selected.
+
+For example, suppose the file \filefmt{entries.bib} contains:
+\begin{codeenv}
+\atentry{indexplural}\marg{stylesheet, \field{text}=\marg{stylesheet language}}
+\strut
+\atentry{index}\marg{webdesign, \field{name}=\marg{web design}}
+\strut
+\atentry{indexplural}\marg{markup, \field{text}=\marg{markup language}}
+\strut
+\atentry{progenitor}\marg{xml,
+  \field{name}=\marg{XML},
+  \field{adoptparents}=\marg{markup}
+}
+\strut
+\atentry{progenitor}\marg{css,
+  \field{name}=\marg{CSS},
+  \field{adoptparents}=\marg{stylesheet,webdesign}
+}
+\strut
+\atentry{progenitor}\marg{html,
+  \field{name}=\marg{HTML},
+  \field{adoptparents}=\marg{markup,webdesign}
+}
+\strut
+\atentry{progenitor}\marg{xsl,
+  \field{name}=\marg{XSL},
+  \field{adoptparents}=\marg{stylesheet}
+}
+\end{codeenv}
+and if the document contains:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt[tree]{stylemods},\styopt[index]{style}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src},\csopt[all]{selection}}
+\strut
+\cs{newcommand}*\marg{\cs{glstreenamefmt}}[1]\marg{\idx{param}1}
+\cmd{begin}\marg{document}
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+Then the resulting list will be:
+\begin{quote}
+\setlength{\parindent}{0pt}%
+\setlength{\parskip}{0pt plus 0.3pt}%
+\glstreeitem CSS\par
+\glstreeitem HTML\par
+\glstreeitem markup language\par
+\glstreesubitem HTML\par
+\glstreesubitem XML\par
+\glstreeitem stylesheet language\par
+\glstreesubitem CSS\par
+\glstreesubitem XSL\par
+\glstreeitem web design\par
+\glstreesubitem CSS\par
+\glstreesubitem HTML\par
+\glstreeitem XML\par
+\glstreeitem XSL\par
+\end{quote}
+This allows the HTML and CSS entries to be listed under multiple
+parents.
+
+The following \atentryfmt{spawn\meta{single-type}} commands are all forms
+of \atentry{progenitor} that create the given
+\atentryfmt{\meta{single-type}} of entry. The spawned entries are actually
+created with the private entry type \atentryfmt{spawned\meta{type}}. In the
+case of \atentry{progenitor}, the spawned entries are defined as 
+a \atentryfmt{spawnedindex} entry. These special
+\atentryfmt{spawned\meta{type}} entry types aren't intended for use
+in the \ext{bib} file, but if you reference the entry type (for
+example, with \csopt[same as entry]{category}) you will get 
+\atentryfmt{spawned\meta{type}} as the entry type. The
+original entry type for the spawned entries is the same as
+the original entry for the main \atentry{progenitor} entry.
+
+There is currently only one form of dual \atentry{progenitor} entry and that's
+\atentry{spawndualindexentry}. Only the main \idx{progenitor} entry
+is a dual entry. The spawned \idx{progeny} are all \atentry{index} 
+primary entries.
+
+\entrysection{spawnindex}
+
+As \atentry{progenitor}, but the main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnindex} and the
+spawned entries are defined with \gls{bibglsnewspawnedindex}.
+
+\entrysection{spawnindexplural}
+
+As \atentry{progenitor}, except that it creates
+\atentry{indexplural} terms instead of \atentry{index}.
+As with \atentry{indexplural}, if the \field{name} field isn't set,
+it's assigned to the same value as the \field{plural} field (or the
+fallback for the \field{plural}, if not defined).
+
+The main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnindexplural} and the
+spawned entries are defined with \gls{bibglsnewspawnedindexplural}.
+
+\entrysection{spawnentry}
+
+As \atentry{progenitor}, except that it creates
+\atentry{entry} terms instead of \atentry{index}.
+As with \atentry{entry}, the \field{description} field is required
+and either \field{name} or \field{parent}.
+
+The main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnentry} and the
+spawned entries are defined with \gls{bibglsnewspawnedentry}.
+
+\entrysection{spawnabbreviation}
+
+As \atentry{progenitor}, except that it creates
+\atentry{abbreviation} terms instead of \atentry{index}.
+As with \atentry{abbreviation}, the \field{short} and \field{long} 
+fields are required.
+
+The main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnabbreviation} and the
+spawned entries are defined with \gls{bibglsnewspawnedabbreviation}.
+
+\entrysection{spawnacronym}
+
+As \atentry{progenitor}, except that it creates
+\atentry{acronym} terms instead of \atentry{index}.
+As with \atentry{acronym}, the \field{short} and \field{long} 
+fields are required.
+
+The main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnacronym} and the
+spawned entries are defined with \gls{bibglsnewspawnedacronym}.
+
+\entrysection{spawnsymbol}
+
+As \atentry{progenitor}, except that it creates
+\atentry{symbol} terms instead of \atentry{index}.
+As with \atentry{symbol}, the required fields are \field{name} or
+\field{parent}, and the \field{description} field is required if the
+\field{name} field is missing.
+
+The main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnsymbol} and the
+spawned entries are defined with \gls{bibglsnewspawnedsymbol}.
+
+\entrysection{spawnnumber}
+
+As \atentry{progenitor}, except that it creates
+\atentry{number} terms instead of \atentry{index}.
+As with \atentry{number}, the required fields are \field{name} or
+\field{parent}, and the \field{description} field is required if the
+\field{name} field is missing.
+
+The main entries are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnnumber} and the
+spawned entries are defined with \gls{bibglsnewspawnednumber}.
+
+\entrysection{spawndualindexentry}
+
+As \atentry{progenitor}, except that the main (\idx{progenitor})
+entry behaves like \atentry{dualindexentry}. The spawned
+\idx{progeny} behave like \atentry{index} are so are all considered primary
+entries. The \field{adoptparents} field should therefore reference
+primary entries with the default \csopt[parent]{adopted-parent-field}.
+
+The main primary and secondary (dual) entries are defined in the
+\ext{glstex} file with
+\gls{bibglsnewspawndualindexentry} and
+\gls{bibglsnewspawndualindexentrysecondary}. The spawned
+\idx{progeny} are defined with \gls{bibglsnewspawnedindex}.
+
 \chapter{Resource File Options}
 \label{sec:resourceopts}
 
@@ -5382,6 +6433,34 @@
 \ext{aux} file. This means that any invalid options will be reported
 by \bibgls\ not by \sty{glossaries-extra}.
 
+As from \sty{glossaries-extra} v1.40 you can provide a default set
+of options by redefining:
+\nosecdef{GlsXtrDefaultResourceOptions}
+This command will be inserted at the start of the options list for
+all resource commands (and will expand as it's written to
+the \ext{aux} file).  For example:
+\begin{codeenv}
+\cs{renewcommand}\marg{\gls{GlsXtrDefaultResourceOptions}}\marg{\comment{}
+  \csopt[all]{selection},\csopt[entries]{src}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[symbols]{type},
+  \csopt[entrytype=symbol]{match}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[abbreviations]{type},
+  \csopt[entrytype=abbreviation]{match}}
+\end{codeenv}
+This acts like:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[all]{selection},\csopt[entries]{src},
+  \csopt[symbols]{type},
+  \csopt[entrytype=symbol]{match}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[all]{selection},\csopt[entries]{src},
+  \csopt[abbreviations]{type},
+  \csopt[entrytype=abbreviation]{match}}
+\end{codeenv}
+
 If you have multiple \ext{bib} files you can either select them all
 using \csopt[\meta{bib list}]{src} in a single
 \gls{glsxtrresourcefile} call, if they all require the same settings,
@@ -5710,6 +6789,9 @@
 This option isn't cumulative.  Multiple instances of
 \csopt{entry-type-aliases} override previous instances.
 If \meta{\keyvallist} is empty there will be no mappings.
+You can save the original entry type in the
+\field{originalentrytype} field with
+\csopt{save-original-entrytype}.
 
 Here's another example entry in a \ext{bib} file:
 \begin{codeenv}
@@ -5752,6 +6834,14 @@
 }
 \end{codeenv}
 
+\optsection{unknown-entry-alias}
+
+If this option is set, the \meta{value} is used as the alias for any
+unknown entry types (after any aliases provided with
+\csopt{entry-type-aliases} have been applied). If the value is
+missing or empty, unknown entry types will be ignored with a
+warning.
+
 \optsection{action}
 
 This governs how the entries are written in the \iext{glstex} file.
@@ -6076,7 +7166,8 @@
 \optsection{match}
 
 It's possible to filter the selection by matching field values.
-If \meta{\keyvallist} is empty no filtering will be applied, otherwise
+The value is required for this key but may be empty, which indicates 
+that the setting is switched off, otherwise
 \meta{\keyvallist} should be a \meta{key}=\meta{regexp} list, where
 \meta{key} is the name of a field or \optfmt{id} for the entry's
 label or \optfmt{entrytype} for the \bibgls\ entry type (as in
@@ -6085,7 +7176,7 @@
 \csopt{entry-type-aliases}, this refers to the target entry type not
 the original entry type specified in the \ext{bib} file.
 
-The \meta{regex} part should be a regular expression conforming
+The \meta{regex} part should be a \idx{regex} conforming
 to
 \href{http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html}{Java's
 Pattern class}~\cite{pattern}. The pattern is anchored 
@@ -6153,11 +7244,11 @@
 \optsection{not-match}
 
 If \csopt[\meta{\keyvallist}]{match} would cause an entry to be
-selected then \csopt[\meta{\keyvallist}]{not-match} would cause
-that entry to be ignored. If \meta{\keyvallist} is missing, the
-filtering is removed.  If you have both \csopt{match} and
-\csopt{not-match} in the same resource set, the last one listed
-takes precedence.
+selected then \csopt[\meta{\keyvallist}]{not-match} would cause that
+entry to be ignored.  The value is required for this key but may be
+empty, which indicates that the setting is switched off.  If you
+have both \csopt{match} and \csopt{not-match} in the same resource
+set, the last one listed takes precedence.
 
 \optsection{match-action}
 
@@ -7052,7 +8143,9 @@
 value. (If a field is present in both \csopt{labelify} and
 \csopt{labelify-list}, then \csopt{labelify-list} takes precedence.) 
 Note that if this setting is on, \idxpl{crossresourceref} aren't
-permitted. 
+permitted. The value is required for this key but may be empty,
+which indicates an empty set of fields (that is, the setting is 
+switched off).
 
 Each listed field will be converted into a string suitable
 for use as a label. (Not necessarily a glossary entry label, but
@@ -7157,9 +8250,13 @@
 
 This option takes a comma-separated list as a value with each
 element in the list in the form \code{\margm{regex}\margm{replacement}}
-where \meta{regex} is a regular expression (that conforms to \href{http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html}{Java's
+where \meta{regex} is a \idx{regex} (that conforms to \href{http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html}{Java's
 Pattern class}~\cite{pattern}) and \meta{replacement}
-is the replacement text. Remember that the argument of
+is the replacement text. The value is required for this key but
+may be empty, which indicates that the
+setting is switched off.
+
+Remember that the argument of
 \gls{GlsXtrLoadResources} is expanded when written to the \ext{aux}
 file so take care to protect any special characters. For example, to
 match a literal \idx{full-stop} use \cs{cs.string}\idx{cs.period}
@@ -7509,12 +8606,14 @@
 
 The \meta{list} should be a comma-separated list of fields that
 have values in the form \code{\oargm{tag}\meta{id-list}} where
-\meta{id-list} is a comma-separated list of entry labels. This
-makes those fields act like the \field{see} field by
+\meta{id-list} is a comma-separated list of entry labels. The value
+is required for this key but may be empty, which indicates an empty
+set of fields (that is, the setting is switched off).
+
+This setting makes those fields act like the \field{see} field by
 identifying the listed entries as dependencies, but the information
-isn't added to the cross-reference part of the location list.
-This action is performed after \csopt{labelify-list}, if that's also
-set.
+isn't added to the cross-reference part of the location list.  This
+action is performed after \csopt{labelify-list}, if that's also set.
 
 For example, suppose the file \filefmt{entries-en.bib} contains:
 \begin{codeenv}
@@ -7640,15 +8739,17 @@
 
 \optsection[\subsubsection]{group}
 
-The \csopt{group} option may only be used with the \longarg{group} switch.
-This will set the \field{group} field to \meta{label} unless
-\meta{label} is \optfmt{auto}, in which case the value is
-set automatically during the sorting (see also
-\csopt{group-formation}). 
-The corresponding title can be set
-with \gls{glsxtrsetgrouptitle} if the title is different from the
-label.  The default behaviour is \csopt[auto]{group}.
+The \csopt{group} option will set the \field{group} field to \meta{label}
+unless \meta{label} is \optfmt{auto}. If \csopt[auto]{group} then if
+the \longarg{group} switch is used the value of the \field{group}
+field is set automatically during the sorting (see also \csopt{group-formation}
+and \sectionref{sec:logicaldivisions}). If the \longarg{no-group}
+setting is on then \csopt[auto]{group} does nothing.
 
+The corresponding group title can be set with
+\gls{glsxtrsetgrouptitle} in the document if the title is different
+from the label. The default behaviour is \csopt[auto]{group}.
+
 For example:
 \begin{codeenv}
 \gls{GlsXtrLoadResources}\oarg{\csopt[integer]{sort},\csopt[Constants]{group},
@@ -7772,6 +8873,15 @@
    to the same value as the \field{category} field
    (\field{type} unchanged if \field{category} not set);
 
+\item \optfmt{same as parent}: sets the \field{type} to the same as
+the entry's parent (new to v1.9). If the entry doesn't have a parent
+or if the parent doesn't have the \field{type} field set, then
+no change is made. Entries should always have the same type
+as their parent, but it's possible for spawned entries to 
+pick up the \field{type} field from their \idx{progenitor} entry
+(if it was explicitly set in the \ext{bib} file),
+which may be inappropriate.
+
  \item\meta{label} sets the \field{type} field to the glossary 
    identified by \meta{label}.
 \end{itemize}
@@ -7826,6 +8936,30 @@
 \code{\ics{provideignoredglossary*}\margm{type}} to the \ext{glstex} file
 (see \sectionref{sec:newglossary}).
 
+\optsection[\subsubsection]{progenitor-type}
+
+This sets the default \field{type} field for the main term defined by 
+\atentry{progenitor}-like entries. The \meta{value} is as for
+\csopt{type}. This doesn't change the \field{type} for the spawned
+\idx{progeny}.
+
+\optsection[\subsubsection]{progeny-type}
+
+This sets the default \field{type} field for the \idx{progeny} term
+spawned by 
+\atentry{progenitor}-like entries. The \meta{value} is as for
+\csopt{type}. This doesn't change the \field{type} for the main
+\idx{progenitor}. Remember that with the default
+\csopt[parent]{adopted-parent-field} setting, the given type 
+should match the type of the parent entry.
+
+\optsection[\subsubsection]{adopted-parent-field}
+
+This identifies the target field to be set to the corresponding
+value of the \field{adoptparents} list by the \idx{progeny}
+entries spawned by the \atentry{progenitor} type of entry.
+The default is \field{parent}.
+
 \optsection[\subsubsection]{abbreviation-name-fallback}
 
 The entry types that define abbreviations (such as
@@ -7911,12 +9045,17 @@
 this option where each \meta{key}\dequals\meta{value} pair
 is in the form
 \code{\meta{field1}\dequals\marg{\meta{field2},\meta{field3},\ldots}}
-where all values are field names. This copies the contents
+where all values are field names. The value is required for this key
+but may be empty, which indicates that the setting is switched off.
+
+This option copies the contents
 of \meta{field1} to \meta{field2}, \meta{field3}, \ldots\
 (only if the target field isn't already set with
 \csopt[false]{replicate-override}). This action is
 performed after \csopt{ignore-fields} (see
-\sectionref{sec:resourcesets}).
+\sectionref{sec:resourcesets}). If the source field is missing, the
+\csopt{replicate-missing-field-action} setting determines the
+action.
 
 For example, suppose \filefmt{people.bib} contains:
 \begin{codeenv}
@@ -7998,6 +9137,18 @@
 \csopt{replicate-fields} will override the existing value if the
 target field is already set.
 
+\optsection[\subsubsection]{replicate-missing-field-action}
+
+This option indicates what to do if a source field identified in 
+\csopt{replicate-fields} is missing. The value may be one of:
+\begin{itemize}
+\item \optfmt{skip}: skip the replication of the missing field
+(default);
+\item \optfmt{fallback}: use the fallback for the missing field, if
+one is available (otherwise skip);
+\item \optfmt{empty}: make the target field empty.
+\end{itemize}
+
 \optsection[\subsubsection]{counter}
 
 The \csopt{counter} option assigns the default counter to use
@@ -8053,6 +9204,14 @@
 If set, the value of the \field{alias} field is copied to
 the \field{see} field. The default setting is \csopt[false]{copy-alias-to-see}.
 
+\optsection[\subsubsection]{save-original-entrytype}
+
+If this is set to \optfmt{true}, the original entry type
+(without the leading \idx{atchar}) is stored in the 
+\field{originalentrytype} field. If no entry aliasing has been
+applied (with \csopt{entry-type-aliases}) the field will be set to
+the actual entry type.
+
 \subsection{Field Adjustments}
 \label{sec:fieldmods}
 
@@ -8240,7 +9399,8 @@
 \tableref{tab:bibglsdefs}).
 \end{itemize}
 The final \code{:\meta{csname}} part may be omitted if no command
-need be applied. (That is, sort by label.)
+need be applied. (That is, sort by label.) The value is required for this key but
+may be empty, which indicates the setting is switched off.
 
 The sorting options are as those for the main list.  For example,
 for entries in the primary list the break point is obtained from the
@@ -8546,7 +9706,10 @@
 \optsection[\subsubsection]{bibtex-contributor-fields}
 
 This option indicates that the listed fields all use \BibTeX's name
-syntax (as used in \BibTeX's \code{author} and \code{editor} fields).
+syntax (as used in \BibTeX's \code{author} and \code{editor} fields). The value is required for this key but
+may be empty, which indicates an empty set of fields (that is, the
+setting is switched off).
+
 The values of these fields will be converted into the form:
 \begin{codeenv}
 \gls{bibglscontributorlist}\margm{contributor list}\margm{n}
@@ -8651,6 +9814,142 @@
 \csopt[von]{bibtex-contributor-fields} setting when obtaining the
 sort value.
 
+\optsection[\subsubsection]{encapsulate-fields}
+
+This option should take a comma-separated list of 
+\optfmt{\meta{field}\dequals\meta{cs-name-1arg}} values, where
+\meta{cs-name-1arg} is the name of a control sequence that takes
+one argument. The value is required for this key but
+may be empty, which indicates an empty set (that is, the
+setting is switched off). 
+
+During the processing stage, each field identified in
+the list (if defined) will have its value replaced with:
+\begin{codeenv}
+\cmd{\meta{cs-name-1arg}}\margm{value}
+\end{codeenv}
+where \meta{value} was its previous value. An
+empty list switches off encapsulation (the default).
+
+This action overrides any previous use of \csopt{encapsulate-fields}
+within the same \idx{resourceset} and is always performed before
+\csopt{encapsulate-fields*}, regardless of the order in the 
+\idx{resourceset}['s] list of options.
+
+\optsection[\subsubsection]{encapsulate-fields*}
+
+This option should take a comma-separated list of 
+\optfmt{\meta{field}\dequals\meta{cs-name-2arg}} values, where 
+\meta{cs-name-2arg} is the name of a control sequence that takes two
+arguments. The value is required for this key but
+may be empty, which indicates an empty set (that is, the
+setting is switched off). 
+
+During the processing stage, each field identified in the
+list (if defined) will have its value replaced with:
+\begin{codeenv}
+\cmd{\meta{cs-name-2arg}}\margm{value}\margm{label}
+\end{codeenv}
+where \meta{value} was its previous value and \meta{label} is the
+entry's label (including prefix, if appropriate). An
+empty list switches off encapsulation (the default). 
+
+This action overrides any previous use of
+\csopt{encapsulate-fields*} within the same \idx{resourceset}, and
+is always performed after \csopt{encapsulate-fields}, regardless of
+the order in the \idx{resourceset}['s] list of options, so if the
+same field is listed in both settings, its value will end up as:
+\begin{codeenv}
+\cmd{\meta{cs-name-2arg}}\marg{\cmd{\meta{cs-name-1arg}}\margm{value}}\margm{label}
+\end{codeenv}
+
+\optsection[\subsubsection]{interpret-fields}
+
+This option indicates that the listed fields should be replaced by
+their interpreted values. The value is required for this key but
+may be empty, which indicates an empty set of fields (that is, the
+setting is switched off). Other fields not listed may still be
+interpreted depending on other settings. As with the \field{sort}
+field, any special characters are replaced with commands like
+\ics{glsbackslash} and \ics{bibglsdollarchar}. This option is
+applied after \csopt{field-case-change} (if set).
+
+For example, suppose I have a file \filefmt{entries.bib} that
+contains definitions like:
+\begin{codeenv}
+\atentry{symbol}\marg{pi,
+  \field{name}=\marg{\cs{ensuremath}\marg{\ics{pi}}},
+  \field{description}=\marg{the ratio of a circle's circumference to its diameter},
+}
+\strut
+\atentry{symbol}\marg{sigma,
+  \field{name} = \marg{\cs{ensuremath}\marg{\ics{sigma}}},
+  \field{description} = \marg{standard deviation}
+}
+\end{codeenv}
+Instead of having a list of terms (glossary), suppose I want to have
+standalone definitions, where the term appears in a section heading.
+I could define a command like this:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{definition}}[1]\marg{\comment{}
+  \cs{ifglsentryexists}\marg{\idx{param}1}\comment{}
+  \marg{\comment{}
+    \cs{section}\oarg{\cs{glsentryname}\marg{\idx{param}}}\marg{\cs{glsadd}\marg{\idx{param}1}\ics{glsxtrglossentry}\marg{\idx{param}1}}\comment{}
+    \ics{Glossentrydesc}\marg{\idx{param}1}\cs{glspostdescription}
+  }\comment{}
+  \marg{\cs{section}\oarg{Missing `\idx{param}1'}\marg{\cs{glsadd}\marg{\idx{param}1}}}\comment{}
+}
+\end{codeenv}
+which can be used in the document:
+\begin{codeenv}
+\ics{tableofcontents}
+\cmd{definition}\marg{pi}
+\cmd{definition}\marg{sigma}
+\end{codeenv}
+A problem with this definition of my custom command occurs if I add
+\sty{hyperref} to the document, because this tries to write \cs{pi}
+and \cs{sigma} to the PDF bookmarks, which doesn't work because
+those commands can't be automatically converted to characters
+permitted in a PDF string. This leads to a warning from
+\sty{hyperref}:
+\begin{alltt}
+Token not allowed in a PDF string (Unicode)
+\end{alltt}
+Ideally I'd like to be able to convert these symbols to Unicode so
+that they can appear in the bookmarks. Since \bibgls' interpreter
+recognises these commands, I can get it to make the conversion
+instead of trying to implement a method within \TeX:
+\begin{codeenv}
+\cs{glsaddstoragekey}\marg{pdfname}\marg{}\marg{\cmd{pdfname}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},
+  \csopt[\field{name}=\fieldfmt{pdfname}]{replicate-fields},
+  \csopt[fallback]{replicate-missing-field-action},
+  \csopt[\fieldfmt{pdfname}]{interpret-fields}
+}
+\end{codeenv}
+This first copies the \field{name} field to the custom
+\fieldfmt{pdfname} and then interprets the copy. This leaves
+the \field{name} field with the \LaTeX\ code to produce the symbol
+in the document, but the \fieldfmt{pdfname} field ends up with all markup
+stripped by the interpreter and the \cs{pi} and \cs{sigma} are
+converted to the Unicode characters \hex{1D70B} (mathematical italic
+small pi) and \hex{1D70E} (mathematical italic small sigma). With
+\XeLaTeX\ or \LuaLaTeX\ these characters can be written to the PDF
+bookmarks by adjusting the definition of the custom command:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{definition}}[1]\marg{\comment{}
+  \cs{ifglsentryexists}\marg{\idx{param}1}\comment{}
+  \marg{\comment{}
+    \cs{section}
+    \oarg{\ics{texorpdfstring}\marg{\cs{glsentryname}\marg{\idx{param}1}}\marg{\cmd{pdfname}\marg{\idx{param}1}}}
+    \marg{\cs{glsadd}\marg{\idx{param}1}\cs{glsxtrglossentry}\marg{\idx{param}1}}\comment{}
+    \cs{Glossentrydesc}\marg{\idx{param}1}\cs{glspostdescription}
+  }\comment{}
+  \marg{\cs{section}\oarg{Missing `\idx{param}1'}\marg{\cs{glsadd}\marg{\idx{param}1}}}%
+}
+\end{codeenv}
+
 \optsection[\subsubsection]{date-time-fields}
 
 This option indicates that the listed fields all contain 
@@ -8661,7 +9960,7 @@
 \csopt{dual-date-time-field-locale}. If the field value is missing
 or doesn't match the given pattern it remains unchanged, otherwise
 it's converted into the form:
-\nosecdef{bibglsdatetime}
+\formatdef{bibglsdatetime}
 where \meta{original} is the value of the field before conversion.
 If the interpreter is on, the value will be interpreted before
 being parsed if it contains \idx{escchar}, \idx{mshiftchar},
@@ -8674,7 +9973,7 @@
 As \csopt{date-time-fields} but for fields that only contain date
 (not time) information. If parsed correctly, the field is converted
 to:
-\nosecdef{bibglsdate}
+\formatdef{bibglsdate}
 The fields are parsed according to
 \csopt{date-field-format} and
 \csopt{date-field-locale} for primary entries and according to
@@ -8686,7 +9985,7 @@
 As \csopt{date-time-fields} but for fields that only contain time
 (not date) information. If parsed correctly, the field is converted
 to:
-\nosecdef{bibglstime}
+\formatdef{bibglstime}
 The fields are parsed according to
 \csopt{time-field-format} and
 \csopt{time-field-locale} for primary entries and according to
@@ -8930,9 +10229,11 @@
   skipped. If the option is \optfmt{title} then the subsequent tokens
   are skipped until a word-boundary is found.
 
-  \item If the control sequence is \ics{NoCaseChange}, then the 
+  \item If the control sequence is \ics{NoCaseChange} or is in the
+  \csopt{no-case-change-cs} list, then the 
   control sequence and its argument is ignored. With \optfmt{firstuc}
   and \optfmt{title}, if \code{\ics{NoCaseChange}\margm{text}}
+  (but not any \csopt{no-case-change-cs} command)
   occurs at the start of a word, then \bibgls\ will act as though
   the word hasn't started yet (so the next token will be considered
   for a \idx{case-change}). This is different to the way \ics{makefirstuc}
@@ -9222,6 +10523,26 @@
 which is incorrect. Instead, provide a command that hides the label
 (such as the \csfmt{strong} example described on page~\glsxtrpageref{strong}).
 
+\optsection[\subsubsection]{no-case-change-cs}
+
+Instructs the non-\TeX\ case-changing options (where \bibgls, not
+\TeX, performs the modification) to treat the commands whose control
+sequence names are given in the comma-separated \meta{list} in the
+same way as it treats \cs{ensuremath} etc. That is, the case-change
+is omitted for the argument that follows any of those commands.
+
+For example, this manual defines some semantic commands such as
+\csfmt{fieldfmt} (to format field names), \csfmt{abbrstylefmt}
+(to format abbreviation style names) and \csfmt{glostylefmt} (to format
+glossary style names). These occur in some of the section
+and subsection headings in the \hyperref[sec:topics]{topic summary}
+which are converted to \idx{titlecase} (see \csopt{field-case-change}). 
+These formatting commands shouldn't have their argument changed so they 
+are identified with:
+\begin{codeenv}
+\csopt[fieldfmt,abbrstylefmt,glostylefmt]{no-case-change-cs}
+\end{codeenv}
+
 \optsection[\subsubsection]{word-boundaries}
 
 Governs how the \optfmt{title} \idx{case-change} option
@@ -9281,7 +10602,44 @@
 Applies a case-change to the \field{description} field (if present).
 This option may take one of the values described above.
 
+\optsection[\subsubsection]{field-case-change}
 
+A general case-change instruction. The value should be a
+comma-separated list of \code{\meta{field}\dequals\meta{setting}} for each
+field that needs a case-change applied.  The value is required for this key but
+may be empty, which indicates this option is switched off.
+
+The \meta{setting} should be
+the same as the permitted values for the above options. This
+option is applied after all fields have been parsed but before
+\csopt{interpret-fields}. If the
+specified field is missing, the fallback for that field (if known) is copied
+into the field. For example:
+\begin{codeenv}
+\csopt[\field{user1}=uc,\field{user2}={firstuc}]{field-case-change}
+\end{codeenv}
+This manual provides a custom storage key called
+\fieldfmt{nametitle}:
+\begin{codeenv}
+\cs{glsxtrprovidestoragekey}\marg{\fieldfmt{nametitle}}\marg{}\marg{}
+\end{codeenv}
+The resource options copy the \field{name} value to this custom
+field and convert \fieldfmt{nametitle} to \idx{titlecase}:
+\begin{codeenv}
+\csopt[\field{name}=\fieldfmt{nametitle}]{replicate-fields},
+\csopt[\fieldfmt{nametitle}=title]{field-case-change},
+\end{codeenv}
+This means that the \hyperref[sec:topics]{topic summary}
+(page~\pageref{sec:topics}) can fetch the value of
+\fieldfmt{nametitle} instead of \field{name}, which provides an
+expandable \idx{titlecase} form that's suitable for the PDF
+bookmarks.
+
+This option isn't cumulative. If used multiple times in the same
+\idx{resourceset}, the last instance will be the one used. If
+the \keyvallist\ is missing, no general case-changing is applied
+(the default).
+
 \section{Plurals}
 \label{sec:plurals}
 
@@ -9588,7 +10946,7 @@
 \cs{glsfieldfetch}\marg{gls.sample}\marg{loclist}\marg{\cmd{loclist}}\comment{fetch location list}
 \cs{glsnoidxloclist}\marg{\cmd{loclist}}\comment{iterate over locations}
 \end{codeenv}
-This uses \ics{glsnoidxloclisthandler} as the list's handler
+This uses \ics{glsnoidxloclisthandler} as the list's \idx{handler}
 macro, which simply displays each location separated by \ics{delimN}.
 (See also
 \href{http://www.dickimaw-books.com/latex/admin/html/foreachtips.shtml}{Iteration
@@ -9742,7 +11100,7 @@
   \cs{renewcommand}\marg{\cs{GlsXtrLocationField}}\marg{primarylocations}\comment{}
 }
 \end{codeenv}
-Remember that the handler used by \cs{printunsrtglossary} will
+Remember that the \idx{handler} used by \cs{printunsrtglossary} will
 fallback on the \field{loclist} field if the field identified
 by \cs{GlsXtrLocationField} is missing or empty. You may want to
 consider using \csopt[false]{save-loclist} to prevent this.
@@ -9985,7 +11343,7 @@
 then the locations aren't considered consecutive.
 \item\label{itm.csmatch} If both \meta{location-1} and \meta{location-2} match the
 pattern (line break for clarity only)\footnote{The Java class \code{\csfmt{p}\marg{javaDigit}}
-used in the regular expression will match any digits in the 
+used in the \idx{regex} will match any digits in the 
 Unicode \idx{numberdecimaldigit} category not just the digits in the Basic Latin set. Similarly \code{\csfmt{p}\marg{javaAlphabetic}} will also match alphabetic
 characters outside the Basic Latin set.}
 \begin{verbatim}
@@ -10209,6 +11567,51 @@
 
 The default is \csopt[none]{suffixFF}.
 
+\optsection{compact-ranges}
+
+The \meta{value} may be an integer \meta{n} or \optfmt{false} (equivalent to
+\csopt[0]{compact-ranges}) or \optfmt{true} (equivalent to
+\csopt[3]{compact-ranges}). If no \meta{value} is specified,
+\optfmt{true} is assumed.
+
+This setting allows location ranges such as 184--189 to appear
+more compactly as 184--9. The end location is encapsulated
+in the command \gls{bibglscompact}, so the range would actually
+become:
+\begin{codeenv}
+184\ics{delimR}\gls{bibglscompact}\marg{digit}\marg{18}\marg{9}
+\end{codeenv}
+If the location is in the form \code{\meta{cs}\margm{loc}}
+(where \meta{cs} is a command)
+then \gls{bibglscompact} will be inside the argument.
+For example, if the range would normally be:
+\begin{codeenv}
+\cmd{custom}\marg{184}\ics{delimR}\cmd{custom}\marg{189}
+\end{codeenv}
+then it would become:
+\begin{codeenv}
+\cmd{custom}\marg{184}\ics{delimR}\cmd{custom}\marg{\gls{bibglscompact}\marg{digit}\marg{18}\marg{9}}
+\end{codeenv}
+The numerical value given in \csopt[\meta{n}]{compact-ranges}
+indicates that compaction should only occur if the actual location
+consists of at least \meta{n} characters, for $\meta{n} \geq 2$. 
+Any value of \meta{n} less than 2 will switch off compaction.
+
+For example, \code{189} consists of 3 characters, so it will be
+compacted with \csopt[3]{compact-ranges} but not with
+\csopt[4]{compact-ranges}. Whereas \code{\csfmt{custom}\marg{89}}
+would only be compacted with \csopt[2]{compact-ranges}
+because \code{89} only consists of 2 characters.
+
+The compaction isn't limited to decimal digits but it will only
+occur if both the start and end location have the same number of
+characters. For example, xvi--xviii can't be compacted because
+the start consists of three characters and the end consists
+of five characters, whereas xxv--xxx can be compacted to xxv--x,
+which may look a little strange. In this case, you may want to
+consider changing the definition of \cs{bibglscompact} so that
+it only performs the compaction for digits.
+
 \optsection{see}
 
 If an entry has a \field{see} field, this can be placed before or
@@ -10932,7 +12335,50 @@
 contain a comma-separated list of entry labels (such as the
 \field{see} or \field{seealso} fields).
 
-Remember that you can have \atentry{preamble} definitions that
+The sort methods that use a comparison function (that is, all the
+sort methods except those listed in \tableref{tab:sortoptionsnosort})
+require a sort value for each entry. The function compares these
+values to determine the order. By default, this sort value is
+obtained from the \field{sort} field but for greater flexibility
+it's best to not actually set this field. \bibgls\ has a set of fallbacks
+that it uses if a field it needs to access is missing. These
+fallbacks depend on the entry type and resource settings.
+
+For example, if a term defined with \atentry{index} doesn't have the
+\field{sort} field set then \bibgls\ will use the value given by the
+\field{name} field because \field{name} is the fallback field for
+\field{sort} for \atentry{index} entries. If the \field{name} field
+isn't set either then \bibgls\ will use the fallback for that field.
+In the case of \atentry{index} that's the entry's label. If the
+\field{sort} field is explicitly set then there's no need to use the
+fallback.
+
+If, on the other hand, a term defined with \atentry{symbol} doesn't
+have the \field{sort} field set then \bibgls\ will use the value
+from the field identified by \csopt{symbol-sort-fallback}, which is
+the entry's label by default (not the \field{name} field).
+
+This means that if I don't explicitly set the \field{sort} field for
+any entries then I can, for example, sort terms defined with
+\atentry{index} by \field{name} and those defined with
+\atentry{symbol} by \field{description} with the setting:
+\begin{codeenv}
+\csopt[description]{symbol-sort-fallback}
+\end{codeenv}
+
+If the field used to obtain the sort value is changed
+(with \csopt{sort-field}) then the \field{sort} field won't be
+queried. This reduces the flexibility of selecting the most
+appropriate field for given entry types. For example,
+\csopt[name]{sort-field} will force all entries to be sorted by the
+\field{name} field, which may not be appropriate for symbols.
+
+\begin{important}
+If you choose a field whose value must be a label (such as
+\field{parent} or \field{group}) then the sort value will be that label.
+\end{important}
+
+You can have \atentry{preamble} definitions that
 can be hidden from \bibgls's interpreter. For example,
 \exfile{no-interpret-preamble.bib} might contain:
 \begin{codeenv}
@@ -11902,13 +13348,20 @@
 only by the entry type but also by some associated settings:
 
 \begin{itemize}
-\item For entries types like \atentry{entry} or \atentry{index},
-then if the \field{sort} field is missing the value is obtained from
-the \field{name} field. If that field is also missing, then the
-value is obtained from the particular entry type's fallback for the
-\field{name} field. (For example, \field{parent} for
-\atentry{entry}.)
+\item If the entry is defined using \atentry{entry} (or a dual form
+that acts like \atentry{entry}), then if the \field{sort} field is
+missing the value is obtained from the field identified by
+\csopt{entry-sort-fallback}. If that field is also missing then
+that field's fallback is used.
 
+\item For the index entry types like \atentry{index} or
+\atentry{indexplural}, then if the \field{sort} field is missing the
+value is obtained from the \field{name} field. If that field is also
+missing, then the value is obtained from the particular entry type's
+fallback for the \field{name} field. (For example, the entry's label
+for \atentry{index} or the \field{plural} field for
+\atentry{indexplural}.)
+
 \item If the entry is defined with an abbreviation type (for
 example, \atentry{abbreviation} or \atentry{acronym}) then if the
 \field{sort} field is missing, \bibgls\ will fallback on the field
@@ -11940,16 +13393,26 @@
 \item If the entry type has a fallback rule for \meta{sort-field},
 then that rule is used. When \csopt[sort]{sort-field} this means:
 \begin{itemize}
+\item If the entry was defined using one of the index types (such as
+\atentry{index}), then \bibgls\ will fallback on the \field{name}
+field.
+
+\item If the entry was defined using the \atentry{entry} type (or a
+dual form that acts like \atentry{entry}), then \bibgls\ will
+fallback on the field given by \csopt{entry-sort-fallback}.
+
 \item If the entry was defined using
-one of the symbol types, then \bibgls\
-will fallback on the value given by \csopt{symbol-sort-fallback}.
+one of the symbol types (such as \atentry{symbol}), then \bibgls\
+will fallback on the field given by \csopt{symbol-sort-fallback}.
+
 \item If the entry was defined using
-one of the abbreviation types, then \bibgls\
-will fallback on the value given by
+one of the abbreviation types (such as \atentry{abbreviation}), then \bibgls\
+will fallback on the field given by
 \csopt{abbreviation-sort-fallback}.
+
 \item If the entry was defined using \atentry{bibtexentry} (but not
 the spawned \atentry{contributor} entries), then \bibgls\ will
-fallback on the value given by
+fallback on the field given by
 \csopt{bibtexentry-sort-fallback}.
 \end{itemize}
 If \meta{sort-field} is not \field{sort}, then there may not be a
@@ -11965,6 +13428,101 @@
 \csopt{secondary-missing-sort-fallback} for \csopt{secondary}
 sorting.
 
+\optsection{entry-sort-fallback}
+
+The regular entry types (such as \atentry{entry} and
+\atentry{dualentry}) will, by default, fallback on the \field{name}
+field if the \field{sort} field is missing (assuming
+\csopt[sort]{sort-field}). If you prefer to
+fallback on a different field, then you can use this option to
+specify the field.
+Note that \csopt{missing-sort-fallback} overrides this setting.
+
+This setting doesn't affect the index type of entries, such as
+\atentry{index} or \atentry{indexplural}. This is useful if your
+glossary contains homographs (terms with the same spelling) which
+can't be distinguished by the sort comparators. For example, suppose
+my file \filefmt{entries.bib} contains:
+\begin{codeenv}
+\atentry{index}\marg{pagelist,
+  \field{name}=\marg{page list},
+  \field{description}=\marg{a list of individual pages or page ranges}
+}
+\strut
+\atentry{index}\marg{glossary}
+\strut
+\atentry{entry}\marg{glossarylist,
+  \field{parent}=\marg{glossary},
+  \field{description}={list of technical words}
+}
+\strut
+\atentry{entry}\marg{glosscol,
+  \field{parent}=\marg{glossary},
+  \field{description}=\marg{collection of glosses}
+}
+\end{codeenv}
+Now first consider a document that uses the default settings:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt{subentrycounter},\styopt[\glostyle{treenoname}]{style}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src}}
+\strut
+\cmd{begin}\marg{document}
+A test document describing \cs{glspl}\marg{pagelist} and
+\cs{gls}\marg{glosscol} (collection) vs \cs{gls}\marg{glossarylist} (list).
+\strut
+\cs{printunsrtglossary}
+\cmd{end}\marg{document}
+\end{codeenv}
+The default behaviour for \atentry{entry} if the \field{sort} field
+is missing is to fallback on the \field{name} field. If the
+\field{name} field is missing (as with \code{glossarylist} and
+\code{glosscol}), then the value is obtained from the
+\field{name} field from the parent entry. The parent entry for these
+homographs is the \code{glossary} entry, which was defined with
+\atentry{index} and doesn't have the \field{name} field. For the
+\atentry{index} entries, if \field{name} is missing the value is
+obtained from the label.
+
+Therefore both \code{glossarylist} and \code{glosscol} end
+up with the same sort value: \code{glossary}. This triggers a
+message in verbose mode (\longarg{verbose}) which can be found 
+in the transcript file:
+\begin{verbatim}
+Identical sort values for 'glossarylist' and 'glosscol'
+Falling back on ID
+\end{verbatim}
+So the actual sort values used are \qt{glossarylist} and
+\qt{glosscol}. This puts the \code{glossarylist} entry
+before the \code{glosscol} entry.
+
+Now suppose a minor modification is made to the document:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}
+ \oarg{
+   \csopt[entries]{src},
+   \csopt[description]{entry-sort-fallback}
+ }
+\end{codeenv}
+This means that when the sort function fails to find the
+\field{sort} field for the terms defined with \atentry{entry}, it
+will fallback on the \field{description} field. This doesn't affect
+the terms defined with \atentry{index}, which still fallback on the
+\field{name} field. This time there's no message in the transcript
+file and the \code{glosscol} entry now comes before the
+\code{glossarylist} entry.
+
+\begin{important}
+The \csopt{entry-sort-fallback} setting is only used when \bibgls\
+tries to access the \field{sort} field for a term defined with
+\atentry{entry} and finds that the field hasn't been set. This means
+that this setting has no effect if you explicitly set the \field{sort}
+field or if you change the field used for sorting
+(\csopt{sort-field}).
+\end{important}
+
 \optsection{abbreviation-sort-fallback}
 
 The entry types that define abbreviations (such as
@@ -11980,6 +13538,14 @@
 
 Note that \csopt{missing-sort-fallback} overrides this setting.
 
+\begin{important}
+The \csopt{abbreviation-sort-fallback} setting is only used when \bibgls\
+tries to access the \field{sort} field for an abbreviation and finds
+that the field hasn't been set. This means that this setting has no effect 
+if you explicitly set the \field{sort} field or if you change the field used 
+for sorting (\csopt{sort-field}).
+\end{important}
+
 \optsection{symbol-sort-fallback}
 
 The entry types that define symbols (such as \atentry{symbol} and
@@ -11992,6 +13558,14 @@
 
 Note that \csopt{missing-sort-fallback} overrides this setting.
 
+\begin{important}
+The \csopt{symbol-sort-fallback} setting is only used when \bibgls\
+tries to access the \field{sort} field for a symbol and finds
+that the field hasn't been set. This means that this setting has no effect 
+if you explicitly set the \field{sort} field or if you change the field used 
+for sorting (\csopt{sort-field}).
+\end{important}
+
 \optsection{bibtexentry-sort-fallback}
 
 The main \atentry{bibtexentry} entry types will, by default,
@@ -12002,6 +13576,15 @@
 
 Note that \csopt{missing-sort-fallback} overrides this setting.
 
+\begin{important}
+The \csopt{bibtexentry-sort-fallback} setting is only used when
+\bibgls\ tries to access the \field{sort} field for a main entry
+defined with \atentry{bibtexentry} and finds that the field hasn't
+been set. This means that this setting has no effect if you
+explicitly set the \field{sort} field or if you change the field used for
+sorting (\csopt{sort-field}).
+\end{important}
+
 \optsection{trim-sort}
 
 If the interpreter is used to determine the sort value, this setting
@@ -12013,8 +13596,11 @@
 
 \optsection{sort-replace}
 
-This option may be used to perform regular expression substitutions
+This option may be used to perform \idx{regex} substitutions
 on the sort value and has the same syntax as \csopt{labelify-replace}. 
+The value is required for this key but may be empty, which indicates
+that the setting is switched off.
+
 This action is done after the interpreter parses the
 sort value (if applicable) and before \csopt{sort-number-pad} (if
 applicable). For example, suppose the sort value is:
@@ -13036,7 +14622,8 @@
 
 If the \field{group} field hasn't been set in
 the \ext{bib} file or through options like \csopt{group}, then it is 
-assigned according to this option's setting during sorting. Permitted values:
+assigned according to this option's setting during sorting if
+\longarg{group} has been used. Permitted values:
 \begin{itemize}
 \item\optfmt{default}: the group is assigned according to 
 the sort method's default group formation. This is the default
@@ -13071,6 +14658,9 @@
 This option has no effect with \longarg{no-group} or if no sorting
 is applied. Use \csopt{secondary-group-formation} for secondary
 sorting and \csopt{dual-group-formation} for dual entries.
+Settings other than the default can cause the groups to become
+fragmented, so care is needed if you use this option.
+See also \sectionref{sec:logicaldivisions}.
 
 \section{Secondary Glossary}
 \label{sec:secondaryopts}
@@ -13469,6 +15059,11 @@
 \field{type} field set, the dual's \field{type} will remain
 unchanged.
 
+\item \optfmt{same as parent}: sets the \field{type} to the same as
+the entry's parent (new to v1.9). If the entry doesn't have a parent
+or if the parent doesn't have the \field{type} field set, then
+no change is made.
+
 \item \meta{label}: sets the \field{type} field to \meta{label}.
 \end{itemize}
 
@@ -14562,6 +16157,205 @@
 }
 \end{codeenv}
 
+\cssection{bibglsnewprogenitor}
+
+\formatdef{bibglsnewprogenitor}
+This command is used to define the main terms created by
+\atentry{progenitor}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewprogenitor}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnindex}
+
+\formatdef{bibglsnewspawnindex}
+This command is used to define the main terms created by
+\atentry{spawnindex}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnindex}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnedindex}
+
+\formatdef{bibglsnewspawnedindex}
+This command is used to define the terms spawned by
+\atentry{progenitor} or \atentry{spawnindex}. The definition is written 
+to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnedindex}}[2]\marg{\comment{}
+ \gls{newglossaryentry}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}1},\field{category}={index},\field{description}=\marg{},\idx{param}2}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnindexplural}
+
+\formatdef{bibglsnewspawnindexplural}
+This command is used to define the main terms created by
+\atentry{spawnindexplural}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnindexplural}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnedindexplural}
+
+\formatdef{bibglsnewspawnedindexplural}
+This command is used to define the terms spawned by
+\atentry{spawnindexplural}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnedindexplural}}[3]\marg{\comment{}
+ \gls{newglossaryentry}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\field{category}=\marg{indexplural},\field{description}=\marg{},\idx{param}2}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnentry}
+
+\formatdef{bibglsnewspawnentry}
+This command is used to define the main terms created by
+\atentry{spawnentry}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnentry}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnedentry}
+
+\formatdef{bibglsnewspawnedentry}
+This command is used to define the terms spawned by \atentry{spawnentry}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnedentry}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnabbreviation}
+
+\formatdef{bibglsnewspawnabbreviation}
+This command is used to define the main terms created by
+\atentry{spawnabbreviation}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnabbreviation}}[4]\marg{\comment{}
+  \gls{newabbreviation}\oarg{\idx{param}2}\marg{\idx{param}1}\marg{\idx{param}3}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnedabbreviation}
+
+\formatdef{bibglsnewspawnedabbreviation}
+This command is used to define the terms spawned by \atentry{spawnabbreviation}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnedabbreviation}}[4]\marg{\comment{}
+  \gls{newabbreviation}\oarg{\idx{param}2}\marg{\idx{param}1}\marg{\idx{param}3}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnacronym}
+
+\formatdef{bibglsnewspawnacronym}
+This command is used to define the main terms created by
+\atentry{spawnacronym}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnacronym}}[4]\marg{\comment{}
+  \gls{newacronym}\oarg{\idx{param}2}\marg{\idx{param}1}\marg{\idx{param}3}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnedacronym}
+
+\formatdef{bibglsnewspawnedacronym}
+This command is used to define the terms spawned by \atentry{spawnacronym}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnedacronym}}[4]\marg{\comment{}
+  \gls{newacronym}\oarg{\idx{param}2}\marg{\idx{param}1}\marg{\idx{param}3}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnsymbol}
+
+\formatdef{bibglsnewspawnsymbol}
+This command is used to define the main terms created by
+\atentry{spawnsymbol}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnsymbol}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnedsymbol}
+
+\formatdef{bibglsnewspawnedsymbol}
+This command is used to define the terms spawned by \atentry{spawnsymbol}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnedsymbol}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\field{sort}=\marg{\idx{param}1},\field{category}=\marg{spawnedsymbol},\idx{param}2}\marg{\idx{param}4}}
+\end{codeenv}
+
+\cssection{bibglsnewspawnnumber}
+
+\formatdef{bibglsnewspawnnumber}
+This command is used to define the main terms created by
+\atentry{spawnnumber}. The definition is written to the \ext{glstex}
+file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnnumber}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
+\cssection{bibglsnewspawnednumber}
+
+\formatdef{bibglsnewspawnednumber}
+This command is used to define the terms spawned by \atentry{spawnnumber}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawnednumber}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\field{sort}=\marg{\idx{param}1},\field{category}=\marg{spawnednumber},\idx{param}2}\marg{\idx{param}4}}
+\end{codeenv}
+
+\cssection{bibglsnewspawndualindexentry}
+
+\formatdef{bibglsnewspawndualindexentry}
+This command is used to define the \idx{progenitor}['s] primary term created by 
+\atentry{spawndualindexentry}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawndualindexentry}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\field{category}=\marg{index},\idx{param}2}{}\comment{}
+}
+\end{codeenv}
+The \meta{description} argument is ignored.
+
+\cssection{bibglsnewspawndualindexentrysecondary}
+
+\formatdef{bibglsnewspawndualindexentrysecondary}
+This command is used to define the \idx{progenitor}['s] secondary
+(dual) term created by 
+\atentry{spawndualindexentry}. 
+The definition is written to the \ext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewspawndualindexentrysecondary}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\idx{param}2}\marg{\idx{param}4}\comment{}
+}
+\end{codeenv}
+
 \section{Location Lists and Cross-References}
 \label{sec:loclistdefs}
 
@@ -14639,6 +16433,19 @@
 Separator between penultimate and final individual locations.
 This defaults to \code{,\idx{nbspchar}} to discourage lonely locations.
 
+\cssection{bibglscompact}
+
+\formatdef{bibglscompact}
+The first argument \meta{pattern} indicates the location pattern:
+\code{digit} for digits, \code{roman} for \idx!{lowercase}
+Roman numerals, \code{ROMAN} for \idx!{uppercase} Roman
+numerals and \code{alpha} for alphabetical locations. The actual
+location is split into two parts, \meta{part1} and \meta{part2}.
+The string concatenation \meta{part1}\meta{part2} forms the
+actual location.
+
+This just does \meta{part2} by default.
+
 \cssection{bibglspassim}
 
 \formatdef{bibglspassim}
@@ -15218,7 +17025,7 @@
 form:
 \begin{codeenv}
 \atentry{dualentry}\marg{\meta{label},
-  \field{name} = \marg{\ics{cjkname}\margm{\idx{CJK} characters}},
+  \field{name} = \marg{\gls{cjkname}\margm{\idx{CJK} characters}},
   \field{description} = \margm{English translation}
 }
 \end{codeenv}
@@ -15230,7 +17037,7 @@
 \cs{newglossary*}\marg{japanese}\marg{Japanese to English}
 \cs{newglossary*}\marg{english}\marg{English to Japanese}
 \strut
-\ics{newrobustcmd}\marg{\cmd{cjkname}}[1]\marg{\cmd{begin}\marg{CJK}\marg{UTF8}\marg{min}\idx{param}1\cmd{end}\marg{CJK}}
+\ics{newrobustcmd}\marg{\gls{cjkname}}[1]\marg{\cmd{begin}\marg{CJK}\marg{UTF8}\marg{min}\idx{param}1\cmd{end}\marg{CJK}}
 \strut
 \gls{GlsXtrLoadResources}\oarg{
   \csopt[testcjk]{src},\comment{bib file}
@@ -15244,12 +17051,12 @@
 then \idx{CJK} characters will appear in the \meta{title} argument of 
 \gls{bibglslettergrouptitle} which causes a problem because they need
 to be encapsulated within the \env{CJK} environment. This can be more
-conveniently done with the user supplied \csfmt{cjkname}, but the \idx{CJK}
+conveniently done with the user supplied \inlinedef{cjkname}, but the \idx{CJK}
 characters need to be protected from expansion so \ics{unexpanded} is
 also needed. The new definition of \gls{bibglslettergrouptitle} needs
 to be defined before \gls{GlsXtrLoadResources}. For example:
 \begin{codeenv}
-\cs{newcommand}\marg{\gls{bibglslettergrouptitle}}[4]\marg{\cs{unexpanded}\marg{\cmd{cjkname}\marg{\idx{param}1}}}
+\cs{newcommand}\marg{\gls{bibglslettergrouptitle}}[4]\marg{\cs{unexpanded}\marg{\gls{cjkname}\marg{\idx{param}1}}}
 \end{codeenv}
 There's a slight problem here in that the English letter group titles 
 also end up encapsulated. An alternative approach is to use the
@@ -15256,7 +17063,7 @@
 \meta{type} part to provide different forms. For example:
 \begin{codeenv}
 \cs{newcommand}*\marg{\cmd{englishlettergroup}}[1]\marg{\idx{param}1}
-\cs{newcommand}*\marg{\cmd{japaneselettergroup}}[1]\marg{\cmd{cjkname}\marg{\idx{param}1}}
+\cs{newcommand}*\marg{\cmd{japaneselettergroup}}[1]\marg{\gls{cjkname}\marg{\idx{param}1}}
 \cs{newcommand}\marg{\gls{bibglslettergrouptitle}}[4]\marg{\comment{}
  \cs{unexpanded}\marg{\cs{csuse}\marg{\idx{param}4lettergroup}\marg{\idx{param}1}}}
 \end{codeenv}
@@ -15829,6 +17636,40 @@
 \gls{bibglscontributor} behaves. The definition is written to the \ext{glstex}
 using \cs{providecommand}, so \LaTeX\ will only pick up the first definition.
 
+\cssection{bibglsdatetime}
+
+\formatdef{bibglsdatetime}
+Used to encapsulate date-time fields identified with
+\csopt{date-time-fields}.
+Since \gls{bibglsdatetime} requires more than nine arguments, the
+remaining four arguments are picked up with:
+\nosecdef{bibglsdatetimeremainder}
+The default definitions are:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsdatetime}}[9]\marg{\gls{bibglsdatetimeremainder}}
+\cs{providecommand}\marg{\gls{bibglsdatetimeremainder}}[4]\marg{\idx{param}4}
+\end{codeenv}
+
+\cssection{bibglsdate}
+
+\formatdef{bibglsdate}
+Used to encapsulate date fields identified with
+\csopt{date-fields}.
+The default definition is:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsdate}}[7]\marg{\idx{param}7}
+\end{codeenv}
+
+\cssection{bibglstime}
+
+\formatdef{bibglstime}
+Used to encapsulate date fields identified with
+\csopt{time-fields}.
+The default definition is:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglstime}}[7]\marg{\idx{param}7}
+\end{codeenv}
+
 \cssection{bibglsprimaryprefixlabel}
 
 \formatdef{bibglsprimaryprefixlabel}
@@ -15913,6 +17754,7 @@
 
 \chapter{Converting Existing \iext{tex} to \iext{bib}}
 \label{sec:gls2bib}
+\setsecdepth{0}
 
 If you have already been using the \styfmt{glossaries} or
 \styfmt{glossaries-extra} package with a large file containing all your
@@ -15960,6 +17802,9 @@
 
 \item[\longargfmt{no-ignore-sort}] Don't ignore the \field{sort} field.
 
+\item[\longargfmt{locale} \meta{lang tag}] Identifies the \langxml\
+to use for \idx{convertgls2bib}['s] messages.
+
 \item[\longargfmt{silent}] Suppress all messages except for errors.
 
 \item[\longargfmt{verbose}] Display messages and warnings (default).
@@ -16293,7 +18138,7 @@
 
 \chapter{Examples}
 \label{sec:examples}
-\setcounter{secnumdepth}{0}
+\setsecdepth*{0}
 
 The example files described here can be found in the
 \filefmt{examples} sub-directory. The \ext{bib} files are listed
@@ -16975,6 +18820,8 @@
 which is used to format the set membership criteria,
 \nosecdef{setcardfmt}
 which is used to format the cardinality of a set,
+(Note this uses \ics{vert} not \textbar\ as in some of the earlier
+examples.)
 \nosecdef{numspacefmt}
 which is used to format \meta{symbol} as a number space,
 \nosecdef{transposefmt}
@@ -17399,6 +19246,14 @@
 The contents of \filefmt{terms.bib} are as follows:
 \lstinputlisting[firstline=5]{../examples/terms.bib}
 
+\filesection{topics.bib}
+
+The \exfile{topics.bib} file contains entries defined using
+\atentry{index}. Again there are no custom fields here.
+
+The contents of \filefmt{topics.bib} are as follows:
+\lstinputlisting[firstline=5]{../examples/topics.bib}
+
 \filesection{sample-constants.tex}
 
 This example uses the \exfile{constants.bib} file. The aim here
@@ -17643,6 +19498,8 @@
 \end{codeenv}
 (For a more compact layout, you could use \glostyle{mcolalttreegroup}
 instead.)
+I also need the \longarg{group} switch to make the sort method
+automatically assign letter groups.
 
 The complete code is listed below.  The document build is:
 \begin{verbatim}
@@ -17724,6 +19581,8 @@
 loaded. This is because it's required by \sty{glossary-bookindex}
 as the \glostyle{bookindex} style is based on the \glostyle{index}
 style provided by \sty{glossary-tree}.
+With this style I need to use the \longarg{group} switch to instruct
+the sort method to automatically create the letter groups.
 
 The \glostyle{bookindex} style doesn't show the \field{description}
 field (which means I don't need the \catattr{glossdescfont}
@@ -17820,6 +19679,8 @@
 \end{codeenv}
 I've used this method to make it easier to adapt to other languages
 that may need extended characters in the group titles.
+The \csopt{group} option requires the \longarg{group} switch to
+ensure that the \field{group} field is correctly assigned.
 
 The \exfile{baseunits.bib} file use a custom entry type
 \atentryfmt{unit}, which must be aliased otherwise \bibgls\
@@ -17915,6 +19776,8 @@
   \fieldfmt{measurement}=\field{description}
 ]{field-aliases}
 \end{codeenv}
+The \longarg{group} switch is needed to ensure that the
+\field{group} field is automatically assigned by the sort method.
 
 The complete document code is listed below. The document build is:
 \begin{verbatim}
@@ -18022,6 +19885,9 @@
 redefine \ics{subglossentry}. (The tabular styles aren't appropriate
 for hierarchical glossaries.) This puts the symbol into the third
 column (rather than the location list, which is ignored).
+This style supports the letter group separator (although it doesn't
+title the groups), so if I want this I need to use the
+\longarg{group} switch.
 
 I also need to make sure I've defined a glossary for the dual
 entries:
@@ -18191,6 +20057,8 @@
 looks a bit odd, I've added \csopt[false]{save-locations} to
 prevent \bibgls\ from saving the locations.
 
+I've used a style that shows letter group headings so I need to use
+the \longarg{group} switch.
 The complete document code is listed below. The document build is:
 \begin{verbatim}
 pdflatex sample-media
@@ -18221,6 +20089,8 @@
 index should. Not all the entries defined in \exfile{people.bib}
 are included in the document. Those that aren't either explicitly
 referenced or aliased are filtered by the \csopt{selection} criteria.
+I've used a style that shows letter group headings so I need to use
+the \longarg{group} switch.
 
 Since this is just an example document all the \cs{gls} commands
 only occur on page~1, which means that each number list is just
@@ -18508,6 +20378,8 @@
 in \exfile{books.bib} and have them listed by author. This means
 finding a way of assigning each book entry a \field{parent} field that
 contains the label identifying the relevant author in \exfile{people.bib}.
+I've used a style that shows letter group headings so I need to use
+the \longarg{group} switch.
 
 To recap, each author is defined in \exfile{people.bib} in the form:
 \begin{codeenv}
@@ -18723,6 +20595,13 @@
  \cs{renewcommand}\marg{\cs{glstreegroupheaderfmt}}[1]\marg{\ics{textbf}\marg{\idx{param}1}}\comment{}
 }
 \end{codeenv}
+This again contradicts the advice given in
+\sectionref{sec:logicaldivisions} as I'm sorting by the
+\field{group} label. (Technically it's sorting by the
+\field{category} label but this is being used as the group.) In this
+case it's not a problem as the labels closely match the titles and
+the sorting options ensure that the groups aren't broken up.
+
 There's no \field{description} field set for these entries, but the
 \idx{postdescriptionhook} can still be used to append information.
 In this case, I've appended a cross-reference to the bibliography.
@@ -18757,7 +20636,7 @@
   \marg{\ics{par} No titles.}\comment{}
 }
 \end{codeenv}
-The handler macro displays the name of the associated
+The \idx{handler} macro displays the name of the associated
 \atentry{bibtexentry} term and the citation:
 \begin{codeenv}
 \cs{newcommand}\marg{\csfmt{contributorhandler}}[1]\marg{\cs{par}\ics{glsentryname}\marg{\idx{param}1} \cs{cite}\marg{\idx{param}1}}
@@ -18766,7 +20645,7 @@
 The complete document code is listed below. The document build is:
 \begin{verbatim}
 pdflatex sample-citations
-bib2gls --group --cite-as-record sample-citations
+bib2gls --cite-as-record sample-citations
 bibtex sample-citations
 pdflatex sample-citations
 pdflatex sample-citations
@@ -18801,11 +20680,6 @@
  \styopt[mcols]{stylemods},\comment{load glossary-mcols.sty and patch}
  \styopt[mcolalttree]{style}}\marg{glossaries-extra}
 \end{codeenv}
-I'm not using a group-based style which suggests that I don't need the
-\longarg{group} switch. However, although I don't want group titles,
-I still want a slight gap between logical groups, which means that I
-still need this switch. If I added the \styopt{nogroupskip} package
-option, then I can omit \longarg{group}.
 
 I'm not referencing any of the entries in the document as I'm just
 generating a complete list of all the defined symbols. This means I
@@ -18818,22 +20692,28 @@
 Since I'm using a style that's based on \glostyle{alttree} I need to
 find the widest \field{name}, which can be done with \csopt{set-widest}.
 
-I've used \csopt{field-aliases} to convert the custom
-\fieldfmt{identifier} field to \field{category}, which means I can
-also sort by that field:
+The simplest way of dividing the glossary into logical blocks is to
+sort according to the category, but first I need to use \csopt{field-aliases} 
+to convert the custom \fieldfmt{identifier} field to \field{category}:
 \begin{codeenv}
-\csopt[\field{category}]{sort-field},
 \csopt[\fieldfmt{identifier}=\field{category}]{field-aliases}
 \end{codeenv}
+and sort by the \field{category} field:
+\begin{codeenv}
+\csopt[\field{category}]{sort-field}
+\end{codeenv}
 Since this will cause identical sort values, I need to provide a
-fallback. Here I've decided to fallback on the \field{description}
-field:
+a way of ordering these identical values. Here I've decided 
+to fallback on the \field{description} field:
 \begin{codeenv}
 \csopt[\field{description}]{identical-sort-action}
 \end{codeenv}
 This means that entries will be ordered by \field{category} and 
 then \field{description}, which naturally creates blocks of symbol
-types in the glossary.
+types in the glossary. This only uses a simple case-sensitive string
+comparison which is fine for English, but for another language it
+would be better to use \csopt{sort-suffix} as in the
+\exfile{sample-textsymbols.tex} file.
 
 Remember that I want a small vertical gap between each logical
 block. These need the \field{group} field which, with the default
@@ -18850,15 +20730,22 @@
 \end{codeenv}
 (Since the \csopt{field-aliases} option is always performed before
 \csopt{replicate-fields}, the \field{category} field will already
-have been set and is available for replicating.) This means that the
-\field{group} label is the same as the \field{category} label rather
-than just the first letter. (For a quick check, change the glossary
-style to \glostyle{mcolalttreegroup} to display the group titles.)
+have been set and is available for replicating.)
 
+This means that I'm essentially sorting by the \field{group} labels,
+which this manual has warned against doing. In this case, it's an
+acceptable break from that rule as I've used options that ensure the
+groups aren't broken up during sorting and I'm not concerned with the group
+titles. A method such as that used in \exfile{sample-textsymbols2.tex}
+would end up with titled blocks, which I don't want here. By using
+resource options such as \csopt{field-aliases} and
+\csopt{replicate-fields} I can avoid the warning that's triggered
+with the default \longarg{warn-non-bib-fields}.
+
 The complete document code is listed below. The document build is:
 \begin{verbatim}
 pdflatex sample-msymbols
-bib2gls --group sample-msymbols
+bib2gls sample-msymbols
 pdflatex sample-msymbols
 \end{verbatim}
 The resulting document is shown in \figureref{fig:sample-msymbols.pdf}.
@@ -18895,6 +20782,11 @@
 defaults to that field. If I decided to use a different field I also
 need to remember to redefine \ics{GlsXtrFmtField} to match.
 
+As with \exfile{sample-msymbols.tex} I'm sorting by the
+\field{category} label and this value is copied to the \field{group}
+field, but again I don't have a hierarchical glossary as the logical
+blocks don't have titles.
+
 In this document I only want to select entries that have been
 indexed, so I've omitted the \csopt{selection} option I used in the
 \exfile{sample-msymbols.tex} example, however
@@ -18931,7 +20823,8 @@
 nest \csfmt{set} within the argument of \csfmt{setcard} but this
 results in nested hyperlinks. These are unpredictable and there's no
 consistent handling of them between different PDF viewers. It can
-also be confusing to the reader. If $|\mathcal{B}_1\cup\mathcal{B}_2|$
+also be confusing to the reader. If
+$\lvert\mathcal{B}_1\cup\mathcal{B}_2\rvert$
 shows up as what appears to be a single hyperlink, where would the 
 reader expect the target? This is the reason for providing the
 non-linking commands like \csfmt{nlset} and \csfmt{nlsetcard}.
@@ -18939,7 +20832,7 @@
 The complete document code is listed below. The document build is:
 \begin{verbatim}
 pdflatex sample-maths
-bib2gls --group sample-maths
+bib2gls sample-maths
 pdflatex sample-maths
 \end{verbatim}
 The resulting document is shown in \figureref{fig:sample-maths.pdf}.
@@ -18957,8 +20850,8 @@
 
 \filesection{sample-textsymbols.tex}
 
-This example uses \exfile{miscsymbols.bib}. This requires both
-\isty{marvosym} and (with the \styoptfmt{weather} option)
+This example uses \exfile{miscsymbols.bib}. 
+This requires both \isty{marvosym} and (with the \styoptfmt{weather} option)
 \isty{ifsym}. Unfortunately both define the commands \csfmt{Sun}
 and \csfmt{Lightning}, so these commands need to be undefined after
 the first package is loaded and before the second.
@@ -18982,7 +20875,7 @@
 The custom entry type \atentryfmt{icon} must be aliased for the
 entries to be recognised:
 \begin{codeenv}
-\csopt[unit=symbol]{entry-type-aliases}
+\csopt[icon=symbol]{entry-type-aliases}
 \end{codeenv}
 
 Since none of the entries have a \field{name} or \field{description}
@@ -19026,15 +20919,23 @@
 use the fallback command, which will use one of the commands
 provided by the \sty{glossaries-extra-stylemods} package.
 
+This is actually not the best method as \bibgls\ can't see the group
+titles as they're in the document, so it's only able to sort by the
+label. While this might work for English, it can become a problem
+for other languages that use extended Latin or non-Latin characters
+in their alphabet. A much better method is to treat this as a
+hierarchical glossary with topic titles as the top-level entries.
+This is covered in the next example \exfile{sample-textsymbols2.tex}.
+
 The complete document code is listed below. The document build is:
 \begin{verbatim}
 pdflatex sample-textsymbols
-bib2gls --group sample-textsymbols
+bib2gls sample-textsymbols
 pdflatex sample-textsymbols
 \end{verbatim}
 The resulting document is shown in \figureref{fig:sample-textsymbols.pdf}.
 
-\lstinputlisting[firstline=5]{../examples/sample-textsymbols.tex}
+\lstinputlisting[firstline=6]{../examples/sample-textsymbols.tex}
 
 \begin{figure}
 \figcontents
@@ -19045,6 +20946,86 @@
 {fig:sample-textsymbols.pdf}
 \end{figure}
 
+\filesection{sample-textsymbols2.tex}
+
+This example is a better approach than the 
+\exfile{sample-textsymbols.tex} example above. As with the previous
+example, this requires both \isty{marvosym} and \isty{ifsym} so the
+same patch is applied to avoid conflict.
+
+As before, the custom entry type \atentryfmt{icon} must be aliased for the
+entries to be recognised:
+\begin{codeenv}
+\csopt[icon=symbol]{entry-type-aliases}
+\end{codeenv}
+
+The \exfile{topics.bib} file contains terms with
+labels that match the custom \fieldfmt{identifier} fields used in
+the \exfile{miscsymbols.bib} file. So both files are loaded and the
+\fieldfmt{identifier} field is now aliased to \field{parent}. These
+parent entries represent the topics and unlike the previous example
+it's now possible to sort by the topic title (obtained from the
+\field{name} field) instead of by the label.
+\begin{codeenv}
+\csopt[topics,miscsymbols]{src},
+\csopt[
+ \fieldfmt{identifier}=\field{parent},
+ \fieldfmt{icon}=\field{name},
+ \fieldfmt{icondescription}=\field{description}]{field-aliases},
+\end{codeenv}
+There's no \csopt{sort-field} option in this example. The default
+\field{sort} field is used. Since it's not set for any of the
+entries, the fallback value will be used. In the case of the topic
+titles (\atentry{index} and \atentry{indexplural}), I want to sort
+by the \field{name}, which is the default fallback if the
+\field{sort} field is missing for the index entry types.
+
+The default fallback for the \field{sort} field for \atentry{symbol}
+entries is the label, but in this case I want to use the
+\field{description} field:
+\begin{codeenv}
+  \csopt[description]{symbol-sort-fallback}
+\end{codeenv}
+The best styles for this kind of glossary are the topic styles
+provided by \isty{glossary-topic}. This package was only added to
+\sty{glossaries-extra} v1.40, so you need to make sure you have at
+least that version installed.
+
+In this case I've decided to use the \glostyle{topic} style. I can
+use it with or without the \csopt{set-widest} option. 
+As with the previous example, \bibgls\ won't be able to determine
+the widest name since it doesn't recognise any of the commands
+contained in the \field{name} fields, so it will have to use the
+fallback method, which will use one of the commands provided by the
+\sty{glossaries-extra-stylemods} package. The \code{tree} option is
+needed to enable the appropriate commands:
+\begin{codeenv}
+\cmd{usepackage}\oarg{\styopt{record},
+ \styopt{nostyles},
+ \styopt{postdot},
+ \styopt[tree,topic]{stylemods},
+ \styopt[topic]{style}}\marg{glossaries-extra}
+\end{codeenv}
+
+The complete document code is listed below. The document build is:
+\begin{verbatim}
+pdflatex sample-textsymbols2
+bib2gls --group sample-textsymbols2
+pdflatex sample-textsymbols2
+\end{verbatim}
+The resulting document is shown in \figureref{fig:sample-textsymbols2.pdf}.
+
+\lstinputlisting[firstline=5]{../examples/sample-textsymbols2.tex}
+
+\begin{figure}
+\figcontents
+{%
+ \frame{\includegraphics[height=.9\textheight]{../examples/sample-textsymbols2.pdf}}%
+}
+{\caption{\filefmt{sample-textsymbols2.pdf}}}
+{fig:sample-textsymbols2.pdf}
+\end{figure}
+
 \filesection{sample-markuplanguages.tex}
 
 This example uses \exfile{markuplanguages.bib}. Since the file
@@ -19291,7 +21272,7 @@
 given field (\fieldfmt{language} in this case) and break out of the
 loop (with \ics{glsxtrendfor}) once the language has been found.
 
-The handler function (\csfmt{addfirstlang}) is defined so that it
+The \idx{handler} function (\csfmt{addfirstlang}) is defined so that it
 adds the given language tag as a tracked language using
 \ics{TrackLocale}. This command sets
 \ics{TrackLangLastTrackedDialect} to the associated
@@ -20541,6 +22522,7 @@
 
 \printstyoptsummary
 \printcommandsummary
+%\printcommandtopic
 
 \bibliographystyle{plain}
 \bibliography{bib2gls-cite}
@@ -20559,6 +22541,9 @@
   {\nobreak\cleaders\hbox to .44em{\hss\textcolor{lightgray}{.}\hss}\hfill}%
   {\glsxtrprelocation}%
 }
+\renewcommand{\printunsrtglossaryentryprocesshook}[1]{%
+ \glsxtrifhasfield*{progenitor}{#1}{\printunsrtglossaryskipentry}{}%
+}
 \renewcommand*{\unicodecategoryfmt}[1]{\textsf{#1}}
 \printunsrtglossary[type=index]
 \end{document}

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/gls2bib-src.zip
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/support/bib2gls/src/texparser-src.zip
===================================================================
(Binary files differ)



More information about the tex-live-commits mailing list